很多搞IT都听说过缓冲区溢出,但是怎么利用缓冲区溢出的Bug来运行你自己的代码呢?这里我只介绍怎么利用静态缓冲区溢出来运行黑客程序。因为动态的,我还不会用。:)
第一节 堆栈的形式
在程序运行的时候,每次程序调用一个函数的时候,程序就要在内存里面分配一个空间来保存这个函数要使用到的本地变量,还有参数啊什么什么的。下面用一个程序片断来演示一下堆栈的形式
void TestCaller()
{
TestMethod(1);
int i = 0;
}
}
void TestMethod(int p)
{
int l1 = 0;
char l2 = '3';
}
}
上面的程序很简单,就是定义了两个函数,函数TestCaller调用了函数TestMethod,而TestMethod定义了两个局部变量。在计算机的内存里面堆栈的形式如下(大概的模型啊,不是很精确的):
|----------------------|
| .... | <------ TestCaller的堆栈
|----------------------|
| 1 | <------ TestCaller传给TestMethod的参数p的值
|----------------------|
| TestCaller的ebp的值 | <------ TestCaller的堆栈的起始位置
|----------------
本文介绍了如何通过缓冲区溢出错误来执行未在原程序中调用的函数,例如将/xa0/x12/x41转换为特定机器上bar函数的地址,从而在不直接调用的情况下使bar函数得以执行。尽管如此,仍无法直接将自编译的DLL导入目标程序以运行自定义函数,对此,文章暗示后续会进一步探讨解决方案。
最低0.47元/天 解锁文章
2818

被折叠的 条评论
为什么被折叠?



