动态加载的 DLL 中的静态地址

逆向工程 函数挂钩
2021-06-14 00:17:12

我正在尝试在注入的 DLL 中重写以下函数。

mov edi,edi
push ebp
mov ebp,esp
mov eax, [sound.dll+1AE0]
push eax
mov ecx,[ebp+08]
mov eax,[ecx]
mov eax,[eax+0C]
push eax
call sound.dll+7C640
pop ebp
ret 0004

我正在通过 CreateRemoteThread 加载我的 DLL。有没有办法在加载DLL时获取sound.dll+1AE0(或linkage)的地址,而不必做GetModuleHandleEx并动态计算地址?

也许有一些进口或一些链接工件?

谢谢!

编辑:

GetModuleHandleEx 方法将如下所示:

DWORD mem1AE0=0;

用 sound.dll+1AE0 地址加载 mem1AE0

然后在我的函数中:

_declspec(naked) void MyFunction() { 
    __asm { 
        mov edi,edi 
        push ebp 
        mov ebp,esp 
        mov eax, mem1AE0 
        mov eax, [eax] 
        push eax 
        mov ecx,[ebp+08] 
        mov eax,[ecx] 
        mov eax,[eax+0C] 
        push eax 
        call sound.dll+7C640 
        pop ebp 
        ret 0004 
    } 
} 

问题是当我有一个调用 [sound.dll+XXXX] 指令时

在这种情况下,我需要创建一个指向该内存的变量

DWORD memXXXX=0;

用正确的地址加载它并创建一个proxycall DWORD

DWORD memXXXX_content=0;

然后做:

push eax 
mov eax, memXXXX 
mov eax, [eax] 
mov memXXXX_content, eax 
pop eax 
call memXXXX_content 

这是完全低效的,除非我做错了什么?

谢谢

编辑:我相信如果您动态加载 DLL,则无法获得静态链接。

0个回答
没有发现任何回复~