小象超市Mtgsig签名
mtgsig解析
mtgsig的计算逻辑都在libmtguard*.so中,使用了许多魔改的加密算法,混淆严重,完全还原算法难度较大。
| { "a0": "3.0", "a1": "0a03b816-c295-46cc-ad01-f2a3704ce24f", "a3": 25, "a4": 1761741582, "a5": "/hjHbBvXYVKQhJxHCxJu3aoMpkzUbkOFx36Pap0UIDL8yzpPTB0a0ya5ODC9gujBev2PW8zUKOeJ78ZwUc5JimAPoukPwS9ignM4Qggyt+EFy1T8FtaePTsVkHSreJKTHTHeR75qAv1ze0jBftv5d4QkNzwO5Hsb6wyZ7JI8KZiH1FWtZPnwgBszwTKguFhJYThua36Lqwq+Nj/33hkItvBE0dTF2SAYuwmTpN1nuXB+5QOY3SFhYviul2WBzSRXBCID+qAoVPh6h0dbLOg8KvSoy2WloTUcyFpsYF8RoYKSVQO+x//aWLeiU7qlDdrWFaKhHf1HQ4VvV6Rh432qabzT01mTMNoSvbGFpB9zF69N0feUSYGEb9o=", "a6": 0, "a7": "puQ3eKlv2R7KGKCQfg97Dg2okYRBsWpupORE1unRK2XrgPbPQDfSplPbL4gfBg+YA4uqNTv3JHsl7Et0lnzUF+oWh00cLcwvAPuQi/igEi4=", "a8": "dac6cdb7b0b209bd0defb1095399cd16bb28feb8d74f28a9c3c28705", "a9": "bd2abf0bCzxMeatnQv7ViN9ZWl2ccY/SxBuZvBRXozHB3tlTiAqyTdBwlo3c4ssn2a6uK8h1Z3mPDJG85G19ZICKT+zHSVVnEF0bKD2U5sn+fs5C5irkmj60/0D0Ozm175AH3RrSOTS9IZgCL9WphIvpxRDKxBA8SdsH+i4lboCrjE0lDftnqPVKgfxsPuMw8nSh5Wv0q3QnrXAfrp1LPZ6poHgcHqesH5UlCurVdPfFzzkvt91/6ScuyXBy5lC3CPjh9xbCAy6E3+LMsgY5ptw3cB3JLbhfFDfjxvzplTSPzDTmdqIRZ/lk7a5PJ6PTf5VPR7YHb8EFZZY3lXKdNEmfSdBu0oxbccmQhZsESZxVBS/yYi9lV4MjBpsduspZObjD3nAg0BRQa09t+234gO571ASdDnyei/CwNqPbYrx4s4TalRfoWmfzawPLc1+eKzjJQE9tJaSPw5CDrbG7s05HyXZvZgWNidKyv6Q7tuJC5IpncIPwkg3YFpsxL2rudQoCfOye5jPzur2V1wM5hDD0qZNP+JNUryQ4AmHnEVek9sjKIfhMBB4/z80WnACooXrzyyuirln0ng3ft0AEwYZ0zFAdnl61E+hTpW68OBHCK3GVgYLSbkPWa4hgLK++fUxzW/xodAlMZvOLHk72PN5vlu+oZcHWu8DVjCZJGIemzzm+MQsmlQAXHWMDqtiB7SOoQw3Eeyqi/OVxe7WjrLVzMq6VDvl3CwvUEUF1f0EqaZSio96ucthLSLr83+HkZ3SGexDFVCu53nUxs/m6GngtsAF4AreuxBdCXaDHaaxoya28/9llE0UzBk22UWYy0DBNwLlQsEJpnDGzA+CHvboY5tP4jt3QCVWt4wFgve0CzzBGEEQV7GkC6OxJpR5YxZ9pWq7g+xtWC8fjlX585oFfwzMHyhO51surQECLPq/dKSSNPA4=", "a10": "5,34,1.1.1", "x0": 1, "a2": "9ec579670a7ea21e38f0e9f69a60b761" }
|
同一台设备、同一账号的两次签名请求,只有3个字段出现变化。其中a4是时间戳,a5是设备环境相关的,a2才是真正的请求签名。

mtgsig不仅用于校验请求签名,还用来收集风控所需的信息,服务端对mtgsig中风控相关字段计算,用于检测批量注册、爬虫等行为。
小象超市的API地址都是https://mall.meituan.com/*,若mtgsig错误,返回的信息为{"message":"Forbidden,Contact:it.mtgsig@meituan.com"}。
若因风控拦截,返回的是html:
| <html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> <hr><center>openresty</center> </body> </html>
|

反编译分析
使用JEB反编译apk,搜索mtgsig可以找到计算签名的关键代码。
|
private static Map requestSignatureForBabel(String s, URI uRI0, String s1, String s2, String s3, byte[] arr_b) { CommonCandyInterceptor commonCandyInterceptor0 = new CommonCandyInterceptor(); Map map0 = new HashMap(); map0.put("mtgsig", commonCandyInterceptor0.getRequestSignature(s, uRI0, s1, s2, s3, arr_b)); return map0; }
|


使用Xposed远程调用签名算法
- 在xpsosed模块加载时,启动一个http服务,接收签名请求。
- 使用xposed hook
getRequestSignature方法,每次调用完成后保存CommonCandyInterceptor 实例(param.thisObject)到全局变量中。
- 解析签名请求,利用保存在全局变量中的
CommonCandyInterceptor对象,反射调用getRequestSignature方法,并返回签名结果。
模块使用方法
下载地址:
| https://static-1256168285.cos.ap-chengdu.myqcloud.com/xposed_meituan_retail_v1.0.apk
|
需要设备ROOT并安装LSPosed。
- 安装最新版本小象超市(
v6.87.0)
- 安装模块并启用
- 重启小象超市app,如果模块加载成功会有提示
- 抓包获取token等信息,使用http请求调用签名服务
示例见python代码。
注: 建议一个账号登录一台设备,账号调用对应设备的RPC签名服务。