各位安全探索者们,大家好! 🕵️♀️🕵️♂️
直到上次,我们已经搭建了分析环境,并打下了“正确”向AI提问的提示工程基础。现在,理论已经足够了。是时候进入实战了! 🔥
在分析实际恶意软件时,很少会只找到一个main函数。数十、数百个函数像蜘蛛网一样交织在一起。🕸️ 在这其中,找到“执行真正重要功能的函数(Key Function)”并快速掌握其功能,是分析师实力的体现。
然而,仅仅通过眼睛跟踪汇编语言和复杂的C伪代码(Pseudo-code),很快就会感到疲惫。😵💫
在今天的实践中,我们将亲身体验一个能将分析速度提高10倍的例程:在Ghidra中“精准”找出核心函数,然后将其“扔给”AI并“准确”获得摘要。
准备好了吗?让我们深入探索! 🤿

🎯 实践目标
- 在Ghidra中识别具有高分析价值的主要函数块。
- 提取(Copy)该函数的反编译代码。
- 应用上次学到的提示工程来构建AI的输入。
- 根据AI总结的功能决定分析方向。
STEP 1. “嫌疑犯就在这里!”识别主要函数 🧐
恶意软件中有很多函数,但并非所有都重要。我们需要找到与“恶意行为”相关的核心函数。
💡 提示:应该选择哪些函数?
- 引用可疑字符串的函数:使用“Encrypt”、“Cmd.exe”、“Password”或IP地址字符串的函数是强有力的嫌疑犯。(利用Ghidra的Window -> Defined Strings)
- 调用危险API的函数:跟踪调用VirtualAlloc(内存分配)、CreateRemoteThread(注入)、connect(网络)、WriteFile(文件创建)等API的函数。(利用Ghidra的Symbol Tree -> Imports)
- 执行复杂运算的函数:如果充满了循环(for/while)和XOR、Shift运算,则很可能是加密或去混淆例程。
[实践场景假设] 在我们的分析中,从一个疑似勒索软件的样本中发现了一个函数,它打开文件,执行一些复杂的循环,然后再次写入文件!它的名字是Ghidra随意分配的FUN_1400012a0。
STEP 2. 代码提取:“Ctrl+C,复制的艺术” 📋
Ghidra的反编译器(Decompiler)视图中显示的代码是我们的分析对象。
- 选择函数:点击要分析的函数(FUN_1400012a0)内部。
- 选择全部代码:在反编译器窗口中用鼠标拖动,或按Ctrl + A选择整个函数代码。
- 复制:按Ctrl + C复制到剪贴板。
⚠️ 注意:如果函数太长(例如:数千行),可能会超出AI的输入限制(Token limit)。在这种情况下,需要有选择性地只复制核心的循环或条件块!
STEP 3. 审问AI:“来,按学过的提问吧!” 🗣️
现在,带着复制的代码去找AI(ChatGPT、Claude等)。还记得我们上次学过的魔法公式吗?
[角色] + [上下文] + [数据(代码)] + [指令(目标)]
让我们应用这个公式来编写提示。
🧑💻 [我的提示输入]:
**역할 (Persona):** 당신은 시니어 악성코드 리버스 엔지니어입니다.
**컨텍스트 (Context):** 나는 현재 랜섬웨어로 의심되는 윈도우 실행 파일(.exe)을 분석 중입니다. 기드라(Ghidra)를 통해 파일을 열고 쓰기 작업을 수행하는 것으로 보이는 의심스러운 함수 하나를 추출했습니다.
**지시사항 (Goal):**
1. 아래 제공된 C언어 의사 코드(Pseudo-code)의 핵심 기능을 **3줄 이내로 요약**해주세요.
2. 이 함수가 악성 행위(예: 파일 암호화, 데이터 유출 등)와 관련이 있을 가능성을 '상/중/하'로 평가하고 그 이유를 설명해주세요.
3. 코드 내에서 주목해야 할 중요한 지역 변수나 파라미터가 있다면 지적해주세요.
**코드 (Data):**
c
// (在这里粘贴刚才从Ghidra复制的代码)
// 示例代码(实际会复杂得多,但只看个大概!)
void FUN_1400012a0(char *filePath, byte *key, int keyLen) {
HANDLE hFile = CreateFileA(filePath, …);
// … 省略文件读取 …
byte *fileBuffer = VirtualAlloc(…, fileSize, …);
ReadFile(hFile, fileBuffer, …);
// 可疑循环开始
for (int i = 0; i < fileSize; i++) {
fileBuffer[i] = fileBuffer[i] ^ key[i % keyLen]; // XOR运算
}
SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
WriteFile(hFile, fileBuffer, …); // 覆盖
CloseHandle(hFile);
}
“`
STEP 4. 结果分析:验证AI的回答! ✅
AI给出了答案。我们需要检查结果并验证它是否符合我们的分析方向。
🤖 [AI的回答示例]:
📝 核心功能总结:此函数打开指定文件路径(filePath)的文件,分配内存(VirtualAlloc),然后使用传入的密钥(key)执行按字节的XOR运算,并将结果覆盖回原始文件。
>
🚨 恶意可能性评估:[高] 原因:读取文件内容,通过XOR运算(最基本的加密/混淆技术)进行修改,然后覆盖回原始文件的行为,是勒索软件文件加密例程中非常典型的模式。正常程序很少会以这种方式覆盖文件。
>
👀 值得关注的变量:
>
– filePath(参数1):需要确认哪个文件是加密目标。
– key(参数2):这是用于加密的密钥值。追踪此密钥的生成位置至关重要。(制作解密工具的核心!)
🎉 实践结束:分析速度的革命
怎么样?将复杂的代码块扔给AI,仅仅几秒钟,我们就抓住了核心:“啊,这是勒索软件的加密例程。找到密钥很重要!” ⚡
如果我自己一行一行地解释,至少需要20-30分钟。AI节省了我们的时间,帮助我们看到森林而不是树木。
不要忘记今天的核心例程:
- 在Ghidra中找到可疑目标。 🕵️
- 复制代码。 📋
- 赋予AI角色并提问。 🗣️
- 根据答案确定下一个分析目标。(例如:追踪谁传递了’key’参数!)
下一次,我们将探讨如何将AI指出的“可疑”函数与“动态分析”相结合,以检查它们实际运行时交换了哪些数据。
祝您度过充满分析乐趣的一天!加油! 💪
发表回复