基于frida注入的PC端微信小程序未加密包提取方案

系统环境:
win764位
Python3.7
frida 14.2.2
pc微信3.0.0.47

鲁迅说:伟大的代码来自抄袭,不,是借鉴!

既然是要借鉴,那能拿到源码当然是最好的,今天就来分享下pc端如何获取微信小程序包,借鉴下别人是如何开发小程序的。
目前较多的方法是手机端获取,但需要root,当然也可以电脑安装模拟器搞,既然pc端支持小程序打开,并且拿到包后还需要在电脑上解包,为何不直接在电脑上获取更为方便(这段貌似很啰嗦)。
但不巧的是PC端微信把wxapkg给加密了,当然可以直接写解密算法,既然鲁迅又说过:所有加密都伴随着解密


那何不直接获取到未加密的小程序包,所以便产生使用frida注入微信获取未加密小程序包的方法:
经过分析发现小程序包的加密算法在WeChatAppHost.dll 中的 EncryptBufToFile函数,那我们就来hook他,拿到未加密的源代码包。
这里发现前人早已造好了轮子:https://github.com/kksanyu/frida_with_wechat_applet,但可惜的是偏移写死了,不支持目前的版本,也不知道帖子里用的是哪个版本的微信。
我们使用x32dbg对微信进行分析

虽然可以得到EncryptBufToFile的地址,但升级又会失效,翻阅了frida的api发现个findExportByName函数,因此我们需要对代码改造一番:
var EncryptBufToFile = baseAddr.add(0x1800F);
更改为:var EncryptBufToFile = Module.findExportByName('WeChatAppHost.dll','EncryptBufToFile');
完整hook代码如下:

/*
 * @name 微信小程序PC版 wxapkg提取
 * @author 代码果 基于kksanyu版修改
*/
var baseAddr = Module.findBaseAddress('WeChatAppHost.dll');
console.log('WeChatAppHost.dll baseAddr: ' + baseAddr);
if (baseAddr) {    
	var EncryptBufToFile = Module.findExportByName('WeChatAppHost.dll','EncryptBufToFile');
    console.log('EncryptBufToFile 函数地址: ' + EncryptBufToFile);
    // HOOK函数, 监听参数
    Interceptor.attach(EncryptBufToFile, {
        onEnter: function (args) {
            // 微信小程序AppId
            this.appId = ptr(args[0]).readPointer().readAnsiString();
            // 微信小程序本地缓存文件路径
            this.apkgFilePath = ptr(args[1]).readPointer().readAnsiString();
            // 小程序代码原始内容(未加密)
            this.originalData = Memory.readByteArray(args[2], args[3].toInt32());
        },
        onLeave: function (retval) {
            console.log('文件解密成功', this.apkgFilePath);
            // 将文件替换为未加密的wxapkg包
            var f = new File(this.apkgFilePath, 'wb');
            f.write(this.originalData);
            f.flush();
            f.close();
            // 释放内存
            delete this.appId;
            delete this.apkgFilePath;
            delete this.originalData;
        }
    });    
} else {
    console.log('WeChatAppHost.dll 模块未加载, 请先打开界面中的小程序面板');
}

我们来测试一番,安装frida这里啰嗦一下:

pip  install frida 

pip install frida-tools

安装后我们hook下微信,先运行微信,点一下小程序面板,注意注入前清空下C:\Users\Administrator\Documents\WeChat Files\Applet目录。

发现完美获取未加密的包,地址也和我们用x32dbg查看的一样。接下来就是解包的事情了,方法很多,本帖就不再讨论了。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值