结果公布

IDA 官方收到 9 份提交结果,和往常一样,对提交上的插件作出评审,以下为评审结果:

  • 第一名:IdaClu 🏆
  • 第二名:Heimdallr 🥈
  • 第三名:Symless 🥉

以下为完整提交清单:

  • AntiDebugSeeker
  • Gepetto
  • Heimdallr
  • Hvcall GUI
  • IdaClu
  • Match4IDA
  • quakevm
  • Symless
  • UserComment

AntiDebugSeeker

插件地址:https://github.com/LAC-Japan/IDA_Plugin_AntiDebugSeeker

此插件是一个自动提取恶意软件使用的反调试技术并将其显示在 IDA 中,创建此工具的目的是为了帮助那些不熟悉恶意软件分析或尚不熟悉反调试技术的人,通过该工具,用户可以自动提取恶意软件使用的潜在反调试方法,使分析人员更容易采取适当的应对措施。

插件主要功能如下:

  • 提取可能被恶意软件用于反调试的 Windows API
  • 除了 API 之外,还可以根据关键字来提取相应的反调试技术,因为有些反调试方法仅通过 API 调用无法全面识别

此外,可以在用来检测的规则文件里添加想要检测的关键字,对于加壳的恶意软件,在解压并修复 IAT (导入地址表) 后运行此插件会更有效。

安装

将以下三个文件放在 IDA 的插件目录下:

  • anti_debug.config:包含检测反调试技术规则的文件
  • anti_debug_techniques_descriptions.json:包含检测规则的描述文件
  • AntiDebugSeeker.py:反调试检测程序

用法

Ctrl + Shift + D (启动插件)

分析完成后,将出现一个名为 "Anti Debug Detection Results" 的结果显示。

反调试检测结果:

  • 分类名称:Anti_Debug_API 中定义的 API 类别名称如 anti_debug.config 中列出的
  • 可能的反调试 API:显示检测到的 API 列表
  • 地址:使用检测到的 API 的地址
  • 可能的反调试技术:检测名称由 Anti_Debug_Technique 中定义的关键字标识,如 anti_debug.config 中列出的
  • 地址:第一个检测到的关键字的地址

双击检测到的行将跳转到指定的地址。

Ctrl + Shift + E (编辑配置文件)

检查和编辑 anti_debug.config 内容的功能,进行更改后,单击 "保存" 按钮保存修改。

支持的功能

运行插件后,检测到的 API 和关键字会以不同的颜色突出显示,此外,如果检测到 Anti_Debug_API 中指定的 API,则会将类别名称添加为注释。同样,如果在 Anti_Debug_Technique 中检测到规则名称,则该规则的描述将作为注释添加到第一个检测到的关键字。

关于 anti_debug.config

此配置文件包含 AntiDebugSeeker.py 使用的检测规则 (Anti_Debug_API 和 Anti_Debug_Technique 的部分)。

Anti_Debug_API

可以自由创建类别并添加想要检测的 API

Anti_Debug_Technique

可以设置 1 到 3 个关键字,搜索的基本流程:首先,搜索第一个关键字,如果找到,则在指定字节数 (默认为 80 字节) 内搜索第二个关键字,然后应用相同的过程来搜索第三关键字。

如果想设置自定义搜索范围而不是使用默认值,可以在设置的关键字末尾指定 "search_range=value",这将更改已配置的每个规则的搜索范围。

可检测到的反调试技术

可以检测到反调试技术:

  • HeapTailMarker
  • KernelDebugger
  • MarkerDbgBreakPoint_RET
  • DbgUiRemoteBreakin_Debugger_Terminate
  • PMCCheck_RDPMC
  • TimingCheck_RDTSC
  • SkipPrefixes_INT1
  • INT2D_interrupt_check
  • INT3_interrupt_check
  • EXCEPTION_BREAKPOINT
  • ICE_interrupt_check
  • DBG_PRINTEXCEPTION_C
  • TrapFlag_SingleStepException
  • BeingDebugged_check
  • NtGlobalFlag_check
  • NtGlobalFlag_check_2
  • HeapFlags
  • HeapForceFlags
  • Combination_of_HEAP_Flags
  • Combination_of_HEAP_Flags_2
  • ReadHeapFlags
  • ReadHeapFlags_2
  • DebugPrivileges_Check
  • Opened_Exclusively_Check
  • EXCEPTION_INVALID_HANDLE_1
  • EXCEPTION_INVALID_HANDLE_2
  • Memory_EXECUTE_READWRITE_1
  • Memory_EXECUTE_READWRITE_2
  • Memory_Region_Tracking
  • Check_BreakPoint_Memory_1
  • Check_BreakPoint_Memory_2
  • Software_Breakpoints_Check
  • Hardware_Breakpoints_Check
  • Enumerate_Running_Processes
  • ThreadHideFromDebugger
  • NtQueryInformationProcess_PDPort
  • NtQueryInformationProcess_PDFlags
  • NtQueryInformationProcess_PDObjectHandle
  • NtQuerySystemInformation_KD_Check

