反编译&调试小程序请求签名

admin 2023年2月10日19:32:32评论484 views1字数 2577阅读8分35秒阅读模式

点击蓝字

反编译&调试小程序请求签名

关注我们



声明

本文作者:keac&catw0rld

本文字数:2507字

阅读时长:约10分钟

附件/链接:点击查看原文下载

本文属于【狼组安全社区】原创奖励计划,未经许可禁止转载


由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,狼组安全团队以及文章作者不为此承担任何责任。

狼组安全团队有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经狼组安全团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。



前言



大半夜的师傅 catw0rld 师傅找到我问怎么调试小程序,之前只调试过一些网页版的混淆代码,于是就和师傅一起研究就有了今天的文章反编译&调试小程序请求签名



团队正在招新中!点击团队招人计划查看~


反编译

使用安卓模拟器挂微信找小程序包脱出来解包的操作太繁琐了,这里推荐两种方法

MAC PC端微信

使用现有工具(https://github.com/TinyNiko/mac_wxapkg_decrypt) 采用github提到的第一种解密方法反编译&调试小程序请求签名首先需要安装frida

更新pip
python3 -m pip install --upgrade pip

安装frida
pip3 install frida

安装frida-tools
pip3 install frida-tools

检测是否安装成功反编译&调试小程序请求签名然后就可以跟着步骤开始解密小程序包了 小程序包根路径

/Users/你的用户/Library/Group Containers/xxx.com.tencent.xinWeChat/Library/Caches/xinWeChat

先删除原有小程序包文件夹,后续使用mac pc端微信打开小程序此处会重新生成包的文件夹,方便辨认反编译&调试小程序请求签名此时再使用pc端打开需要反编译的小程序即可看见此目录下生成了小程序包文件夹 一路跟进去找到包的绝对路径

/Users/用户/Library/Group Containers/xxxxxxx.com.tencent.xinWeChat/Library/Caches/xinWeChat/打开小程序生成的文件夹/WeApp/LocalCache/release/xxxxx/4.wxapkg

复制绝对路径,修改_agent.js中两处路径反编译&调试小程序请求签名然后开始解密,挂着小程序看下进程中所对应的pid反编译&调试小程序请求签名任意一个都可以,运行后会在_agent.js自定义文件处生成解密后的小程序包 接下来就是正常解包操作反编译&调试小程序请求签名

Windows PC端微信

也是已经有师傅写好解密小程序包的工具了(https://github.com/BlackTrace/pc_wxapkg_decrypt) 找到微信小程序包所在根路径

C:WeChat FilesApplet

此处我是虚拟机微信修改了文件路径的,应该是可以在设置处查看微信文件路径反编译&调试小程序请求签名把wx字符串开头的文件夹删除,方便后续定位需要反编译的小程序包路径 然后打开小程序 Applet文件夹下即生成小程序文件夹反编译&调试小程序请求签名跟进文件夹获取加密小程序包(APP.wxapkg),复制绝对路径,使用工具解密即可 wxid即之前小程序文件夹名称 解密成功后会在工具同级目录下生成dec.wxapkg反编译&调试小程序请求签名最后正常使用unpacker解包反编译&调试小程序请求签名

调试

解决报错

师傅反编译完拿到的是这么一个压缩包,可以看到完整的微信小程序的结构都在反编译&调试小程序请求签名https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html反编译&调试小程序请求签名下载安装好后选择导入项目反编译&调试小程序请求签名

反编译&调试小程序请求签名

到现在为止还是非常简单的,然后看到console还有报错提示,把报错的修复了就好了。反编译&调试小程序请求签名我们来看看几个报错 unknown: Identifier 'e' has already been declared. 意思就是变量已经被创建了,可能在反编译的时候出问题了反编译&调试小程序请求签名打开对应的js文件,ctrl+g 输入行号快速跳转反编译&调试小程序请求签名

这段跟我们需要调试的代码没有直接关系,直接注释掉即可

反编译&调试小程序请求签名

再来看下面的报错,VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL is not defined 可以看到是在 es6-promise.js? [sm]:196 的报错,显示变量没有定义

反编译&调试小程序请求签名定位看下函数,应该是VM2的报错提示,我们也直接注释掉

反编译&调试小程序请求签名修改完之后保存再点下编译反编译&调试小程序请求签名排除了报错之后,小程序可以正常打开请求了,基本上遇到报错注释或者引入对应库解决,修改名字。反编译&调试小程序请求签名

调试签名

本次要解决的是_sign的问题反编译&调试小程序请求签名通过搜索代码可发现一段疑似计算签名的地方反编译&调试小程序请求签名我们在调试器中定位下代码位置,选择sources,点到appContext反编译&调试小程序请求签名点击行号打上断点,重新请求看看会不会在此处暂停反编译&调试小程序请求签名可看到已经正常的断点到这个位置了反编译&调试小程序请求签名

第一个按钮(F8):断点间调试 

第二个按钮(F10):单步调试 

第三个按钮(F11):进入函数 

第四个按钮(shift+F11):离开函数 

第五个按钮(ctrl+F8):取消全部断点


断点到了对应的位置就可以在console里面输入方法信息进行查看,鼠标移动到对应变量上可以看到对应的值 从这段代码调试可以看出是把appid等什么的信息,变量名加值排序再拼接,最后加上一些其他的参数md5后结果 

这时候就可以根据具体的函数写脚本进行调试,这里推荐直接使用js,复制粘贴代码下来可以直接自动化跑。

比如在这种的复杂js场景下,使用Golang直接调用js代码解析反编译&调试小程序请求签名


后记



其实结合jsEncrtpter也可以写出对应的算法脚本,跑起来进行爆破 放个python的调用js案例

import execjs 

ctx = execjs.compile(""" 
function add(x, y) { 
 return x + y; 

"""


print(ctx.call("add", 12)) 
师父们还有什么更好的想法
欢迎一起加群交流呀~


往期推荐
随身WiFi硬改计划
Knight CTF 2023 题解
低成本实现近源渗透(二)短信转发
分享下溯源反制的一些思路,欢迎补充~


作者



反编译&调试小程序请求签名

catw0rld

不日新者必日退



扫描关注公众号回复加群

和师傅们一起讨论研究~


WgpSec狼组安全团队

微信号:wgpsec

Twitter:@wgpsec


反编译&调试小程序请求签名
反编译&调试小程序请求签名


原文始发于微信公众号(WgpSec狼组安全团队):反编译&调试小程序请求签名

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月10日19:32:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反编译&调试小程序请求签名http://cn-sec.com/archives/1547598.html

发表评论

匿名网友 填写信息