推广 热搜: 公司  快速  中国  上海  未来    企业  政策  教师  系统 

mp-mtgsig 美团iOS 签名逆向工程分析

   日期:2024-11-04     作者:caijiyuan    caijiyuan   评论:0    移动:http://kaire.xrbh.cn/news/10003.html
核心提示:原文链接:https://chenqi.app/Meituan-iOS-Reverse-Engineering/转存mark,如有侵权,联系删除美团App iOS
  • 原文链接:https://chenqi.app/Meituan-iOS-Reverse-Engineering/
  • 转存mark,如有侵权,联系删除

美团App iOS 安装包
版本号 11.6.201
发布时间 2021.01.18

mp-mtgsig 美团iOS 签名逆向工程分析

Fiddler

常规操作,首先使用Fiddler进行HTTP(S)网络代理抓包,没有获得任何明显的线索。猜测美团App使用了Native层实现网络通讯功能,负责加解密,压缩解压缩等常见处理,属于常见技术方案,携程CRN亦是如此。后续分析印证了该猜测。

Cydia

iPhone越狱,并在Cydia App中安装 Frida Cyrun Cycript 这几个包,后续会用到。

frida-ios-dump

Pull a decrypted IPA from a jailbroken device

Usage
  • Install frida on device
  • Run usbmuxd/iproxy SSH forwarding over USB (Default 2222 -> 22). e.g.
  • Run https://blog.csdn.net/wy_97/article/details/dump.py or

For SSH/SCP make sure you have your public key added to the target device’s file.

App提交至App Store后,经Apple官方加密,生成供用户下载的IPA文件。该文件直接解压缩是密文,难以分析。所以需要通过越狱手机环境,使用frida砸壳,获得解密后的原始IPA文件(IPA = ZIP)。

class-dump

class-dump is a command-line utility for examining the Objective-C segment of Mach-O files. It generates declarations for the classes, categories and protocols.

从原始IPA解压后的 Mach-O 二进制文件,还原出 Objective-C 类声明头文件。

MRNBundle.h

先从 下手。

接下来是最辛苦烧脑的部分。

frida-trace

祭出 frida-trace 跟踪 MRNBundle 的运行过程。

frida-trace Javascript Hook 功能介绍省略。

编辑文件

替换

变成

关于 new ObjC.Object 的用法,详见官网文档。

重新执行上述frida-trace命令,观察日志输出,找到App运行时Bundle文件夹路径。

使用scp命令,将手机文件夹导出至电脑文件夹。

DIO文件格式

如图所示,很明显每个DIO文件就是一个MRN Bundle。但是其格式并非ZIP,直接解压缩无效。看来美团App进行了安全加固相关措施,因此需要继续分析与其相关的ObjC代码线索。

MTDIOBundle.h

回看上述 声明文件,找到嫌疑点。

顺藤摸瓜 ,盯住 和 这两个属性和方法。

使用 cyrun 附加到App运行时进程,定位内存 METDIOBundle 类实例,查看这两个元素的相关信息,终于水落石出。

  • 描述包中文件列表信息,包括文件名,偏移值。
  • 持有文件数据。

接下来使用 将解密数据写入手机本地存储,再使用 命令将文件传回电脑。

rn-hotel-mainlist

经过一番枯燥繁琐的检索,找到酒店列表页,取出其中 index.js ,继续耐心查看大量编译混淆后的代码,找到一行代码。

原生模块托管了网络协议请求,验证了文章开头使用Fiddler分析无果的猜测。

只好继续分析 。

MRNNetwork.h

与上述分析 流程类似,继续祭出 。

运行命令,并触发酒店搜索至列表页功能, 查看方法调用。

编辑文件

增加代码,打印输出,RN发送给Native的请求参数

Hopper 反汇编

The macOS and Linux Disassembler

Hopper Disassembler, the reverse engineering tool that lets you disassemble, decompile and debug your applications.

与Fiddler授权方式类似,可以免费使用,但每隔30分钟自动关闭一次。

启动后,将 文件拖入, 弹出配置提示框,按默认配置,点 OK 开始反编译。

等待运行完成,重点分析 方法,定位到 方法。再次祭出 frida-trace 动态跟踪运行时数据。

终于看懂了酒店列表页网络请求的完整契约。

这里省略使用Hopper和IDA反复进行反汇编分析过程,以及一目了然的请求字段部分,仅罗列关键复杂的字段含义。

pragma-unionid

源于

M-SHARK-TRACEID

拆分各段数据含义

生成随机字符的取值范围

pragma-os

App版本和手机系统相关信息(实测可以向服务端传入固定内容)。

siua

实测该字段可选,可以不传。其生成算法是,使用手机系统和设备相关信息,构造设备指纹,生成字符串,再通过两层加密,base64编码形式。

完整的生成算法位于

mtgsig

实测该字段必传,否则会被 WAF(Web Application Firewall) 拦截。以及生成内容必须正确,否则也会被拦截。

其生成逻辑位于以下方法

最终调用以下方法进行加密

该方法名显然是随机生成,因此不确定未来是否变化。所以记住要从入口方法进行分析。即

入参分析

酒店列表查询请求似乎只用到了GET方式。当请求方式为POST时,还需添加其他参数,未深入分析,省略。

返回值分析

即上述 JSON格式,可直接置于 Request Header 中发送。

由于其数据基于URL参数生成,因此当URL参数不同, 值不同。所以该字段不能模拟固定,需要调用上述算法动态计算得出。

URL 关键字段

完整URL举例

转为JSON格式,方便阅读

token 和 userID,推测应为用户凭证。

wifiList

实测可选字段,可以不传,代表用户手机当前连接的Wi-Fi信息。

hotel_queryid

格式

其他非关键参数省略,大致分为两种

  • 酒店查询条件参数
  • 可以固化填充的非关键字段

制作爬虫脚本

上述分析可见, 和 的生成方式极其复杂,因此采用一种新方式实现。继续借助 frida 这一强大的工具,实现从外部直接调用 App 中相应的加密函数进行计算。

  • 新建文件夹,执行 初始化一个空项目。
  • 执行 ,安装依赖项。
  • 实现以下代码,保持至单独文件。此处以 为例。
  • 创建调用入口文件
  • 运行该文件,查看效果。Done

The End

不同身份的用户(未登录,已登录,新用户,老用户,等级不同,服务端(或后台接口)返回的酒店价格均有所不同。

因此从前端入手制作酒店列表页爬虫的思路受阻。

美团先从登录账号这一环节控制安全防范策略。与之类似的还有航旅纵横。

下图为“未登录用户(左)”和“已登录用户(右)”获取到的酒店列表数据和价格,可以明显看出两者的差别。

本文地址:http://syank.xrbh.cn/news/10003.html    迅博思语资讯 http://syank.xrbh.cn/ , 查看更多
 
标签: 逆向工程
 
更多>同类资讯
0相关评论

新闻列表
企业新闻
推荐企业新闻
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号