基于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
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值