要破解的代码
#include <iostream>
using namespace std;
#define password "12345678"
bool verifyPwd(char * pwd)
{
int flag;
flag=strcmp(password, pwd);
return flag==0;
}
void main()
{
bool bFlag;
char pwd[1024];
printf("please input your password:\n");
while (1)
{
scanf("%s",pwd);
bFlag=verifyPwd(pwd);
if (bFlag)
{
printf("passed\n");
break;
}else{
printf("wrong password, please input again:\n");
}
}
}
实验环境
windows xp
实验工具
ida pro
visual c++
实验过程
第一步
点击!让visual c++ 运行C 语言代码
第二步
运行后会有小黑屏 小黑屏上方会要破解的程序的路径
第三步
根据路径找到程序并复制或拖到桌面
第四步
打开ida然后打开桌面的test程序
第五步
找到程序输入错误密码的语法将上面的jz修改为jnz
因为我的截图快捷键出了问题截图总是不能截好于是下面的图片是我的老师的图片(特好的一位老师)
第六步
上面五步完成后再打开小黑屏输入任意一个密码就能打开
但是如果输入一个正确的密码就不能打开
原理
我们把jz改为jnz就相当于取反,如果我们不修改,输入错误的密码后所呈现的就是错误提示。但是如果取反后,我们输入错误密码就不会向下运行不会有错误提示
结语:以上文章仅供参考如果写的不好还请指出。我是为了巩固一下学的知识毕竟pwn真的太难了