file otool
- 解压ipa
- file 可执行文件 查看包含多少cpu代码
- otool -l 可执行文件 | grep crypt 查看是否加密
dumpdecrypted
- 解密ipa,在运行时dump代码 github
- 越狱机器 ssh链接 运行app 执行 pa ax 得到app 地址
- 查看app infp.plist 获取bundle id
- 取app得沙盒目录 [[NSClassFromString(@”LSApplicationProxy”) applicationProxyForIdentifier:bundleID] dataContainerURL];
- 把dumpdecrypted.dylib拷贝到app沙盒tmp目录
- 执行DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib app目录/可执行文件
- 只会把当前架构的代码脱壳 lipo app -thin armv7 -output app_armv7 抽取当前架构代码,不再是富文件
- 或者直接在pp助手等越狱应用中下载,就不用自己解密了
Clutch
解密ipa github
PoedCrackMod
解密ipa
- 将富二进制swap header(arm7设备上运行arm6)生成armv6,armv7两个App
- 获得cryptid,cryptsize,cryptsize
- 将armv6部分的cryptid修改为0,gdb导出对应的armv6解密部分替换掉armv6加密部分,签名
- 将armv7部分的cryptid修改为0,gdb导出对应的armv7解密部分,替换掉armv7加密部分,签名
- 合并解密过的armv6,armv7
- 打包成ipa安装包
- 6之前可以 伪造可执行文件的时间戳、伪造SignerIdentity、伪造iTunesMetadata.plist
MachOView
查看Mach-O文件结构工具,Load Commands段标记加载哪些动态库。
iosopendev
- 各种模板 http://iosopendev.com
- brew install ldid dpkg
- export THEOS=/opt/theos
- git clone git://git.saurik.com/ldid.git
- cd ldid
- git submodule update –init
- ./make.sh
- cp -f ./ldid $THEOS/bin/ldid
yololib
将自定义动态库添加进Load Commands字段 https://github.com/KJCracks/yololib ./yololib AppBinary self.dylib
Hook
- class-dump 了解app 找到需要hook的函数
- ida 反汇编查看某函数具体逻辑
- app不会调用自定义动态库中的函数,只会触发动态库初始化,因此添加初始化函数 __attribute__((constructor)) static void entry(){}
- https://github.com/rpetrich/CaptainHook 实现了动态库中hook的宏,
- CHDeclareClass宏 声明想hook的类
- 在entry中用CHLoadClass 或 CHLoadLateClass加载3中申明的class
- CHMethod hook 类的方法 格式为:参数个数、返回类型、类名、selector、selector 类型、参数…
- CHSuper 调用原来的函数
- CHClassHook注册hook函数 格式:参数个数、返回类型、类名、selector
签名
- 保证app文件夹下有embedded.mobileprovision文件,证书
- 编辑application-identifier 把TeamID修改为自己的
- codesign -f -s “iPhone Developer: dzym79@qq.com(xxxxxxxx)” xxx.app/self.dylib
- codesign -f -s “iPhone Developer: dzym79@qq.com(xxxxxxxx)” –entitlements Entitlements.plist xxx.app
- xcrun -sdk iphoneos PackageApplication -v xxx.app -o xxx.ipa