-
-
[求助]修改IMPORT ADDRESS TABLE的疑问
-
-
[求助]修改IMPORT ADDRESS TABLE的疑问
在一篇文章看到,WINDOW使用flat memory model,所以可以在队列中存放机器指令,这样就可以当作函数来调用。
但是我的疑问是,机器指令可以放在任何地方来调用?还是必须是指令指针指的地方才算指令?
修改IMPORT ADDRESS TABLE ENTRY,存放CALL指令,会被调用?
原来在IMPORT ADDRESS TABLE ENTRY中存放的不是一个地址吗?现在修改成CALL指令,这样会被调用?
下边是文章里边的代码:
struct RelocatedFunction{DWORD proxyptr;
DWORD funtioncptr;char *dllname;char *functionname;};
BYTE* ptr=(BYTE*)HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,32);
RelocatedFunction * reloc=(RelocatedFunction*)&ptr[6];
DWORD addr=(DWORD)&ProxyProlog;
reloc->proxyptr=addr;
reloc->funcname= functionname;
reloc->dllname=dllname;
memmove (&reloc->functionptr, IATentryaddress,4);
ptr[0]= 0xFF; ptr[1]= 0x15;
//这里就是CALL的机器码
memmove(&ptr[2],&reloc,4);
DWORD byteswritten;
WriteProcessMemory(GetCurrentProcess(),IATentryaddress,&ptr,4,&byteswritten);
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!