1. 环境准备搭建逆向分析三件套逆向分析移动应用的第一步是搭建稳定的工具链。我习惯把这套组合称为逆向三件套——Appium负责自动化操作Fiddler拦截网络流量Frida实现动态注入。下面分享我在Windows 10环境下实测可用的配置方案。1.1 模拟器选择与配置雷电模拟器4.0版本是我测试过兼容性最好的Android 7.1环境它的桥接模式网络配置特别适合抓包场景。安装时注意勾选安装虚拟网卡驱动这个选项默认可能不会选中。安装完成后需要进入BIOS开启VT虚拟化支持否则运行时会频繁卡顿。# 检查VT是否开启需安装CPU-Z工具 cpuz.exe -vt1.2 Appium桌面版避坑指南官方推荐的Appium Desktop 1.22版本存在一个隐藏坑点默认安装的Node.js版本可能过高。我建议先卸载已有Node.js然后安装14.17.6 LTS版本否则会遇到npm包兼容性问题。安装完成后需要额外配置// 修改appium-server的config.json { allowInsecure: [chromedriver_autodownload], relaxedSecurityEnabled: true }1.3 Frida全家桶部署Frida的版本匹配是最大的痛点。经过多次测试闲鱼App 7.6.80版本最适配的是frida-tools 10.1.4配合frida-server 15.1.17。特别注意要下载android-x86_64版本的server用adb推送到模拟器后记得修改权限adb push frida-server /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server2. 网络抓包环境搭建2.1 Fiddler的HTTPS解密配置Fiddler抓取HTTPS流量需要完成证书链信任。除了常规的桌面证书导出还需要处理Android 7的证书限制在FiddlerScript选项卡中添加规则if (oSession.HostnameIs(gw.alicdn.com)) { oSession[x-breakrequest] 闲鱼主域名; }使用openssl转换证书格式openssl x509 -inform DER -in FiddlerRoot.cer -out fiddler.pem2.2 模拟器网络桥接实战雷电模拟器的网络桥接需要特殊处理才能稳定抓包在VirtualBox管理界面修改桥接网卡设置选择主机正在使用的物理网卡非自动模式设置静态IP与主机同网段遇到抓包中断时可以尝试重置网络堆栈netsh int ip reset netsh winsock reset3. 自动化操作与动态注入3.1 Appium连接配置模板闲鱼App的Desired Capabilities需要特殊参数{ platformName: Android, appPackage: com.taobao.idlefish, appActivity: com.taobao.fleamarket.home.activity.MainActivity, noReset: True, automationName: UiAutomator2, newCommandTimeout: 600, adbPort: 5038 }3.2 Frida拦截关键API闲鱼使用的MTop协议可以通过以下脚本拦截Interceptor.attach(Module.findExportByName(libmtguard.so, Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative), { onEnter: function(args) { console.log(MTop请求参数:); console.log(hexdump(args[2], { length: args[3].toInt32() })); } });4. 联调技巧与问题排查4.1 常见错误解决方案证书信任链问题在/data/misc/user/0/cacerts-added/目录手动放置证书Appium元素定位失败开启uiautomatorviewer时关闭GPU加速Frida注入崩溃添加--runtimev8参数提升稳定性4.2 流量特征分析技巧闲鱼API的典型特征请求头包含x-features: 27表示加密协议版本POST请求体采用gzip压缩签名参数为datakey2313格式可以用Python还原原始请求import zlib def decrypt_data(compressed): return zlib.decompress(compressed, 16zlib.MAX_WBITS)这套方案在闲鱼7.6.80版本上测试通过核心在于三个工具的版本控制和联调时序。建议操作时严格按照启动Fiddler→配置模拟器网络→启动Frida-server→运行Appium脚本的顺序执行。当遇到抓包内容乱码时检查是否漏掉了FiddlerScript的自动解码规则配置。
Appium+Fiddler+Frida实战:逆向闲鱼App网络请求的完整流程
1. 环境准备搭建逆向分析三件套逆向分析移动应用的第一步是搭建稳定的工具链。我习惯把这套组合称为逆向三件套——Appium负责自动化操作Fiddler拦截网络流量Frida实现动态注入。下面分享我在Windows 10环境下实测可用的配置方案。1.1 模拟器选择与配置雷电模拟器4.0版本是我测试过兼容性最好的Android 7.1环境它的桥接模式网络配置特别适合抓包场景。安装时注意勾选安装虚拟网卡驱动这个选项默认可能不会选中。安装完成后需要进入BIOS开启VT虚拟化支持否则运行时会频繁卡顿。# 检查VT是否开启需安装CPU-Z工具 cpuz.exe -vt1.2 Appium桌面版避坑指南官方推荐的Appium Desktop 1.22版本存在一个隐藏坑点默认安装的Node.js版本可能过高。我建议先卸载已有Node.js然后安装14.17.6 LTS版本否则会遇到npm包兼容性问题。安装完成后需要额外配置// 修改appium-server的config.json { allowInsecure: [chromedriver_autodownload], relaxedSecurityEnabled: true }1.3 Frida全家桶部署Frida的版本匹配是最大的痛点。经过多次测试闲鱼App 7.6.80版本最适配的是frida-tools 10.1.4配合frida-server 15.1.17。特别注意要下载android-x86_64版本的server用adb推送到模拟器后记得修改权限adb push frida-server /data/local/tmp/ adb shell chmod 755 /data/local/tmp/frida-server2. 网络抓包环境搭建2.1 Fiddler的HTTPS解密配置Fiddler抓取HTTPS流量需要完成证书链信任。除了常规的桌面证书导出还需要处理Android 7的证书限制在FiddlerScript选项卡中添加规则if (oSession.HostnameIs(gw.alicdn.com)) { oSession[x-breakrequest] 闲鱼主域名; }使用openssl转换证书格式openssl x509 -inform DER -in FiddlerRoot.cer -out fiddler.pem2.2 模拟器网络桥接实战雷电模拟器的网络桥接需要特殊处理才能稳定抓包在VirtualBox管理界面修改桥接网卡设置选择主机正在使用的物理网卡非自动模式设置静态IP与主机同网段遇到抓包中断时可以尝试重置网络堆栈netsh int ip reset netsh winsock reset3. 自动化操作与动态注入3.1 Appium连接配置模板闲鱼App的Desired Capabilities需要特殊参数{ platformName: Android, appPackage: com.taobao.idlefish, appActivity: com.taobao.fleamarket.home.activity.MainActivity, noReset: True, automationName: UiAutomator2, newCommandTimeout: 600, adbPort: 5038 }3.2 Frida拦截关键API闲鱼使用的MTop协议可以通过以下脚本拦截Interceptor.attach(Module.findExportByName(libmtguard.so, Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative), { onEnter: function(args) { console.log(MTop请求参数:); console.log(hexdump(args[2], { length: args[3].toInt32() })); } });4. 联调技巧与问题排查4.1 常见错误解决方案证书信任链问题在/data/misc/user/0/cacerts-added/目录手动放置证书Appium元素定位失败开启uiautomatorviewer时关闭GPU加速Frida注入崩溃添加--runtimev8参数提升稳定性4.2 流量特征分析技巧闲鱼API的典型特征请求头包含x-features: 27表示加密协议版本POST请求体采用gzip压缩签名参数为datakey2313格式可以用Python还原原始请求import zlib def decrypt_data(compressed): return zlib.decompress(compressed, 16zlib.MAX_WBITS)这套方案在闲鱼7.6.80版本上测试通过核心在于三个工具的版本控制和联调时序。建议操作时严格按照启动Fiddler→配置模拟器网络→启动Frida-server→运行Appium脚本的顺序执行。当遇到抓包内容乱码时检查是否漏掉了FiddlerScript的自动解码规则配置。