使用Visual Studio创建一个win32控制台项目,输入以下代码,按照课堂上讲解的方法修改项目的选项,并使用Debug x86模式编译: #include <iostream> #include <Windows.h> #define REGCODE "20203105182" int verify(char* code) { int flag; char buffer[44]; flag = strcmp(REGCODE, code); strcpy(buffer, code); return flag; } int main() { int vFlag = 0; char regcode[1024]; memset(regcode, 0, 1024); FILE* fp; LoadLibraryA("user32.dll"); if (!(fp = fopen("reg.txt", "r"))) { exit(0); } fread(regcode, 1024, 1, fp); vFlag = verify(regcode); if (vFlag) { printf("wrong(20203105182)"); } else { printf("right(20203105182)"); } fclose(fp); } 利用jmp esp指令,在reg.txt中植入shellcode,调用MessageBoxA函数,使上面的程序弹出一个对话框,其标题和内容都是你的学号的后八位。 利用x32dbg,具体怎么操作
时间: 2024-04-01 09:37:15 浏览: 83
windows10在visual studio2019下配置使用openCV4.3.0
首先,需要使用x32dbg打开你创建的win32控制台项目的可执行文件(.exe文件)。
1. 打开x32dbg,点击File -> Open,选择你的可执行文件。
2. 在x32dbg中点击Debug -> Run,运行程序,保证程序能够正常执行。
3. 在x32dbg中点击View -> CPU,打开CPU窗口。
4. 在CPU窗口中输入“jmp esp”,然后按Enter键,此时CPU窗口会显示jmp esp指令的地址。记下这个地址,后面会用到。
5. 关闭CPU窗口,再次点击View -> Memory,打开Memory窗口。
6. 在Memory窗口中找到reg.txt文件的地址,右键点击该地址,选择“Follow in Dump”。
7. 在Dump窗口中找到reg.txt的内容所在的地址,右键点击该地址,选择“Fill with NOPs”。
8. 在Dump窗口中将光标移动到填充的NOPs处,在NOPs处输入shellcode代码,例如:
\x68\x00\x00\x00\x00\x68\x00\x00\x00\x00\x6A\x00\xFF\x15\x00\x00\x00\x00
这段代码是调用MessageBoxA函数的shellcode,其中第一个“\x68\x00\x00\x00\x00”表示将后面的地址压入栈中,第二个“\x68\x00\x00\x00\x00”表示将后面的地址压入栈中,第三个“\x6A\x00”表示将0值压入栈中,最后的“\xFF\x15\x00\x00\x00\x00”表示调用MessageBoxA函数。
9. 在Dump窗口中将光标移动到shellcode的末尾处,右键点击该地址,选择“Assemble”,此时会弹出一个输入框。
10. 在输入框中输入“jmp esp”的地址,然后点击OK按钮。此时,shellcode中的最后一条指令应该变成了“jmp esp”。
11. 关闭Memory窗口,再次运行程序,此时应该会弹出一个对话框,标题和内容都是你的学号的后八位。
阅读全文