参考

マルウェアからアンチデバッグ機能を自動識別するツール「AntiDebugSeeker」を公開

Gepetto

插件地址:https://github.com/JusticeRage/Gepetto

介绍

Gepetto 是一个 Python 脚本,它使用 OpenAI 的 gpt-3.5-turbogpt-4 模型来为 IDA Pro 反编译的函数提供含义。目前,它可以要求 gpt-3.5-turbo 去解释函数的作用,并自动重命名其变量。以下是一个简单的示例,说明它可以在几秒钟内提供结果:

设置

只需将此脚本以及 gepetto 文件夹放入 IDA 插件文件夹 ($IDAUSR/plugins) 中即可,默认情况下,在 Windows 上,为 %AppData%\Hex-Rays\IDA Pro\plugins (可能需要创建该文件夹)。

需要将所需的包添加到 IDA 的 Python 安装中,脚本才能正常工作。通过检查以下注册表项查找 IDA 正在使用哪个解释器:Computer\HKEY_CURRENT_USER\Software\Hex-Rays\IDA (Windows 上的默认值:%LOCALAPPDATA%\Programs\Python\Python39),最后,使用相应的解释器,只需运行:

[/path/to/python] -m pip install -r requirements.txt

还需要编辑 gepetto/config.ini 配置文件并添加自己的 API 密钥,请注意,OpenAI API 查询不是免费的。为了使用 GPT-4,需要相应 API Key,如果你的帐户不支持 GPT-4,API 将返回以下错误消息

The model: `gpt-4` does not exist

用法

正确安装插件后,从 IDA 伪代码窗口的上下文菜单中调用它,如下图所示:

从 "编辑" > "Gepetto" 菜单在 Gepetto 支持的模型之间切换:

还可以使用以下热键:

  • 请模型解释该功能:Ctrl + Alt + H
  • 为函数的变量请求更好的名称:Ctrl + Alt + R

人工智能的回复存在一定的随机性,如果由于某种原因收到的初始响应不满意,可以随时再次运行该命令。

局限性

  • 该插件需要配合 HexRays 反编译器才能运行。
  • gpt-3.5-turbogpt-4 是通用语言模型,很可能会出错!始终对返回的结果持批评态度!

翻译

可以通过编辑配置中的区域设置来更改 Gepetto 的语言,例如,要使用法语插件,只需添加:

[Gepetto]
LANGUAGE = "fr_FR"

所选区域设置必须与 gepetto/locales 中的文件夹名称匹配,如果所需的语言不可用,可以通过自己添加来为项目做出贡献!所使用到的翻译为 Transifex

Heimdallr

插件地址:https://github.com/interruptlabs/heimdallr-ida

介绍

Heimdallr IDA 插件为每个 IDA 实例公开一个本地主机 gRPC 服务器,允许 Heimdallr 客户端导航到 IDA 中的位置,目前仅限 mac 端支持。

安装

使用 pip 安装 heimdallr-ida (确保使用的 pip 与 IDA 使用的 python 环境匹配)

pip3 install -e git+https://git@github.com/interruptlabs/heimdallr-ida.git#egg=heimdallr_ida
pip3 install -e .

启动 IDA 并在控制台中输入以下内容

import heimdallr
heimdallr.install()

重新启动 IDA 并验证 gRPC 服务器是否已成功启动,若已成功启动则会在输出控制台中显示如下内容:

[Heimdallr RPC] Plugin version 0.0.1
Starting server on 127.0.0.1:51278
Wrote {"pid": 36813, "address": "127.0.0.1:51278", "file_name": "example.i64", "file_hash": "b058de795064344a4074252e15b9fd39"} to /Users/roberts/.idapro/heimdallr/36813

最后安装 heimdallr 客户端

使用

