【Game Reverse】Luaゲームリバースとクラック方法紹介

序文

モバイル ゲームの開発に伴い、Cocos-lua のクライアント ゲーム開発者がモバイル ゲーム プラットフォームに移行するケースが増えています。また、Fantasy Westward Journey、Legend of Dota、Happy Match、Dragon Heroes、Nikki-Dress UP Queen、Blast Hunter、Wanwandao などのモバイル ゲームなど、Lua スクリプト ロジックを備えたモバイル ゲームも増えています。Lua モバイル ゲームの増加に伴い、そのセキュリティがますます注目されるようになりましたが、ここでは一般的に使用されるいくつかの分析方法をまとめ、補助ツールをいくつか紹介します。

Android プラットフォーム上の apk パッケージは直接解凍でき、./lib ディレクトリで so ロジック モジュールを見つけ、so を 1 つずつ分析して、lua エンジンが埋め込まれているかどうかを確認できます (一般に、最大の so が埋め込まれている可能性が最も高くなります)。 lua エンジンに組み込まれます)。libcocos2dlua および libhellolua という単語がある場合、Lua エンジンが組み込まれている可能性が非常に高くなります。

疑わしい SO を IDA にドラッグし、lua エンジンの文字列を確認し、図 1 に示すように lua エンジン内の文字列を見つけます。モバイル ゲームには基本的に lua エンジンが埋め込まれていることが確認でき、おそらく lua ゲームで書かれていると考えられます。論理。
ここに画像の説明を挿入
解凍されたアセット ディレクトリにスクリプト情報が含まれているかどうかにも注意することができます。この種の情報は通常暗号化されます (lua スクリプトに直接保存される脆弱なセキュリティ意識も多数あります) が、明らかな特徴があります。それは、複数のファイルが保存されているということです。図 2 と図 3 に示すように、これらは 2 つの非常に人気のある Lua モバイル ゲームのアセット ディレクトリ内の lua スクリプト情報です。その中で、モバイル ゲーム D は luac のみを暗号化しますが、モバイル ゲーム M は名前までハッシュ化します。
ここに画像の説明を挿入
ここに画像の説明を挿入

思考回路を断ち切る

Lua モバイル ゲームのクラックは主に 2 つのステップに分かれており、最初のステップはゲームの lua スクリプトを取得すること、2 番目のステップは lua スクリプトを置き換えることです。中心となるのは、lua スクリプトを見つけて、それを変更して有効にすることです。セキュリティ レベルが異なるモバイル ゲームでは、対応する lua スクリプトの取得タイミングが異なります。(本質的には、図 4 に示すように、Lua エンジンに沿って Lua スクリプトの読み込みチェーン全体をロードし、継続的に分析し、ダンプと置き換えの適切なタイミングを見つけることです。)

もう 1 つのタイプの考え方は、Chacha の lua モバイル ゲーム支援などの補助ツールで一般的に使用される方法です。ゲームの lua スクリプト情報を取得するだけで、それを置き換える必要はありませんが、それ自体の lua スクリプトを直接ロードします (このスクリプトとゲーム スクリプトは同じ名前空間にあり、ゲーム スクリプト データを直接変更して、関数を呼び出します)。

1. Lua スクリプトはアセット リソースから直接取得できます。

このタイプは比較的初歩的なもので、lua または luac のソース コードはassets ディレクトリで入手できます。

lua ソース コード タイプの場合は、直接変更してから、apktool を使用して再パッケージ化します。

luac ソース コード タイプ (luac は lua によってコンパイルされた lua バイトコード ファイルであり、lua スクリプトのすべての情報が含まれており、lua バイトコード ファイルの構造を検索できます) の場合は、unluac およびその他のオープン ソース プロジェクトを使用できます。逆コンパイルして lua ソース コードに戻すためのツール。次に、変更した lua ソース コード ファイルを変更して直接置き換えます (lua エンジンがスクリプトをロードするときに、luac マジック ナンバーを認識して、それが lua ソース コードであるか luac であるかを判断します。ソース コードを直接置き換えても、スクリプトのロード実行には影響しません) )。

