iOS逆方向(7)常用逆方向ツールの紹介
8290 ワード
逆ツールセットとインストールと使用
iOSインバースエンジニアリングのツールは大きく4つに分けられます.検出ツール例えばReveal、tcpdump等 逆コンパイルツール(逆アセンブリツール-バイナリファイルを分析し、いくつかの情報を得る)IDA、Hopper Disassembler、classdumpなど .デバッグツール(lldb、Cycriptなど) 開発ツール:Xcode、theosなど 1、classdump紹介
class-dumpは、dumpターゲットファイルのクラス情報に使用されるツールです.Objective-C言語のruntimeの特性を利用して、mach-Oファイルに格納されている@interfaceと@protocol情報を抽出し、対応する.hファイルを生成します.
注意:class-dumpは、暗号化されていないAppのヘッダファイルのみをエクスポートできます.classdumpは「otool-ov」情報の翻訳であり、私たちがよく知っている読みやすい方法で現れ、公式には以下のように紹介されています.
This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.
classdump公式サイトアドレス
リンクを開いたら、class-dump-3.5.dmgを選択してダウンロードします.ダウンロードが完了したら、dmgファイルのclass-dumpを/usr/binディレクトリにコピーし、端末で次の実行を実行して権限を付与します.
次にclass-dumpコマンドを実行すると、次の結果が表示されます.
class-dumpの簡単な使用
【説明】/APplications/Calculator.app:計算機appのパス; /Users/GofLee/desktop/CalculateHeads:dump結果を格納するヘッダファイルフォルダパス. 上記の命令を実行した後、 に/Users/GofLee/desktop/CalculateHeadsディレクトリの下に生成された.hリスト が表示されます.
以上の結果から、これらの.hファイルがあれば、ターゲットAppのプログラム構造を初歩的に理解することができます.その後、Revealとcycriptツールを組み合わせて、ターゲットAppのページをより正確に分析する機能を実現することができます.同様に、AppKit、UIKEtのヘッダファイルをエクスポートすることもできます.
【注意】:class-dump命令が実行に失敗し、所望のヘッダファイルが得られない場合や、ヘッダファイルの内容が暗号化された暗号文である場合があります.これはclass-dumpの役割オブジェクトが暗号化されていない実行可能ファイルでなければならないためであり、一般的にApp StoreでダウンロードされたAppは署名によって暗号化されており、この場合はまずシェルを破壊する必要がある.
class-dump-zダウンロードアドレス
class-dump-zはclass-dumpとclass-dump-xの改良版で、完全にC++で書き換え、動的呼び出しを避けることで、class-dump-zはclass-dumpとclass-dump-xより10倍ほど速く、Linux、Mac、iPhoneで実行することができます.
dumpdecryptedシェルツール
dumpdecryptedアドレスシェルを壊すStoreAppの実行ファイル名TargetApp(ps-eは全パスを得ることができる) を位置決めする.シェルを壊すStoreAppのDocumentディレクトリを特定する: 取得経路: Documentディレクトリへ: コピーdumpdecrypted.dylib: 注意:scpを使用してdumpdecrypted.dylibファイルを携帯電話に事前にコピーする前に
砂箱のパスを取得する方法砂箱経路を取得する後、砂箱経路のDocumentsに入る経路の下にある以上の具体的な動作は、以下の である.復号取得後のプログラム は、次のコマンドを使用する.
以上のコマンドの実行が完了した後、dumpdecrypted.dylibが署名していない場合は、先に署名する必要があります.署名: 署名後、次のコマンド を再使用する.
WeChat.decryptedが復号化されたファイルであるls後のディレクトリ構造
//復号したファイルをmacにコピーする
注意:シェルを破壊した後もclass-dumpを使用してCDStructures.hのファイルをエクスポートするだけで、アーキテクチャの選択が間違っている可能性があります.dumpdecryptedはあなたの携帯電話のプロセッサに対応する殻を壊すだけなので、fat binaryの他の部分は依然として殻がありますが、class-dumpのデフォルトの目標は殻を壊された部分ではありませんので、間違いを報告する可能性があります.完了後のヘッダファイルは以下の である.
転載先:https://juejin.im/post/5c85f4405188257ded10d7a4
iOSインバースエンジニアリングのツールは大きく4つに分けられます.
class-dumpは、dumpターゲットファイルのクラス情報に使用されるツールです.Objective-C言語のruntimeの特性を利用して、mach-Oファイルに格納されている@interfaceと@protocol情報を抽出し、対応する.hファイルを生成します.
注意:class-dumpは、暗号化されていないAppのヘッダファイルのみをエクスポートできます.classdumpは「otool-ov」情報の翻訳であり、私たちがよく知っている読みやすい方法で現れ、公式には以下のように紹介されています.
This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using ‘otool -ov’, but presented as normal Objective-C declarations, so it is much more compact and readable.
classdump公式サイトアドレス
リンクを開いたら、class-dump-3.5.dmgを選択してダウンロードします.ダウンロードが完了したら、dmgファイルのclass-dumpを/usr/binディレクトリにコピーし、端末で次の実行を実行して権限を付与します.
sudo chmod 777 /usr/bin/class-dump
次にclass-dumpコマンドを実行すると、次の結果が表示されます.
class-dumpの簡単な使用
class-dump -H /Applications/Calculator.app -o /Users/GofLee/Desktop/CalculateHeads
【説明】
以上の結果から、これらの.hファイルがあれば、ターゲットAppのプログラム構造を初歩的に理解することができます.その後、Revealとcycriptツールを組み合わせて、ターゲットAppのページをより正確に分析する機能を実現することができます.同様に、AppKit、UIKEtのヘッダファイルをエクスポートすることもできます.
class-dump -H /System/Library/Frameworks/AppKit.framework -o /Users/GofLee/Desktop/AppKitHeaders
【注意】:class-dump命令が実行に失敗し、所望のヘッダファイルが得られない場合や、ヘッダファイルの内容が暗号化された暗号文である場合があります.これはclass-dumpの役割オブジェクトが暗号化されていない実行可能ファイルでなければならないためであり、一般的にApp StoreでダウンロードされたAppは署名によって暗号化されており、この場合はまずシェルを破壊する必要がある.
class-dump-zダウンロードアドレス
class-dump-zはclass-dumpとclass-dump-xの改良版で、完全にC++で書き換え、動的呼び出しを避けることで、class-dump-zはclass-dumpとclass-dump-xより10倍ほど速く、Linux、Mac、iPhoneで実行することができます.
dumpdecryptedシェルツール
dumpdecryptedアドレス
cd dumpdecrypted ,
make //make dumpdecrypted.dylib
tmp
cycript -p TargetApp [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/"
cd /var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/
scp dumpdecrypted.dylib . DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
砂箱のパスを取得する方法
ps -e | grep WeChat // app
cycript -p WeChat // cycript
dir = NSHomeDirectory() //
control +D cycript
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB root# ls
Documents/ Library/ tmp/
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB root# cd Documents/
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# ls
00000000000000000000000000000000/ MMResourceMgr/ app_tutt/
079d66db896f66ef28a7e029c2eff367/ MMappedKV/ heavy_user_id_mapping.dat
CrashReport/ MemoryStat/ mmupdateinfo.archive
LocalInfo.lst OpenImResource/
LoginInfo2.dat SafeMode.dat
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# cp /tmp/dumpdecrypted.dylib . // dumpdecrypted.dylib /tmp
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root# ls
00000000000000000000000000000000/ MMResourceMgr/ app_tutt/
079d66db896f66ef28a7e029c2eff367/ MMappedKV/ dumpdecrypted.dylib*
CrashReport/ MemoryStat/ heavy_user_id_mapping.dat
LocalInfo.lst OpenImResource/ mmupdateinfo.archive
LoginInfo2.dat SafeMode.dat
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root#
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/E736B0BC-7ED4-42CE-8513-CE52F88F5F52/WeChat.app/WeChat
以上のコマンドの実行が完了した後、dumpdecrypted.dylibが署名していない場合は、先に署名する必要があります.
dyld: could not load inserted library 'dumpdecrypted.dylib' because no suitable image found. Did find:
dumpdecrypted.dylib: required code signature missing for 'dumpdecrypted.dylib'
/private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib: required code signature missing for '/private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib'
Abort trap: 6
ldid -S /private/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents/dumpdecrypted.dylib
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/E736B0BC-7ED4-42CE-8513-CE52F88F5F52/WeChat.app/WeChat
WeChat.decryptedが復号化されたファイルであるls後のディレクトリ構造
9-A7B1-AA3B8FD268CB/Documents root# ls
00000000000000000000000000000000/ MMResourceMgr/ WeChat.decrypted
079d66db896f66ef28a7e029c2eff367/ MMappedKV/ app_tutt/
CrashReport/ MemoryStat/ dumpdecrypted.dylib*
LocalInfo.lst OpenImResource/ heavy_user_id_mapping.dat
LoginInfo2.dat SafeMode.dat mmupdateinfo.archive
Administratorde-iPhone:/var/mobile/Containers/Data/Application/D9C10BA1-C3D7-4859-A7B1-AA3B8FD268CB/Documents root#
//復号したファイルをmacにコピーする
scp WeChat.decrypted [email protected]:/tmp
注意:シェルを破壊した後もclass-dumpを使用してCDStructures.hのファイルをエクスポートするだけで、アーキテクチャの選択が間違っている可能性があります.dumpdecryptedはあなたの携帯電話のプロセッサに対応する殻を壊すだけなので、fat binaryの他の部分は依然として殻がありますが、class-dumpのデフォルトの目標は殻を壊された部分ではありませんので、間違いを報告する可能性があります.
class-dump -s —arch armv7 -S -H WeChat.decrypted -o ./WCHeaderscd
転載先:https://juejin.im/post/5c85f4405188257ded10d7a4