吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3721|回复: 13
收起左侧

[其他转载] PC下frida注入30行代码让你拥有百万小程序未加密代码包

  [复制链接]
daimaguo 发表于 2020-12-23 17:02
本帖最后由 daimaguo 于 2020-12-23 17:06 编辑

本帖知识:frIDA注入,x32dbg简单应用,小程序包解密,小程序解包
系统环境及软件:
win764位
Python3.7
frida 14.2.2
x32dbg.exe
pc微信3.0.0.47
鲁迅说:伟大的代码来自抄袭,不,是借鉴!
src=http _5b0988e595225.cdn.sohucs.com_images_20190318_549bf506b43049cb9e4c2dcae.jpg
既然是要借鉴,那能拿到源码当然是最好的,今天就来分享下pc端如何获取微信小程序包,借鉴下别人是如何开发小程序的。
目前较多的方法是手机端获取,但需要root,也可以电脑安装模拟器搞,既然pc端支持小程序打开,并且拿到包后还需要在电脑上解包,为何不直接在电脑上获取更为方便(这段貌似很啰嗦)。
但不巧的是PC端微信把小程序包给加密了

当然可以直接写解密算法,既然鲁迅又说过:所有加密都伴随着解密
src=http _5b0988e595225.cdn.sohucs.com_images_20200513_985a5bf403a04c038f2621386.jpg
那何不直接获取到未加密的小程序包,所以便产生使用frida注入微信获取未加密小程序包的方法:
经过分析发现小程序包的加密算法在WeChatAppHost.dll 中的 EncryptBufToFile函数,那我们就来hook他,拿到未加密的源代码包。
这里发现前人早已造好了轮子:https://github.com/kksanyu/frida_with_wechat_applet,但可惜的是偏移写死了,不支持目前的版本,也不知道源码里用的是哪个版本的微信,

这里我们可以借助x32dbg对微信进行分析,获取函数地址:
QQ截图20201223153641.png

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

[JavaScript] 纯文本查看 复制代码
/*
 *#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[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);       
            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目录。
cmd下运行 frida WeChat.exe -l hook.js,然后随便选一个你想学习的小程序,就可以看到结果了。
微信截图_20201223134903.png

微信截图_20201223135502.png
发现完美获取未加密的包,函数地址也和我们用x32dbg查看的一样。接下来就是解包的事情了,解包的教程方法很多,比如GitHub上xuedingmiaojun的解包版本,本帖就不再讨论了。
为了方便使用我搞了个工具,在cmd下运行是这个样子的,结果是一样:
微信截图_20201223164802.png
最后:听鲁迅的话,好好学习,别搞破坏!

免费评分

参与人数 7吾爱币 +16 热心值 +6 收起 理由
zhuzhuxia111 + 1 + 1 我很赞同!
alonedancer + 1 我很赞同!
52pojie_user_08 + 1 + 1 又遇见大佬
苏紫方璇 + 10 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
漁滒 + 1 + 1 我很赞同!
武汉小Liz + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

万事笔通 发表于 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
谢谢楼主分享好经验了。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 18:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表