各位安全研究员,大家好!🕵️♂️
我们判断一个人时,不会只看他的“外表”,对吧?我们需要看他平时“做了什么行为”才能了解他的真实性格。
软件(文件)也是如此。
即使其外观(图标、文件名)可以伪装成计算器,但其内部向操作系统(OS)请求的行为,即API(Application Programming Interface)调用,是很难欺骗的。
- 正常文件(计算器):“在屏幕上画数字”,“接收鼠标点击”
- 恶意文件(勒索软件):“把所有文件列表都拿过来”,“加密它们”,“连接互联网发送密钥”
今天,我们将进行一个实践,提取正常文件和恶意文件的API调用列表(Import Table),然后将其展示给AI,并提问“猜猜谁是罪犯!”
AI真的能仅凭这份“行为列表”就检测出恶意代码吗?让我们一探究竟!🚀

1. 什么是API调用列表(Import Table)? 📋
Windows可执行文件(PE)并非独自完成所有任务。要读取文件或访问互联网,它们需要向Windows操作系统请求“帮助!”。此时使用的函数就是Windows API。
文件声明“我运行时需要这些函数!”的列表被称为IAT(Import Address Table),仅凭此列表,就能推断出文件目的的80%。
2. [准备] 提取API列表 🛠️
提取方法有很多种(如PEStudio、Ghidra等),但我们将使用最快、最便捷的Python脚本。(需要pefile库)
💡 提示:如果没有Python,可以将文件放入“PEStudio”等免费工具中,然后抓取“Imports”选项卡的内容!
🐍 Python提取脚本 (extract_api.py)
Python
import pefile
def get_api_list(file_path):
try:
pe = pefile.PE(file_path)
print(f"--- [ {file_path} ] API List ---")
for entry in pe.DIRECTORY_ENTRY_IMPORT:
for imp in entry.imports:
if imp.name:
print(imp.name.decode('utf-8'))
except Exception as e:
print(f"Error: {e}")
# 实践: 指定正常文件(计算器)和恶意样本的路径
get_api_list("C:\Windows\System32\calc.exe")
get_api_list("malware_sample.exe")
3. [数据] 提取的API列表比较 (样本数据) 📊
这是运行脚本后获得的两个文件的API列表。一眼扫过去,是不是感觉有些不同?
✅ 文件A (正常文件:计算器)
GetMessageW
TranslateMessage
DispatchMessageW
SetWindowTextW
DrawTextW
BeginPaint
EndPaint
LoadIconW
...
👉 特点:Paint, Window, Message… 主要是一些用于绘制屏幕和与用户交互(GUI)的函数。
⛔ 文件B (恶意文件:疑似勒索软件)
FindFirstFileA
FindNextFileA
CryptAcquireContextA
CryptGenKey
CryptEncrypt
InternetOpenA
InternetConnectA
HttpSendRequestA
WriteFile
Process32First
VirtualAllocEx
...
👉 特点:FindFile(查找文件)、Crypt(加密)、Internet(网络)、VirtualAlloc(内存分配)… 似乎要执行一些隐秘且具有攻击性的操作。
4. [实践] 问AI“谁是罪犯?” 🗣️
现在,我们将这份列表原样复制,交给AI(ChatGPT、Claude等)来判断。
📝 提示 (Prompt)
[角色] 您是恶意代码分析专家。
>
[情况] 我有从两个可执行文件(A、B)中提取的API导入列表。
>
[请求事项]
>
1. 分析每个文件的API列表,推断出该程序的主要功能(行为)。
2. 指出两个文件中疑似恶意代码的文件,并解释作为依据的威胁性API组合。
3. 分类预期的恶意行为类型(例如:勒索软件、键盘记录器、注入器等)。
>
[数据]
>
(文件A列表):
>
GetMessageW, TranslateMessage, SetWindowTextW, DrawTextW, … (粘贴上述正常列表)
>
(文件B列表):
>
FindFirstFileA, CryptEncrypt, InternetOpenA, VirtualAllocEx, … (粘贴上述恶意列表)
5. [结果] AI令人毛骨悚然的分析 🕵️♀️
AI能够从简单的函数名称列表中读取“上下文(Context)”。
🤖 AI分析结果
>
1. 行为分析:
>
– 文件A:这是一个典型的GUI应用程序,用于创建Windows窗口、在屏幕上绘制文本并等待用户输入。未发现危险功能。
– 文件B:它会遍历文件系统(FindFile)、加密数据(CryptEncrypt),并与外部服务器通信(HttpSendRequest)。此外,还显示出尝试访问其他进程内存(VirtualAllocEx)的迹象。
>
2. 指认罪犯:🚨 文件B(疑似恶意)
>
3. 决定性证据(可疑API组合):
>
– 勒索软件迹象:FindFirstFile + WriteFile + CryptEncrypt 组合是典型的勒索软件模式,用于查找PC内的文件,加密其内容并覆盖。
– C2通信:InternetOpen + HttpSendRequest 是用于发送加密密钥或接收命令的网络行为。
– 注入:VirtualAllocEx 经常用于将恶意代码注入其他进程。
>
4. 结论:
>
文件B极有可能是勒索软件(Ransomware)或信息窃取型木马。请立即隔离!
6. 总结:AI,静态分析的优秀伙伴 🤝
怎么样?我们没有看一行代码,只是展示了“它带了哪些工具(API)”的列表,AI就准确地判断了其是否恶意。
当然,智能的恶意代码也会隐藏API(动态加载),但这种“API分析”技术是初步分析中最快、最有效的方法之一。
如果您的PC上有可疑文件,不妨用今天学到的方法提取API列表,然后问问AI!它可能会告诉您意想不到的结果。👻
下一次,在理论篇中,我们将通过“汇编指令模式与C语言的映射结构”,准备深入到真正的代码中,而不是仅仅看其外观。敬请期待!
发表回复