ホームページ  >  記事  >  運用・保守  >  cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

WBOY
WBOY転載
2023-05-16 19:11:102028ブラウズ

Dashen apk を例に挙げます。アプリ復号化 lua スクリプトの以前の分析を通じて、Dashen apk の lua スクリプトを復号化できます。次に、そのリソース (設定ファイルや画像など) を復号​​化しましょう。例として、より重要な設定ファイルを見てみましょう. 復号化前:
cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

ファイル ヘッダーには署名値もあります: ファックユー!.これを見て、これもxxteaで暗号化されているのではないかと考え、上記の方法でxxteaで復号化してから解凍したところ、やはり文字化けしており、途中でエラーが発生しました。私たちが今言ったことを否定しなければなりません。推測です。設定ファイルの復号化を段階的に続けます。

ちょっと考えてみてください。ファイルのヘッダーは次のとおりです。クソ!ファイルを復号化したい場合は、必然的に文字列「fuckyou!」を処理する必要があります。したがって、idaPro で funkyou 文字列を検索し、fuckyou 文字列が存在するコード セグメントで関数分析、デバッグ、および復号化を行うことができるはずです。 idaPro を開いて文字列ビューを開き、「fuckyou」を検索して仮説を検証します。私の推測では、最適化が行われ、文字列がどこかで最適化されていると思います。

手がかりは途切れましたが、私たちの好奇心によってまだ続行できます。現時点では、インターネット上の情報と組み合わせて cocos2d フレームワークのソース コードを参照すると、cocos2d のファイル処理がカプセル化されていることがわかります。 CCFileUtils クラスに追加します: cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

関数はたくさんあり、1 つずつ掲載するわけではありません。また、インターネットから先人の経験を見つけました:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

はい、戻ります idaPro に移動し、エクスポート ウィンドウで getData を検索します:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

これら 2 つを入力します関数をデコンパイルして見てみると、あまり似ていないのでスキップしますが、最初に書き留めておいてください。動的デバッグ中は、ここで中断できます。

getFileData をもう一度見てみましょう: cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

アプリは Android プラットフォームで実行されるため、Android プラットフォームの CCFileUtilsAndroid::getFileData を見てみましょう:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法 フォローアップしましょう:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法 コードは非常に長いため、すべてを投稿することはできませんが、このコードの重要な部分は次のとおりです。 function:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法 上の写真を見ると、これだ、という気がします(笑)。しかし、まだまだ分析と検証を続ける必要があります。関数がファイルヘッダーの記号を処理するとき、文字と直接比較するのではなく、その ASCII 値を 1 つずつ比較するため、文字列ウィンドウで「fuckyou!」を見つけることはできません。の。関数は、暗号化された形式に準拠したテキストであると判断すると、最初の 8 バイトを削除し (くそー!)、XOR テーブル内の値を使用して XOR 演算を実行し、256 バイトごとにループします。 . .

byte_A1C55F:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法 この時点で、基本的にファイル復号化の関数とプロセスを決定できます。動的にデバッグして再度確認できます。アプリの呼び出し後この関数を使用するには、メモリ内にクリア テキスト コンテンツが存在する必要があります。デバッグするとき、getDataおよびccfileutilsandroidの最初と終わりに中断する:dogetFiledata関数。GetData関数割り込み:

CFIleutilSandroid:dogetFileData関数割り込み:

########

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

両方の関数は中断されますが、doGetFileData ブレークポイントで一時停止するだけであり、復号化プロセス中に doGetFileData 関数が使用されていることを示しており、これは予想と一致しています。レジスタとメモリを見てください:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法コンテンツは、doGetFileData の前の暗号文です。

さて、XOR テーブル byte_A1C55F をコピーして、アプリの復号プロセスを模倣し (GitHub から XOR デコード スクリプトを見つけて少し変更できます)、すべてのリソースに小さなツールを作成します。 Dashen.apk が復号化されました:

cocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法

以上がcocos2d-LUA リバースエンジニアリングでアプリリソースを復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。