crack小实验(一)

参考《0day安全 软件漏洞分析》做的,个人学习记录

工具:

  1. x64dbg;
  2. 010Editor
  3. IDA Pro
  4. LordPE

密码验证小程序源码:

#include<stdio.h>
#include<string.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;
		}
	}
}

运行exe,如图

第一步:用IDA生成反汇编代码

            把编译生成的exe文件拖到IDA上运行会自动生成流程图

            找到跳转语句,也就是if分支点,选中后按空格切换到汇编指令界面

            该指令对应的虚拟内存地址为00000000004015AF

第二步:在x64dbg中动态调试

            在x64中打开exe文件,按ctrl+G,找到00000000004015AF 内存地址

            将对应地址里的十六进制代码74(je) 改成 75(jne),然后继续调试,输入错误密码可以跳转密码正确提示

            这只是在内存中修改,下面展示如何在在二进制文件中修改

第三步:用LordPE获得PE文件的节信息

            启动LordPE,点击“PE编辑器”,选中目标exe文件,点击“区段”

            获得区段表

           算出节偏移 = VOffset-ROffset = 00000A00

           已知虚拟内存地址(VA)=00000000004015AF 

           计算文件偏移地址 = VA - 装载基址 - 节偏移 = 00000000004015AF - 0x00400000 - 00000A00 = 0x00000BAF

第四步:用010Editor修改二进制文件

           用010Editor打开exe文件,按ctrl+G,搜索0BAF,也就是文件中距离文件开始处0BAF字节的地方。对应的机器码刚好是74(je),修改成75(jne)

         保存后重新运行exe文件,此时输入错误的密码弹出密码正确,破解成功

猜你喜欢

转载自blog.csdn.net/m0_46827210/article/details/106275380
今日推荐