前言
之前在火线zone看到利用app历史版本来进行app的逆向分析,可以降低一下分析难度,比较老版本的安全防护做的不是很到位。正好最近有一个app,尝试利用一下老版本进行分析登录签名,没想到效果非常好。
算法分析
对于最新版本的app进行了抓取流量包的操作,对于登录包,发现校验非常多,而且也没有明显的校验文本。
并且该app加固比较全面,采用常规分析手法,需要先脱壳,然后过各种防护。比较麻烦,因此我就尝试了一下利用他的历史版本的方法。
该app最新版为2021年7月发布。我下载的历史版本为2020年6月份版本,没有加壳。首先也是对历史版本的app进行抓包,发现登录包参数十分简单明了。
sign参数,和包名以及密码类型(此处我采用的是验证码登录),还有时间戳。
之后对app进行反编译一下,看一下java层代码。
搜索siganture后发现一处比较符合条件的地方。
跟进去看一下加密方式。
显然这是HmacSHA1标准加密,其实在最新版也是采用这个,但是写进了so层,这个以后再说。
那加密的参数也就是显而易见。是由pGrantType+clientID+authorisation.source + timestamp拼接而成,而clientSecret就是密钥。
此时测试一下查看结果是否正确。
结果正确。
在这之后,我对于新版也分析了一下。发现密钥没有改变,字符串拼接也没有改变。。。
其中某个校验采用的是so层标准hmacsha1加密,密钥是
dd49a835-56e7-4a0f-95b5-efd51ea5397f
setImmediate(function() {
Java.perform(function() {
var targetClass='com.xxx.android.cloudid.CloudIDHelper';
var methodName='encrypt';
var gclass = Java.use(targetClass);
gclass[methodName].overload('java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String','java.lang.String').implementation = function(arg0,arg1,arg2,arg3,arg4,arg5,arg6) {
console.log('n[Hook encrypt(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)]'+'ntarg0 = '+arg0+'ntarg1 = '+arg1+'ntarg2 = '+arg2+'ntarg3 = '+arg3+'ntarg4 = '+arg4+'ntarg5 = '+arg5+'ntarg6 = '+arg6);
var i=thismethodName;
console.log('treturn '+i);
return i;
}
})
})
总结
该app也算是一个比较大众的app,从这里可以看出,他们在一步步的加固防御方式做的越来越出色,然而对于原本的关键数据还是没有做一些处理。这也就给了一些可乘之机。这对开发者来说是一个需要注意的点,对于分析人员来说更是一个需要注意的分析点。
【火线短视频精选】
【周度激励】2021.8.2 ~ 2021.8.8公告
【相关精选文章】
火线Zone是[火线安全平台]运营的封闭式社区,社区成员必须在[火线安全平台]提交有效漏洞才能申请免费加入,符合要求的白帽子可联系[火线小助手]加入。
我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!
欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区!
本文始发于微信公众号(火线Zone):巧用APP历史版本对APP登录signature分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论