麦当劳app之sign逆向分析

1、前言

今天继续研究麦当劳app的逆向算法,该文章仅用于逆向技术学习研究使用。抓包过程中发现请求参数sign为加密参数,如下图:

2、sign参数猜想 

sign:10b0ddb1daa077580aba33709cf73cf7

sign.length = 32

大概率猜测为md5加密(是否魔改?)

3、frida-trace跟踪“CC_MD5”函数     

        frida这个工具真是利器,对于简单的算法逆向很友好,在使用md5函数追踪的过程中,工具的配置和使用教程可看上一篇内容酷狗概念版signature逆向

        在终端中查找刚刚生成的sign值“10b0ddb1daa077580aba33709cf73cf7”,搜索到了对应匹配的值,说明sign参数就是普通的md5加密,且没有经过魔改。加密参数已经在终端中输出:

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-016c88c5e52

这里为了方便大家阅览,进行了换行处理

上述参数分析结束,那么这个算法也就成型了

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)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值