〖更新〗share 三方微博客户端 so过签名校验 NOP空指令的使用

早上有人反馈说之前我发的教程已经失效了,我去看了一下应该是更新了验证机制。最新版3.5.9的签名校验藏在so里面,总的来说不算难,丢几个NOP下去签名就报废了。

说实话这个价格不算贵,建议有能力的还是支持正版。我只用国际版微博,三方客户端用不习惯,不要问我有没有成品。

准备工具:
1、DDMS
2、IDA64
3、官方安装包(现在以64位处理器为例)

更新以后基本上一键拦截签名的工具都已经失效了,至少我没发现有工具可以一键FuckSign。作者可以考虑加入so混淆或者修改逻辑来加强安全性,我见过不少so改跳转或者改nop是没用的,而且还要自己写复制汇编再反编再查看16进制代码才能改。

首先重签名apk,安装后点击登录,直接就报错闪退了,如上图。签名校验关键字查找有getSignature、Signatures(用的比较多)、getPackageName、getPackageInfo、PackageManager等,可以发现这款app的签名校验在“libjiagu.so”这个文件里面,而且居然用这个名字伪装3某0加固骗骗小朋友。

把libjiagu.so丢进IDA,先看一下它的输出表。红色箭头是要改的地方

顺便说一下,dex里面可以找见加载的代码,他有个方法check,虽然代码放在了so里面加载,但是可以发现这个方法的数值类型是Z,所以他返回的值不是0就是1,如果有问题过后再让方法无条件返回就行了,现在先不动。

比如:
.method public static check()Z
    .locals 1
   
    const/4 v0, 0x1
   
    return v0
.end method复制代码双击进入Java_com_hengye_share_module_other_SAUtils_name,经过测试必须要让它走左边,如下图:

关键跳转:
TBZ W0, #0, loc_16A8:判断W0(X0)的值,为0时跳转到16A8。

要让他走左边就不能让他发生跳转,这时候就需要用到神器“NOP”,NOP的意思和PC一样,空指令,没有任何操作,可以让代码继续往下走。

所以TBZ直接填充NOP即可,如下图。

修改后好像不太美观,右上角多了个垃圾玩意儿,这时可以用MOV R0 ,R0(00 00 A0 E1)指令来去掉。这样一来就舒服多了

把修改好的so放进apk里面测试一下,可以正常进入登录界面了 然而输入账号后……

输出日志居然有个hehe,看来被检测到了……找了找源头,发出嘲笑的是libwbutil.so这个文件,刚开始我去折腾这个文件,后来发现并没有用 吐了。结果却是libjiagu.so没阉割干净。


注意到刚开始查看的输出表,有个【Java_com_hengye_share_module_other_SAUtils_secP】,双击进去。

注意上图红色箭头的2个地方,全部NOP掉。不能让他走绿线,全部走红线。改好后测试一下效果。

已经成功登入微博账号了,但又出现验证问题,看来so有很多层的校验。

这时回到刚开始我说的那个方法check,给他赋值1,不让so输出数值就行了。

签名校验已报废

总结:过签名关键地方是TBZ,只要不让他跳转即可。其它so虽然我也发现有获取签名值的行为,但是未见异常,就没去分析到底用来做什么的。

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
管埋员的头像-小北的自留地

昵称

取消
昵称