我正在尝试在正在运行的(旧)Win32 Borland 应用程序中执行一个函数(Window 具有类 OLW_WINDOW)。通过使用 OllyDbg,我发现该函数有一个参数,即内存地址。该函数使用的一个变量/值存储在该地址的偏移量处。我的想法是找到该内存地址(在内存块中处于恒定偏移量),将变量/值更改为我想要的,然后执行该函数。使用 WriteProcessMemory 和 CreateRemoteThread 执行是可以的,但问题是如何找到内存地址/块?在 OllyDbg 中打开“内存映射”时,内存块没有所有者、节或包含。是否可以获得由指定线程创建的内存块列表?或者我可以以某种方式从应用程序中获取它吗?顺便提一句:
问问题
265 次
1 回答
0
最好的办法就是调用该函数。
例如,这里有一个将输出打印到控制台的函数:
void ConsoleOutput(char* text);
要调用它,我们会在目标二进制文件中找到该函数的地址。假设它位于 0xDEADC0DE。
我们将为函数指针形成一个 typedef:
typedef void(__cdecl* tConsoleOutput)(char* text);
我们将创建该函数指针类型的实例
tConsoleOutput ConsoleOutput = (ConsoleOutput)0xDEADC0DE;
要调用该函数,我们只需执行以下操作:
ConsoleOutput("Hello");
同样对于您的项目,您可以输入所需的任何参数。
于 2020-03-28T19:19:36.540 回答