龙空技术网

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

WgpSec狼组安全团队 175

前言:

当前大家对“js反编译工具”大约比较讲究,小伙伴们都需要剖析一些“js反编译工具”的相关资讯。那么小编同时在网摘上汇集了一些有关“js反编译工具””的相关资讯,希望同学们能喜欢,小伙伴们一起来学习一下吧!

反编译

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

MAC PC端微信

使用现有工具() 采用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端微信

也是已经有师傅写好解密小程序包的工具了() 找到微信小程序包所在根路径

C:\WeChat Files\Applet\

此处我是虚拟机微信修改了文件路径的,应该是可以在设置处查看微信文件路径

把wx字符串开头的文件夹删除,方便后续定位需要反编译的小程序包路径 然后打开小程序 Applet文件夹下即生成小程序文件夹

跟进文件夹获取加密小程序包(APP.wxapkg),复制绝对路径,使用工具解密即可 wxid即之前小程序文件夹名称 解密成功后会在工具同级目录下生成dec.wxapkg

最后正常使用unpacker解包

调试 解决报错

师傅反编译完拿到的是这么一个压缩包,可以看到完整的微信小程序的结构都在

下载安装好后选择导入项目

到现在为止还是非常简单的,然后看到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", 1, 2)) 

标签: #js反编译工具