微信小程序抓包和解包

27

微信小程序抓包和解包


这里主要使用的工具是

  • Proxifier
  • Yakit

代理 配置

在Proxifier中

先添加一个代理,我这里使用的是3333端口

image-20241130131722799

在yakit中

在MITM交互劫持中添加3333劫持

image-20241130131944630

这个后面就是安装证书

image-20241130132037314

代理规则配置

  • 可以直接下载yakit配置好的规则,直接导入Prox

https://aliyun-oss.yaklang.com/utils/Yakit-WeChatAppEx.ppx

  • 自己手动添加

在Rule页面添加,保存

image-20241130132207621

开始抓包

如果前面配置好了,但是无法抓包,可以看一这个错误排查

https://yaklang.com/Yaklab/WeChatAppEx/#%E5%B8%B8%E8%A7%81%E9%94%99%E8%AF%AF%E6%8E%92%E6%9F%A5

image-20241130132328064

这里走小程序的流量我们就可以在Yakit中找到了

小程序一些信息获取

进入这个小程序页面右上角三个点

image-20241130133127867

可以看到一些小程序开发常见信息

c6a2a0fb8431b7e99d19b756537fa16

一个简单的利用

随便找了一个小程序----彩虹志愿(倒霉🥚)

image-20241130135722415

image-20241130140054906

在yakit中找到他的api数据

image-20241130135811921

访问一下看看:https://api.caihongzhiyuan.cn/api_front/college/45?

image-20241130135836494

全是页面的数据

写了一个处理爬取的脚本

 import json
 import csv
 import requests
 
 def extract_school_info(json_data):
     # 提取学校名称
     school_name = json_data['college']['name']
     
     # 提取学校地址
     school_address = json_data['college']['attach']['address']
     
     # 提取学校简介
     school_introduce = json_data['college']['attach']['introduce']
     
     # 提取学校电话
     school_telephone = json_data['college']['attach']['telephone']
     
     # 提取学校网站
     school_website = json_data['college']['attach']['website']
     
     # 提取学校所属省份
     school_province = json_data['college']['province']['name']
     
     # 提取学校所属城市
     school_city = json_data['college']['city']['name']
     
     # 提取学校类型
     school_type = json_data['college']['type']['name']
     
     # 提取学校性质
     school_nature = json_data['college']['nature']['name']
     
     # 提取学校标签
     school_tags = ', '.join([tag['name'] for tag in json_data['college']['tags']])
     
     # 提取学校排名信息
     school_ranks = []
     for rank in json_data['college']['attachRanks']:
         rank_info = {
             'rank': rank['rank'],
             'topRankType': rank['topRankType']['name'],
             'year': rank['year']
         }
         school_ranks.append(rank_info)
     
     return {
         'school_name': school_name,
         'school_address': school_address,
         'school_introduce': school_introduce,
         'school_telephone': school_telephone,
         'school_website': school_website,
         'school_province': school_province,
         'school_city': school_city,
         'school_type': school_type,
         'school_nature': school_nature,
         'school_tags': school_tags,
         'school_ranks': str(school_ranks)
     }
 
 def fetch_and_save_school_info(start_id, end_id, csv_file_path):
     fieldnames = ['school_name', 'school_address', 'school_introduce', 'school_telephone', 
                   'school_website', 'school_province', 'school_city', 'school_type', 
                   'school_nature', 'school_tags', 'school_ranks']
     
     with open(csv_file_path, 'w', encoding='utf-8', newline='') as csvfile:
         writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
         writer.writeheader()
         
         for i in range(start_id, end_id + 1):
             url = f"https://api.caihongzhiyuan.cn/api_front/college/{i}"
             headers = {
                 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
             }
             response = requests.get(url, headers=headers)
             
             if response.status_code == 200:
                 data = response.json()
                 if 'college' in data:
                     school_info = extract_school_info(data)
                     writer.writerow(school_info)
                 else:
                     print(f"No college data found for ID {i}")
             else:
                 print(f"Failed to fetch data for ID {i}, status code: {response.status_code}")
 
 # 使用示例
 fetch_and_save_school_info(1, 100, '学校/所有学校信息.csv')

最后结果

image-20241130135947916

最后把csv数据导入excel中

image-20241130135616555

微信小程序逆向解包

使用工具:

UnpackMiniApp/UnpackMiniApp.exe at main · Angels-Ray/UnpackMiniApp · GitHub

获取小程序文件

1.首先进入这个文件管理目录

image-20241130142144309

  1. 进入小程序文件位置

image-20241130142249118

可以看到这个

image-20241130142309627

我们利用这个一键解密工具可以

image-20241130140905490

注意⚠️这个下载后需要给它创建一个wxpack文件夹

可以得到这个

image-20241130142421414

GitHub - Angels-Ray/wxappUnpacker: 基于node反编译小程序 已经配置完成

利用上面这个工具

  • 首先要有node环境
  •  git clone https://github.com/Angels-Ray/wxappUnpacker.git
     cd wxappUnpacker
    
  •  #一键安装
     npm install
     
     #或者
     npm install esprima
     npm install css-tree
     npm install cssbeautify
     npm install vm2
     npm install uglify-es
     npm install js-beautify
    

image-20241130142637037

这样就OK了

 ./bingo.bat D:\downloads\unpack\wxpack\wxbffcc9a1dff2dc6f.wxapkg

image-20241130142655214

可以看到解包后的目录: image-20241130142749395

可以使用这个小程序开发工具打开文件夹

image-20241130142114054

这个一般是用于分析加密规则的,还没有找到好的例子,后面补充