daimaguo 发表于 2020-12-23 17:02

PC下frida注入30行代码让你拥有百万小程序未加密代码包

本帖最后由 daimaguo 于 2020-12-23 17:06 编辑

本帖知识:frida注入,x32dbg简单应用,小程序包解密,小程序解包
系统环境及软件:
win764位
Python3.7
frida 14.2.2
x32dbg.exe
pc微信3.0.0.47
鲁迅说:伟大的代码来自抄袭,不,是借鉴!

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

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


但升级又会失效,翻阅了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);
    Interceptor.attach(EncryptBufToFile, {
      onEnter: function (args) {
            this.appId = ptr(args).readPointer().readAnsiString();
            this.apkgFilePath = ptr(args).readPointer().readAnsiString();      
            this.originalData = Memory.readByteArray(args, args.toInt32());
      },
      onLeave: function (retval) {
            console.log('文件解密成功', this.apkgFilePath);      
            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这里啰嗦一下: pipinstall frida pip install frida-tools 安装后我们hook下微信,先运行微信,点一下小程序面板,注意注入前清空下C:\Users\Administrator\Documents\WeChat Files\Applet目录。
cmd下运行 frida WeChat.exe -l hook.js,然后随便选一个你想学习的小程序,就可以看到结果了。



发现完美获取未加密的包,函数地址也和我们用x32dbg查看的一样。接下来就是解包的事情了,解包的教程方法很多,比如GitHub上xuedingmiaojun的解包版本,本帖就不再讨论了。
为了方便使用我搞了个工具,在cmd下运行是这个样子的,结果是一样:

最后:听鲁迅的话,好好学习,别搞破坏!

万事笔通 发表于 2020-12-24 10:19

请问报错Failed to load script: script(line 76): SyntaxError: unexpected token in expression: ''这个知道如何处理吗

涛之雨 发表于 2020-12-23 17:09

鲁大师(指鲁迅):一天到晚在这里瞎扯犊子,老子没说过这句话!


开个玩笑,语言诙谐有趣,不知道能引诱多少新人入坑frida

不是我类 发表于 2020-12-23 17:15

赶紧下载下来代码。 怕看不见

那年夏天52 发表于 2020-12-23 17:18

码农的事儿,怎么能叫搞破坏呢???

qq231 发表于 2020-12-23 17:24

小程序还好,挺简单的

whitehack 发表于 2020-12-23 17:43

其实还是有简单的混淆

wabc666 发表于 2020-12-23 18:03

着实牛bi

QingYi. 发表于 2020-12-23 18:12

又想骗我学frida吗

wanshiz 发表于 2020-12-24 08:16

谢谢楼主分享好经验了。
页: [1] 2
查看完整版本: PC下frida注入30行代码让你拥有百万小程序未加密代码包