发布时间:2026/8/23 16:33:12
如何训练自己的Pigaios匹配模型:数据集生成与模型训练完整教程 如何训练自己的Pigaios匹配模型数据集生成与模型训练完整教程【免费下载链接】pigaiosA tool for matching and diffing source codes directly against binaries.项目地址: https://gitcode.com/gh_mirrors/pi/pigaiosPigaios 是一款将 C 源代码直接与二进制文件做匹配和对比diff的逆向工程工具它可以把源代码中的函数名、结构体和枚举直接导入 IDA 数据库。本文是一份完整教程带你从零学会 Pigaios 匹配模型训练如何生成自己的数据集、如何用一条命令训练决策树模型以及如何在 IDA 中验证匹配效果 一、Pigaios 是什么30 秒了解Pigaios希腊语源之意解决的是逆向工程师的一个痛点明明手里有源代码二进制里的函数却全是 sub_401000 这样的无名符号。它的工作流程是用 Clang 解析 C/C 源码即使代码不可完整编译也没关系从每个函数的抽象语法树AST中提取特征用同样的方式从 IDA 数据库导出二进制侧的函数特征对比两边特征找出匹配并通过调用图扩散发现更多符号用专家系统 机器学习双重方式给每个匹配打分——这就是本文要训练的模型机器学习部分的实现位于ml/pigaios_ml.py训练好的模型保存在ml/clf.pkl匹配引擎sourceimp_core.py在打分时会加载该模型做最终判断。二、为什么需要训练自己的匹配模型项目自带的clf.pkl是在 ZLib、Libxml2、Curl、Busybox、GMP、coreutils、SQLite 等库上训练出来的通用模型详见datasets/README.md。但当你面对特定领域的代码比如自家固件、某个编译器版本、特定架构时用自己数据训练过的模型通常能带来更低的误报率。官方数据集的参考成绩是总体正确率约 99.4%误报率仅约 0.08%完全自训练也有机会逼近这个水平。三、环境准备安装依赖并克隆仓库Pigaios 的机器学习部分依赖 SciKit-Learn、NumPy 和 joblib。Debian 系系统可以这样安装sudo apt-get install clang python-clang-5.0 libclang-5.0-dev python-colorama python-sklearnWindows 下则通过 pip 安装pip install clang-5 colorama scikit-learn 注意机器学习属于可选功能即使不安装 SciKit-LearnPigaios 的专家系统评分依然可用。接着克隆项目git clone https://gitcode.com/gh_mirrors/pi/pigaios cd pigaios四、数据集生成如何构建训练数据4.1 数据集长什么样模型训练的原始数据是 CSV 文件每一行代表一对源函数与二进制函数的对比结果。仓库中提供了一个现成的示例数据集datasets/dataset.csv.bz2解压后可以看到它的表头name1,name2,accurate,bin_calls,bin_conditions,bin_externals,bin_globals, bin_loops,bin_recursive,bin_switchs,callees_json_matched, callees_json_non_matched,calls_diff,conditions_diff,src_calls,src_loops,...这些特征都来自函数 AST 统计包括函数调用数、条件分支数、循环数、switch 分支数全局变量、外部符号、是否递归对调用者/被调用者列表JSON 字段还会拆出总数 / 匹配数 / 未匹配数三个维度第三列accurate是标签1 表示真正匹配0 表示不匹配4.2 用两个 SQLite 数据库生成 CSV正式的数据集由源码头数据库和二进制数据库两个 SQLite 文件交叉对比而来。完整流程是先对源代码目录执行srcbindiff.py -create生成项目文件再执行srcbindiff.py -export导出源码头 SQLite 库README 中有完整的 Zlib 示例在 IDA 中打开目标二进制运行sourceimp_ida.py脚本它会把二进制侧同样特征的 SQLite 库导出出来运行数据集生成脚本python2.7 ml/pigaios_create_dataset.py 源码库.sqlite 二进制库.sqlite dataset.csv脚本核心逻辑在ml/pigaios_create_dataset.py的CPigaiosTrainer类中它会attach两个数据库、对 functions 表做全连接对比并把每对函数转成一行特征写入 CSV。同时脚本内置了一个BANNED_FUNCTIONS黑名单如main、__strcpy_chk等编译器/平台内置函数会自动跳过这些噪声样本。4.3 正负样本比例的小技巧只有正样本正确匹配是不够的模型必须见过足够多错误配对。datasets/sqlite.script给出了官方做法——从匹配结果表中取出所有accurate 1的正样本再随机抽取 100 万个accurate 0的负样本select * from matches where accurate 1; select * from matches where accurate 0 order by random() limit 1000000;把两段查询结果拼成一个 CSV就是标准的训练数据集 ✅五、模型训练一条命令搞定5.1 默认训练决策树分类器把训练用的dataset.csv放到当前工作目录脚本默认路径就是它然后执行python2.7 ml/pigaios_ml.py --train训练过程会依次打印四个阶段Loading data...加载 CSV→Fitting data with DecisionTreeClassifier(gini)用基尼系数拟合决策树→Predicting...回测→Saving model...用 joblib 保存为clf.pkl。回测输出示例一眼看懂模型质量[Thu Dec 6 21:05:14 2018] Correctly predicted 13813 out of 19075 (false negatives 5262 - 27.585845%, false positives 832 - 0.083200%) [Thu Dec 6 21:05:14 2018] Total right matches 1012981 - 99.402007%重点关注false positives误报率匹配工具里误报比漏报更伤体验目标应压到 1% 以下。5.2 验证已训练的模型不重新训练、只检验当前clf.pkl的表现python2.7 ml/pigaios_ml.py --verify它会加载模型和数据跑一遍预测输出同样的三项指标方便你横向对比不同轮次训练的效果。六、进阶玩法多分类器投票与决策树可视化pigaios_ml.py还支持多种算法和调试手段完整参数看脚本内usage()输出参数说明--random-forest随机森林分类器内置 10 棵树--logistic-regression逻辑回归--gaussian-naive-bayes高斯朴素贝叶斯--multi-classifierPigaios 多分类器决策树 随机森林 贝叶斯 GBDT 组合投票--voting-classifier硬投票集成并输出 5 折交叉验证准确率--graphviz导出决策树为pigaios.dot并渲染成图直观查看模型学到了什么--criterion-entropy把决策树准则从 gini 换成信息熵官方最终方案--multi-classifier就是多个分类器并行拟合、取平均概率投票这也是datasets/README.md中 99.4% 正确率成绩的来源。想看决策树的思维路径训练后跑一下--graphviz就能用图的方式理解模型依据哪些特征通常是函数名相似度、调用数差异等做判断 七、新模型生效在 IDA 中使用训练出的clf.pkl会被匹配引擎自动加载sourceimp_core.py中通过CPigaiosClassifier().load_model()读取它对每对候选函数调用predict_proba得出一个 0~1 的匹配概率与专家系统评分一起决定最终结果。因此你只需保证训练脚本在项目根目录下运行模型默认保存在ml/同级的clf.pkl在 IDA 中重新运行sourceimp_ida.py新的打分就自动生效了。八、常见问题Q1训练时报 sklearn 相关错误pigaios_ml.py会读取sklearn.__version__适配 0.x 与 1.x 两个大版本建议升级到较新的 scikit-learn旧版 API 差异会导致部分参数如presort失效。Q2脚本是 Python 2.7 的能跑吗仓库附带了others/py3compat.py兼容性处理两个脚本均使用from __future__ import print_functionPython 3 环境一般可直接运行。Q3数据集只有几万行够用吗特征维度约 30 个、且类别边界相对清晰几千到几万行正样本配合足量负样本即可训练出可用模型负样本宁多勿少可参考官方 100 万负样本的做法。Q4如何快速定位效果不好的原因先用--verify复现指标再用--graphviz查看决策树第一层分裂的是哪个特征如果某个特征如calls_diff主导分裂但你的场景里该特征噪声大考虑在生成数据集时过滤对应样本。九、小结本教程完整覆盖了 Pigaios 匹配模型训练闭环导出源码头/二进制两个 SQLite 库 → 用ml/pigaios_create_dataset.py生成 CSV 数据集 → 用ml/pigaios_ml.py --train训练 →--verify验证 → 在 IDA 中享受更准的符号匹配。从准备数据到模型上线熟练后 10 分钟即可跑完一轮迭代。结合--multi-classifier集成投票你完全可以为自己手上的目标平台炼出一个误报率低于 1% 的专属匹配模型 【免费下载链接】pigaiosA tool for matching and diffing source codes directly against binaries.项目地址: https://gitcode.com/gh_mirrors/pi/pigaios创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