现在从系统中的任何位置打开 disas://URI,这可以是 Slack DM、Confluence 页面或 Obsidian 注释。格式如下:

disas://example.i64%3Foffset%3D0x1002315b6%26hash%3Db058de795064344a4074252e15b9fd39%26view%3Ddisasm 

这些是通过在 heimdallr_ida 插件中创建注释自动生成的

相关 IDB 的搜索行为如下:

  • 搜索该数据库已打开的打开 IDA 实例
  • 搜索 IDA 最近打开的文件以获取数据库的位置
  • 在 idb_path 中搜索匹配的文件

搜索模式用于确保链接可以在团队内轻松使用,只要有一个基于相同源文件且名称相同的数据库。

IDB 通过数据库名称和源文件哈希进行匹配,因此,更改数据库名称将导致 URI 不再有效。

可以通过突出显示 IDA 中要复制的文本区域并按 Ctrl + Shift + N 来做笔记,文本将添加到代码块中,并带有返回其来源的链接并添加到剪贴板。

如果想创建链接与其他人共享,请按 Ctrl + Alt + N,然后将添加指向在 IDA 中的位置的链接,目前,这仅适用于反汇编和伪代码视图。

Ghidra 交叉兼容性

Foundry Zero 的优秀人员创建了一个 Ghidra 插件,它提供了相同的功能,你可以在 https://github.com/foundryzero/ghidra-deep-links 这里找到它,这些插件是兼容的,这意味着使用其插件创建的链接可以使用此客户端在 IDA 中打开,反之亦然。这可方便与其他研究人员合作,无论使用什么反汇编程序!

常见问题

IDA 获取不到依赖

使用的 Python IDA 版本可能与系统的版本不同,要验证正在使用的 python 版本,可以将以下内容放入 IDA Python 控制台中。

Python>import os
Python>os.__file__
'/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/os.py'

并在终端中执行相同的操作

roberts@RobertS-IL-Mac Documents % python3 -q
>>> import os
>>> os.__file__
'/opt/homebrew/Cellar/python@3.10/3.10.8/Frameworks/Python.framework/Versions/3.10/lib/python3.10/os.py'

从这里可以更新 IDA 以匹配: /Applications/IDA\ Core\ 8.1/idabin/idapyswitch

或者使用 IDA 中的路径将软件包安装到相关的 python 环境中: 

/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/bin/python3 -m pip install -e git+ssh://git@github.com/interruptlabs/heimdallr-ida.git#egg=heimdallr_ida

Hvcall GUI

插件地址:https://github.com/gerhart01/Hyper-V-Tools/tree/main/Extract.Hvcalls

Extract.Hvcall 用于从 Hyper-V 核心二进制文件自动提取 Hyper-V 中的 hypercalls 名称和代码:

securekernel.exe
winhvr.sys
winhv.sys
ntoskrnl.exe

另外还可以添加

securekernella57.exe
ntkrla57.exe

使用 IDA PRO 进行二进制分析:

  • 下载新版本的 idahunt 插件并将其放置在带有 Extract.Hvcalls 的目录中,idahunt 在某些情况下可用于反汇编二进制文件
  • 安装 Python 插件 pip install sarkpip install pefile 或者 pip install -r requirements.txt
  • 运行 Extract.Hvcalls.exe
  • 选择 Hyper-V 核心二进制文件和 IDA PRO 的路径或修改程序文件夹中的 config.json (最好用于多次运行)
  • 单击 "开始" 按钮
  • 等待,直到 IDA PRO 完成脚本处理
  • 可以在 "result" 目录中看到生成的 json 文件:hvcalls_results.json - Hyper-V hypercalls 列表、hvcalls_unknown.json - 未知 Hypercall 代码的 hypercalls 名称列表 (需要对其进行手动分析)

建议首先从 winhvr.sys 和 winhv.sys 中提取 hypercalls,然后从其他文件中提取如果提取结果有问题,请尝试手动准备 IDA PRO 数据库并将其像往常一样保存在 i64 文件中。

IdaClu

插件地址:https://github.com/harlamism/IdaClu

介绍

IdaIcu 是一个 IDA Pro 插件,它大概的运行过程如下:

  • 寻找相似的函数
  • 批量分组标记函数
  • 对标记的函数重复步骤 1

插件的显着特点在于 "如何" 搜索和标记。

目的

