反编译ampampamp调试小程序请求签名
反编译
使用安卓模拟器挂微信找小程序包脱出来解包的操作太繁琐了,这里推荐两种方法MACPC端微信
使用现有工具(https:github。comTinyNikomacwxapkgdecrypt)采用github提到的第一种解密方法
首先需要安装frida
更新pip
python3mpipinstallupgradepip
安装frida
pip3installfrida
安装fridatools
pip3installfridatools
检测是否安装成功
然后就可以跟着步骤开始解密小程序包了小程序包根路径
Users你的用户LibraryGroupContainersxxx。com。tencent。xinWeChatLibraryCachesxinWeChat
先删除原有小程序包文件夹,后续使用macpc端微信打开小程序此处会重新生成包的文件夹,方便辨认
此时再使用pc端打开需要反编译的小程序即可看见此目录下生成了小程序包文件夹一路跟进去找到包的绝对路径
Users用户LibraryGroupContainersxxxxxxx。com。tencent。xinWeChatLibraryCachesxinWeChat打开小程序生成的文件夹WeAppLocalCachereleasexxxxx4。wxapkg
复制绝对路径,修改agent。js中两处路径
然后开始解密,挂着小程序看下进程中所对应的pid
任意一个都可以,运行后会在agent。js自定义文件处生成解密后的小程序包接下来就是正常解包操作
WindowsPC端微信
也是已经有师傅写好解密小程序包的工具了(https:github。comBlackTracepcwxapkgdecrypt)找到微信小程序包所在根路径C:WeChatFilesApplet
此处我是虚拟机微信修改了文件路径的,应该是可以在设置处查看微信文件路径
把wx字符串开头的文件夹删除,方便后续定位需要反编译的小程序包路径然后打开小程序Applet文件夹下即生成小程序文件夹
跟进文件夹获取加密小程序包(APP。wxapkg),复制绝对路径,使用工具解密即可wxid即之前小程序文件夹名称解密成功后会在工具同级目录下生成dec。wxapkg
最后正常使用unpacker解包
调试解决报错
师傅反编译完拿到的是这么一个压缩包,可以看到完整的微信小程序的结构都在
https:developers。weixin。qq。comminiprogramdevdevtoolsdownload。html
下载安装好后选择导入项目
到现在为止还是非常简单的,然后看到console还有报错提示,把报错的修复了就好了。
我们来看看几个报错unknown:Identifierehasalreadybeendeclared。意思就是变量已经被创建了,可能在反编译的时候出问题了
打开对应的js文件,ctrlg输入行号快速跳转
这段跟我们需要调试的代码没有直接关系,直接注释掉即可
再来看下面的报错,VM2INTERNALSTATEDONOTUSEORPROGRAMWILLFAILisnotdefined可以看到是在es6promise。js?〔sm〕:196的报错,显示变量没有定义
定位看下函数,应该是VM2的报错提示,我们也直接注释掉
修改完之后保存再点下编译
排除了报错之后,小程序可以正常打开请求了,基本上遇到报错注释或者引入对应库解决,修改名字。
调试签名
本次要解决的是sign的问题
通过搜索代码可发现一段疑似计算签名的地方
我们在调试器中定位下代码位置,选择sources,点到appContext
点击行号打上断点,重新请求看看会不会在此处暂停
可看到已经正常的断点到这个位置了
第一个按钮(F8):断点间调试第二个按钮(F10):单步调试第三个按钮(F11):进入函数第四个按钮(shiftF11):离开函数第五个按钮(ctrlF8):取消全部断点
我们选择进入函数,看看他调用了什么内容
断点到了对应的位置就可以在console里面输入方法信息进行查看,鼠标移动到对应变量上可以看到对应的值从这段代码调试可以看出是把appid等什么的信息,变量名加值排序再拼接,最后加上一些其他的参数md5后结果这时候就可以根据具体的函数写脚本进行调试,这里推荐直接使用js,复制粘贴代码下来可以直接自动化跑。比如在这种的复杂js场景下,使用Golang直接调用js代码解析
结合jsEncrtpter也可以写出对应的算法脚本,跑起来进行爆破放个python的调用js案例importexecjsctxexecjs。compile(functionadd(x,y){returnxy;})print(ctx。call(add,1,2))