目录
- 包名
- 抓包分析
- 加密分析
- Python 实现请求流程
今日目标
样本后台回复【20221013】获取
抓包分析
打开 app,是一个登陆的界面
输入账号密码之后点击登录可以看到下面的请求
提交的参数中有一个参数值是 apisign
这个参数就是我们需要分析得加密参数
加密分析
先查一下壳,没有加固
直接搞到 jadx 里面找找线索
直接检索 apisign 这个关键参数,可以看到下面的结果
追进去,可以看到写着用到了 md5 的加密,参与计算的还有一个 key 以及 data
从 md5.key 追进去可以看到 key 是一个固定的字符串
public static final String MD5_KEY = "d367fxxxxxxxxxxxxxxx3fe05"
可以理解为是一个盐值
所以这里就需要知道后面参数的 data.toString 的值是什么,这里用 frida hook 打印一下
我们直接 hook ToMD5 这个方法
// com.softgarden.baselibrary.utils function printStack(){ var threadef = Java.use('java.lang.Thread'); var threadinstance = threadef.$new(); var stack = threadinstance.currentThread().getStackTrace(); for(var i = 0;i<stack.length;i++){ send("Full call stack:" + stack[i].toString()); } } function main(){ Java.perform(function(){ var md5Class = Java.use("com.softgarden.baselibrary.utils.MD5Util"); md5Class.ToMD5.implementation = function(arg1,arg2){ console.log("arg1 ===> ",arg1); console.log("arg2 ===> ",arg2); var result = this.ToMD5(arg1,arg2); printStack() console.log('result ===> ',result); return result; } }) } setImmediate(main)
hook 结果如下
可以清楚的看到 arg2 的参数就是提交的账号和密码
通过加密网站的验证,可以知道这里用到的 MD5 并没有魔改就是简单的加了一个盐
直接使用 Python 实现一个 md5 即可
Python 实现请求流程
import requests from hashlib import md5 headers = { 'Host': 'www.xxx.com', 'User-Agent': 'okhttp/3.9.1', } decrypt_text = 'dxxxxxxxxxxxxxxxxxxxxx05'+'{"password":"dddddddddd","phone":"15865865585"}' apisign = md5(decrypt_text.encode('utf8')).hexdigest() print(apisign) data = { 'data': '{"password":"dddddddddd","phone":"15865865585"}', 'apisign': apisign } response = requests.post('http://xxxx/App/Login/login', headers=headers, data=data) print(response.text)
完事~
End.