除了插件生态系统之外,IDA 用户社区还创建了很多脚本,其复杂程度各不相同。有些可以从标准化的输入/输出数据格式和 GUI 界面中受益匪浅。然而,由于时间限制、学习 PyQt/PySide 的相对复杂性以及导航 IDAPython API 的多个向后不兼容版本的挑战,许多社区成员无法支撑。因此,即使是我们中最优秀的人有时也会从文本文件或 IDA 输出窗口中解析自定义数据格式。

IdaClu 用作 IDAPython 脚本的树或表视图,提供以下功能:

  • 使用前缀文件夹颜色的任意组合来标记函数
  • 过滤输入/输出
  • 使用进度条指示器
  • 使用其他脚本的输出
  • 向其他脚本提供输出

如果 IDAPython 脚本遵循脚本结构的多种约定,则它们可以作为 IdaClu 的子插件,一个核心目的是尽量减少这种影响。

该插件附带了一组开箱即用的 x18 简单且方便的脚本,使 IdaClu 作为独立工具非常有用。因此,社区的支持并不是 "必须" 的。

标准脚本

脚本被分组,虽然大多数名称是不言自明的,但有些可能需要解释:

  • Xref Analysis
    • Xref Count:按代码外部参照计数分组
    • Xref Source:leaf 函数、仅具有显式调用的函数、具有虚拟调用的函数
    • Xref Destination:独立函数、VFT 函数、库调用函数
  • Constant Analysis
    • Common Constants:按引用的常量分组
    • String Refs:按字符串引用分组
    • Global Variable Analysis:按定义名称的引用进行分组
    • Lib Usage Analysis:按库函数调用分组
    • API Usage Analysis:按 API 函数调用分组
  • Control Flow
    • Control Flow Analysis:包含循环的函数、switch-case 函数、递归函数
    • Pseudocode Size:按伪代码行数分组
  • Code Coverage
    • DynamoRIO Functions:已触及/未触及的函数
  • Function Similarity
    • SSDEEP Similarity:与 ssdeep 相似的功能集群
    • TLSH Similarity:与 tlsh 相似的功能集群
  • Virtual Functions
    • Explicit Calls:按函数调用分组,参数显示在注释中
    • Implicit Calls:按 VFT 函数调用分组,参数显示在注释中
  • Filter Analysis
    • Distinct Folders:按文件夹路径分组
    • Distinct Prefixes:按前缀名称分组
    • Distinct Colors:按突出显示颜色分组

用户界面

用户界面有意遵循用户体验中的 米勒定律 —— "人们的直接记忆范围仅限于大约七个项目,加上或减去两个。"

以下是主要小部件的细分:

  • Toolkit:可滚动区域,带有可识别 IDAPython 脚本的按钮
  • View:基于表格的视图,用于脚本输出、函数选择和呈现当前标签
  • Filters:输入控件以细化所选脚本的焦点
  • Labels:所选功能的前缀或文件夹名称
    • R:递归模式的切换按钮
    • PREFIX:用于在文件夹和前缀标签模式之间切换的交互式标签
    • ADD:应用标签设置的按钮
    • CLEAR:清除标签设置的按钮
  • Palette:一组 5 个互斥的颜色突出显示按钮

Tips

  • IdaClu 旨在整合新 IDA 版本的新功能,同时保持与版本无关的方法,解决方案是优雅降级。因此,UI 将适应较旧的 IDA 版本,不包括不支持的功能。
  • 双击树视图中的任意行可导航到 IDA 中相应的函数
  • 过滤器小部件通过单击标题来切换折叠
  • 单击工具包小部件标题可将树视图和侧边栏与位置交换
  • 重命名上下文菜单允许对所选函数名称进行自定义更改

安装

IdaClu 没有外部包依赖。不需要构建。可通过下载存储库并将 idaclu.py 文件和 idaclu 文件夹复制到 IDA Pro 插件目录来安装它:

  • C:\Program Files\IDA Pro \plugins
  • C:\Users\\AppData\Roaming\Hex-Rays\IDA Pro\plugins

虽然插件本身不需要外部包,但某些子插件脚本可能需要。这不会阻止插件运行,但它会使相应的按钮变灰,并会有提示。

如果需要这些子插件脚本,请按照以下说明操作:

py-tlsh

pip install py-tlsh

ssdeep

# DO NOT: pip install ssdeep
> git clone https://github.com/MacDue/ssdeep-windows-32_64
> cd ssdeep-windows-32_64-master
> python setup.py install

yara-python

