某生鲜电商mfsig加密算法解析

初入道途

抓包分析

工具

抓包工具-charles

https://www.charlesproxy.com/

前提:手机和电脑均安装好charles证书

image-20210706151936444
接口调试分析-postman
image-20210706152105634
小程序包导出工具-android rootexplorer文件浏览器

(需要root权限)

运行环境

华为p9 android 6.0

(7.0以上版本抓包工具默认抓不到https请求,解决方式:可将charles证书升级为系统证书,安装到系统证书目录下)

接口分析

商品类目获取接口

cURL


curl -H 'Host: as-vip.missfresh.cn' -H 'platform: weixin_app' -H 'charset: utf-8' -H 'request-id: 0649cacd90ffb932864517168199fa5a' -H 'content-type: application/json' -H 'mfsig: mfswaD2ZNKZTnrhVmrlTn43Ol3vT4uV46Q7hmuVf4iV72u4554JRnQzkmQ3V3J+PnGJU44Rk34QUiKC6Qry3niy2iRaWnrdPmiJ2mhzfROhQlFRSQiy3mhzQSJqrk3RWSryTl439m3vTRHFuQum4QvKihGyOk3RPSizhQQr2PvG6' -H 'User-Agent: Mozilla/5.0 (Linux; Android 7.0; EVA-AL10 Build/HUAWEIEVA-AL10; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2852 MMWEBSDK/20210501 Mobile Safari/537.36 MMWEBID/1318 MicroMessenger/8.0.6.1900(0x2800063A) Process/appbrand2 WeChat/arm32 Weixin NetType/WIFI Language/zh_CN ABI/arm64 MiniProgramEnv/android' -H 'x-region: {"address_code":330110,"station_code":"MRYX|mryx_celshd","delivery_type":1,"bigWarehouse":"MRYXSHD","type":0}' -H 'Referer: https://servicewechat.com/wxebf773691904eee9/821/page-frame.html' --data-binary '{"param":{"firstCategoryCode":"","secondCategoryCode":"","categoryIndex":0,"onlyClassify":1,"bizFingerprintType":3},"common":{"accessToken":"","retailType":"","fromSource":"","sourceDeviceId":"0649cacd-90ff-b932-8645-17168199fa5a","deviceId":"0649cacd-90ff-b932-8645-17168199fa5a","deviceCenterId":"8590201085835345922","env":"weixin_app","platform":"weixin_app","model":"EVA-AL10","screenHeight":611,"screenWidth":360,"version":"9.9.36.3","addressCode":330110,"stationCode":"MRYX|mryx_celshd","bigWarehouse":"MRYXSHD","deliveryType":1,"chromeType":0,"currentLng":120.024811,"currentLat":30.28203,"sellerId":13646,"mfplatform":"weixin_app","mfenv":"wxapp","sellerInfoList":[{"sellerId":13646,"sellerType":1},{"sellerId":678894,"sellerType":2},{"sellerId":2386422,"sellerType":6}]}}' --compressed 'https://as-vip.missfresh.cn/as/home/classify'

请求体


{

"param": {

"firstCategoryCode": "",

"secondCategoryCode": "",

"categoryIndex": 0,

"onlyClassify": 1,

"bizFingerprintType": 3

},

"common": {

"accessToken": "",

"retailType": "",

"fromSource": "",

"sourceDeviceId": "0649cacd-90ff-b932-8645-17168199fa5a",

"deviceId": "0649cacd-90ff-b932-8645-17168199fa5a",

"deviceCenterId": "8590201085835345922",

"env": "weixin_app",

"platform": "weixin_app",

"model": "EVA-AL10",

"screenHeight": 611,

"screenWidth": 360,

"version": "9.9.36.3",

"addressCode": 330110,

"stationCode": "MRYX|mryx_celshd",

"bigWarehouse": "MRYXSHD",

"deliveryType": 1,

"chromeType": 0,

"currentLng": 120.024811,

"currentLat": 30.28203,

"sellerId": 13646,

"mfplatform": "weixin_app",

"mfenv": "wxapp",

"sellerInfoList": [{

"sellerId": 13646,

"sellerType": 1

}, {

"sellerId": 678894,

"sellerType": 2

}, {

"sellerId": 2386422,

"sellerType": 6

}]

}

}

返回值


