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-Server.msi | 核心引擎 | 提供索引和搜索服务的主引擎。 |
| 工作台 | 用于管理仓库和运行服务的用户界面。 | |
| Web 用户界面 | 用于搜索/索引二进制文件和汇编函数的 Web 用户界面。 | |
| 用于 VS 15 的 Visual C++ 可再发行组件 | z3 的依赖项。 | |
| Kam1n0-IDA-Plugin.msi | 插件 | 连接器和用户界面。 |
| Cefpython 的 PyPI 包 | 用户界面的渲染引擎。 | |
| PyPI 及相关包 | Python 的包管理。随附于 IDA 6.8 和 6.9。 |
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。安装程序将检测并验证该路径。
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