[实践] 寻找恶意软件的心脏!🫀 加密·网络函数位置特定及代码精细分析

大家好,各位坚持不懈的安全研究员们!🕵️‍♂️

上次,我们通过元数据(IAT、字符串)确认了恶意软件携带了“什么工具”。“嗯,它带了加密工具(CryptEncrypt)和通信工具(InternetOpen)。看起来像勒索软件!”

但这还不够。罪犯买了刀,不一定就犯了罪。我们必须突袭现场,查明“何时、何地、如何挥舞了那把刀”。

今天,我们将使用逆向工程工具(Ghidra或IDA),进行定位并分析恶意行为实际发生的代码核心(Core Logic)的实践。

掌握这项技术,您将不再迷失在数万行代码中,只需点击3次即可跳转到核心逻辑!🚀


1. 🧭 准备指南针:交叉引用(Cross-Reference)的魔力

在数万行汇编代码中用肉眼寻找加密函数,即使熬夜也远远不够。这时使用的作弊码就是交叉引用(X-Ref, Cross-Reference)。

💡 什么是交叉引用?它是一个询问“谁调用了这个函数(API)?”的功能。它和书后面的“索引(Index)”一模一样。当你查找一个单词时,它会告诉你这个单词出现在哪些页码。


2. [实践 1] 定位加密逻辑(勒索软件核心)🔐

勒索软件的本质是“文件加密”。让我们抓住这个现场。

🛠️ 工具: Ghidra(免费)或IDA Pro 📂 目标API: CryptEncrypt(或WriteFile)

👣 逐步追踪

  1. 打开符号树(Symbol Tree): 在Ghidra右侧的Symbol Tree窗口中,打开Imports文件夹。
  2. 搜索API: 在ADVAPI32.DLL中找到CryptEncrypt。
  3. 确认交叉引用(X-Ref):
    • 在CryptEncrypt函数名上右键 -> Show References to(或快捷键Ctrl+Shift+F)。
    1. 突袭现场(Jump): 双击列表中出现的地址(例如:FUN_00401000)。

    🎯 到达! 屏幕跳转到的地方就是文件加密循环(Loop)正在运行的现场。环顾四周,您会看到执行XOR运算或将文件内容加载到缓冲区的代码。


    3. [实践 2] 定位网络连接(C2通信)🌐

    让我们寻找向黑客窃取信息或接收密钥的通信区域。

    📂 目标API: InternetOpenUrl, HttpSendRequest, socket, connect

    👣 逐步追踪

    1. 通过字符串(Strings)查找: 这次我们不通过API,而是通过字符串查找。
      • 点击顶部菜单 Search -> Strings。
      • 搜索http、https或可疑的IP地址。
      1. 确认交叉引用(X-Ref):
        • 在找到的URL字符串(例如:)上右键 -> Show References to。
        1. 突袭现场: 跳转到使用该字符串的函数。

        🎯 到达! 分析此处,您将准确了解“发送了什么数据,以何种方式(GET/POST),发送到哪里”。


        4. 🧠 [进阶] 与AI一同进行代码区域分析

        找到了函数位置,但代码看起来却像天书(uVar1, param_2…)一样对吧?这里正是我们上次学到的200%利用AI能力的关键点。

        📝 反编译代码分析提示

        复制Ghidra的Decompile窗口中的C代码,然后这样问AI:

        [请求] 以下C代码是调用CryptEncrypt API的函数。它是通过逆向工程工具提取的,因此变量名很混乱。

        >

        1. 请逐步解释该函数的工作原理。

        2. 请推断变量 local_14、param_1 等实际扮演的角色(文件句柄、缓冲区、密钥等)。

        3. 请将此代码转换为易于理解的Python伪代码(Pseudocode)。

        >

        [代码] (粘贴从Ghidra复制的代码)

        AI会阅读上下文并清晰地解释:“local_14是文件句柄,它正在循环读取1024字节并进行加密!”


        5. ⚠️ 分析时注意事项(避免陷阱)

        1. 动态加载(Dynamic Loading):
          • 聪明的恶意软件会将API隐藏在Imports列表中。
          • 它会使用LoadLibrary和GetProcAddress在运行时加载API。
          • 如果在Imports中找不到要查找的API,则需要追踪GetProcAddress。
          1. 包装函数(Wrapper Function):
            • 恶意软件开发者经常会创建一个名为MyEncrypt的函数,并在其中调用CryptEncrypt。
            • 如果跟随交叉引用后发现代码太短,则需要再向上追溯一级到调用该函数的上层函数(Caller),才能看到全貌。

            🎉 总结:先见森林,再伐木!

            今天,我们学会了如何在广阔的代码森林中,准确地找到“恶意行为”这棵树的种植位置。

            • 交叉引用(X-Ref)是地图。
            • 反编译器(Ghidra)是翻译器。
            • AI是向导。

            结合这三者,无论多么复杂的恶意软件,其核心逻辑都能被我们彻底剖析。

            现在,您已经超越了仅仅说“这个文件是恶意的”,而是能够说出“这个文件内部0x401000地址处的函数使用AES-256加密文件”的专家了。

            下一次,我们将综合所有分析内容,撰写“实战型恶意软件分析报告”,为本次系列画上圆满的句号。敬请期待!👋



Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注