使用frida-ios-dump工具一键脱壳

一、壳

  1. APP上传到AppStore后,会被自动加壳,即利用特殊的算法, 对可执行文件的编码进行改变(例如:压缩、加密),已达到保护程序代码的目的。
  2. 加壳之前,执行程序,就会直接把可执行文件载入到内存中,如下图所示


  3. 加壳之后,执行程序,会把包裹着加密可执行文件的壳程序载入内存,在内存中,由壳程序对可执行文件进行解密,然后才会执行,如下图所示:


  4. 加壳之后,由于可执行文件被加密了,所以就无法通过MachOView、Hopper Disassembler、class-dump、IDA等工具分析Mach-O文件了

二、脱壳

脱壳就是摘掉壳程序,将未加密的可执行文件还原出来
脱壳的办法主要有两种:硬脱壳、动态脱壳
3.硬脱壳就是编写解密算法,把经过壳程序加密的可执行文件解密出来,如下图所示:



4.动态脱壳就是把内存中已经解密的可执行文件,直接从内存中导出来,如下图所示:


  1. 如何判断可执行文件是否已经脱壳了呢?这里介绍两种办法:
  • 使用MachOView工具查看可执行文件,查看Load Commands -> LC_ENCRYPTION_INFO -> Crypt ID的值,0代表未加密,1代表已加密,如下所示:


  • 在终端中,通过otool命令判断,otool的语法是:otool -l 可执行文件路径 | grep crypt,如下所示:


三、脱壳工具

  1. 最早的砸壳工具是stefanesser写的dumpdecrypted,通过手动注入然后启动应用程序在内存进行dump解密后的内存实现砸壳,这种砸壳只能砸主App可执行文件。

  2. 对于应用程序里面存在framework的情况可以使用conradev的dumpdecrypted,通过_dyld_register_func_for_add_image注册回调对每个模块进行dump解密。但是这种还是需要拷贝dumpdecrypted.dylib,然后找路径什么的,还是挺麻烦的。

  3. 然后有了KJCracks的Clutch,通过posix_spawnp创建进程然后dump直接生成ipa包在设备,可以说是很方便了。这个是工具在使用的时候大部分应用会出报错,此外生成的包还需要自己拷贝。

四、配置frida

  1. frida-ios-dump(下载地址)是基于frida的,所以先要在手机和电脑上安装frida,命令如下
  • iPhone上安装frida的方法:
    打开Cydia->软件源->编辑->添加,输入build.frida.re,添加软件源后,搜索安装Frida即可
  1. 通过USB使用SSH连接iOS设备
brew install usbmuxd

安装usbmuxd库之后,就顺带安装了一个小工具iproxy,该工具会将设备上的端口号映射到电脑上的某一个端口,例如:

iproxy 2222 22
  • 映射端口保持一致即可


  1. cd进入下载好的frida-ios-dump目录后,运行./dump.py Display name或Bundle identifier,就可脱壳成功,如下所示:
可以先用./dump.py -l命令,列出来所有的可脱壳的应用名称和BundleID
./dump.py -l

让然后选择其中一个,执行./dump.py Display name命令,以微信为例:
./dump.py com.tencent.xin

你可能感兴趣的:(使用frida-ios-dump工具一键脱壳)