准备工具
1、在线砸壳网站
2、我的饭店_已砸壳(演示用)
3、MachOView
4、optool
5、AltStore
操作步骤
大家可以看到,当我们使用MonkeyDev开发插件的时候,最终的产物是有两个的,一个是我们的App,一个是HOOK用的动态库,之所以能够实现逆向,就是把这个动态库注入到二进制文件中实现的,那么我们是否可以直接把动态库注入到游戏的二进制文件中呢?答案是肯定的。
首先,我们使用MachOView这个工具来查看一下二进制文件的动态库,如下图所示,LC_LOAD_DYLIB就是加载的动态库。
那么我们要做的也很简单,就是使用optool工具把我们已经写好的动态库给注入进去,首先我们要对ipa包进行解压缩,直接使用第三方工具或者修改ipa后缀名为.zip进行解压,会得到一个Payload文件夹,文件夹里有一个pig-mobile.app文件夹,在这个文件夹上右键选择显示包内容,然后按照大小进行排序,最上面的那个pig-mobile文件,就是我们游戏的二进制文件
然后执行如下命令(optool要提前编译出来放到/usr/local/bin,pig-mobile文件也要复制出来操作,不然命令可能不生效,注入完成后我们再替换回去即可)
optool install -c load -p "@executable_path/Frameworks/libpighomeDylib.dylib" -t pig-mobile
然后得到如下结果:
Found thin header...
Inserting a LC_LOAD_DYLIB command for architecture: arm64
Successfully inserted a LC_LOAD_DYLIB command for arm64
Writing executable to pigmobile_new...
我们再次使用MachOView这个工具查看被修改后的二进制文件,发现我们写的这个动态库已经被成功的注入了
当然,在注入这个动态库之前,我们还要先确认下这个动态库,看它有没有依赖于别的动态库,如果有的话,我们还需要把它所依赖的动态库全部加到游戏工程里面去,我们使用下面的命令来查看libpighomeDylib.dylib
otool -L libpighomeDylib.dylib
我们会得到如下的结果:
libpighomeDylib.dylib:
@executable_path/Frameworks/libpighomeDylib.dylib/libpighomeDylib.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 907.1.0, weak)
@executable_path/Frameworks/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0, weak)
@executable_path/Frameworks/libcycript.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/RevealServer.framework/RevealServer (compatibility version 2.0.0, current version 2.0.0)
/System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore (compatibility version 1.0.0, current version 612.1.15)
/System/Library/Frameworks/UIKit.framework/UIKit (compatibility version 1.0.0, current version 5043.1.109)
/System/Library/Frameworks/Foundation.framework/Foundation (compatibility version 300.0.0, current version 1835.100.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1308.0.0)
/System/Library/Frameworks/AVFoundation.framework/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation (compatibility version 150.0.0, current version 1835.100.0)
由于我没有引用到别的三方库,这里面我们看到有三个需要我们处理的
@executable_path/Frameworks/libsubstrate.dylib (compatibility version 0.0.0, current version 0.0.0, weak)
@executable_path/Frameworks/libcycript.dylib (compatibility version 0.0.0, current version 0.0.0)
@rpath/RevealServer.framework/RevealServer (compatibility version 2.0.0, current version 2.0.0)
其实就是MonkeyDev重签名后会自动打包进去的几个文件,我们把这些文件都放到pig-mobile.app/Frameworks的目录下面
然后我们再把自己录制的那个1.mov文件和修改后的二进制文件一起放入到pig-mobile.app文件夹内。下面就是使用AltStore工具进行重签,首先打开AltStore工具,选择Install Mail Plug-in,安装一个Mail的插件到我们的电脑上,安装完成后,我们需要打开Mail的设置界面,选择“管理插件”并启用它。
插件被启用以后,我们就可以愉快的玩耍啦,选择Install AltStore,然后安装到你的手机上,它会弹出一个账号密码的输入框,让你输入自己的Apple ID和密码。下面我们进入等待时间,等待它安装成功,成功后会有提示。
安装成功后,我们的手机桌面上就会出现这个软件,点击这个软件会发现有一个弹框,我们打开手机的设置 --> 通用 --> VPN与设备管理 --> 开发者App --> 信任你的账号
信任以后,我们就可以正常的打开这个软件,这一步安装完成后,我们基本上就已经成功了一大半,下面我们需要把刚刚我们已经修改后的游戏文件进行打包,进入到我们解压的PayLoad文件夹,执行如下命令,把文件夹重新打包成ipa,这们我们就得到了一个"我的饭店_hook.ipa"
注意:在直接安装这个ipa包的时候,AltStore报了一个错,错误的内容是“the name for this app is invalid”,经过我的研究,发现是签名工具对中文和特殊字符支持不好导致的,所以需要针对这个包进行修改,修改的地方有四处:
1、pig-mobile.app目录修改为pigmobile.app
2、二进制文件名由pig-mobile修改为pigmobile
3、Info.plist里的Bundle display name修改为pigmobile
4、Info.plist里的Executable file修改为pigmobile(就是二进制文件的文件名)
zip -r 我的饭店_hook.ipa Payload
然后我们只需要把这个文件通过任何办法下载到手机上即可(由于公司保密性较高,所以无法通过微信、QQ等手段。我就演示下通过自建服务器吧)
上面是我在内网里自建的一个简单的服务器,我们让苹果手机和我们处在同一个局域网内,然后使用safari浏览器直接访问我们的服务器地址,然后下载对应的“我的饭店_hook.ipa”文件 ,下载完成后,我们直接通过AltStore方式打开这个ipa文件
这里会让你再次输入Apple ID和密码,输入完成后,即可完成自签名,自签名的有效期是七天,七天后只需要刷新重签即可。
相关资料下载地址:
https://gitee.com/allenzhang/note/