# IDA >v7.x
> pip install yara-python
# IDA v6.x
> pip install yara-python==3.11.0

为了持续更新,请使用 Git 克隆存储库并在 IDA 插件文件夹中创建符号链接:

Windows

:: C:\Users\<username>\AppData\Roaming\Hex-Rays\IDA Pro\plugins\idaclu.py
> mklink "C:\Program Files\IDA Pro X.X\plugins\idaclu.py" <plugin_path>\idaclu.py

:: C:\Users\<username>\AppData\Roaming\Hex-Rays\IDA Pro\plugins\idaclu
> mklink /d "C:\Program Files\IDA Pro X.X\plugins\idaclu" <plugin_path>\idaclu

Mac

% ln -s <plugin_path>\idaclu.py /Users/<username>/.idapro/plugins/idaclu.py
% ln -s <plugin_path>\idaclu /Users/<username>/.idapro/plugins/idaclu

脚本生态系统

该插件充当没有 GUI 的脚本的 GUI,通过遵循脚本约定,可以使它们与 IdaClu 兼容。正确完成后,侧栏中将出现相应的按钮。

脚本说明

以下块是强制性的,用于在 IdaClu 中注册脚本:

SCRIPT_NAME = 'Xref Count'  # arbitrary name that will appear on the corresponding button
SCRIPT_TYPE = 'func'  # 'func' or 'custom' depending on whether the script iterates on functions or some other data structures to produce the output
SCRIPT_VIEW = 'tree'  # 'tree' is the only currently supported view, 'table' is to be added
SCRIPT_ARGS = []  # experimental feature, supports tuples of the form ('<control_name>', '<control_type>', '<control_placeholder>')

主功能

除此之外,每个脚本必须定义一个 get_data() 函数,目前有 x2 可能的原型:

# Case #1: SCRIPT_TYPE == 'func':
def get_data(func_gen=None, env_desc=None, plug_params=None):
    # 1. Iterate over pre-filtered functions via func_gen() generator
    # 2. Progress bar values are calculated automatically

# Case #2: SCRIPT_TYPE == 'custom':
def get_data(progress_callback=None, env_desc=None, plug_params=None):
    # 1. Iterate over custom data structures
    # 2. Use `progress_callback(<current_index>, <total_count>)` to report current progress

执行环境

如果脚本逻辑依赖于特定的 IDA 配置,IdaClu 插件可以在 env_desc 对象中提供以下属性:

- feat_bookmarks
- feat_cpp_oop
- feat_folders
- feat_golang
- feat_ida6
- feat_ioi64
- feat_lumina
- feat_microcode
- feat_microcode_new
- feat_python3
- feat_undo
  ...

在脚本执行之前,这些字段保证被初始化,可以在 IDA 的输出窗口中参考完整列表。在横幅的正下方,将有一个环境部分,其中包含当前值的转储。

自定义输入

作为一项实验性功能,该插件支持每个脚本的自定义输入。定义后,以下代码将在第一次单击时呈现脚本按钮下的输入字段:

SCRIPT_ARGS = [('file_path', 'file', 'input the file path')]

第二次单击将此数据发送到目标脚本,可通过 get_data() 函数的 plug_params 参数访问:

plug_params['<control_name>']

返回值

对于分层输出数据,脚本应返回列表字典。该字典的键是功能组名称 (树视图的可折叠元素),值是 either-or:

  • 函数地址列表 (简单情况)
  • 元组列表 (<function_address>, <comment>) (高级情况)

附注

然而,其余的取决于特定脚本的作者,有几个可选的提示:

每个脚本应分配到特定的脚本组,脚本组本质上是一个文件夹 plugins/idaclu/plugins/<plugin_group_folder>/ 包含带有单个字符串的 __init__.py 文件:

PLUGIN_GROUP_NAME = '<arbitrary_name>'

为了实现 IDAPython 交叉兼容性,请考虑使用捆绑的 shims 模块:

from idaclu import ida_shims

如果脚本使用 func-generator,请考虑使用以下代码来调试和运行脚本,甚至在 IdaClu 环境之外也是如此:

def debug():
    data_obj = get_data(func_gen=idautils.Functions)
    ida_shims.msg(json.dumps(data_obj, indent=4))

if __name__ == '__main__':
    debug()

如果本自述文件中未提及任何内容,请参阅示例脚本或联系 IdaClu 作者。

兼容性

推荐:IDA Pro v8.2+ 和 Python v3.x

