汇佳网为您带来《苹果版本查询(苹果ios历史版本)》,本文围绕苹果版本查询展开分析,讲述了关于苹果版本查询相关的内容,希望您能在本文中获取到有用的信息!
前言 之前在火线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-efd51ea5397fsetImmediate(function() {`Java.perform(function() {`var target ;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)]’+’\n\targ0 = ‘+arg0+’\n\targ1 = ‘+arg1+’\n\targ2 = ‘+arg2+’\n\targ3 = ‘+arg3+’\n\targ4 = ‘+arg4+’\n\targ5 = ‘+arg5+’\n\targ6 = ‘+arg6);var i=this[methodName](https://zone.huoxian.cn/d/385-appappsignature/arg0,arg1,arg2,arg3,arg4,arg5,arg6);console.log(‘\treturn ‘+i);return i;})
总结 该app也算是一个比较大众的app,从这里可以看出,他们在一步步的加固防御方式做的越来越出色,然而对于原本的关键数据还是没有做一些处理。这也就给了一些可乘之机。这对开发者来说是一个需要注意的点,对于分析人员来说更是一个需要注意的分析点。
《苹果版本查询(苹果ios历史版本)》来自网络,本文围绕苹果版本查询的观点不代表本网站,仅作参考。