1、前言
今天继续研究麦当劳app的逆向算法,该文章仅用于逆向技术学习研究使用。抓包过程中发现请求参数sign为加密参数,如下图:
2、sign参数猜想
sign:10b0ddb1daa077580aba33709cf73cf7
sign.length = 32
大概率猜测为md5加密(是否魔改?)
3、frida-trace跟踪“CC_MD5”函数
frida这个工具真是利器,对于简单的算法逆向很友好,在使用md5函数追踪的过程中,工具的配置和使用教程可看上一篇内容酷狗概念版signature逆向
在终端中查找刚刚生成的sign值“10b0ddb1daa077580aba33709cf73cf7”,搜索到了对应匹配的值,说明sign参数就是普通的md5加密,且没有经过魔改。加密参数已经在终端中输出:
之前的图,不知道为啥挂掉了,只好重新补图md5值不一样了,因为nonce和st变了
4、 md5参数分析
ct=101
#language=cn
#nonce=1726279279083661066(毫秒的 Unix 时间戳)
#st=1726279279(Unix 时间戳)
#token=49c2e4a8bda81b5af0f61901c31d79411a0097d2(多次刷新:固定)
#v=6.0.89.3(版本号)
#dayPartCode=1
#isPromoter=0
#orderType=1
#storeCode=1450102(大概率是区分城市编码code)
#key=1bf5f332-aeab-4ef2-aea8-016c88c5e520
这里为了方便大家阅览,进行了换行处理
上述参数分析结束,那么这个算法也就成型了
5、运行结果
JS代码
const md5 = require('md5')
function sign(timestamp,nonce) {
var str = 'ct=101#language=cn#nonce=' + nonce + '#st=' + timestamp + '#token=49c2e4a8bda81b5af0f61901c31d79411a0097d2#v=6.0.89.3#beCode=345031981#dayPartCode=4#isPromoter=0#orderType=2#storeCode=3450319#key=1bf5f332-aeab-4ef2-aea8-016c88c5e520'
return md5(str)
}
Python代码
import requests
from datetime import datetime
import execjs
cookies = {
'JSESSIONID': '956FC90A95A8B1A3EF854B87AEAB6167',
}
# 获取当前时间
now = datetime.now()
# 转换为时间戳
timestamp = now.timestamp()
nonce = str(timestamp).split('.')[0] + str(timestamp).split('.')[1]
sign = execjs.compile(open('./encrypt.js').read()).call("sign",int(timestamp),nonce)
headers = {
'Host': 'api.mcd.cn',
'language': 'cn',
'User-Agent': 'McdApp (iOS)',
'd': 'BuaY+YL+y2PlYF4QO28EDsTjbr9o8aS3gwMfoe7lv4WSAiMCaQxmQ0e/uTYr7xf6p6WxivJ76vA61Len8MIEExw==',
'tid': '00003TuN',
'sv': 'v3',
'biz_from': '1006',
'biz_scenario': '600',
'v': '6.0.89.3',
'ct': '101',
'nonce': nonce,
'sign': sign,
'token': '49c2e4a8bda81b5af0f61901c31d79411a0097d2',
'X-B3-TraceId': '67A235D631DE46A388343F15D267074B',
'Accept-Language': 'zh-Hans-CN;q=1',
'Accept': '*/*',
'Content-Type': 'application/json; charset=utf-8',
'st': str(int(timestamp)),
'X-B3-SpanId': '9B0595C8C4924EE6',
}
params = {
'beCode': '345031981',
'dayPartCode': '4',
'isPromoter': '0',
'orderType': '2',
'storeCode': '3450319',
}
response = requests.get('https://api.mcd.cn/bff/spc/menu', params=params, cookies=cookies, headers=headers)
print(response.text)
标签:nonce,cn,timestamp,app,sign,麦当劳,str,md5 From: https://blog.csdn.net/weixin_57775169/article/details/142250695