本文以破解游戏梦幻西游为例,逐步讲解整个调试流程。
完成整个过程需要准备以下几个必要工具:
5、一台越狱机器,安装 cycript 及 openssh;
非必要工具:
注:dumpdecrypted 之所以非必要,是因为一般情况下可以从越狱市场下到已经 decrypted 后的app!如果下到的包不是 decrypted 的,请自行百度 decrypted。
首先我们要解决的问题是,在哪里注入我们的调试入口。这个定位过程必须要有越狱机器的配合。我们会通过在越狱机器(已安装应用)上运行 cycript 确定应用视图层级。
在mac命令行运行:
当 cycript 运行后,就可以通过命令行运行objc代码:
这里用到了私有方法 recursivedescription ,会返回整个层级的描述。
到这,我们定位了主view对应的类,现在我们需要写点代码hook这个类。
通过 iosopendev 创建一个dylib工程,把主工程文件由.m 改为.mm,引入头文件 captainhook.h,把主工程文件.mm替换为以下内容:
这里做了几件事:
1、申明了cceaglview 类,并hook了方法 -(id)initwithframe:(struct cgrect)arg1 pixelformat:(id)arg2 depthformat:(unsigned int)arg3 preservebackbuffer:(_bool)arg4 sharegroup:(id)arg5 multisampling:(_bool)arg6 numberofsamples:(unsigned int)arg7 方法; 2、在补始化cceaglview 时,为该view添加子view以及pan手势响应;
后续我们就可以通过手势,呼出我们注入的页面了。
这里有个小技巧,在cycript下,输入 [[cceaglview alloc] init ,并按两下 tab 键,cycript会为你联想方法,你可以把方法列表里的方法全hook了(事实上我就是这么做的)
编写完代码后运行,这里注意保证生成的dylib的目标架构包含(armv7&arm64)。
在命令行运行:
如果你的应用包含多个架构支持,那么yololib会分别为你的每一个架构注入dylib。运行后如下:
看到上面的提示就表示注入完成了。注入的地址是 @executable_path/libjdytest.dylib ,因此最终要把dylib放到和app可执行文件相同的目录下。
重签名需要以下三个东西:
1、libjdytest.dylib,这个是我们已经注入到二进制的动态库; 2、配对的证书和.mobileprovision文件; 3、entitlements.plist文件;
1我们已经生成。2的获取方式如下:
[2]、创建一个新应用工程,在工程 build-setting 中,把 code signing 的profile和证书指定为开发者证书; [3]、运行起新工程,在product里点app右键,找到app的目录,在app目录下有.mobileprovision文件(第三步其实可以不必做,这么做是为了保险起见);
entitlement.pist 是用于申明应用权限的文件,会在签名中使用到,3的获取方式如下:
2、按如下模板生成 entitlement.plist;
以上文件准备好后,运行如下命令:
运行完后,myfinish.ipa就是我们的最终成果,用itools装到非越狱的iphone上吧。
这里签名需要注意以下两点:
1、签名的开发者证书,在钥匙串中的 属性->信任->使用此证书时 ,必须要选择<系统默认>否则签名不成功; 2、apple worldwide developer relations ca - g2证书同上;
验证是否正确答名成功使用以下命令:
myfinish.ipa 安装好后,后续重复以上步骤就可以在自己的面板上开发功能了。当然我们可以把上面的操作写成脚本,并保存为 fastpack.sh,方便快速的签名和打包,代码如下。
但这样远远不够,至少无法快速的进行断点调试。打开我们之前为了获取.mobileprofile文件创建的工程,添加新的target,并改为my(和目标可执行文件名相同即可)。
在my的build phases中添加run script,run script添加如下脚本:
这里做了个小trick,在xcode为新工程生成完app后,我们用自己签名过的app替换了它。所以最终被安装上手机的是被我们cracked的应用。
cmd+r运行工程试试,哈哈,大功告成。ps:游戏内的原生log也可以看哦。
附图:

另附上开发工具dylib的git地址,别忘了改run script中的地址信息哦!
<a href="[email protected]%3azhiqiang.bzq/my_cracked.git">梦幻西游开发工具:[email protected]:zhiqiang.bzq/my_cracked.git</a>
用以下命令初始化:
如有不正之处,欢迎指正~!^ ^