天天看点

iOS逆向工程——非越狱调试

本文以破解游戏梦幻西游为例,逐步讲解整个调试流程。

完成整个过程需要准备以下几个必要工具:

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也可以看哦。

附图:

iOS逆向工程——非越狱调试
iOS逆向工程——非越狱调试
iOS逆向工程——非越狱调试

另附上开发工具dylib的git地址,别忘了改run script中的地址信息哦!

<a href="[email protected]%3azhiqiang.bzq/my_cracked.git">梦幻西游开发工具:[email protected]:zhiqiang.bzq/my_cracked.git</a>

用以下命令初始化:

如有不正之处,欢迎指正~!^ ^