2026/8/23 16:33:12

SMU Debug Tool实战指南:深度掌控Ryzen底层控制

SMU Debug Tool实战指南:深度掌控Ryzen底层控制 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gitcode.…

2026/8/23 16:33:12

11款地震数据分析开源工具横评|Awesome Open Geoscience精选

11款地震数据分析开源工具横评|Awesome Open Geoscience精选 【免费下载链接】awesome-open-geoscience Curated from repositories that make our lives as geoscientists, hackers and data wranglers easier or just more awesome 项目地址: https://gitcode.c…

2026/8/23 16:33:12

黑苹果 OpenCore EFI 怎么自动生成?OpCore Simplify 实操教程

黑苹果 OpenCore EFI 怎么自动生成?OpCore Simplify 实操教程 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify SMBIOS 填错一位、ACPI 补丁…

2026/8/23 19:23:25

【Matlab】异常检测自编码器算法程序

【Matlab】异常检测自编码器算法程序 一、引言 在工业生产、设备监测、图像识别、数据监测等众多工程领域中,异常检测是保障系统稳定运行、规避故障风险、提升产品质量的核心技术手段。异常检测的核心目标是从海量常规数据中挖掘偏离正常分布、违背常规运行规律的异常数据,…

2026/8/23 19:23:25

