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ディレクトリにコピーし、端末で次の実行を実行して権限を付与します.
    sudo chmod 777 /usr/bin/class-dump
    

    次にclass-dumpコマンドを実行すると、次の結果が表示されます.
    class-dumpの簡単な使用
    class-dump -H /Applications/Calculator.app -o /Users/GofLee/Desktop/CalculateHeads
    

    【説明】
  • /APplications/Calculator.app:計算機appのパス;
  • /Users/GofLee/desktop/CalculateHeads:dump結果を格納するヘッダファイルフォルダパス.
  • 上記の命令を実行した後、
  • /Users/GofLee/desktop/CalculateHeadsディレクトリの下に生成された.hリスト
  • が表示されます.
    以上の結果から、これらの.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      
    
  • シェルを壊すStoreAppの実行ファイル名TargetApp(ps-eは全パスを得ることができる)
  • を位置決めする.
  • シェルを壊すStoreAppのDocumentディレクトリを特定する:
  • cycript -p TargetApp [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] 
    
  • 取得経路:
  •  #"file:///var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/" 
    
  • Documentディレクトリへ:
  • cd /var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/
    
  • コピーdumpdecrypted.dylib:
  • 注意:scpを使用してdumpdecrypted.dylibファイルを携帯電話に事前にコピーする前に
    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
    
  • 砂箱経路を取得する後、砂箱経路のDocumentsに入る経路の下にある以上の具体的な動作は、以下の
  • である.
    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