本文为看雪论坛精华文章
看雪论坛作者ID:Night_elf
所谓免越狱Hook就是在iOS设备未进行越狱操作的前提下,对APP进行Hook操作,很久之前就有听说过,昨天花了一天时间整环境外加测试,然后又顺带修改了一个比较让人烦恼的游戏,Unity3D破解其实很早就搞过了,这次借着免越狱Hook一起分享给大家。
工欲善其事必先利其器
这个不用说了,目标APP安装
AloneMonkey大佬的作品,Hook插件编写神器,大佬还在其中集成了iOSOpenDev,同时也是非越狱插件开发集成的神器。
AloneMonkey大佬的又一力作,砸壳神器,iOS逆向一年多了,目前为止无往不利。
Unity3D游戏分析利器,Unity转换成IL2CPP的符号表提取工具,目前只支持Windows平台,最终生成的符号表脚本导入IDA用。
用于重新打包签名ipa并安装到非越狱iPhone上,非常强大。如果不想写Hook插件,也可以采取修改汇编的方式重新打包安装IPA。
各种类型汇编代码生成机器码的工具,方便静态修改可执行文件,重打包签名安装。
抽丝剥茧
砸壳
iproxy 2222 22
Mac-mini:frida-ios-dump-master-2 $ frida-ps -U
PID Name
---- -------------------------------------------------
2911 App Store
2947 信息
2980 密室逃脱绝境系列11游乐园
2936 微信
2972 设置
2949 邮件
2814 AppleIDAuthAgent
1412 AssetCacheLocatorService
Mac-mini:frida-ios-dump-master-2 $ python2 dump.py 密室逃脱绝境系列11游乐园
Start the target app 密室逃脱绝境系列11游乐园
Dumping 密室逃脱绝境系列11游乐园 to /var/folders/m7/g2v2sbfd19g9kg7sk20n639h0000gn/T
start dump /var/containers/Bundle/Application/617F2079-957E-4005-92B8-7573FE651A8E/app1.app/app1
app1.fid: 100%|███████████████████████████████████████████████████████████████| 35.7M/35.7M [00:07<00:00, 5.03MB/s]
InfoPlist.strings: 213MB [00:44, 4.97MB/s]
0.00B [00:00, ?B/s]Generating "密室逃脱绝境系列11游乐园.ipa"
Unity3D符号表恢复
将script.py导入IDA,File——>Script File——>选择script.py
定位修改点
直捣黄龙
这里介绍两种修改方式,一种是通过iOS越狱Hook来实现对关键函数的Hook修改,主要依赖于MonkeyDev,游戏修改了之后肯定不会天天抱着一个越狱手机来玩,所以这里准备的另一种种修改方式是针对未越狱手机的,通过直接修改汇编,重打包签名ipa安装到手机上,主要依赖于IPAPatch。
iOS越狱修改
注意事项
插件编写
具体hook代码如下:
#import <substrate.h>
#import <dlfcn.h>
#import <mach-o/dyld.h>
// 用于保存原函数指针
int (*old_get_Gold)();
// 新函数
int new_get_Gold()
{
return 9999;
}
%ctor{
// 执行hook
unsigned long Gold = _dyld_get_image_vmaddr_slide(0) + 0x1011aa060;
MSHookFunction((void *)Gold, (void *)&new_get_Gold, (void **)&old_get_Gold);
}
iOS未越狱修改
修改汇编
首先查看get_Gold函数返回位置汇编,返回时传入X1进行经过函数转换为int返回,那么可以将9999传入X0,然后直接ret即可。 通过汇编指令生成工具生成我们需要的机器码。 ret的机器码为C0 03 5F D6。最后修改对应地址的机器码即可:
重打包签名
将修改后的app1可执行文件重新放回原处,将解压后的ipa包重新压缩,最终改名为app.ipa,将该文件放到IPAPatch的Assets目录下,替换掉原本的app.ipa文件。 最终安装到未越狱手机上效果如下:
隔山打牛
iOS免越狱hook主要是通过iosOpenDev生成dylib注入目标APP实现Hook,iosOpenDev是apple官方支持的插件生成工具,可直接由Xcode生成。可生成CaptainHookTweak、Logos Tweak两种dylib。在注入dylib之后对APP进行重打包签名。 我们接下来用到的MonKeyDev是对原有iOSOpenDev的升级,更加方便于非越狱插件的编写。 新建项目&编译
MonKeyDev安装完成之后,打开Xcode新建项目,滑动到最下方可以看到MonKeyDev提供的模块,选择第一个。 新建之后需要配置General——>Signing,设置自己的AppleID后续用于签名。 接下来将砸壳后的ipa或ipa解压后的xxx.app放入Your_Project/TargetApp目录下,编译整个项目,最终安装到未越狱手机上信任之后正常运行表明签名成功。
寻找注入点Hook
虽然最终没能成功实现免越狱hook修改游戏,但是我们还是拿它下手 首先通过Class-dump将头文件dump下来,在其中寻找一个又代表性的函数进行Hook,最终决定hook UnityAppController这个类中的init函数,在他调用的时候弹出弹框。 在your_projectDylib.xm中Hook代码如下: #import <substrate.h>
#import <sys/sysctl.h>
#import <UIKit/UIKit.h>
%hook UnityAppController
// Hooking an instance method with an argument.
- (void)init{
%orig;
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hook成功" message:nil delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//[alert release];
}
%end
运行程序将ipa装到未越狱手机上,游戏打开之后会有弹框出现:
总结
本来准备写一篇免越狱Hook结合Unity3D游戏修改为一体的文章,但是但是在Hook c函数的过程中遇到了难题,目前还没有找到未越狱手机上inlinhook的好方案,只能将两者分开来写,之后找到好的方案之后再进行修改为大家分享。
- End -
看雪ID:Night_elf
https://bbs.pediy.com/user-home-776128.htm
*本文由看雪论坛 Night_elf 原创,转载请注明来自看雪社区。
# 往期推荐
公众号ID:ikanxue 官方微博:看雪安全 商务合作:[email protected]
球分享
球点赞
球在看
点击“阅读原文”,了解更多!
本文始发于微信公众号(看雪学院):Unity3D游戏修改&iOS免越狱hook
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论