elf-dump-fix
これには、メモリからARF ELF32/ELF64のダンプと固定に関する2つのユーティルが含まれます。
- ごみ
- Androidで実行し、プロセスメモリからELFをダンプして修正し、セクションヘッダーを再構築してIDA分析を改善します。
- ソフィックス
- PCで実行し、メモリからダンプされたELFファイルを修正し、セクションヘッダーを再構築してIDA分析を改善できます。
主なターゲットは、upxまたは360 libjiagu.sのようなもののようなパックされたファイルを破る際に使用されたメモリによるエルフのセクションヘッダーを再構築することです。
建てる
ごみ
- 出力パスはAPP/LIBS/ARMEABI-V7A/DUMPです
ソフィックス
- Linux/Macで、Clang/GCCがインストールされていることを確認してください。
- Windowsでは、Mingwに組み込むことができますが、テストされていません。
Howtouse
- ソフィックス
- Params <src_so_path> <base_addr_in_memory_in_hex> <out_so_path>
- <SRC_SO_PATH>メモリからダンプされたELFファイル(AndroidプロセスからELFファイルをダンプするDDまたはIDAデバッガーを使用できます)
- <base_addr_in_memory_in_hex>メモリからダンプされたELFファイルのメモリベース、わからない場合は、パス0は大丈夫です
- <out_so_path>出力ファイル
- 例
- ./sofix dumped.so 0x6f5a4000 b.so
- ごみ
- これはAndroid電話で実行されます
- 携帯電話にルートアクセスがあることを確認してください。
- このように、/data/local/tmpとgrant +xにプッシュします
- ADBプッシュアプリ/LIBS/ARMEABI-V7A/DUMP/DATA/LOCAL/TMP/&& ADB SHELL CHMOD 777/DATA/DATA/LOCAL/TMP/DUMP
- ADBシェルを使用して携帯電話を入力し、SUコマンドでルートユーザーに切り替えます。
- params <base_hex> <end_hex> [is-stop-process-before-dump] [is-fix-so-after-dump]
- ダンプするプロセスID
- <base_hex>プロセスメモリにダンプしたいELFの開始アドレス、
cat /proc/<pid>/mapsでこれを取得できます - <End_Hex>プロセスメモリにダンプしたいELFの最終アドレス、
cat /proc/<pid>/mapsでこれを取得できます - 携帯電話の固定ELF出力パス。
- [IS-STOP-PROCESS-BE-Before-Dump] 0/1は、ダンプジョブを行う前に、一部のダンプアプリで役立つダンプジョブを実行する前にプロセスにSigalを送信する必要があります。ターゲットプロセスにアンチダンピングがない場合、0は大丈夫です
- [fix-so-after-dump] 0/1は、修正ジョブとセクションのヘッダーの再構築を行う必要があります。渡すと、ダンプ後にエルフを固定しようとします。
- 例
- libc.soをダンプしたい場合、そしてあなたの/proc/[pid]/maps
40105000-4014c000 r-xp 00000000 b3:19 717 /system/lib/libc.so
4014c000-4014d000 ---p 00000000 00:00 0
4014d000-4014f000 r--p 00047000 b3:19 717 /system/lib/libc.so
4014f000-40152000 rw-p 00049000 b3:19 717 /system/lib/libc.so
40152000-40160000 rw-p 00000000 00:00 0
- ./dump 1148 0x40105000 0x40160000 ./out.so 0 1
- 40152000ではない40160000にダンプは、ELF .BSSメモリが存在する場合にダンプである必要があるため、修正プロセスはそれに依存します。
修正なしと固定ELFを比較します

