美文网首页DevSupportiOS 逆向开发RE
iOS逆向, 基础工具之dumpdecrypted

iOS逆向, 基础工具之dumpdecrypted

作者: 码农老王 | 来源:发表于2018-05-24 09:48 被阅读415次

    我们可以正常dump系统APP的头文件, 但是App Store下载的应用是加密后, 无法直接用class-dump进行dump头文件, 这个时候就要用到这篇文件的dumpdecrypted, 把加密的APP砸壳后dump, 感谢开发这些工具的大佬们~

    环境iPhone5c iOS 10.3.3

    下载地址
    github

    进行clone并make

    $git clone https://github.com/stefanesser/dumpdecrypted.git
    Cloning into 'dumpdecrypted'...
    remote: Counting objects: 31, done.
    remote: Total 31 (delta 0), reused 0 (delta 0), pack-reused 31
    Unpacking objects: 100% (31/31), done.
    
    $cd dumpdecrypted 
    $make
    `xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -c -o dumpdecrypted.o dumpdecrypted.c 
    `xcrun --sdk iphoneos --find gcc` -Os  -Wimplicit -isysroot `xcrun --sdk iphoneos --show-sdk-path` -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/Frameworks -F`xcrun --sdk iphoneos --show-sdk-path`/System/Library/PrivateFrameworks -arch armv7 -arch armv7s -arch arm64 -dynamiclib -o dumpdecrypted.dylib dumpdecrypted.o
    ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/PrivateFrameworks'
    ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/PrivateFrameworks'
    ld: warning: directory not found for option '-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.3.sdk/System/Library/PrivateFrameworks'
    

    执行完make后会在当前目录生成一个dumpdecrypted.dylib 文件 这就是去砸壳的榔头.

    $ls
    Makefile            README              dumpdecrypted.c     dumpdecrypted.dylib dumpdecrypted.o
    

    现在进入手机寻找想要砸壳的APP的路径, storeAPP的可执行文件都存放在/var/containers/Bundle/Application/ 中

    $ls /var/containers/Bundle/Application/
    017E448E-7AB7-4619-9F2E-32F9FD02D476  13F95CDA-3F8A-4A8A-8E33-A9D3D896B1CD  3D3F3796-B24C-405C-A257-88F7E0D8BC0C  68A0B1EE-F924-404B-AE6B-DDEB3E996F47
    

    我们无法分别哪个文件夹是..那么我们就用ps命令来过滤一下

    避免干扰, 杀掉所有APP进程, 只保留你要砸壳的那一个.

    $ps -e | grep /var/containers/Bundle/Application/
     1387 ??         0:02.25 /var/containers/Bundle/Application/68A0B1EE-F924-404B-AE6B-DDEB3E996F47/SeekingArrangement.app/SeekingArrangement
     1408 ttys000    0:00.00 grep /var/containers/Bundle/Application/
    

    我们找到了这个68A0B1EE-F924-404B-AE6B-DDEB3E996F47/SeekingArrangement.app/SeekingArrangement

    然后再用cycript来找出对应APP的documents目录

    $cycript -p 1387
    cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
    #"file:///var/mobile/Containers/Data/Application/9EE3F784-AAC6-458E-9502-DDD264AFA7A1/Documents/"
    

    然后将刚才的dumpdecrypted.dylib拷贝到这个目录下

    $scp dumpdecrypted.dylib root@192.168.6.52:/var/mobile/Containers/Data/Application/9EE3F784-AAC6-458E-9502-DDD264AFA7A1/Documents/
    root@192.168.6.52's password: 
    dumpdecrypted.dylib                                                                                                                             100%  193KB   2.1MB/s   00:00 
    

    然后找到刚才用ps -e找出来的可执行文件, 开始进行砸壳

    $DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/68A0B1EE-F924-404B-AE6B-DDEB3E996F47/SeekingArrangement.app/SeekingArrangement
    

    中途可能会出现这个问题

    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/9EE3F784-AAC6-458E-9502-DDD264AFA7A1/Documents/dumpdecrypted.dylib: required code signature missing for '/private/var/mobile/Containers/Data/Application/9EE3F784-AAC6-458E-9502-DDD264AFA7A1/Documents/dumpdecrypted.dylib'
    
    
    Abort trap: 6
    

    是因为签名的问题, 用开发者证书对dumpdecrypted.dylib进行签名后重新上传

    #list签名
    $security find-identity -v -p codesigning
    #进行签名
    $codesign --force --verify --verbose --sign "iPhone Developer: xxx xxxx (xxxxxxxxxx)" dumpdecrypted.dylib
    #scp上传后重新进行砸壳
    
    $DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/68A0B1EE-F924-404B-AE6B-DDEB3E996F47/SeekingArrangement.app/SeekingArrangement
    mach-o decryption dumper
    
    DISCLAIMER: This tool is only meant for security research purposes, not for application crackers.
    
    [+] detected 32bit ARM binary in memory.
    [+] offset to cryptid found: @0x4cbe4(from 0x4c000) = be4
    [+] Found encrypted data at address 00004000 of length 9633792 bytes - type 1.
    [+] Opening /private/var/containers/Bundle/Application/68A0B1EE-F924-404B-AE6B-DDEB3E996F47/SeekingArrangement.app/SeekingArrangement for reading.
    [+] Reading header
    [+] Detecting header type
    [+] Executable is a plain MACH-O image
    [+] Opening SeekingArrangement.decrypted for writing.
    [+] Copying the not encrypted start of the file
    [+] Dumping the decrypted data into the file
    [+] Copying the not encrypted remainder of the file
    [+] Setting the LC_ENCRYPTION_INFO->cryptid to 0 at offset be4
    [+] Closing original file
    [+] Closing dump file
    

    当前目录会生成SeekingArrangement.decrypted 文件, 即砸壳后的文件

    $ls
    SeekingArrangement.decrypted  dumpdecrypted.dylib
    

    然后就可以拷贝到你想用的地方进行使用了, class-dump, IDA都等着呢~

    至于为什么要在APP的Documents目录进行操作, 因为商店的APP只能在自己的沙盒中进行操作, 相信各位这个问题都可以理解的.

    相关文章

      网友评论

      • 跳跳虾:就差个越狱机了,:smile:
        跳跳虾:@码农老王 看了一下,基本上都是500-600,心疼:cold_sweat:
        码农老王:300左右可以在咸鱼买个5c, 最高也只能升到10.3.3 随便越狱随便搞, 也不怕升级

      本文标题:iOS逆向, 基础工具之dumpdecrypted

      本文链接:https://www.haomeiwen.com/subject/bepjjftx.html