标签 IDA Pro 下的文章


前言

C

复制代码
现如今,各种恶意程序层出不穷,如何快速分析恶意程序的行为、节省安全从业人员的时间是一个问题。
幸好在当今大模型、智能体、MCP流行的时代,能够提供部分答案。

IDA Pro MCP 是一个AI驱动的反编译辅助工具,
通过MCP协议将IDA Pro与语言模型连接,旨在提升逆向工程效率。

它由三个主要组件组成:
IDA Pro 远程控制插件 (ida_remote_server.py):一个IDA Pro插件,创建一个HTTP服务器以远程控制IDA Pro功能。
IDA 远程客户端 (idaremoteclient.ts):一个TypeScript客户端,用于与IDA Pro远程控制服务器进行交互。
MCP 服务器 (index.ts):一个模型上下文协议服务器,向AI助手暴露IDA Pro的功能。

功能
从AI助手执行IDA Pro中的Python脚本
检索二进制文件的信息:
字符串、导入、导出函数
高级二进制分析功能:
1、在指令中搜索立即数
2、在二进制文件中搜索文本字符串
3、搜索特定的字节序列
4、获取地址范围内的反汇编代码
5、通过标准化接口自动化IDA Pro操作
6、组件之间的安全通信

环境搭建

Python环境

访问地址下载python 3.11.9版本。

下载地址:https://www.python.org/ftp/python/3.11.9/python-3.11.9-amd64.exe

下载好直接一键安装即可,这里是已经安装好了。所以显示这个界面

image.png



验证python是否安装成功

image.png



IDA Pro MCP

下载好IDA Pro9.0版本以上,并安装好

image.png



使用如下命令安装mcp

image.png



运行以下命令,将MCP插件安装到IDA Pro

image.png



Trae

访问下载Trae并安装好

下载地址:https://www.trae.cn/

image.png



输入命令查看config

image.png



然后在Trae的设置中找到MCP

image.png



把上面的config复制进去

image.png



然后创建智能体

image.png



并选中IDA Pro MCP

image.png



到此,已经基本配置好了。

分析过程

注意:在分析之前需要先脱壳,使用的FSG2.0的壳。这也是MCP目前的局限性

image.png



直接掏出脱壳工具进行一键脱壳

image.png



运行IDA并加载熊猫烧香病毒程序

注意:千万不要在物理机上误点击运行了,那么就难受了

image.png



在IDA插件功能里启动MCP,启动成功如下

image.png



Trae连接MCP

image.png



现在开始就是让MCP进行分析了

输入提示词:分析恶意程序的恶意行为

如下所示,提供输出熊猫烧香的行为操作

image.png



完整的恶意行为如下:

再输入提示词:输出进行每个恶意行为相关的函数以及地址

image.png



完整结果如下:从结果中可以看到不仅输出了进行恶意行为的函数以及地址,还给了交叉引用的函数。极大的提供了分析效率

恶意行为相关函数及地址映射

1持久化机制(Persistence)

image.png



2 传播机制(Propagation)

image.png



3 网络恶意行为(Network Activity)

image.png



4系统破坏(System Destruction)

image.png



5反杀毒软件(Anti-Antivirus)

image.png



6反分析技术(Anti-Analysis)

7文件操作(File Operations)

image.png



甚至能够协助获取到制作者遗留在病毒程序中的信息

image.png



具体函数分析

继续让MCP逐一分析各个函数。

sub_402DD8函数

提示词:提供sub_402DD8函数伪代码以及注释,说明

MCP反馈sub_402DD8 是一个 文件创建/打开函数 ,用于创建或打开文件,也可以获取标准输入/输出句柄。

- 文件创建 : 用于创建病毒副本、配置文件(如 autorun.inf )或其他恶意文件

- 持久化 : 可能用于创建启动脚本或配置文件以实现自启动

- 传播 : 结合 autorun.inf 和 setup.exe 字符串,用于在USB驱动器上创建传播文件

- 日志记录 : 可能使用标准输出句柄记录病毒活动

image.png



进入IDA验证是否一致,可以看到基本一致。

image.png



再分析一下其他几个相对重要的函数

sub_40C5E0函数

sub_40C5E0 是一个 网络下载函数 ,用于从指定的URL下载文件内容到内存缓冲区。

执行流程如下:

image.png



sub_40CDEC函数

sub_40CDEC 是一个 系统破坏函数 ,用于执行破坏性系统命令,删除网络共享并可能进行其他系统破坏操作。

主要执行的命令是:cmd.exe /c net share admin$ /del /y

image.png



sub_406E44函数

sub_406E44 是一个 反杀毒软件函数 ,用于删除多种杀毒软件的服务和注册表启动项,使杀毒软件失效。

