前言
今天来分析一下某生鲜超市app的接口加密参数,主要目的是探索学习app接口的加解密机制。仅供学习,禁止用作其他用途。
由抓包可知,参数paramsMD5就是我们要分析的内容了,显而易见,这个加密名称和实际值相差较大,和MD5没有明显关系,猜测可能是md5在进行base64或者RSA等等的加密
反编译
该app经过梆b企业版加壳,脱壳后,拉到jadx分析下,具体分析过程就不说了,直接给出frida hook代码
"""
Java.perform(function() {
let HelperJNI = Java.use("com.fort.andjni.JniLib");
HelperJNI.cL.implementation = function (obj) {console.log('n0 is called' + ', ' + 'obj: ' + obj);let ret = this.cL(obj);console.log('n0 ret value is ' + ret);return ret;
};
})
"""
bb反调试
1.尝试hook pthread_create 定位线程 通过杀线程方法干掉反调试
function hook_pthread_create(){var pthread_create_addr = Module.findExportByName("libc.so", "pthread_create");
console.log("pthread_create_addr: ", pthread_create_addr);
Interceptor.attach(pthread_create_addr,{onEnter:function(args){console.log(args[2], Process.findModuleByAddress(args[2]).name);},onLeave:function(retval){
}
});
}
hook_pthread_create();
发现没啥用 应该是检测到 pthread_create 被hook了
2.pthread_create 的实现会调用 clone 系统调用来创建新线程,于是通过hook clone函数,得到线程相关信息然后去nop,干掉线程,发现可以正常使用frida了,基本原理就是这样。
unidbg实现
1.过反调试后,dump出so文件
2.unidbg调用方法
3.开始补环境
这个就没啥好说的,缺啥补啥,能看出成功得到结果
通过unidbg的输出我们可以发现,应该是使用了HmacSHA256的算法,往上找找,key也被成功的打印出来,python实现一下
def HmacSha256(self, message):hmac_obj = hmac.new(self.key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)# 获取HMAC的二进制数据hmac_digest = hmac_obj.digest()# 将HMAC的二进制数据转换为Base64编码的字符串hmac_base64 = base64.b64encode(hmac_digest)# 返回Base64编码的字符串return hmac_base64.decode() # 将字节串解码为字符串
和unidbg结果一样,大功告成。