我试图通过更改它的 EIP 来破解另一个程序。有两个程序正在运行,一个是目标程序,它告诉作为“核心函数”的函数(例如,接收密码字符串作为参数并返回真或假的函数)在内存中的位置。然后现在我知道核心功能在哪里,我想用另一个程序修改 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 部分)直接放入攻击者程序中并且没有工作,它崩溃了。
所以我想我在这里遗漏了一些理论。我很高兴知道它是什么。
提前致谢。