【发布时间】:2017-01-02 18:55:54
【问题描述】:
我正在做一个项目,我需要将一个简单的exe 文件加载到缓冲区,然后从内存中调用exe 文件的入口点。
我知道我无法加载和运行一个非常复杂的 exe 文件,它有很多来自缓冲区的依赖项,但我认为它可以调用 exe (PE) 文件的独立函数(如空主文件)。
为此,我必须找到 exe 文件的入口点地址(它的偏移量),然后将该地址(现在加载到缓冲区中)转换为指向函数的指针,然后调用它,它可能会调用 ram 中加载的函数,但我不知道如何找到地址。
这是我到目前为止所做的:
int main(){
void (* function)();
unsigned char* buffer;
FILE* fp;
size_t size;
char* path = "address of the file";
fp = fopen(path, "rb");
fseek(fp, 0, SEEK_END);
size = ftell(fp); /*calc the size needed*/
fseek(fp, 0, SEEK_SET);
buffer = (unsigned char *) malloc(size);
fclose(fp);
/*problem : i have to sum the buffer address with that offset here*/
function = (void (*)())(buffer);
function();
return 0;
}
我认为从代码中可以清楚地看出我在做什么。
这是一个尝试为meterpreter 做同样事情的链接(想法是一样的):
https://github.com/rsmudge/metasploit-loader/blob/master/src/main.c
我将不胜感激。
谢谢
【问题讨论】:
-
@RichardChambers - 这两个 SO 答案都是针对 C# 而不是 C
标签: c memory-address