声明
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!由于本人水平有限,如有理解或者描述不准确的地方,还望各位大佬指教!!
抓包分析
今天我们要分析的app是美图秀秀。样本下载 2020美图秀秀v9.0.8.0老旧历史版本安装包官方免费下载_豌豆荚
第一步进行抓包分析。通过抓包发现sig是加密的,而这个sig是32位的应该经过了MD5加密。
参数分析
直接搜sig,发现很多不好分析。我们搜sigTime,直接定位到这个函数,sig是a2[0]。
我们跟进a函数
然后继续跟进generatorSig函数。
继续跟进nativeGeneratorSig函数,发现是so层的,so文件是librelease_sig.so。
打开ida分析。是静态注册的函数直接在导出函数里搜索。
继续跟进这个函数。
继续跟进MD5_Calculate函数。
跟进MD5_Init函数
可以发现是很标准的四个初始化链接向量。应该是没有经过魔改的md5。我们就不继续跟进了。
hook动态分析
先hook java层函数。
function main() {
Java.perform(function () {
var SigEntity = Java.use("com.meitu.secret.SigEntity");
if (SigEntity != null){
SigEntity.generatorSig.overload('java.lang.String', '[Ljava.lang.String;', 'java.lang.String', 'java.lang.Object').implementation = function(arg1, arg2, arg3, arg4){
console.log("arg1-->", arg1);
console.log("arg2-->", arg2);
console.log("arg3-->", arg3);
console.log("arg4-->", arg4);
var result = this.generatorSig(arg1, arg2, arg3, arg4);
console.log('result-->', result.sig.value);
return result;
}
}
})
}
setImmediate(main)
这两个参数是固定的。
hook so层函数
var soAddress = Module.findBaseAddress("librelease_sig.so");
console.log('soAddress: ', soAddress);
var sub_4A68 = soAddress.add(0x4A68 + 1);
console.log('sub_4A68: ', sub_4A68);
Interceptor.attach(sub_4A68, {
onEnter: function (args) {
console.log('\nmd5_update onEnter r0: ', hexdump(args[0], {length: 32, header: false}));
console.log('\nmd5_update onEnter r1: ', hexdump(args[1], {length: args[2].toInt32(), header: false}));
console.log('\nmd5_update onEnter r2: ', args[2].toInt32());
console.log('\nmd5_update onEnter r3: ', args[3]);
},
onLeave: function (retval) {
}
})
这是我们抓包返回的sig
发现每两个字符的顺序是相反的。 emm,应该是改了某个数值。详细的我就不跟了。但我们可以取巧直接换顺序。
各位大佬觉得本文写的不错的话,可以一键四连哦。