libapk-protect.so的保护机制分析

最近碰到一款apk,只要修改了dex程序就会进不去,由此想到apk做了dex校验;通过查看application可知加载了libapk-protect.so

通过log可以看到有apk_protect字样

在IDA解析libapk-protect.so后搜索apk_protect,查找它的调用

可以看到这边就是程序退出了,再查找这个函数的调用就只有一处

往前跟踪v81

再往前跟踪v28

可以看到这里有三个判断,判断不一样的话就会进入if函数,这边我们只需要将if函数里赋值0改成赋值1,这样就不会进入退出的函数了;改完之后替换原来的so,发现游戏会一直在登录进不去;这边猜想是有对libapk-protect.so进行验证;

通过抓包发现和正常登陆的包很多不一样,原始app的初始化和登陆与修改后的都不一样;

通过网址等信息跟踪到java层发包的地方

可以看到这边用了xxtea进行加解密,可以hook这个类的openUrl打印参数和返回值

可以看到有发送classes_md5和manifest_md5值,这两个可以校验程序的所有dex和AndroidManifest.xml是否被修改过,把这两个值改成正确的(后面验证虽然这两个值不改也能进游戏,但毕竟是传到服务器的,最好改成正确的值);

这边还没找到so的验证在哪边,但猜想so的验证也要MD5计算,就在计算classes_md5的MD5的函数那边进行hook;

可以看到确实有libapk-protect.so进行MD5运算;

通过查找函数调用,找到校验libapk-protect.so的地方,通过比较MD5值,进行动态代理;

动态代理执行代码如下,MD5值比较和原来的不一样的话,就会进行if里面的操作,抓包看到的101也是下面进行赋值的;

至此,可以通过屏蔽这个so检验的类,也可以在MD5计算那边通过是否是so文件返回正确的MD5值,这样游戏就可以 进入啦;

小结:这个游戏通过so进行dex验证,通过dex进行so验证,两处都要修改,改其中一处都会出问题;还有apk会将dex和AndroidManifest.xml的MD5值传到服务器,虽然传错误的值不会出现问题,但指不定后面就会封你的号,所有将这两个MD5值也改成正确的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值