姨妈来咯签名校验分析详细教程

我认为此软件的最简单的过签方式就是改掉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:确实很麻烦,不如之前的方式简单,但是分析一次还是很有趣的。

标签

发表评论