无法正确分析一个非常简单的 C 编译程序

逆向工程 艾达 拆卸 恶意软件 C
2021-06-15 05:16:30

我是一名 RE 初学者,我决定开始编写自己的简单代码进行练习。

我编写了一个简单的代码,它使用名为 CreateProcess 的 winAPI 函数来启动 calc.exe,我用 C 语言编写它并使用官方 Microsoft SDK 编译它,Visual Studio 2019 作为发布版本。

exe 文件适用于 Windows 7 和 Windows 10,没有任何问题。

我搜索了 IDA 并转到了 start 函数,该函数应该指向主用户代码所在的位置,所以这里是我的问题:

  1. start 函数的分析失败了,我找不到代码重定向到我在代码中使用的 CreateProcess 函数的位置,它是这样的:

在此处输入图片说明

  1. 当我查找“calc.exe”时,我在不同的部分找到了它,在那里我不习惯看到它(与实用恶意软件分析书籍示例相比)。这是它的外观:

我在 IDA pro 中发现我的用户代码的地方

我安装了 IDA pro 6.8。

这是原始代码的样子,主函数只包含对 Create() 函数的调用:

void Create()
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

    SecureZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    SecureZeroMemory(&pi, sizeof(pi));

    if (!CreateProcess(L"C:\\Windows\\system32\\calc.exe", NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
    {
        printf("failed, error: %d", GetLastError());
    }
    else {
        printf("Process successfuly started!");
    }
}

编辑:

我添加到 Release 文件夹中的链接 PDB 文件,IDA 运行良好,它立即检测到主要功能!

但是我对自己说,如果我是恶意软件分析师,我会得到没有任何 PDB 文件的 EXE 文件,那我该怎么办?

1个回答

最后,我用 PDB 文件中的所有符号分析了程序的外观,以便我知道实际的 Main 函数地址。

发现这一点后,我只是在没有 PDB 的情况下搜索了文件,以了解我需要采用什么路径才能从 MSVC 创建的启动函数到达主函数。

这也解决了我用 MSVC 编译的未来程序的问题。