前言

我一直习惯用越狱版的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没有提示非安全设备了。


生きて生きて生きて生きて生きて。