某猫投诉app逆向 【一鱼多吃app逆向】
- 故事场景:某大型投诉网站关键词搜索为例
脱壳工具
查壳
- 好家伙,360加固
Dexdump脱壳
- 前置条件:手机安装frida
推荐frida安装教程:https://mp.weixin.qq.com/s/kHpnRi4yG6d3EAIFNcphHg
推荐DexDump安装教程 https://blog.csdn.net/weixin_38819889/article/details/123880076
抓包分析
分析源码
用Idea软件打开解压的包文件,在 \assets\dist\views\tousu\tousuDetail.js 路径下找到tousuDetail.js文件,全局查找 signture
定位signature位置
根据函数 getUrlParam() 返回的 urlparam 值,查找signature 相关的函数,复原js函数
- getparam.js 相关参数函数复原
function randomWord(randomFlag, min, max) {
var str = "",
range = min,
arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
// 随机产生
if (randomFlag) {
range = Math.round(Math.random() * (max - min)) + min;
}
for (var i = 0; i < range; i++) {
var pos = Math.round(Math.random() * (arr.length - 1));
str += arr[pos];
}
return str;
}
function getParam() {
var ts = new Date().getTime();
var rs = randomWord(false, 16);
var token = 'P0tk894Tcxi4t%S$';
sign = [ts, rs, token].sort().join('');
return {'ts': ts, 'rs': rs, 'sign': sign};
}
- get_app_sign.py 调用js文件
import execjs
import hashlib
def get_sha256():
with open('getparam.js', 'r', encoding='utf-8') as f:
js_text = f.read()
ctx = execjs.compile(js_text)
ctx_dict = ctx.call('getParam')
sign_str = ctx_dict['sign']
rs = ctx_dict['rs']
ts = ctx_dict['ts']
sha256 = hashlib.sha256()
sha256.update(sign_str.encode('utf-8'))
signature = sha256.hexdigest()
return {'ts': ts, 'rs': rs, 'signature': signature}
"""
使用sha256加密算法,返回str加密后的字符串
"""
# s = get_sha256()
# print(s)
本文含有隐藏内容,请 开通VIP 后查看