从L1-027出租题解看暴力算法在C++中的实践与优化

1. 从一道题看“暴力”的智慧:L1-027 出租的解题思路 最近在带新人刷题,又看到了PTA(程序设计类实验辅助教学平台)上这道经典的L1-027“出租”。题目本身不难,但很有意思,它像一面镜子,能清晰地…

2026/8/23 19:23:24

本科人工智能专业课程与考级(证)清单

本文基于本人所在院校首届人工智能专业的真实培养方案,把全部专业课程按内容分成八大类并逐门详细介绍。供同专业或想报考人工智能专业的同学参考。 一、课程分类培养方案中的课程按内容可分成八大类。光看课名容易一头雾水,下面我按自己的理解逐类聊聊&…

2026/8/23 19:23:24

睡眠耳机选购指南:从佩戴舒适度到降噪效果,实测避坑全解析

1. 先搞清楚“睡眠耳机”到底解决什么问题,以及它和普通耳机的区别如果你经常因为环境噪音、伴侣打鼾、或者单纯想听点助眠声音而睡不着,然后去搜“睡眠耳机”,大概率会看到一堆长得像耳塞、宣传能“主动降噪”、“无感佩戴”、“助眠音乐”的…

2026/8/23 19:23:24

卷积不止于2D:掌握1D、2D、3D卷积的适用场景

引言:当“图像思维”成为惯性提起卷积神经网络(CNN),绝大多数人脑海中浮现的第一画面就是“图像识别”——一个方形的卷积核在二维像素网格上滑过,提取边缘、纹理,最终认出猫或狗。这种“2D图像”的思维惯性…

2026/8/23 19:18:24

技术创业实战:从零构建Web服务的技术栈选型与工程实践

在实际的技术创业和投资领域,一个项目的成功启动与高效运转,其底层逻辑往往与扎实的工程实践密不可分。当我们在新闻中看到“某位投资人投了一位年轻创业者”这类信息时,其背后隐含的是一套从技术选型、产品原型开发、团队协作到最终交付的完…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:02:04

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:02:04

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:02:04

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 13:29:45

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…