首页
社区
课程
招聘
[开源发布]一劳永逸,屏蔽所有建设银行APP越狱检测
发表于: 2021-11-25 15:07 26786

[开源发布]一劳永逸,屏蔽所有建设银行APP越狱检测

2021-11-25 15:07
26786


我的插件源:https://repo.snailovet.com
欢迎添加,关注【蜗牛iOS】公众号,交流提需求
图床不知道为什么挂了,可以移步到公众号文章 https://mp.weixin.qq.com/s/vPLOnLCiaeNZ6lKWN-HeFA

需求背景

作为多年果粉,爱折腾青年,手中iPhone一直都是越狱状态,但总有些APP本身质量不高,但检测是否越狱的挺勤奋,比如本文主角APP -- 建设银行。

你说检测就检测吧,您给个弹窗,用户点击“确定”后APP就缩小退出,也体验太差了。

不能忍~

需求目标

逆向建设银行APP,跳过检测越狱弹窗,让建设APP正常使用。

尝试思路

思路一

既然能进来主界面,并且弹窗能够停留,那么打开FelxAll工具查看“确定”按钮为十六进制内存地址为0x15092F5C0

使用Cycript查看,按钮最终执行方法为[CCBBaseAlertView buttonClick],这个方法看起来,并无特殊可言。换思路~

思路二

既然出现弹窗,点击“确定”就被程序主动退出,那么是不是只要把【确定】后所执行的方法重写/Hook掉就可以了?

分析过程

静态分析

打开IDA,静态分析建设银行的可执行文件的汇编代码。在字符串搜索框下搜索“Root设置”。

查看字符串地址

按下键盘X,查看在汇编代码中引用此字符串的代码内存地址。

找到如下,地址sub_1025B194代码块查看使用了字符串,如下图截图所示。

那么怎么看,“确定”按钮背后的执行功能函数呢? 一般在iOS中按钮的文字赋值和功能函数的添加是依次进行的。在下图我们看到的代码块sub_102582B0

进入sub_10258B2B0,查看代码,可以看到其中执行了[xxxx exitApp] 方法,那么xxx是哪个类的哪个实例对象呢?

不断向上查看调用栈,可以看到最终调用exitApp的为AppDelegate实例对象,即[AppDelegate exitApp] 。符合iOS开发的思路:

一般在APP加载完成后在,[AppDelegate application:didFinishLaunchingWithOptions:]中执行其他功能,如启动后的越狱检测、弹窗显示。

代码初尝

%hook AppDelegate- (void)exitApp {NSLog(@"如果弹窗展示了,点击了确定即可,并不会退出APP,继续使用");}%end

经过编译为越狱插件,打开建设银行APP-依然显示弹窗-点击“确定”,不会被强制执行退出APP可以继续使用。

但是每次进入建设银行APP,都需要看到“烦人的弹窗和点击”这不符合我们对于完美的追求。

继续分析

在前面查看字符串的内存引用地址,我们看到了弹窗的实现逻辑[xxx showWithTitle: message:  btnTitleArray: alertType: callback:]

在IDA中功能函数搜索框中,搜索如下,可以看到有两个类使用此功能函数作为“弹窗展示”的逻辑实现。

既然使用此功能函数的代码不多,那我们就可以开始HOOK重写弹窗展示逻辑。

代码实现

%hook AppDelegate
- (void)exitApp {
NSLog(@"如果弹窗展示了,点击了确定即可,并不会退出APP,继续使用");
}
%end
%hook CCB_5_BaseCellViewController
- (void)showWithTitle:(id)arg1 message:(id)arg2 btnTitleArray:(id)arg3 alertType:(int)arg4 callback:(id)arg5 {
NSLog(@"CCB_5_BaseCellViewController message为:%@", arg2);
if ([arg2 containsString:@"Root"] || [arg2 containsString:@"越狱"]) {
NSLog(@"不展示[手机已越狱提示弹窗]");
} else {
NSLog(@"执行原逻辑");
%orig;
}
}
%end
%hook CCBViewController
- (void)showWithTitle:(id)arg1 message:(id)arg2 btnTitleArray:(id)arg3 alertType:(int)arg4 callback:(id)arg5 {
NSLog(@"CCBViewController message为:%@", arg2);
if ([arg2 containsString:@"Root"] || [arg2 containsString:@"越狱"]) {
NSLog(@"不展示[手机已越狱提示弹窗]");
} else {
NSLog(@"执行原逻辑");
%orig;
}
}
%end
%ctor {
NSLog(@"建设银行已注入");
}

源代码

https://github.com/SnailTheDev/BypassCCBank



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2021-11-25 17:18 被蜗牛iOS编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 154
活跃值: (3786)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
图片好像挂了。。。
2021-11-25 16:01
0
雪    币: 22
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
TUGOhost 图片好像挂了。。。
头疼 还真是挂了
2021-11-25 17:07
0
雪    币: 4112
活跃值: (5812)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
4
一会这个帖子就会消失了
2021-11-26 11:29
0
雪    币: 5
活跃值: (369)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哈哈哈 这可不叫屏蔽监测 这叫屏蔽弹窗
掩耳盗铃了属于是
2021-12-2 17:18
1
游客
登录 | 注册 方可回帖
返回
//