{

    "data": {

        "bizFingerprintType": 3,

        "tabInfo": [],

        "classifyStyle": 1,

        "categories": [

            {

                "internalId": "3127",

                "secondList": [

                    {

                        "internalId": "3513",

                        "categoryImage": "https://image.missfresh.cn/567284b5c37f4c5a815ffe36fda1b445.png",

                        "icon": "热",

                        "name": "推荐",

                        "parentId": "3127"

                    },

                    {

                        "internalId": "3514",

                        "categoryImage": "https://image.missfresh.cn/32ed06cc30394b0895e771bb3a79e59e.png",

                        "icon": "惠",

                        "name": "会员特惠",

                        "parentId": "3127"

                    },

                    {

                        "internalId": "3129",

                        "categoryImage": "https://image.missfresh.cn/1971c2db09384038864fddc8b2497141.png",

                        "icon": "新",

                        "name": "时令上新",

                        "parentId": "3127"

                    },

                    ......

加密参数确定

通过postman调试可知,mfsig不传或错传后不能正确请求数据,确认mfsig为核心加密签名

image-20210706153005140
image-20210706153036359

初领妙道

小程序包反编译

工具

wxUnpacker

小程序反编译工具github地址:https://github.com/qwerty472123/wxappUnpacker

运行前提需要安装node环境

该工具运行需要一些node依赖库,安装指引在github中README.md文档中有

小程序包拉取

通过re文件管理器App直捣微信小程序包路径:

/data/data/com.tencent.mm/MicroMsg/${用户MD5}/appbrand/pkg/_*_xxx.wxapkg

利用re文件管理器打成zip包,点击右上角按钮找到发送,通过QQ、钉钉或者蓝牙等方式传送到个人电脑接收

小程序主子包判断

如今微信小程序单包体积不能超过4M(小程序基础依赖包除外),如果项目内容过大,开发者会使用分包模式

拿该电商来说,打开小程序一顿操作后,文件目录下发现四个包

image-20210706154412251

其中:

_2124598774_821.wxapkg 3.3M 主包

_-588782754_76.wxapkg 1.5M 子包

_152740959_13.wxapkg 89k 子包

_1123949441_552.wxapkg 14M 基础依赖包

反编译执行

先反编译主包


# 主包反编译

node wxWxapkg.js /Users/toretto/crack/wxapkg/missfresh_v3/_2124598774_821.wxapkg

再反编译子包,通过-s=指定主包的路径,使子包反编译的内容复制到主包


# 子包反编译

node wxWxapkg.js  -s=/Users/toretto/crack/wxapkg/missfresh_v3/_2124598774_821  ../../wxapkg/missfresh_v3/_152740959_13.wxapkg

node wxWxapkg.js  -s=/Users/toretto/crack/wxapkg/missfresh_v3/_2124598774_821  ../../wxapkg/missfresh_v3/_-588782754_76.wxapkg

image-20210706154720473

看到File done即反编译成功

image-20210706154734258

用小程序开发工具打开

image-20210706154836938

先在右上角详情中点击本地设置,勾选不校验合法域名、webview、tls及https证书

image-20210706155122944

完成上述操作后,一个简单代码分析环境就搭建好了

渐入佳境

静态分析

经过抓包分析后,得知加密参数为mfsig,开发工具中全局搜索mfsig,发现并没有匹配的结果。

image-20210706155415889

转换思路,我们看到mfsig的取值均为mfsw开头,于是全局搜索这个,发现mfsw也无匹配结果,可以得出个结论:

该小程序的加密相关函数是特殊对待混淆过的,静态分析明文无法定位到。算是一个安全性比较好的case。

小程序的代码一般发布时都会做混淆,一般而言单靠静态分析代码中的加密逻辑是很费时费力的,借助调试反而易于理解代码逻辑

既然静态分析无果,这时就要体现动态调试分析的重要性了。

动态分析

小程序编译

打开模拟器,并点击编译按钮,观察模拟器窗户和调试器的Console窗口中的报错提示

期间会遇到几个很小的报错,逐步解决后成功看到主界面,接下来就可以调试了

image-20210706162859382

动态分析过程

找到对应接口,打好断点后一步步调试分析

定位到核心代码,反编译的代码格式比较乱,多行代码挤在同一行,不利于追步调试,可以点击左下角的{}按钮进行格式化

image-20210706160107480

通过调试器右侧的调试功能按键进行追踪调试

image-20210706160201085

加密函数混淆过,需要些耐心一步步调试,纸上记录下加密过程。

大体上来看其实就是编码游戏,字符串转数组,数组转为字符串,再利用索引进行字符编码生成最后的mfsig

元神初具

加密翻译

经过上述动态解析,将纸上记录下的加密流程进行整理,利用java或python进行翻译,实现一遍

拿一个真实抓包接口的请求体参数进行测试验证加密函数的正确性

image-20210706160955448

得到的mfsig与接口中的完全一致,那么大功告成

妙领天机

总结

  1. 逆向需要耐心也需要大胆的猜想和假设去不断尝试,混淆的代码笔者调试追溯了好几天,算是比较笨的;

  2. 逆向工作会用到的很多好用的工具,平时注意多收集一些好用的工具或者好博文,以事半功倍;

  3. 本文旨在分享一些逆向技巧和思路,读者不可利用本文所述内容进行非法商业获取利益,若执意带来的法律责任由读者自行承担。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容