ch1:Crack小实验

本文介绍了一个简单的C语言密码验证程序及其绕过方法。通过修改特定的机器代码指令,可以实现无论输入何种密码都能通过验证的效果。实验使用了Windows7操作系统、VC6.0 IDE,并借助IDA Pro和OllyDbg等工具。
摘要由CSDN通过智能技术生成

实验环境:

操作系统Windows7
IDEVC 6.0
build版本debug

用于实验的C语言代码:

#include<stdio.h>
#define PASSWORD "1234567"

int verify_password(char * password)
{
	int authenticated;
	authenticated = strcmp(password,PASSWORD);
	return authenticated;
}

int main()
{
	int valid_flag=0;
	char password[1024];
	while(1)
	{
		printf("please input password:");
		scanf("%s",password);
		valid_flag = verify_password(password);
		if(valid_flag)
		{
			printf("incorrect password!\n\n");
		}
		else
		{
			printf("Congratulation! You have passed the verification!\n");
			break;
		}
	}
}

程序运行结果:


在IDA中查看该.exe文件,其中部分函数流程图如下:

根据cmp eax, 0的结果:执行跳转指令。

修改此处代码,即可实现 绕过输入的密码等于1234567的验证。

在IDA中,找到此处地址:


在OllyDbg中查看该.exe文件:

将地址为00401D5处修改为:

即颠倒逻辑,错误的密码通过验证,正确密码则要求重新输入。

F9运行结果:


上面只是在内存中修改程序,下面修改.exe


用LordPE打开.exe文件后,点击Sections,查看该PE文件的节信息:

看到存储二进制机器代码的.text节(section)的虚拟内存地址(VOffset)为00001000,文件偏移地址(ROffset)为00001000


的到00410D5处:JZ 指令的文件偏移地址为:

0x00410D5 - 0x00400000(ImageBase) - (0x00001000 - 0x00001000) = 0x10D5


用UltraEdit打开.exe文件:

Ctrl + G:

将原来的机器代码74改为75,保存文件。


直接打开.exe,并输入1234567发现 提示incorrect Password!


实验成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值