随着近几年网络犯罪打击力度不断加大,目前违法APP也愈发的隐蔽和难以分析。检测ROOT或模拟器环境是这类APP常见的反分析手段之一,雷电APP智能分析中也内置了绕过ROOT、模拟器检测功能。
但笔者最近遇到一个APP无法绕过,本文主要介绍下整个处理分析过程,希望给大家带来启发。
某日,同事联系到我,说有一个APP使用了绕过ROOT、模拟器功能,仍然是无效的。主要表现如下:模拟器中启动APP,提示“不支持在模拟器进行操作”,然后闪退。脚本启动后,还是自动闪退,可能需要人工分析下。
1.分析过程
遇到这种情况,说明在这个APP中,代码实现了一种新的模拟器环境检测方法。我们先使用反编译功能,查看下APK源码,进行初步分析。这次这个APP比较方便,没有进行加固,我们可以直接进行反编译。
通常我们要处理这种问题,可以先进行关键字搜索,通过特定的关键字,找到对应的代码。
例如:我们可以搜索APP中的提示”不支持在模拟器进行操作“,搜不到也可搜索”emulator”、“simulator”、“root”、“/su“这类关键字。
本次比较幸运,我们直接搜索”模拟器“,就找到了代码中的相关内容。
双击搜索结果,找到搜索目标类中对应的代码,通过分析代码逻辑,我们可以发现 "z5"变量是模拟器环境检测结果的标志。当"z5"为true时,环境检测不通过。我们初步推断,当”z5“为false时,是可以通过的。
接着向上进行代码追溯,“z5”为false的条件是,“i3”变量的值需要小于等于2。
那继续追溯“i3”变量,如下图所示,可以发现,“i3”初始值为0或1,并且有多个让“i3”自增的条件
(“i9”、“aVar”、“c6”)判断。结合本文开始的模拟器检测现象,初步判断这些条件应该是环境监测的指标。
后续目标通过上面的分析,就比较清晰了,只需要让这部分环境检测代码不运行即可。继续追溯“i9”、“aVar”、“c6”,发现“z6”变量为模拟器环境检测代码的标志变量。
通过“z6”的赋值代码,可以初步推断是,正常启动APP时进行检测,使用xposed调试时不进行检测。
经过上面的一系列分析,我们已经确定了环境检测的代码块,对应的判断条件就是“splashActivity.configBean.j()”这个方法。
通过快捷键Ctrl+鼠标左击,进度对应函数实现。可以发现该函数只进行了布尔值的返回。这就比较容易了,我们可以hook这个函数,返回false即可绕过模拟器环境检测。
2. 自动脚本生成
步骤1 通过雷电APP智能分析——Frida脚本功能,我们可以根据类名、方法明选中hook的方法后,一键生成脚本。
步骤2 打开生成的脚本,搜索“overload.implementation”,定位到hook的函数体位置,function函数就是目标函数。
步骤3 删除不需要的内容,直接返回false,保存脚本。
步骤4 验证修改后的脚本,运行后,可以发现APP能够正常运行,没有出现模拟器环境检测提示和闪退现象。
当然我们也可以手动编写脚本,通过导入脚本运行的方式,同样可以满足需求。
3. 使用技巧
我们在分析APP时,经常需要重新启动APP,如何让我们写的脚本每次都能自动运行。我们可以通过全局脚本的设置,将脚本作为全局脚本自动执行。
接下来我们就可以顺利地对该APP进行分析了。
免责申明:本公众号所发布的文章及工具代码等仅限交流学习,本公众号不承担任何责任!如有侵权,请告知我们立即删除。
扫码回复“加群”加入交流群