iOS HOOK 注入与重签名
来源:互联网 发布:查看数据库字符集 编辑:程序博客网 时间:2024/05/13 03:55
起因是在虾神的公众号上看到一篇文章 《Pokemon Go 锁区破解》,正好周围几个小伙伴正在玩这游戏,便仔细研究了下所谓的破解锁区。这次锁区其实是 GPS 锁区,游戏开发商为了缩小初始运营范围,在中国范围内都无法正常游戏,也就是服务端通过客户端发送的定位位置数据来判断是否让该玩家继续游戏。文章中介绍的原理就是利用 OC Runtime Method Swizzling 对原应用进行重写 CLLocation 的 coordinate 方法返回自己想要的经纬度信息,以达到欺骗服务端进行游戏,然后进行重签名打包。最让人激动的是最终的应用可以在非越狱的设备上运行,于是已阻止不了向前探索的脚步。
游戏作弊是不支持的,但是技术研究可以有!
流程
大致流程如下,后面会详细讲解每一步:
- 脱壳:拿到解密后的 .ipa
- 注入:对原应用修改和注入
- 重签名:用自己的证书签名
- 打包:压缩成 .ipa 进行安装
脱壳
由于手里没有越狱机子,也没有进行脱壳试验,按 [Urinx/iOSAppHook] 中提到的方法直接从 xx助手 市场里下载越狱应用可用。如果自己有越狱设备的话可以用 dumpdecrypted 进行砸壳。
注入
如果是拿到 .ipa,进行解压即可找到 Payload 文件夹,可安装 iOSOpenDev 来创建工程,使用 CaptainHook 轻松方便写 Hook 代码,iOSOpenDev 中已经集成了 CaptainHook ,具体相关代码可以参考 [PokemonHook] 。
生成动态库(.dylib)后使用 yololib 工具进行注入,不知为何使用 [KJCracks/yololib] Release 中的 yololib-Mac 最终会在设备上闪退,使用 Urinx/iOSAppHook 则没有问题,一条命令对 .app 中的二进制进行 .dylib 注入,再把注入的 .dylib 拖到目录里即可。注入成功后可以用 MachOView 程序查看整个 MachO 文件的结构,便可看到注入的 dylib 会在 Load Commands 区段中。
yololib xxx.app/xxx LocationFaker.dylib
重签名
重签名也是很重要的一个步骤,签名错误或者失败都会导致应用无法安装使用。我比较喜欢用图形化界面的 iOS App Signer 来重签名,自动加载出本机的证书和 PP 文件,相当方便;当然也有命令行工具,比如 Urinx/iOSAppHook 中的 AppResign 或者 Fastlane sign ,前提还是一样需要把设备的 UDID 加进 Provisioning Profile 中,一般来说 Bundle identifier 不需要改变即可,也有应用内做了相关检测手段导致重签名或者更改 Bundle identifier 后无法使用的情况,那就需要更多其他的手段进行反攻了。
打包
对 Payload 文件夹右键压缩,改名 xx.ipa 即可,推荐用 Xcode (Window->Device) 安装,失败还有错误信息可看。
另外在这里推荐一个 Quick Look 插件用来快速预览 .mobileprovis 和 .ipa 的证书、签名、设备等信息,对着文件按下空格就能看到非常方便。 chockenberry/Provisioning
参考
- Urinx/iOSAppHook
- iOS冰与火之歌番外篇 - 在非越狱手机上进行App Hook
- iosOpenDev 安装教程
推荐
- iOSRE - iOS逆向论坛,学习逆向有很多干货
- iOS HOOK 注入与重签名
- [个人收藏]iOS HOOK 注入与重签名
- iOS APP重签名
- ios重签名教程
- iOS重签名探索
- iOS Hacker 重签名实现无需越狱注入动态库 dylib
- ipa重签名2(.dylib注入)
- iOS ipa重签名 、resign
- 注入进程 远程线程注入 与 hook注入
- Windows Dll注入与API HOOK
- HOOK注入!
- 注入HOOK
- 关于iOS APP 重签名杂谈
- iOS APP反重签名技术详解
- IOS 打包、安装、重签名 .app & .ipa
- iOS App企业证书重签名
- iOS证书及ipa包重签名
- iOS动态库重签名步骤
- 【BZOJ 2002】【HNOI 2010】弹飞绵羊
- 泛型[0]为什么使用泛型
- sdutacm-数据结构实验之求二叉树后序遍历和层次遍历
- iframe自适应子页面高度
- UE4蓝图案例:媒体播放器的开关
- iOS HOOK 注入与重签名
- 数据库存储过程与存储函数相关(MYSQL)
- Linux学习日志(4)
- #01 ASP.NET内置对象属性(课堂学习部分)
- socket--c实现
- 接口和抽象类的区别
- 类似qq发说说的查看全文和收起
- 文章标题
- callablestatement调用存储过程