逆向第一课(简单的password程序修改逻辑)

password源码如下:

#include 
#include
using namespace std;
#define password "12345678"
bool verifyPwd(char * pwd)
{
	int flag;
	flag=strcmp(password, pwd);
	return flag==0;
}
int 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");
		}
	}
	return 0;
}

1.g++ pwd.cpp –o pwd.exe生成pwd.exe,拖入下载好的ollydbg程序里。

逆向第一课(简单的password程序修改逻辑)_第1张图片

 

1.1查找所有引用的字符串,很容易猜到密码是12345678;但我们不这样做,我们去跳转指令位置修改程序。逆向第一课(简单的password程序修改逻辑)_第2张图片

2.F8单步调试,发现运行到wrong password以后程序运行到了判断密码的功能区,并且不断提示输入密码错误,要求重新输入,所以我们不应该让程序从004014D1处运行到4014E1处,上面的 je short 004014E1便是关键语句。

逆向第一课(简单的password程序修改逻辑)_第3张图片

 3.将这个跳转指令注释掉即可

逆向第一课(简单的password程序修改逻辑)_第4张图片

 

4.导出修改后的文件

逆向第一课(简单的password程序修改逻辑)_第5张图片

5.运行修改后的pwd2.exe文件,发现程序无法运行;好吧,我修改je后面的地址到004014D3,passed前的move语句,调试过程中运行,终于passed

逆向第一课(简单的password程序修改逻辑)_第6张图片

************************************************************************

 

逆向第一课(简单的password程序修改逻辑)_第7张图片

5.2修改jejnz也可以实现passed逆向第一课(简单的password程序修改逻辑)_第8张图片

***********************************************************************

逆向第一课(简单的password程序修改逻辑)_第9张图片

5.3修改ZF标志,从1--->0.程序也可以passed。

逆向第一课(简单的password程序修改逻辑)_第10张图片

你可能感兴趣的:(ctf)