Kam1n0 v2.x是一个可扩展的装配体管理和分析平台。它允许用户首先将(大型)二进制文件集合索引到不同的存储库中,并提供不同的分析服务,例如克隆搜索和分类。它通过使用应用程序的概念来支持多租户访问和程序集存储库的管理。应用程序实例包含其自己的专有存储库并提供专门的分析服务。考虑到逆向工程任务的多功能性,Kam1n0 v2.x 服务器目前提供了三种不同类型的克隆搜索应用程序: Asm-Clone 、 Sym1n0和Asm2Vec ,以及基于Asm2Vec的可执行分类。新的应用程序类型可以进一步添加到平台中。
一个用户可以创建多个应用程序实例。应用程序实例可以在特定的用户组之间共享。应用程序存储库的读写访问和开关状态可以由应用程序所有者控制。 Kam1n0 v2.x 服务器可以使用多个共享资源池同时为应用程序提供服务。
Kam1n0 由 Steven HH Ding 和 Miles Q. Li 在加拿大麦吉尔大学数据挖掘和安全实验室 Benjamin CM Fung 的监督下开发。它在 2015 年 Hex-Rays 插件大赛中获得了二等奖。如果您发现 Kam1n0 有用,请引用我们的论文:
SHH Ding、BCM Fung 和 P. Charland。 Kam1n0:用于逆向工程的基于 MapReduce 的程序集克隆搜索。第 22 届 ACM SIGKDD 国际知识发现和数据挖掘会议 (SIGKDD) 会议记录,第 461-470 页,加利福尼亚州旧金山:ACM Press,2016 年 8 月。
SHH Ding、BCM Fung 和 P. Charland。 Asm2Vec:提高二进制克隆搜索的静态表示鲁棒性,防止代码混淆和编译器优化。第 40 届 IEEE 安全与隐私研讨会 (S&P) 会议记录,18 页,加利福尼亚州旧金山:IEEE 计算机协会,2019 年 5 月。
Asm-Clone应用程序试图解决汇编函数的高效子图搜索问题(即图同构问题)(2.3M函数的平均查询时间<1.3s,平均索引时间<30ms)。给定一个目标函数(如下所示左侧的函数),它可以识别存储库中其他函数(如下所示右侧的函数)中克隆的子图。
通过差异化模糊测试和约束求解进行语义克隆搜索。一种高效且可扩展的动态-静态混合方法(平均查询时间<1s,平均索引时间<100ms,具有 150 万个函数)。给定一个目标函数(如下所示左侧的函数),它可以识别存储库中其他函数(如下所示右侧的函数)中克隆的子图。支持抽象语法图的可视化。
Asm2Vec 利用表示学习。它理解汇编代码的词法语义关系。例如, xmm*
寄存器在语义上与addps
等向量操作相关。 memcpy
与strcpy
类似。下图显示了从 libgmp 中gmpz_tdiv_r_2exp
的相同源代码编译的不同汇编函数。从左到右,汇编函数使用 GCC O0 选项、GCC O3 选项、O-LLVM 混淆器控制流图、Flattening 选项和 LLVM 混淆器 Bogus 控制流图选项进行编译。 Asm2Vec 可以静态地将它们识别为克隆。
在此应用程序中,用户定义一组基于功能相关性的软件类,并提供属于每个类的二进制文件。然后系统自动将函数分组为簇,簇中的函数通过克隆关系直接或间接连接。对分类具有区分性的簇被保留并用作其类别的签名。给定一个目标二进制文件,系统会显示它属于每个软件类别的程度。
使用Asm2Vec作为其函数相似度计算模型
下图显示了 Kam1n0 v2.x 的主要 UI 组件和功能。我们采用材料设计。一般来说,每个用户都有一个应用程序列表、一个正在运行的作业列表和一个结果文件列表。
当前版本的 Kam1n0 由两个安装程序组成:核心服务器和 IDA Pro 插件。
安装人员 | 包含的组件 | 描述 |
---|---|---|
Kam1n0-服务器.msi | 核心引擎 | 主引擎提供索引和搜索服务。 |
工作台 | 用于管理存储库和运行服务的用户界面。 | |
网页用户界面 | 用于搜索/索引二进制文件和汇编函数的 Web 用户界面。 | |
适用于 VS 15 的 Visual C++ 可再发行版 | z3 的依赖关系。 | |
Kam1n0-IDA-插件.msi | 插件 | 连接器和用户界面。 |
Cefpython 的 PyPI 轮子 | 用户界面的渲染引擎。 | |
PyPI 和依赖轮 | Python 的包管理。包含在 IDA 6.8 和 6.9 中。 |
Kam1n0核心引擎纯粹用Java编写。您需要以下依赖项:
从我们的发布页面下载Kam1n0-Server.msi
文件。按照说明安装服务器。系统将提示您选择安装路径。如果服务器不需要进行任何拆解,那么IDA Pro是可选的。换句话说,客户端使用IDA Pro的Kam1n0插件。强烈建议将 IDA Pro 与 Kam1n0 服务器一起安装。 Kam1n0 服务器将通过查找用于打开.i64
文件的默认应用程序来自动检测您的 IDA Pro。
Kam1n0 IDA Pro 插件使用 Python 编写逻辑,使用 HTML/JavaScript 编写渲染。其安装需要以下依赖项:
接下来,从我们的发布页面下载Kam1n0-IDA-Plugin.msi
安装程序。按照说明安装插件和运行时。请注意,该插件必须安装在 IDA Pro 插件文件夹中,该文件夹位于$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
环境变量,然后使用 sudo 上的-E
选项重试。此外,如果您收到“add-apt存储库命令未找到”错误,请尝试: 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)。
解压两个 tarball(即 tar –xvzf Kam1n0-IDA-Plugin.tar.gz 和 tar –xvzf Kam1n0-Server.tar.gz)
Kam1n0-Server.tar.gz 文件将创建服务器目录。
在server
目录中,您应该看到一个名为kam1n0.properties
的文件,您可以在其中为 kam1n0 设置各种配置;这非常重要。
将kam1n0.data.path
设置为您想要写入 kam1n0 相关数据的位置。我们选择将其放在我们保存server
同一位置。 kam1n0.ida.home
指的是您的 IDA 安装位置。如果您没有 IDA 并且不打算使用 kam1n0 进行反汇编,请注释此行(以及kam1n0.ida.batch
,后面的行)。有关kam1n0.properties
文件的更多(准确)信息,请参阅kam1n0.properties.explained
文件。
运行 kam1n0-server-workbench: java -jar kam1n0-server-workbench.jar
。这应该会弹出一个窗口,提示您实际启动 kam1n0。或者,运行 kam1n0-server: java -jar kam1n0-server.jar --start
。这将从没有窗口的控制台启动服务器。
要连接和使用它,请在浏览器中转到127.0.0.1:8571
侦听的默认端口应为 8571,但可以在 kam1n0.properties 中更改)。您应该会看到漂亮的 kam1n0 Web UI。如果您不知道如何使用 kam1n0,请按照 Kam1n0-Community 存储库上的教程进行操作。
最新版本不再支持以前版本(<2.0.0)中使用的汇编代码存储库和配置文件。如果您需要迁移旧存储库,请联系我们。
克隆最新的稳定分支(不要忘记--recursive
!):
git clone --recursive -b master2.x --single-branch https://github.com/McGill-DMaS/Kam1n0-Community
IntelliJ:将根目录 /kam1n0/kam1n0/ 导入为 Maven 项目。所有子模块将相应地加载。 EclipseEE:将克隆的 git 存储库添加到 git 视图。从 git 存储库导入所有 Maven 项目。您可能需要修改类路径以解决任何错误。在 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
这些命令仅编译带有 libvex 和 z3 预编译轮的 java。它开箱即用。 libvex 和 z3 的构建依赖于平台。我们使用 Angr 的 libvex 分支。更重要的构建脚本以及 Windows/Linux 的安装程序可以在 /kam1n0-builds/ 下找到
我们有一个 Jenkin 服务器用于持续开发和交付。最新的稳定版本将发布在这里。我们会定期将我们的内部实验分支与此存储库同步。
该软件由加拿大麦吉尔数据挖掘和安全实验室以及皇后大学 L1NNA 研究实验室的 Steven HH Ding、Miles Q. Li 和 Benjamin CM Fung 开发。它根据 Apache 许可证版本 2.0 分发。详细信息请参阅LICENSE.txt。
版权所有 2014-2021 麦吉尔大学和研究人员。版权所有。