Dashen apk を例に挙げます。アプリ復号化 lua スクリプトの以前の分析を通じて、Dashen apk の lua スクリプトを復号化できます。次に、そのリソース (設定ファイルや画像など) を復号化しましょう。例として、より重要な設定ファイルを見てみましょう. 復号化前:
ファイル ヘッダーには署名値もあります: ファックユー!.これを見て、これもxxteaで暗号化されているのではないかと考え、上記の方法でxxteaで復号化してから解凍したところ、やはり文字化けしており、途中でエラーが発生しました。私たちが今言ったことを否定しなければなりません。推測です。設定ファイルの復号化を段階的に続けます。
ちょっと考えてみてください。ファイルのヘッダーは次のとおりです。クソ!ファイルを復号化したい場合は、必然的に文字列「fuckyou!」を処理する必要があります。したがって、idaPro で funkyou 文字列を検索し、fuckyou 文字列が存在するコード セグメントで関数分析、デバッグ、および復号化を行うことができるはずです。 idaPro を開いて文字列ビューを開き、「fuckyou」を検索して仮説を検証します。私の推測では、最適化が行われ、文字列がどこかで最適化されていると思います。
手がかりは途切れましたが、私たちの好奇心によってまだ続行できます。現時点では、インターネット上の情報と組み合わせて cocos2d フレームワークのソース コードを参照すると、cocos2d のファイル処理がカプセル化されていることがわかります。 CCFileUtils クラスに追加します:
関数はたくさんあり、1 つずつ掲載するわけではありません。また、インターネットから先人の経験を見つけました:
はい、戻ります idaPro に移動し、エクスポート ウィンドウで getData を検索します:
これら 2 つを入力します関数をデコンパイルして見てみると、あまり似ていないのでスキップしますが、最初に書き留めておいてください。動的デバッグ中は、ここで中断できます。
getFileData をもう一度見てみましょう:
アプリは Android プラットフォームで実行されるため、Android プラットフォームの CCFileUtilsAndroid::getFileData を見てみましょう:
フォローアップしましょう:
コードは非常に長いため、すべてを投稿することはできませんが、このコードの重要な部分は次のとおりです。 function:
上の写真を見ると、これだ、という気がします(笑)。しかし、まだまだ分析と検証を続ける必要があります。関数がファイルヘッダーの記号を処理するとき、文字と直接比較するのではなく、その ASCII 値を 1 つずつ比較するため、文字列ウィンドウで「fuckyou!」を見つけることはできません。の。関数は、暗号化された形式に準拠したテキストであると判断すると、最初の 8 バイトを削除し (くそー!)、XOR テーブル内の値を使用して XOR 演算を実行し、256 バイトごとにループします。 . .
byte_A1C55F:
この時点で、基本的にファイル復号化の関数とプロセスを決定できます。動的にデバッグして再度確認できます。アプリの呼び出し後この関数を使用するには、メモリ内にクリア テキスト コンテンツが存在する必要があります。デバッグするとき、getDataおよびccfileutilsandroidの最初と終わりに中断する:dogetFiledata関数。GetData関数割り込み:
CFIleutilSandroid:dogetFileData関数割り込み:########両方の関数は中断されますが、doGetFileData ブレークポイントで一時停止するだけであり、復号化プロセス中に doGetFileData 関数が使用されていることを示しており、これは予想と一致しています。レジスタとメモリを見てください:
コンテンツは、doGetFileData の前の暗号文です。
さて、XOR テーブル byte_A1C55F をコピーして、アプリの復号プロセスを模倣し (GitHub から XOR デコード スクリプトを見つけて少し変更できます)、すべてのリソースに小さなツールを作成します。 Dashen.apk が復号化されました:
以上がcocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。