我试图通过更改另一个程序的EIP来破解它有两个程序正在运行,一个是目标程序,它告诉作为“核心函数”的函数(例如,接收密码字符串作为参数并返回true或false的函数)在内存中的位置。
现在我知道了核心功能在哪里,我想用另一个程序修改EIP,这样目标程序就可以调用我的函数,简单地得到一个真实的结果,并打印出一个漂亮的“访问授权”。
我的代码现在是这样的:
目标程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


int checkPwd(char *pwd)
{
    printf("\nstill in the function\n");
    if(strcmp(pwd, "patrick") == 0) return true;
    else return false;
}


int main()
{
    char pwd[16];

    printf("%d", checkPwd);
    scanf("%s", &pwd);
    system("pause");
    if(checkPwd(pwd)) printf("Granted!\n");
    else printf("Not granted\n");
    system("pause");
}

攻击者程序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>

int returnTrue()
{
    return true;
}
int main()
{
    int hex;
    scanf("%d", &hex);
    memcpy((void*)hex, (void*)returnTrue, sizeof(char)*8);
    system("pause");
}

我想补充的是,我试图把十六进制代码直接(没有scanf部分)放在攻击者程序中,但没有成功,它崩溃了。
所以我想我遗漏了一些理论我很高兴知道是什么。
提前谢谢。

最佳答案

这不起作用进程占用不同的内存空间!
现代操作系统的设计正是为了保护用户程序免受这种攻击一个进程无法访问另一个进程的内存,事实上,数据地址仅在该进程中有效。
当程序运行时,它有自己的内存视图,并且只能“看到”内核指示memory management unit (MMU)为其映射的内存。
一些参考资料:
Mapping of Virtual Address to Physical Address
Printing same physical address in a c program
Why are these two addresses not the same?

关于c - 如何在不同的过程中更改EIP?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11463586/

10-11 19:31