1.安装 iOSOpenDev,下载地址,选择“iOSOpenDev 1.6-2 Installer”,直接安装“iOSOpenDev-1.6-2.pkg”,这个一般第一次安装都会失败。
2.安装完后,在xcode新建一个项目会看到下图选项
这里选择CaptainHook Tweak新建一个名为hook的项目
3.导入一些依赖库Cycript.framework、libstdc++.6.0.9.tbd、libsqlite3.0.tbd、JavaScriptCore.framework,并且在Build Settings里面的搜索bitcode,将Enable Bitcode选项设为NO
4.hook.mm文件写入如下代码(备注1把之前默认生成的代码删除或者注释,备注2 XXAppDelegate需要看你hook的应用的AppDelegate加什么前缀,如果没有前缀就就AppDelegate。微信是以MicroMessenger前缀,至于为啥知道这个前缀,请使用class-dump在微信的Mach-O文件中的头文件信息提取出来,生成对应的.h文件)
#import <Cycript/Cycript.h> #import <CaptainHook/CaptainHook.h> #define CYCRIPT_PORT 8888 CHDeclareClass(XXAppDelegate); CHDeclareClass(UIApplication); CHOptimizedMethod2(self, void, XXAppDelegate, application, UIApplication *, application, didFinishLaunchingWithOptions, NSDictionary *, options) { CHSuper2(XXAppDelegate, application, application, didFinishLaunchingWithOptions, options); NSLog(@"## 我要hook了 ##"); CYListenServer(CYCRIPT_PORT); } __attribute__((constructor)) static void entry() { CHLoadLateClass(XXAppDelegate); CHHook2(XXAppDelegate, application, didFinishLaunchingWithOptions); }
5.build (记得选择用真机,不要用模拟器)。build 完后的结果会放在 Xcode 项目缓存目录 ~/Library/Developer/Xcode/DerivedData,打开这个文件夹后找到前缀和项目名一致的文件夹,找到里面的 Build/Products/Debug-iphoneos ,把 hook.dylib hook.dylib.dSYM 两个文件先拷贝出来待用。
6.1.你要hook的应用需要脱壳的应用或者企业级应用,脱壳需要越狱手机,没有的话也不碍事,去pp助手等第三方软件找到脱壳的应用(以微信为例)
6.2.找到应用对应的二进制文件,查看包含哪些架构,终端输入:
file /Users/xxx/Desktop/HOOK/微信-6.6.5(越狱应用)/Payload/WeChat.app/WeChat
输出如下,看到微信包含两个架构armv7和arm64
6.3.可以使用otool来输出app的load commands,查看cryptid标志位来判断app是否被加密:1代表加密,0代表被解密
otool -l /Users/xxx/Desktop/HOOK/微信-6.6.5(越狱应用)/Payload/WeChat.app/WeChat | grep -B 2 crypt
输出如下:
6.4.还有一个重要的一点,删除WeChat.app/下的PlugIns和Watch文件(因为微信有多个targets,会导致下面的安装ipa还是会闪退)
6.5.使用yololib工具对二进制文件进行dylib的注入,终端输入:
./yololib /Users/xxx/Desktop/HOOK/Payload/你要hook的应用名.app/你要hook的应用名 hook.dylib
7.使用MachOExplorer软件查看loadCycript.dylib是否注入成功(这里不推荐使用MachOView,因为它不更新了,还TMD经常闪退这是不能忍受的)
8.将我们注入的dylib文件放到注入的应用的GAMECO.app目录下,终端输入:
cp hook.dylib /Users/xxx/Desktop/HOOK/Payload/你要hook的应用名.app/
9.重签名应用,推荐使用名为iOS App Signer的Mac上的应用,当然也可以用命令行进行重签名,请参考。
10.使用mobiledevice工具安装重签名的ipa,终端输入:
./mobiledevice install_app xxx.ipa
11.打开刚才安装hook后的应用,使用蒲公英或者其他的软件查看log,可以看到我们hook的log信息