姨妈来咯签名校验分析详细教程
我认为此软件的最简单的过签方式就是改掉Java层判断,只改一处即可过签,可见我一年前的贴子)
今天写的方式反而麻烦一些。
一、目录:
此次要处理的校验:
1.native层的获取签名
2.软件入口校验
3.PMS代理校验
二 、详细:
1.native获取签名
IDA打开 libnative-interface.so;
找到java方法getSHA1Signature的native实现
F5转C代码
可以看到有两处获取了签名值。
第一处 signatures是最常用的,也是pms代理就能过掉的。
第二处是getApkContentsSigners,是API 28以上新增的方法,PMS过不掉。
至于用哪个获取签名,则有一处判断。
“v11<28“
此处是判断API是否大于28,也就是能否用新方法获取签名。
鉴于大规模改so我没那个能力,此时的想法是,把判断改成无条件,一律用signatus来获取签名,再配合pms代理,不就行了?
把这个改成”B“跳转,直接运行signatures即可
改完之后转C看看,果然只有这一种方式获取签名值了。
打包放回去,替换原来的libnative-interface.so即可。
2.入口校验
用mt的过签普通版,再替换修改好的so文件,本以为可以了,打开之后,直接闪退。
抓一下闪退日志。
问题发生在这个类的这个方法。进去看看。
转成Java后,一看就明白了。
这不是入口类校验吗?
入口字符串MD5加密后,和一个字符串进行对比。字符串应该是正确的类名的MD5加密。
此处把对比的结果改成1,即可绕过入口校验。
全局搜索一下,看看是否只有一处入口校验?
搜索那个特定的字符串即可,进去看看。
”a6ea472b4530e56b0f089fe0a887677a“
有三处入口检验,每个都进去,修改对比的结果为1.
此时,入口校验已经绕过。
3.PMS代理校验
再次打开,主页进去了,点击设置闪退。
查看日志。
进入发生闪退的类看看,转Java
研究过PMS代理的,一眼就能看出,这是校验自身是否被代理。
修改方式和入口校验类似。
让它和正确值的对比结果一样即可。
再全局搜索一下,有没有其他代理检测的地方。
有四个,每个都进去,和上面修改方式一样。
此时,pms代理校验已经绕过。
打开:
一切正常。
三、总结:
1.getApkContentsSigners,pms代理过不掉,通过修改,使其用能被pms代理的来获取签名。
2.入口校验
3.pms代理校验。
ps:确实很麻烦,不如之前的方式简单,但是分析一次还是很有趣的。
发表评论