MiniSentry Static 是小程序安全分析工具链中的静态分析模块。本部分包含其核心源码,支持对小程序项目进行静态代码分析。
# 确保设备上拥有Node.js环境
node -v如果特定版本的 Node.js 导致程序运行出现异常,请考虑使用 Node.js v20.18。
# 创建并激活 Python 3.11 虚拟环境 (推荐)
python3.11 -m venv venv
source venv/bin/activate
# 安装依赖
cd MiniSentryStatic
pip install -r requirements.txt# 基本用法 (在 MiniSentryStatic 目录下执行)
python main.py -i [INPUT_PROJECT_PATH] -o [OUTPUT_JSON_PATH]
# 示例:使用预反编译的测试包
python main.py -i ../ReversedPackages/wxe54b7a00b72afa2f
# 示例:自定义输出位置
python main.py -i ~/projects/my_miniapp -o ~/analysis/report.json参数说明
-i/--input (必需):小程序项目根目录路径
-o/--output:结果输出文件路径 (默认为 ./output.json)
- 将原始小程序包放入 OriginalPackages/ 目录,其应满足以下结构:
wxebadf544ddae62cb/ # 微信小程序id
└── 40/ # 版本编号
├── __APP__.wxapkg # 小程序主包
├── subpackage.wxapkg # 小程序分包(可选)
└── ......
- 执行批量反编译:
python decompile.py # 输出至 ReversedPackages/- 自定义输入/输出路径:
python decompile.py -i D:/downloads/packages -o D:/reversed_projectsMiniSentryStatic/tool下提供了三种不同的反编译程序,我们推荐直接使用更强大的反编译工具 Unveilr。Unveilr 的具体使用方式请见junxiaqiao/unveilr-v2.0.0。
MiniSentryStatic/
├── src/ # 静态分析核心源码
├── tool/ # 反编译工具集
│ ├── unveilr.exe # Unveilr 反编译器
│ └── ... # 其他反编译工具
├── main.py # 主入口脚本
├── decompile.py # 批量反编译脚本
└── requirements.txt # 依赖清单
本仓库为第十八届全国大学生信息安全竞赛作品赛三等奖作品:“MiniSentry——基于任务驱动的规避型恶意小程序检测系统”的静态分析部分。
只有三等奖其实还是颇为不服气的,结合我们对往届比赛作品广泛的调研来看,我们的作品从内容和深度上是完全值得一等奖的。那么为什么没有呢?从赛后复盘来看,以下是我总结的一些经验:
-
内容不要过多。决赛答辩严格控制时间,只有 18 分钟的时间用于 PPT 和演示,内容太多就会导致无法介绍到一些较为深入的细节,反而容易让评委觉得没干什么东西。我们的作品覆盖静态分析、动态分析、code2vec、系统设计思想等,展示时间完全不够用,努力的成果展现不出来。
-
代码无用。纠结代码细节不如请个优秀的美工帮你设计前端和 PPT。确实如此,无论是初赛还是决赛,参赛队伍那么多,0 个人关心你的代码是不是真的写出来了,会吹牛才是最重要的。这点上可以参考十七届作品赛的同赛道作品ScopeChecker,人家能拿一等奖,确实是掌握了吹牛的精髓。
-
看脸。你在决赛中面对的数个评委,谁也不知道是什么货色。有的可能领域不熟就指点江山,有的可能一边吃冰棍一边听你扯淡,有的可能至始至终没有翻过一页你的报告。如果真就磕到甲沟炎了那就认命吧。
尽管如此,我觉得我设计的静态分析框架还是很不错的,虽然核心功能上(比如完整的数据流分析)并没有真正很好地做出来(这也不是这个比赛需要的),但是这个框架还是很适合后来的团队使用的,你只需要继承任务类,实现五个简单的抽象方法,就完成了一个小程序分析的模块。
大概我本身就喜欢搭建框架吧,我希望我磨这么久的一个任务框架还可以被未来的同学用上。所以如果你也在寻求加分,以小程序安全为主题,那么欢迎试一试我的这个框架,我希望它能对你有所帮助。如果有什么看不懂的地方,欢迎联系我;如果对你有用,也希望你不吝惜一个 Star。