Kam1n0 v2.0的IDA Pro插件创建一个文件夹~/Kam1n0/
来存储插件数据和错误。本教程首先介绍Kam1n0 v2.0基本功能的IDA Pro插件,然后通过简单的索引和搜索示例进行介绍。
功能性
带有插件的Kam1n0 v2.0引擎提供了索引和搜索程序集功能的功能。
图标 | 功能性 | 描述 | 热键 |
---|---|---|---|
搜索当前功能 | 在当前地址搜索功能 | Ctrl + Shift + S | |
选择要搜索的功能 | 选择要搜索的功能 | Ctrl + Shift + A | |
索引当前函数 | 在当前地址索引功能 | Ctrl + Shift + K | |
选择要编制索引的函数 | 选择要编制索引的函数 | Ctrl + Shift + J | |
没找到图标 | 成分分析 | 用二进制文件搜索 | 不适用 |
管理连接 | 管理与不同存储库的连接 | 不适用 | |
管理储存空间 | 管理本地/远程帐户和存储 | 不适用 | |
没找到图标 | 片段搜索(新) | 搜索选定的程序集片段 | 不适用 |
即使您可以从IDA Pro Functions Window
到搜索/索引功能的弹出菜单中选择功能,也可以使用和在其他位置(例如工具栏)打开Selection Window
,它为多次搜索提供了更详细的配置。
例如,您可以应用不同的过滤器,然后选择要用于搜索/索引它们的连接。
通过示例
让我们使用引擎和插件进行简单的索引和搜索案例。
准备数据
假设我们有两个libpng-1.7.0b54.dll
来自libpng和 zlib-1.2.7.dll
zlib的二进制文件。这两个文件包含在我们的发行文件中Example.zip
。我们建议您先尝试使用它们,以与以下描述保持一致。您可以稍后根据需要索引其他二进制文件。我们尝试为第一个二进制文件建立索引,libpng-1.7.0b54.dll
并zlib-1.2.7.dll
针对它搜索第二个二进制文件。
启动引擎并获取IDA Pro插件的URL
在此步骤中,您应该启动Kam1n0引擎,并通过右键单击它并选择“复制链接地址”,从要使用的APP的主页中获取IDA Pro插件的URL。
建立连接
打开IDA Pro,然后单击Manage Connection Button
工具栏中的。现在,您可以查看和编辑插件的连接。在表格中填写IDA Pro插件的URL,用户名,密码,然后单击Update/Add Button
和OK
。
索引编制
要仅索引某些功能,请单击Select Functions to Index Button
工具栏上的(或上述其他位置)。选择要索引的功能,然后单击Continue Button
。每个索引的二进制文件均由其路径唯一标识,每个索引的函数均由其二进制ID和起始地址唯一标识。
嵌入式铬浏览器将弹出并显示索引编制进度。它具有与Kam1n0 Web界面相同的UI集。您可以离开页面或通过页面监视进度。
功能搜索
打开IDA Pro并zlib-1.2.7.dll
照常反汇编目标二进制文件。单击Select Functions to Search Button
工具栏中的。假设我们要搜索alder32
和compress2
函数。使用ctrl选择它们,然后在列表中单击。点击Continue Button
。
嵌入式铬浏览器将弹出并显示搜索进度,完成后将重定向到结果页面。与Kam1n0 Web UI相似,对于每个检索到的功能,您都可以通过单击相应的图标来查看相似性,流程图比较,全文对齐,克隆组对齐。您也可以通过单击右侧的克隆图来查看它。它具有与Kam1n0 Web界面相同的UI集,除了这里具有附加的流程图链接功能。
用户可以从克隆搜索结果呈现视图中的基本框跳到IDA视图A中的相应基本块。克隆列表视图和任何流程图视图均提供此功能。
在任何与“流程图”相关的视图中,如果双击图中的特定基本块,则IDA View-A将跳至文本或图形中的同一基本块。在所有克隆列表视图中,如果右键单击上下文菜单到树中的查询节点,则可以在IDA View-A中看到该选项跳转到相应的汇编功能。
成分分析
要搜索二进制文件的所有功能并将结果保存在将显示在服务器主页上的文件中,请单击Composition Analysis
工具栏中的。嵌入式铬浏览器将弹出并显示分析进度。您可以离开页面或通过页面监视进度。
您可以稍后在主页中以与使用Web UI相同的方式找到成分分析的结果。
程序集片段搜索
从版本1.xx开始,支持IDA Pro中的程序集片段搜索。您只需选择几行汇编代码,然后右键单击它即可弹出菜单。选择条目Query fragment
。嵌入式铬浏览器将弹出并显示搜索进度,完成后将重定向到结果页面。结果页面类似于函数搜索的结果。
搜索框
有一个搜索框可帮助您在嵌入式铬浏览器的网页上快速找到所需信息。搜索框隐藏在每个网页的右侧。如果用户按下control+F
或单击,它可以被激活并滑出search icon
。键入要搜索的关键字并按键后Enter
,可以在网页上循环搜索结果。通过按下ESC
键,一个将清除搜索文本框以及所有突出显示的搜索结果。
插件如何工作
该插件是使用Python编写的idaapi
。在原始的Kam1n0 IDA插件中,IDA Pro和克隆搜索结果呈现窗口之间是单向通信。用户在IDA视图中发送克隆搜索请求后,插件将创建一个新的IDA表单来处理该请求,并创建一个新的结果呈现窗口过程。如果查询包含多个汇编函数,则IDA表单将搜索它们中的每个并合并搜索结果。在此过程中,IDA Pro窗口被冻结,并且用户无法使用它,直到搜索完成(如下图所示)。
在更新的Kam1n0 v2.x IDA插件中,我们删除了原始IDA表单进行搜索,并采用了基于Web的界面来逐步搜索和合并克隆结果。搜索操作是使用插件过程进行的。因此,主IDA Pro进程不会被阻止。在进行克隆搜索时,用户仍可以使用其他IDA窗口。
在原始的IDA Pro插件中,无法在渲染窗口中调用IDA SDK函数。我们在IDA Pro流程和插件流程之间引入了双向消息通信通道。在插件过程中,可以使用JavaScript或Python执行任何IDA命令。命令被推送到这两个进程之间的共享消息队列中。在IDA Pro流程中,我们创建一个消息侦听器,该消息侦听器监视队列并执行所有请求的命令。由于multiprocessing
Python中的原始模块无法在IDA Pro或其他Python嵌入式应用程序中运行,因此我们实现了一个简单的通信渠道。这样的设计使克隆搜索结果呈现过程与IDA Pro UI过程之间可以进行交互。
用户界面
用户界面包括两部分:
- 本机
idaapi
表单和控件:“连接管理”表单,“选择要搜索的功能”表单和“选择要索引的功能”表单。 - 与IDA Pro的Kam1n0 v1.x插件不同,新插件直接使用Kam1n0服务器上的网页。它们共享同一组UI,以实现更好的代码可维护性。
同步化
我们发现很难使用异步更新IDA Pro UI idaapi
。如果在用户与界面交互(例如单击)时除主线程以外的其他线程更新了界面,则IDA Pro将冻结/崩溃。相反,我们创建了一个新过程来呈现克隆搜索结果。向后通信通过进程间通信实现。用户仍然可以在整个搜索和渲染过程中使用IDA Pro。
通讯
为了与Kam1n0 Web服务进行交互,我们使用urllib
Python内置的内置网络包装程序来发送请求,并使用json
lib来解析json结果。该连接本身可以是其他反汇编程序的插件的独立客户端。一个人仅需要在IDAUtils中为其他反汇编程序实现反汇编提取实用程序。