c - 通过签名查找函数时如何知道地址范围?

标签 c assembly reverse-engineering

我正在尝试通过“签名”来搜索函数。

但是我无法弄清楚我应该搜索什么地址范围?

我已经查看了 VirtualQuery() 和 GetNativeSystemInfo(),但无论我是否走在正确的道路上,我都没有查看过。

编辑:重新尝试问题。

使用 Win32 API,我试图找出如何获取我的代码正在执行的进程的可执行页面的起始地址和结束地址。

这是我尝试过的:

        SYSTEM_INFO info;
    ZeroMemory( &info, sizeof( SYSTEM_INFO ) );
    GetNativeSystemInfo( &info ); // GetSystemInfo() might be wrong on WOW64.

    info.lpMinimumApplicationAddress;
    info.lpMaximumApplicationAddress;

    HANDLE thisProcess = GetCurrentProcess();

    MEMORY_BASIC_INFORMATION memInfo;
    ZeroMemory( &memInfo, sizeof( memInfo )  );
    DWORD addr = (DWORD)info.lpMinimumApplicationAddress;
    do
    {
        if ( VirtualQueryEx( thisProcess, (LPVOID)addr, &memInfo, sizeof( memInfo ) ) == 0 )
        {
            DWORD gle = GetLastError();
            if ( gle != ERROR_INVALID_PARAMETER )
            {
                std::stringstream str;
                str << "VirtualQueryEx failed with: " << gle;
                MessageBoxA( NULL, str.str().c_str(), "Error", MB_OK );
            }
            break;
        }

        if ( memInfo.Type == MEM_IMAGE  )
        {
            // TODO: Scan this memory block for the the sigature
        }

        addr += info.dwPageSize;
    }
    while ( addr < (DWORD)info.lpMaximumApplicationAddress );

这样做的原因是我正在通过其签名寻找未导出的函数,如下所示:

Find a function by it signature in Windows DLL

查看有关“代码签名扫描”的答案。

虽然这是枚举地址范围,但我不知道这是否正确,因为我不知道预期的范围应该是什么。这只是我通过查阅 MSDN 所能想到的最好的结果。

最佳答案

签名扫描模块时的地址范围是从代码段开始到开始+段大小。代码段的开头及其大小位于 PE 中。大多数工具采用惰性路由并扫描整个模块(再次使用 PE 来获取大小,但以模块句柄作为起始地址)。

关于c - 通过签名查找函数时如何知道地址范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10771444/

相关文章:

linux - x86 linux cr3 寄存器取消引用(如何访问页面目录?)

linux - 使用 's-proc -e' 在 Linux (Fedora) hello.S 上执行汇编 shellcode 返回 SIGSEGV

java - 需要的建议 : Effective Java to C source code converter

c - 如果是整数,则使用 sprintf 格式化没有小数位的 float

c - 如果我在 malloc 之后做赋值而不做 memcpy 会有什么后果吗

c - 如何在 GNU LD 中实现自定义输出部分?

c# - java 与 c# - 哪个在安全性方面更安全?

c - 对准控制上的星型练习

assembly - 理解标准条目顺序有问题

java - 请推荐关于逆向工程混淆代码的好博客、文章或文档