微信小程序抓包反编译保姆级教程

1.基本采集流程

	一、模拟请求进行抓包
	
	二、小程序wxapkg包的获取

	三、反编译wxapkg包

	四、js逆向破解

流程图:

2.采集流程

2.1 抓包

2.1.1 抓包背景介绍

首先通过抓包操作,获得请求数据的接口,对接口进行分析,如果接口有加密参数则才需要后续的操作。

2.1.2 使用工具

  • Charles抓包工具
  • 手机一台

2.1.3 具体抓包流程

  1. Charles安装

    https://www.charlesproxy.com/latest-release/download.do#

  2. Charles本地证书安装(本例中Charles版本为4.5.6)

    打开Charles-》Help-》Install Charles Root Certificate

    安装完毕后进入刚才界面查看

  3. SSL代理设置

  4. 手机证书安装(此处以IOS为例,安卓与此相像)

  • 查看本地ipv4地址

    • 键盘WIN+R-》输入cmd-》控制台输入ipconfig-》获取IPV4地址(用来设置手机端代理ip及端口)
  • 手机代理设置

    • 手机与电脑连接在同一局域网内,手机可以连wifi,笔记本可以连wifi或网线

    • 打开手机先把已连接wifi断开并且忽略该网络

    • 重新输入密码连接该wifi并且进入代理设置

    • 代理设置完毕后电脑端Charles会弹出窗口确认是否连接手机,选择Allow

    • 打开手机浏览器输入chls.pro/ssl下载手机端证书

      • 安卓手机打开手机存储空间,找到下载好的文件,点击安装。如果不成功,尝试将 pem改成crt格式,再次点击安装。如果不行,多换几个浏览器下载试试。如果还不行,升级一下charles吧。
      • IOS证书下载完毕后直接就弹出设置里面的安装选项。安装完成之后,打开手机设置-》通用-》关于本机-》底部证书信任设置-》选择信任
  1. 开始抓包(以某商城小程序为例)

    • Charles使用基本介绍

    • 关闭电脑端抓包

    • 进入XXXX小程序进行商品搜索

    • 进入Charles,Ctrl+F进行关键字搜索

    • 双击进入该请求

    • 至此抓包已完成,可以直接使用postman来测试接口。

2.2 wxapkg包获取

2.2.1 wxapkg包获取背景介绍

​ 与网页端爬虫相同,有时候对接口进行分析后会发现该接口需要携带加密参数才能获取到我们想要的数据。而微信打开小程序时会先将小程序的wxapkg包下载到本地存储起来,然后进行调用,因此我们只需要获取目标小程序对应的wxapkg包,对该包进行反编译便可获得基础项目文件进行后续的js逆向操作。

2.2.2 使用工具

  • 安卓模拟器

2.2.3 具体获取包流程

  1. 安卓模拟器下载(此处使用逍遥模拟器)

    https://www.yeshen.com/pg/jpc?utm_campaign=xypc

  2. 安装好逍遥模拟器后进入应用市场下载RE文件管理器

  3. 在逍遥模拟器上安装微信,并且完成登录

  4. 下载完毕后使用RE文件管理器进入目录

    /data/data/com.tencent.mm/MicroMsg/{一串16进制字符}/appbrand/pkg

  5. 长按某个wxapkg包进行多选,删除所有wxapkg包

  6. 返回微信界面,打开对应的小程序,此时返回刚才目录即可看到该小程序的wxapkg包。

  7. 使用RE文件管理器将对应wxapkg包移动到手与电脑共享目录中

    1. 共享目录查看

      此处安卓端的默认路径为:
      /storage/emulated/0/“此处Pictures/Movies/Download/Music四个文件夹都为共享文件夹”

    2. 重新进入RE文件管理器选取刚刚获得的wxapkg包,点击复制,然后移动到目标目录点击粘贴

      移动到共享文件夹

    3. 复制完成后打开电脑对应的共享文件夹即可获得wxapkg包。

2.3 wxapkg包反编译

2.3.1 反编译背景介绍

​ 目前市面上对于小程序wxapkg包的反编译主要是使用js插件wxappUnpacker,随着微信对于小程序的加密、混淆打包、分包及插件机制,小程序反编译的成功率大大降低,目前市面上比较成熟的大型小程序基本无法完成成功反编译wxml、wxss,因此小程序反编译debug运行主要依托下面几个关键要点:

  • 降低调试基础库的版本
  • 抛开程序的语法问题,删除非必要性代码
  • 下划线文件名替换
  • 调试时勾选兼容选项,如:ES6转ES5、不检验合法域名等

