某盟 Android SDK 分析

发布于 2020-08-14  11939 次阅读


基本原理

so 的加载部分,加了个壳,然后加载内存加载,然后Ollvm混淆,还加了一点字符串加密

特征上报

获取设备地址,比如MAC地址、IMEI、IMSI

比较厉害的是,他做了一个直接在Linux Api上获取MAC地址的辅助函数,

大概就是创建一个Socket,然后通过ioctl获取MAC地址(直接钩住ioctl别让他返回个假地址,或者直接禁止获取就行了)

不过,经过测试,这个函数只能针对Android 6及以下版本,Android 6以上的获取不了,没什么用

辅助特征

辅助特征,就是不直接影响ID的生成,但是辅助它判断是否为同一个设备

电池特征

还有,一些Android ID、DNS之类的特征(主要就是调用Java API来实现的)

安全环境监测

这个是重点,无论你特征去除伪装做得多好,只要它找到模拟器特征,基本上就直接否了

首先是最基本的,也是最常用的两个特征:

1.  "ro.secure":"1",

2.  "ro.debuggable":"1",

然后是各种文件判断,和特征判断

判断是否有roo权限(有的话,会判断为高危设备):

破解方法

直接去掉上述特征,然后伪造个新特征,基本可以过掉。但是需要注意的是,一定要把模拟器特征去掉,最好是用真机,不断去修改特征就行了。它貌似判断逻辑是云端的,所以它后面应该是有一个比较全面的特征库。就是收集各种手机、和模拟器的特征,然后进行深度比对,如果发现信息不正常,基本上就否掉了。至于怎么过特征。我给提出以下建议:

  1.尽量去复制真机的特征(像ro.build.*ro.device.*这类的)

  2.尽量隐藏模拟器特征

  3.用户行为特征去除(这个的话,直接写个脚本去模拟就行了)


为了坚持而坚持