Kam1n0 v2.x 是一个可扩展的汇编管理与分析平台。它允许用户首先将(大型)二进制文件集合索引到不同的仓库中,并提供诸如克隆搜索和分类等不同的分析服务。它通过使用 Application 的概念,支持多租户访问和管理汇编仓库。一个应用实例包含其独有的仓库,并提供专门的分析服务。考虑到逆向工程任务的多样性,Kam1n0 v2.x 服务器目前提供三种不同类型的克隆搜索应用:Asm-Clone、Sym1n0 和 Asm2Vec,以及基于 Asm2Vec 的 可执行文件分类。未来可以向平台添加新的应用类型。
用户可以创建多个应用实例。一个应用实例可以在特定用户组之间共享。应用仓库的读写访问权限和启用/禁用状态可以由应用所有者控制。Kam1n0 v2.x 服务器可以通过几个共享资源池同时服务于多个应用。
Kam1n0 由 Steven H. H. Ding 和 Miles Q. Li 在加拿大麦吉尔大学数据挖掘与安全实验室的 Benjamin C. M. Fung 指导下开发。它曾在 Hex-Rays 插件大赛 2015 中获得二等奖。如果您觉得 Kam1n0 有用,请引用我们的论文:
S. H. H. Ding, B. C. M. Fung, and P. Charland. Kam1n0: MapReduce-based Assembly Clone Search for Reverse Engineering. 发表在 Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (SIGKDD), 页码 461-470, 旧金山, CA: ACM Press, 2016年8月.
S. H. H. Ding, B. C. M. Fung, and P. Charland. Asm2Vec: boosting static representation robustness for binary clone search against code obfuscation and compiler optimization. 发表在 Proceedings of the 40th IEEE Symposium on Security and Privacy (S&P), 18 页, 旧金山, CA: IEEE Computer Society, 2019年5月.
Asm-Clone 应用尝试解决汇编函数的高效子图搜索问题(即图同构问题)(在 230 万函数规模下平均查询时间 <1.3 秒,平均索引时间 <30 毫秒)。给定一个目标函数(如下左图所示),它可以识别仓库中其他函数中的克隆子图(如下右图所示)。
通过差异化模糊测试和约束求解进行语义克隆搜索。一种高效且可扩展的动态-静态混合方法(在 150 万函数规模下平均查询时间 <1 秒,平均索引时间 <100 毫秒)。给定一个目标函数(如下左图所示),它可以识别仓库中其他函数中的克隆子图(如下右图所示)。支持抽象语法图的可视化。
Asm2Vec 利用表示学习。它理解汇编代码的词汇语义关系。例如,xmm* 寄存器在语义上与向量操作(如 addps)相关。memcpy 类似于 strcpy。下图展示了从 libgmp 中同一源文件 gmpz_tdiv_r_2exp 编译出的不同汇编函数。从左到右,汇编函数分别使用 GCC O0 选项、GCC O3 选项、O-LLVM 混淆器控制流图平坦化选项和 LLVM 混淆器虚假控制流图选项编译。Asm2Vec 可以静态地将它们识别为克隆。
在此应用中,用户定义一组基于功能相关性的软件类别,并提供属于每个类别的二进制文件。然后系统自动将函数分组到簇中,使得簇内的函数通过克隆关系直接或间接相连。对分类有区分力的簇被保留下来,并作为其类别的签名。给定一个目标二进制文件,系统显示它属于每个软件类别的程度。
下图展示了 Kam1n0 v2.x 的主要 UI 组件和功能。我们采用 Material Design。通常,每个用户都有一个应用列表、一个运行作业列表和一个结果文件列表。
Kam1n0 的当前版本包含两个安装程序:核心服务器和 IDA Pro 插件。
Kam1n0 核心引擎使用纯 Java 编写。您需要以下依赖项:
从我们的发布页面下载 Kam1n0-Server.msi 文件。按照说明安装服务器。系统将提示您选择安装路径。如果服务器不需要处理任何反汇编工作,IDA Pro 是可选的。换句话说,客户端使用 Kam1n0 的 IDA Pro 插件。强烈建议在 Kam1n0 服务器所在机器上安装 IDA Pro。Kam1n0 服务器将通过查找用于打开 .i64 文件的默认应用程序自动检测您的 IDA Pro。
Kam1n0 IDA Pro 插件的逻辑部分使用 Python 编写,渲染部分使用 HTML/JavaScript 编写。安装时需要以下依赖项:
接下来,从我们的发布页面下载 Kam1n0-IDA-Plugin.msi 安装程序。按照说明安装插件和运行时。请注意,插件必须安装在 IDA Pro 的 plugins 文件夹中,该文件夹位于 $IDA_PRO_PATH$/plugins。例如,在 Windows 上,路径可能是 C:/Program Files (x86)/IDA 6.95/plugins。安装程序将检测并验证该路径。
确保您安装了 Oracle 版本的 Java 11。(而不是 apt 中的 default-jdk。)
sudo add-apt-repository ppa:webupd8team/java
~webupd8team not found),如果您在代理后面,请确保设置并导出 http_proxy 和 https_proxy 环境变量,然后使用 -E 选项重试 sudo 命令。另外,如果收到“add-apt repository command not found”错误,请尝试:sudo apt install -y software-properties-common。sudo apt-get update,然后 sudo apt-get install oracle-java8-installer
java -version 验证 Java 版本;您可能需要手动设置 JAVA_HOME 环境变量(在 /etc/environment 中):JAVA_HOME=/usr/lib/jvm/java-11-oracle从 Kam1n0-Community 下载适用于 Linux 的最新版本(Kam1n0-IDA-Plugin.tar.gz 和 Kam1n0-Server.tar.gz)。
旧版本(<2.0.0)中使用的汇编代码仓库和配置文件不再受最新版本支持。如果您需要迁移旧仓库,请联系我们。
克隆最新的稳定分支(不要忘记 --recursive!):```bash
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
## 导入项目。
IntelliJ:将根目录 /kam1n0/kam1n0/ 作为 maven 项目导入。所有子模块将相应加载。
EclipseEE:将克隆的 git 仓库添加到 git 视图。从 git 仓库导入所有 maven 项目。
你可能需要修改 classpath 以解决任何错误。
所有资源路径在 IDE 内运行时动态修改
(通过 kam1n0-resources 子模块)。
构建项目:```
cd /kam1n0/kam1n0
mvn -DskipTests clean package
mvn -DskipTests package
生成的二进制文件可在 /kam1n0/build-bins/ 中找到。
要运行测试代码,首先需要从 http://chromedriver.chromium.org/ 下载 chromedriver.exe,并将其绝对路径添加到名为 webdriver.chrome.driver 的环境变量中。系统还需安装Chrome浏览器。测试代码将启动一个浏览器实例来测试UI界面。完整的测试过程大约需要3小时。```
cd /kam1n0/kam1n0
mvn -DskipTests clean package # you can skip this one if you already built the package
mvn -DskipTests package # you can skip this one if you already built the package
mvn -DforkMode=never test
这些命令仅编译 Java,并附带预编译的 libvex 和 z3 wheels。可直接开箱使用。
libvex 和 z3 的构建依赖于平台。我们使用了 Angr 的 libvex 分支。
更完善的构建脚本以及适用于 Windows/Linux 的安装程序可以在 /kam1n0-builds/ 下找到。
* kam1n0:服务端源代码。
* kam1n0-builds:安装程序源代码及构建发行版的脚本。
* kam1n0-clients:客户端源代码。
## 二进制发行版
我们有一个用于持续开发与交付的 Jenkins 服务器。最新的稳定版将在此处发布。我们会定期将内部实验分支与此仓库同步。
## 许可协议
本软件由 [Steven H. H. Ding](http://stevending.net/)、[Miles Q. Li](http://milesqli.github.io/) 和 [Benjamin C. M. Fung](http://dmas.lab.mcgill.ca/fung/) 在加拿大 [McGill 数据挖掘与安全实验室](http://dmas.lab.mcgill.ca/) 和 [Queen's L1NNA 研究实验室](https://l1nna.com/) 开发。基于 Apache License 2.0 版本分发。详情请参阅 [LICENSE.txt](https://github.com/mcgill-dmas/kam1n0-community/blob/master2.x/LICENSE.txt)。
版权所有 2014-2021 McGill 大学及研究人员。保留所有权利。
## 致谢
-orange.svg?style=for-the-badge)