2.3.2 使用工具

  • node环境
  • wxappUnpacker项目脚本
  • Linux服务器一台(由于windows下命名规范问题,因此在windows环境下反编译会出现文件夹丢失情况)

2.3.3 具体反编译流程

  1. node环境安装
  • 下载地址:

    https://nodejs.org/en/download/

  • 选择正确安装包下载,这里选择Linux(x64)版本

  • 这里可以直接通过windows端下载完毕后传到linux上解压,也可以直接获取下载地址在linux上使用wget指令下载

  • 下载完毕后解压

    xz -d node-v14.15.4-linux-x64.tar.xz  // 如果没有xz命令 ”yum install xz -y“
    tar xf node-v14.15.4-linux-x64.tar
    
  • 配置环境变量

    ln -s /root/node-v14.15.4-linux-x64/bin/node /usr/local/bin/node
    ln -s /root/node-v14.15.4-linux-x64/bin/node /usr/local/bin/npm
    
  • 查看是否安装成功

    node -v
    
  1. 获得wxappUnpacker脚本
  • 如果没有git指令,安装git

    yum -y install git
    
  • 下载到本地后进入脚本文件夹内

    github项目地址:

    https://github.com/xuedingmiaojun/wxappUnpacker

    克隆到本地:
    git clone https://github.com/xuedingmiaojun/wxappUnpacker.git
    
  • 下载对应依赖

    安装
    npm install
    安装依赖
    npm install esprima  
    npm install css-tree   
    npm install cssbeautify
    npm install vm2
    npm install uglify-es
    npm install js-beautify
    
  • 在该目录下新建反编译文件夹并拷贝wxapkg包到该文件夹下

    新建文件夹(本案例文件夹名称为XSYX)
    mkdir XSYX
    
  • 返回上级文件夹,执行对应反编译命令

    注意:wxapkg包会有多个,如果出现错误提示,检测到该包为分包,则先反编译其他包,直到找到主包并且反编译成功后再反编译分包!

    例:

    反编译指令(主包及分包)

    • 主包:

      node ./wuWxapkg.js ./XSYX/_1134933561_247.wxapkg(此处为wxapkg包相对路径)
      
    • 分包:

      node ./wuWxapkg.js ./XSYX/_-894268284_247.wxapkg(此处为wxapkg分包相对路径) -s=./XSYX/_1134933561_247(此处指定主包反编译后的文件夹名称)
      

      主包:

      分包:

  • 反编译完成后拷贝主包文件夹到windows本地

    注意:拷贝前注意主包文件夹中是否存在文件命名格式不符合windows要求,如此例中需要修改plugin-private:改为plugin-private

  • 拷贝完成后可在本地直接使用ide工具打开该项目,能够直接查看到前端代码

  • 至此小程序反编译操作完成!

2.4 微信开发者工具调试

2.4.1 开发者工具调试背景

​ 在进行加密参数破解的时候,单纯的通过前端文件来扣js代码完成逆向难度较大,因此需要通过debug模式来帮助我们找到对应的加密参数生成代码,反编译项目时主要遵循以下要点:

  • 适当降低基础库版本
  • 删除报错的不必要代码
  • 勾选适配选项

2.4.2 使用工具

  • 微信开发者工具

2.4.3 具体调试流程

  1. 下载微信开发者工具

    https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

  2. 打开开发者工具运行刚才传到windows下的项目文件(AppID可以自己注册也可以用测试号)

    • 打开项目

    • 对小程序进行重复编译,不断解决报错问题,删除不必要代码,便可正常运行小程序。

    • debug过程跟浏览器过程一样,打好断点编译运行。

3. 总结

​ 至此,已经完成了从抓包-》获取程序包-》反编译-》js逆向(前端代码查看,debug调试)的全过程,随着微信对小程序的不断优化,小程序的反编译以及debug运行的难度也越来越困难,由于基本无法完成成功反编译wxml、wxss,因此小程序爬虫主要有以下几个难点:

  • 小程序端代码更新迭代快,基本上每几周就进行一次迭代
  • 小程序包反编译难度大,不能保证文件完全反编译成功、不发生丢失
  • 代码进行本地debug调试时需要解决编译中遇到的各种问题,需要掌握基础的小程序编码知识
  • js逆向爬虫开发开发成本大,开发周期长

猜你喜欢

转载自blog.csdn.net/weixin_43900244/article/details/113123915
今日推荐