华少的博客

谁的头顶上没有灰尘,谁的肩上没有过齿痕

0%

iOS应用脱壳和重签名

前期干货

iOS破壳

用dumpdecrypted给App砸壳

iOS逆向工程之给App脱壳

给微信加 hook 尝试记录

一步一步实现iOS微信自动抢红包(非越狱)

工具:

hopper:对脱壳app进行反汇编、反编译 可以分析app二进制文件
dumpdecrypted:用于脱壳
class-dump:对脱壳app 导出头文件

越狱设备一台(当时是6s Plus ,ios9.2)
越狱后安装有 cydia ,通过cydia安装openSSH,可以通过网段连接到mac

脱壳

步骤:

  • 下载 dumpdecrypted源码,然后在dumpdecrypted目录下make,生成dumpdecrypted.dylib文件
  • 电脑连接越狱设备(同一网段):ssh root@192.168.13.230
    root@192.168.13.230’s password:
    openSSH的连接默认密码为:alpine。
  • 电脑连上手机后查询当前运行进程 ps -e | grep /var/mobile
    此处直接打印出手机安装app的进程
  • 将电脑中make生成的dumpdecrypted.dylib文件 使用 scp 指令复制到 手机的/var/tmp/ 目录
  • 脱壳指令:6sPlus:/var/tmp root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/6E1CC0B2-4DB7-4F37-B715-FAA317EEC469/WeChat.app/WeChat
    此指令只能在当前/var/tmp/ 目录下执行
  • 完成后在手机/var/tmp/目录下ls查看,得到WeChat.decrypted文件(目标脱壳文件)
  • 将脱壳文件使用scp拷贝到电脑:scp root@192.168.13.230:/var/tmp/WeChat.decrypted /Users/xxx/Desktop
  • 使用指令 otool -l WeChat.decrypted | grep crypt (查看是否脱壳)
    使用指令class-dump -S -s -H WeChat.decrypted -o ./Headers(dump出头文件)

过程中的坑点:

架构问题:这次越狱设备是arm64架构的,dumpdecrypted编译出的是支持arm64,还有class-dump指令也是直接arm64.如果你越狱设备是armv7的则需要修改配置

iOS9.2越狱设备:在网上查资料,好多说是要将dumpdecrypted.dylib文件拷贝到 目标app的document目录下,可是越狱设备安装了很多app,完全不好确定目标app的document目录,本来可以使用Cycript注入目标进程中(cycript -p WeChat),然后执行[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0] 获取目标进程的Document目录,然后复制文件过去就好。可是实施发现,iOS9.2越狱设备下使用Cycript指令后终端一直卡死,无显示。(设备确认安装了Cycript,应该是Cycript插件不支持iOS9.2),这样就无法获取目标app的document目录!好在发现直接把dumpdecrypted.dylib放在手机的/var/tmp/目录下,执行脱壳指令也是可行的!

重签名app

《How to re-sign Apple’s applications once they’ve been modified》

中文简版步骤

步骤:

  • 查看有效的证书 : security find-identity -v -p codesigning
  • 检查目标app签名情况:codesign -dvvv EmojiKeyboard.app
  • 删除ipa中之前的签名文件:rm -rf Payload/*.app/_CodeSignature/
  • 拷贝新的provision profile替换旧的embedded.mobileprovision(这个provision profile需要是distribution provision,可以找之前项目的) cp 123.mobileprovision Payload/*.app/embedded.mobileprovision
  • 重签名:codesign -f -s (name of certificate) /path/to/application

例如:
➜ Payload codesign -f -s “iPhone Developer: xxx@xxx.com (9283B989BB)” xxx.app
xxx.app: replacing existing signature
➜ Payload codesign -dvvv xxx.app