最低:IDA Pro v6.7+ 和 Python v2.7+

测试环境:

  • IDA Pro v6.7 + Windows 7
  • IDA Pro v7.7 + Windows 10
  • IDA Pro v8.2 + Windows 11
  • IDA Pro v7.0, MacOS High Sierra v10.13.6
  • IDA Pro v7.6, MacOS Ventura v13.2.1

可以根据要求添加其他 IDA 版本作为测试环境,为了实现交叉兼容,IdaClu 依赖于 PyQt 和 IdaPython 垫片,由于作者的工作方式,与 IdaClu 捆绑的脚本目前是 PE 优先和 Intel x86/x64 优先。

Match4IDA

插件地址:https://github.com/riskeco/Match4IDA

介绍

在恶意软件分析方面,逆向工程最初可以通过检测规则来提供。这些规则可能是特定的、通用的、公共的或私有的,并且在触发警报时可能需要快速检查或额外分析。

扫描器提供样本内已发现的 pattern 的偏移量,IDA 能够跳转到此类文件偏移量,但线性地址是软件中更改当前位置的更优选方式。

由于将偏移量转换为地址可能涉及一些基本步骤,因此这种计算适合用 Python 脚本!

这就是 match4ida 插件的目的。

安装

支持两种扫描器:

  • YARA,由 VirusTotal 提供支持的著名扫描器
  • ROST,早期开发的替代方案

它们都可以从 Python 包索引中获取,并且可以使用以下命令进行安装:

pip install yara-python
pip install pychrysalide

注意:这两个包都是由 pip 在目标系统上编译的,因此可能需要开发包。请检查其相关安装说明。

最后, match4ida.py 脚本必须放入 IDA 的 plugins 目录中。

用法

Python 脚本在 Edit/Plugins 菜单内创建一个 Match4IDA 项,激活后,此项将显示一个面板:

接下来的步骤:

  • Browse 选择规则或者复制/粘贴
  • Scan 执行扫描
  • 通过单击某个已找到 pattern 的行导航到该模式的位置

调试技巧

为了简化调试,可以使用以下命令禁用链接到 IDA 的代码段:

$ start=$( grep -n 'class MatchPanel(idaapi.PluginForm)' match4ida.py | cut -d: -f1 )
$ end=$( grep -n 'return Match4IDA()' match4ida.py | cut -d: -f1 )
$ sed -i "$start,$end {s/^/### /}" match4ida.py

然后扫描器可以以独立的方式运行:

$ python3 ./match4ida.py APT_MAL_UNC4841_SEASPY_Jun23_1.rost Sample/3f26a13f023ad0dcd7f2aa4e7771bba74910ee227b4b36ff72edc5f07336f115
0x1bc8c8:$sx1: usage: ./BarracudaMailService <Network-Interface>. e.g.: ./BarracudaMailService eth0
0x26fc11:$s1: fcntl.tmp.amd64.
0x1bc9b3:$s2: Child process id:%d
0x1bc9c8:$s3: [*]Success!
0x1bc954:$s4: NO port code
0x1bc939:$s5: enter open tty shell
0x9ef26:$op1: H\x89\xc6\xf3\xa6\x0f\x84\xf7\x01\x00\x00\xbfl\x84_\x00\xb9\x05\x00\x00\x00H\x89\xc6\xf3\xa6\x0f\x84j\x01\x00\x00
0x1a4c0e:$op2: \xf3\xa6\x0f\x84\xd2\x00\x00\x00H\x89\xde\xbfQ^a\x00\xb9\x05\x00\x00\x00\xf3\xa6t!H\x89\xde
0x1a7484:$op3: r\xdeE\x89\xf4\xe9\xb8\xf4\xff\xffH\x8bs\x08E\x85\xe4\xbaI=b\x00\xb8D\x81b\x00H\x0fE\xd0