| 安装程序 | 包含组件 | 描述 |
|---|---|---|
| Kam1n0-Server.msi | 核心引擎 | 提供索引和搜索服务的主引擎。 |
| 工作台 | 用于管理仓库和运行服务的用户界面。 | |
| Web 用户界面 | 用于搜索/索引二进制文件和汇编函数的 Web 用户界面。 | |
| 用于 VS 15 的 Visual C++ 可再发行组件 | z3 的依赖项。 | |
| Kam1n0-IDA-Plugin.msi | 插件 | 连接器和用户界面。 |
| Cefpython 的 PyPI 包 | 用户界面的渲染引擎。 | |
| PyPI 及相关包 | Python 的包管理。随附于 IDA 6.8 和 6.9。 |
解压两个 tarball(即 tar –xvzf Kam1n0-IDA-Plugin.tar.gz 和 tar –xvzf Kam1n0-Server.tar.gz)
Kam1n0-Server.tar.gz 文件将创建 server 目录。
在 server 目录中,您应该看到一个名为 kam1n0.properties 的文件,您将在其中设置 Kam1n0 的各种配置;这非常重要。
将 kam1n0.data.path 设置为您希望写入 Kam1n0 相关数据的位置。我们选择将其放在存放 server 的同一位置。kam1n0.ida.home 指的是您的 IDA 安装位置。如果您没有 IDA 并且不打算使用 Kam1n0 进行反汇编,请注释掉这一行(以及以下 kam1n0.ida.batch 行)。有关 kam1n0.properties 文件的更多(准确)信息,请参阅 kam1n0.properties.explained 文件。
运行 Kam1n0 服务器工作台:java -jar kam1n0-server-workbench.jar。应该会弹出一个窗口,提示您实际启动 Kam1n0。或者,运行 Kam1n0 服务器:java -jar kam1n0-server.jar --start。这将在控制台中启动服务器,不显示窗口。
要连接和使用,请在浏览器中访问 127.0.0.1:8571(Kam1n0 默认监听的端口应为 8571,但可以在 kam1n0.properties 中更改)。您应该会看到漂亮的 Kam1n0 Web 界面。然后,如果您不知道如何使用 Kam1n0,请按照 Kam1n0-Community 仓库中的教程操作。