前言
我一直习惯用越狱版的iOS以满足一些日常app的hack需求,比如:youtueb去广告&解锁后台播放、去除app启动广告、真后台挂机等等。但是系统越狱后也会造成一定的安全风险,部分app会阻止其越狱环境下的运行,绕过这些检测的行为也叫作:jailbreak bypass。
这里就以某银行的app为例,提供一个如何查找关键函数、以及hook它的基本思路。
原料
- Hopper Disassembler(arm二进制分析工具)
- Theos(hook脚手架)
查找关键函数
i. 按照app中的风险提示词,打开Hopper Disassembler查找二进制执行文件的字符串

ii. 查找到字符串引用对应的虚拟地址为「0000000103e264d8」

iii. 右键「0000000103e264d8」,以查找这个虚拟地址的相关引用地址

可以看到查找到一个引用:

103fc5620 dq ___CFConstantStringClassReference, 0x7d0, 0x103e264d8, 0xc ; u"检测到您的设备非安全设备"
从如上的汇编代码来看,常量字符串类 CFConstantStringClass 中arm指令 dq 完成该字符串的内存分配。
iv. 找到关键引用函数,使用hope自带的反汇编功能查看伪代码

从伪代码中看出是 CIBDeviceSaveTool 这个类的静态方法 +(void)checkCibSaveEmv 引用了这个字符串。确定好关键函数后就可以写hook来跳过这个函数执行了。
hook
代码很简单
// See http://iphonedevwiki.net/index.php/Logos
#if TARGET_OS_SIMULATOR
#error Do not support the simulator, please use the real iPhone Device.
#endif
#import <UIKit/UIKit.h>
%hook CIBDeviceSaveTool
+(void)checkCibSaveEmv {
// 什么都不做,跳过函数逻辑
NSLog(@"checkCibSaveEmv 被 Hook");
return;
}
%end
最终效果

hook成功,进入app没有提示非安全设备了。
Comments | NOTHING (这是个静态化页面,评论后要等CDN刷新啦~)