$ python3 ./match4ida.py APT_MAL_UNC4841_SEASPY_Jun23_1.yar Sample/3f26a13f023ad0dcd7f2aa4e7771bba74910ee227b4b36ff72edc5f07336f115
0x1bc8c8:$sx1: usage: ./BarracudaMailService <Network-Interface>. e.g.: ./BarracudaMailService eth0
0x26fc11:$s1: fcntl.tmp.amd64.
0x1bc9b3:$s2: Child process id:%d
0x1bc9c8:$s3: [*]Success!
0x1bc954:$s4: NO port code
0x1bc939:$s5: enter open tty shell
0x9ef26:$op1: H\x89\xc6\xf3\xa6\x84\xf7\xbfl\x84_\xb9H\x89\xc6\xf3\xa6\x84j
0x1a4c0e:$op2: \xf3\xa6\x84\xd2H\x89޿Q^a\xb9\xf3\xa6t!H\x89\xde
0x1a7484:$op3: r\xdeE\x89\xf4\xe9\xb8\xf4\xff\xffH\x8bE\x85\xe4\xbaI=b\xb8D\x81bHE\xd0

一旦核心代码看起来适合与 IDA 一起使用,就可以使用另一个 shell 命令来恢复禁用更改:

$ sed -i 's/^### //' match4ida.py

quakevm

此插件未在 GitHub,插件下载:https://hex-rays.com/contests_details/contest2023/quakevm/quakevm_contest_sub.zip

插件作者给出的介绍:视频游戏和 Rhadamanthys 恶意软件中使用的 Quake3 虚拟机 的加载程序和处理器模块。这些模块采用 C++ 编码,并添加了对 QVM 二进制文件的支持、解析其标头、解压缩其代码并反汇编它,从而允许使用 IDA 的功能轻松处理这些文件。

Symless

插件地址:https://github.com/thalium/symless

介绍

IDA 自动恢复结构插件,能够重建二进制文件中使用的结构、类和虚拟表

特征

  • 自动创建已识别的结构 (C++ 类、虚拟表等)
  • 结构用途的外部参照
  • 使用收集的信息进行函数输入

有两种模式可用:预分析和插件模式。

插件模式

交互式 IDA 插件,从用户选择的入口点使用静态分析来构建和 propagate 结构。

安装

$ python plugin/install.py [-u]

手动安装:将 symless 目录和 symless_plugin.py 复制到 IDA 插件文件夹中。

用法

在 IDA 反汇编视图中:

  • 右键单击包含结构指针的寄存器
  • 选择 propagate 结构
  • 选择要应用的结构和改变

然后,Symless 将 propagate 该结构,构建它并使用收集的信息键入非类型化函数/操作数。可以使用 Ctrl + Z 撤消此操作。可以创建一种新的结构,也可以完成现有的结构。

预分析模式

使用前

指定 IDA 安装:

export IDA_DIR="$HOME/idapro-M.m"

编辑配置文件:

在 imports.csv 文件中指定可执行文件中使用的内存分配函数,Symless 使用它们来查找内存分配中的结构创建,C++ 类也可以从它们的虚拟表中检索。

用法

$ python3 symless.py [-c config.csv] <target(s)>
  • config.csv:要使用的配置 (默认为imports.csv)
  • target(s):一个或多个二进制文件/IDA base

支持

支持剥离和非剥离二进制文件,符号仅用于命名所创建的结构。

支持使用以下调用约定的 x64 和 i386 二进制文件:

  • Windows x64 (__fastcall)
  • Windows i386 (__stdcall & __thiscall)
  • System V x64 (__fastcall)
  • System V i386 (__stdcall)

IDA Pro 7.6 或更高版本 & python 3

UserComment

插件地址:https://github.com/JayRE114514/UserComment,很高兴能看到有中文介绍,说不定是国人开发的插件 😘

介绍

UserComment Plugin 是一个用于 IDA 的插件,用于显示用户添加的注释。

注意

这个插件是基于 Hook 的方式实现的,这意味着它只能获取并保存安装该插件之后用户添加的注释。 对于在安装插件之前添加的用户注释,该插件无法获取到。 插件使用 python3 编写, 适用于使用 python3 的 IDA7.x,IDA8.x 请自行测试。

安装

将 UserComment.py 文件复制到 IDA 插件目录的 plugins 文件夹下。

使用方法

打开注释窗口的三种方式:

  • 菜单中选择 View/Open subviews/Comments
  • 使用快捷键 (Ctrl + Shift + C)
  • 按下 Ctrl + !,然后选择 "Comments"

功能

  • 提供注释窗口,显示用户添加的注释,包括汇编代码和伪代码中的注释
  • 支持不同类型的注释,包括常规注释、可重复注释、前置注释、后置注释、伪代码注释和函数注释
  • 用户注释将在 IDB 文件中保留。 双击注释条目可以快速跳转到对应的位置
  • 使用 IDA 内置的选择器,提供便捷的筛选功能