以内存地址为参数执行远程功能

时间:2011-11-11 00:00:38

标签: windows memory ollydbg createremotethread

我正在尝试在正在运行的(旧)Win32 Borland应用程序中执行一个函数(Window有类OLW_WINDOW)。通过使用OllyDbg我发现该函数有一个参数是一个内存地址。函数使用的一个变量/值存储在该地址的偏移量处。我的想法是找到内存地址(在内存块中的常量偏移量),将变量/值更改为我想要的值,然后执行该函数。使用WriteProcessMemory和CreateRemoteThread来执行是okey,但问题是如何找到内存地址/块?在OllyDbg中打开“Memory map”时,内存块没有所有者,部分或包含。是否可以获取由指定线程创建的内存块列表?或者我能以某种方式从应用程序中获取它吗?顺便说一句:当单击一个按钮并且我想要设置的变量/值是列表视图(或等效物)中列出的数据库ID(按名称)时,通常会执行该功能。

1 个答案:

答案 0 :(得分:0)

最好的办法就是调用函数。

作为示例,下面是一个将输出打印到控制台的函数:

void ConsoleOutput(char* text);

要调用它,我们将在目标二进制文件中找到此函数的地址。假设它位于0xDEADC0DE。

我们将为函数指针形成一个typedef:

typedef void(__cdecl* tConsoleOutput)(char* text);

我们将创建该函数指针类型的实例

tConsoleOutput ConsoleOutput = (ConsoleOutput)0xDEADC0DE;

要调用该函数,我们只需执行以下操作:

ConsoleOutput("Hello");

与您的项目一样,您将输入所需的任何参数。