工具
本次在PC端实现,但PC端的解包工具修改并未有Android端的管理器好用,故在模拟器完成
用到的工具有MT管理器、算法助手、jadx
正文开始
过root检测
先注明一下,修改前先过签名校验(MT管理器或者NP管理器都有提供这个一键功能),原因看文章就会知道了
(1)先试试直接打开APP,发现闪退(注明,设备已root)
(2)进算法助手拦截闪退看看,顺便定位闪退位置(这里提一下,定位是修改的基础,你只有定位到了修改点才能修改,所以掌握定位手法是逆向比较重要的一环)
(3)点右上角打开软件,发现卡住在启动界面
(4)进算法助手查看拦截日志,发现在启动类的initData(初始化数据)方法里面执行了finish
(5)接下来将安装包拉到jadx里面解包并搜索这个类名定位方法(MT类名搜索一样的,不过没有我这登录转不了Java)
(6)MT就转Java,我这jadx就直接看这个闪退的方法,发现很明显的有两个判断,这里有两个选择
1.把这两个if语句删除,让它直接跳过这两个finish从而进入软件,但是你不能保证后面在其他活动里面它再次调用的时候它还是false
2.将这里的if语句的判断方法赋值false,后面再检测也将会是false
(7)安卓ctrl键并点击第一个判断方法跳转查看
发现这里第一个判断方法是由两个方法组成,两个任意一个返回true将会返回true,所以要将这两个方法都返回false
所以,依旧是按住ctrl键跳转,发现是这个方法,通过阅读发现它循环这几个路径查看是否有su文件,这个是常见的root检测手段
所以第一个finish是用来检测root的
跳转另外一个方法,通过阅读代码可以判断依旧是root检测的代码
接下来用MT管理器进行修改
找到initData方法并找到第一条if判断的是v0,并且v0调用的方法是返回一个布尔值,故跳转这个方法
跳转到后发现确实和之前分析的一样,拥有两个返回布尔值的方法,也就是检测root的那两个方法,两个方法跳转并更改
跳转第一个方法
发现返回有两种可能,一个是v1,一个是v0,v1上面看是赋值0,所以只需要改v0这个返回结果为0就实现了都返回false了,不清楚这样改的意义的可以改完以后转Java查看一下
改成这样
然后跳转第二个方法
这个返回就更明显了,直接就是v0,直接将前面的v0赋值0就OK了
改成
这样这两个方法都返回false了,所以这个方法也会返回false,也就是过了root检测了,正常root闪退手机就能进去了
过虚拟机检测
(1)过完root检测我重新打包安装并打开该软件,发现依旧闪退,而且闪退位置依旧是那个位置,这不得不怀疑是第二个finish
(2)如之前操作并跳转第二个判断方法
发现有多个判断条件
让我们逐个查看
首先看第一个
该方法首先检查了一系列与模拟器相关的特征,例如设备的型号(Build.MODEL)、制造商(Build.MANUFACTURER)、硬件信息(Build.HARDWARE)、产品信息(Build.PRODUCT)、串号(Build.SERIAL)等。如果其中任何一个特征满足模拟器的特征,则将标记为模拟器环境,并且返回true,这个很明显是一个虚拟机判断的方法。
我们接着看下面几个方法
这个方法是用于检测特定条件的私有Java方法。
这个方法是用来检查设备是否支持计步器传感器。
这个方法是用于检查当前设备的 UI 模式是否为汽车模式。
这些方法通过大致判断都是用于检测你现在的环境是否是真机环境,不是真机环境将会闪退。
所以我们依旧进入MT管理器进行修改这些方法返回false值,实现过虚拟机检测
剩下一个布尔值的方法,直接跳转
将这几个都改成false
第一个方法有三处是返回的,将对应返回的寄存器赋值0就好
第二个方法照样是直接赋值0就好,将红框里的赋值0
第三个方法也是很明显有一个是返回true的地方,直接赋值0就好
第四个方法依旧是一样赋值就全部赋值完成了
(3)保存打包安装并打开,成功进入界面,不过就是广告有亿点点多
去广告
(1)首先,点开软件会有一个开屏广告,这里会有一个活动跳转,那广告肯定是在两个活动的衔接代码之前,这样就可以定位广告代码在哪个类里面
(2)打开MT管理器的活动记录器来记录软件活动记录,并打开软件进行活动记录,发现一个很明显的广告标识
(3)在jadx里面搜索这个类名并分析一下
点进去发现有几个可疑的字眼
点击这些可疑字眼标记颜色看看在这个类哪里使用了,发现这个广告ID是通过一个类获取的,并且是在这个initData(初始化数据)的方法里面,所以可以尝试不给正确的广告ID实现广告未初始化达到去广告的效果
(4)进入MT管理器来修改ID来尝试是否有效
这里发现还有一个方法,返回广告资源ID的,直接给他也赋值-1
(5)保存一下退出试试发现启动页广告和软件内广告都没有了,但是开始播放视频的时候却是要求你看广告
(6)这里有一个推广机制,通过推广就能免除这个看广告的过程,所以可以通过这个突破点来实现去广告
(7)搜索推广这个字符串
经过我逐个排查,选择最后一个发现有一个免广告至...,并且这里有个明显的getIs_vip方法,就可以判断这里是关键位置了
这里赋值0将显示没有免广告权限,并且下面等于1将传一个true方法过去,所以修改大致就是将这个getIs_vip赋值1,我们去MT管理器更改一下测试一下结果
果然没有那个看广告才能看视频的限制了,但是视频播放不出来,这是签名校验导致的,这是试出来的结果,所以我先注明了先过签名校验,去广告部分到此告一段落了
番外 去除V*N检测
(1)jadx直接搜索这个关键字,在资源处搜索到一处资源文件,那么弹出的必定用到这个xml文件
(2)直接搜索这个xml文件的文件名
这个方法挺眼熟,在一开始finish的时候就碰到过,查看其调用发现还真的是在那里
那就如之前检测ROOT和虚拟机的方法一般改这个的判断结果为false就好
跳转过去,分析一下语句都是VN检测的,那就修改这几处为false就能实现过VN检测了
(2)去MT管理器改一下,尝试一下是否成功
完美进入
图省事的这里写有现成的Hook模块
点击这里