执行流程如下:

image.png



病毒程序运行流程

病毒程序的运行流程如下:

完整执行流程图如下:

image.png









值得注意的是IDA Pro MCP并不能很好的分析从内存中释放的恶意载荷,因此还需要人工去动态调试这一部分




全是干货,笔者在使用IDA的过程,总结了很多场景下的使用,以下内容来自笔者+互联网总结。有些文章我不记得从哪看了,但是感谢大佬的分享。



Python条件断点与hook功能

目的:使程序在 rand返回值是16949时断下来,其他情况继续执行。让python脚本帮我们做。



导入脚本:



def bp():
rax = idc.get_reg_value('rax')
return rax == 16949

设置普通断点,在call rand()之后设置(此时能获取rand()函数的返回值)



[右键] --> [Edit Break ···]

[Condition] --> [···]



输入bp(),并选择语言为Python



运行样本程序,发现rax == 16949(0x4235)时断了下来



适用的情况:当达到条件时触发断点,然后执行脚本中的功能,然后继续运行程序。

总归还是一个很有用的技巧





IDA-Fork双进程调试法

fork的子进程特点:

无法直接启动调试,只能附加。

进程存在时间短,很可能执行完逻辑后就退出,开没开始附加进程就没了。

目的,想调试下面fork子进程的代码:



思路:

1将子进程的第一条指令patch为死循环

2循环处下断点,重新打开IDA附加子进程,恢复第一条patch后的指令,调试

步骤:

1fork调用处设置断点,断下来后,对子进程进行patch。

观察到第一条指令只是log输出,没什么用处。所以可以对<span class="ne-text">BL __android_log_print</span>指令进行patch:



patch后:(一个死循环,自己跳自己)





2f9使程序运行起来,再主线程Detach掉(取消附加)

3 然后死循环处下断点,重新附加子进程( 此时子进程由于死循环的关系,会一直存在



4子进程会断在死循环处:



5 最后使用SetIP跳出死循环到需要调试的代码上,就可以与愉快的调试子进程了:







IDA编写脚本语法提示

日常逆向,肯定需要编写IDA脚本,在vscode进行编写,如果有提示,那就很方便了

vscode 安装插件 idacode

配置环境变量



然后就可以获得提示啦:







堆栈不平衡-报错修复技巧

// positive sp value has been detected, the output may be wrong!

打开IDA设置









设置为0,就OK了





IDA Trace功能











Trace 的粒度:



第一个是指令级别的trace,就是记录的是每条指令的指令。

第二个是基本块的trace,基本块的概念 ollvm 里面有,可以找下文档。

第三个是函数级别的trace,仅仅记录函数的调用。

运行然后卡在断点处时,这个选项就可以选了



我们停止调试,打开 trace 窗口看看,打开菜单项 [Debugger] → [Tracing] → [Tracing Window] 查看 Trace 记录:



将这些数据导出,可以直接右键 export trace to text file,以文本模式导出来,这样可以直接用 python 处理,比较方便。












前言

IDA-PRO-MCP是我经常用的一个工具,看爆漏洞了,于是来分析了一下,大家记得更新升级

漏洞概述

IDA Pro的Machine Control Protocol (MCP)在本地回环地址(`127.0.0.1:13337`)上暴露了一个未认证的JSON-RPC接口。当`py_eval`工具启用时,该接口可以执行任意Python代码。由于缺乏认证、CORS验证和浏览器来源保护,恶意网页可以通过DNS rebinding攻击实现远程代码执行(RCE)。

漏洞分析/复现

IDA PRO MCP

IDA Pro MCP是一个JSON-RPC over HTTP服务,默认监听在:http://127.0.0.1:13337/mcp

image.png



py_eval

py_eval是MCP提供的一个工具,允许通过JSON-RPC接口执行Python代码:

image.png



image.png



例如执行calc命令

image.png



DNS rebinding

DNS Rebinding是一种攻击技术,利用DNS解析的时间窗口:

1 初始解析:浏览器首次访问evil.com时,DNS返回攻击者控制的IP(如1.2.3.4

2 TTL过期:DNS记录的TTL(Time To Live)很短(如0秒)

3 重新绑定:浏览器再次解析时,DNS返回127.0.0.1

4 绕过同源策略:浏览器认为evil.com127.0.0.1是同源的(因为域名相同)

漏洞复现

使用在线网站生成域名

https://lock.cmpxchg8b.com/rebinder.html

image.png



通过DNS Rebinding技术启用py_eval

image.png



image.png



成功通过DNS Rebinding来执行命令

image.png



引用

https://github.com/taviso/rbndr

https://lock.cmpxchg8b.com/rebinder.html

https://github.com/mrexodia/ida-pro-mcp/issues/201