Nehmen wir Dashen apk als Beispiel. Durch die vorherige Analyse des App-Entschlüsselungs-Lua-Skripts können wir das Lua-Skript von Dashen apk entschlüsseln. Nehmen wir als Beispiel eine wichtigere Konfigurationsdatei vor der Entschlüsselung:
#
Der Dateiheader hat auch einen Signaturwert: Fuckyou!. Als wir dies sahen, dachten wir zuerst darüber nach, ob es auch mit xxtea verschlüsselt wurde, und stellten dann fest, dass es während des Vorgangs immer noch verstümmelt war Ich muss unsere gerade gesagte Vermutung widerlegen. Wir entschlüsseln die Konfigurationsdatei weiterhin Schritt für Schritt.
Denken Sie einen Moment darüber nach, der Dateiheader lautet: Fuckyou! Wenn Sie die Datei entschlüsseln möchten, müssen Sie zwangsläufig die Zeichenfolge verarbeiten: Fuckyou! , also sollten wir in der Lage sein, in idaPro nach der Fuckyou-Zeichenfolge zu suchen und dann die Funktionsanalyse, das Debuggen und die Entschlüsselung in dem Codesegment zu verwenden, in dem sich die Fuckyou-Zeichenfolge befindet. Öffnen Sie idaPro und öffnen Sie die String-Ansicht. Suchen Sie nach „fuckyou“, um unsere Hypothese zu überprüfen. Ich vermute, dass eine Optimierung durchgeführt wurde und die Zeichenfolge irgendwo optimiert wurde.
Der Hinweis ist gebrochen, aber die Neugier erlaubt uns immer noch, fortzufahren. Zu diesem Zeitpunkt können wir den Quellcode des Cocos2d-Frameworks durchsuchen, kombiniert mit einigen Informationen im Internet, und feststellen, dass die Verarbeitung von Dateien durch Cocos2d erfolgt gekapselt in die CCFileUtils-Klasse: #🎜🎜 #
Werfen Sie einen Blick darauf, sie sehen sich nicht sehr ähnlich, also überspringen Sie es, aber notieren Sie es sich zuerst, wir können hier beim dynamischen Tuning eine Pause machen.
Wir schauen uns noch einmal getFileData an:
Da die App auf der Android-Plattform läuft, schauen wir uns die CCFileUtilsAndroid::getFileData der Android-Plattform an:#🎜 🎜#
Wir werden weitermachen: Der Code ist sehr lang, ich werde nur nicht alles veröffentlichen, aber den wichtigsten Teil dieser Funktion:
Aber wir müssen noch weiter analysieren und verifizieren. Wenn die Funktion das Zeichen im Dateikopf verarbeitet, vergleicht sie es nicht direkt mit Zeichen, sondern vergleicht es einzeln mit seinen ASCII-Werten, sodass wir „Fuckyou“ nicht im Zeichenfolgenfenster finden können! von. Schauen Sie dann nach unten: Wenn die Funktion feststellt, dass der Text dem verschlüsselten Format entspricht, entfernt sie die ersten 8 Bytes (verdammt!) und führt dann eine XOR-Operation mit dem Wert in der XOR-Tabelle durch, wobei alle 256 Bytes eine Schleife ausgeführt wird.
Wir können uns byte_A1C55F ansehen:
An diesem Punkt können wir grundsätzlich die Funktion und den Prozess der Dateientschlüsselung bestimmen und anschließend dynamisch debuggen und bestätigen Ruft die App diese Funktion auf, sollte sich Klartextinhalt im Speicher befinden. Wenn wir debuggen, unterbrechen wir am Anfang und Ende der Funktionen getData und CCFileUtilsAndroid:doGetFileData: Die GetData-Funktion unterbricht: 🎜🎜#
Obwohl beide Funktionen unterbrochen sind, pausieren sie nur am doGetFileData-Haltepunkt, was bedeutet, dass die doGetFileData-Funktion während des Entschlüsselungsvorgangs verwendet wird, was unseren Erwartungen entspricht:
Es stellt sich heraus, dass der Inhalt vor doGetFileData Chiffretext ist und vor der Rückkehr der Funktion in Klartext entschlüsselt wurde. Dies zeigt, dass unsere vorherige Analyse korrekt ist.
Okay, jetzt können wir die XOR-Tabelle byte_A1C55F kopieren und dann den Entschlüsselungsprozess der App nachahmen (Sie können ein XOR-Dekodierungsskript von GitHub finden und es leicht ändern) und ein kleines Tool zum Dekodieren von master.apk schreiben Ressourcen wurden entschlüsselt:
Das obige ist der detaillierte Inhalt vonSo entschlüsseln Sie App-Ressourcen im Cocos2d-LUA-Reverse Engineering. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!