gpt4 book ai didi

c - 如何在不同的进程中更改 EIP?

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:14 25 4
gpt4 key购买 nike

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

我的代码现在是这样的:

目标程序:

#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 部分)直接放入攻击者程序中,但没有成功,它崩溃了。

所以我认为我在这里遗漏了部分理论。我很高兴知道它是什么。

提前致谢。

最佳答案

这行不通——进程占用不同的内存空间!

现代操作系统旨在保护用户程序免受此类攻击。一个进程无法访问另一个进程的内存——实际上,数据地址仅在该进程内部有效。

当程序运行时,它有自己的内存 View ,只能“看到”内核指示memory management unit (MMU) 的内存。为它映射。

一些引用资料:

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com