2. luaL_loadbuffer関数で取得

luaL_loadbuffer は、より頻繁に実行されるロード ポイントです。Cocos エンジンの lua ローダーは、図 4 に示すように cocos2dx_lua_loader であり、最後に luaL_loadbuffer 関数を呼び出してロードします。通常、メーカーはこのレイヤーで lua スクリプトを復号化します。つまり、luaL_loadbuffer 関数の buff パラメーターを取得して、復号化された lua スクリプトを取得します。ロジックを変更した後、この時点で直接置き換えることができます。
ここに画像の説明を挿入

3. 下位リーダー関数から取得

lua スクリプトをロードする lua エンジンの最下層は lua_reader 関数です。この関数は、最下位のスクリプト バフを走査する役割を担っているため、ここでダンプされる lua スクリプトは最も純粋な lua スクリプトであり、すべての暗号化が削除されています (lua オペコードまたはエンジン ロジックの変更を除く)。

ただし、この時点ではファイル情報(ファイル名、バフインデックスなど)が不足しており、上位機能と連携してluaスクリプトをつなぎ合わせる必要があります。

共通ツール

1.IDAツール

動的デバッグと静的分析を実行でき、適切な位置にブレークポイントを設定し、指定されたレジスタを変更し、分析用の IDC スクリプトを作成できるツール (ここでは luac ファイルのダンプに使用できます) はあまり紹介されていません。

二、 ChunkSpy

これは、luac が学習して読み取るのに便利な、lua バイトコード ファイル構造を分析するために使用されます。

3.アンルアック

Unluac は、lua デコンパイラーのオープン ソース プロジェクトであり、luac ファイルを lua コードに逆コンパイルできます。Fantasy Westward Journey、Dota Legend などの lua オペコードを変更したモバイル ゲームの場合、静的解析でオペコードが復元されたことが確認された後、このプロジェクトを変更して、対応するバージョンの逆コンパイル ツールをパッケージ化できます (OpcodeMap のマップを直接変更します)。 .java を変更し、対応するゲームの変更されたオペコードで十分です)。

一般的に使用されるロジック変更方法

(1) グローバル変数の変更(グローバル設定など)

(2) 更新関数の呼び出しロジックを変更する(更新しない、または複数回更新する)

(3) 敵、主人公、武器、スキルの初期化処理と属性変更

(4) 一部の処理処理機能(ダメージ計算、命中位置判定等)のロジック変更

実際の事例

ケース 1: グローバル変数を変更する

lua_reader 関数では、ゲームの lua ソース コードを直接ダンプし、/zoo/gamePlay/GamePlayConfig.lua ファイルでゲーム スコア報酬やその他の属性を構成し、図 5 に示すようにいくつかの特殊効果を追加するように変更できます。簡単にポイントを獲得できます。
ここに画像の説明を挿入

ケース 2: ゲーム応答関数を複数回呼び出す (Dota Legend Quick Battle)

以下はフォークの例です。Chacha には Dota Legend の対応する支援があり、クイック バトルの実装を図 6 に示します。これは、HOOK を介した更新関数を使用します (Lua の関数名はポインターであり、元の関数ポインターをバックアップし、それを直接書き換えて実現します)。 HOOK).更新関数の末尾呼び出しは、達成するために 10 ティックを呼び出します。
ここに画像の説明を挿入

まとめ

比較的言えば、Lua モバイル ゲームは安全性が十分ではありません。なぜなら、lua エンジンはオープンソースであるだけでなく、Python などのスクリプト エンジンよりもシンプルだからです。プラグインの作成者は、lua エンジンの底辺で水に浸かるアヒルのようなものです。上記で紹介した分析とクラッキングのアイデアは、lua エンジンによってロードされたスクリプトの関数チェーンに沿って分析し、スクリプトから復号化されたポイント ダンプを見つけて、スクリプトを詳細に分析し、攻撃を伴うゲームのクラック バージョンの構築を試みることです。プラグイン機能を実現するためのポイント。

Guess you like

Origin blog.csdn.net/douluo998/article/details/130477861