1、 软件漏洞挖掘与防护---修改程序验证流程

项目一 修改程序验证流程

一、 项目环境

VMware Workstation Pro 安装 Windows Server 2008 Datacenter 操作系统。

二、 项目软件工具

  1. Microsoft Visual C++ 6.0
  2. 软件安全静态分析工具 IDA Pro 7.0
  3. 软件安全动态分析工具 OllyDbg

三、 项目实践

1.运行 VMware Workstation Pro 的 Windows Server 2008 操作系统,进入操作系统后打开 Microsoft Visual C++ 6.0 软件,新建一个 Win32 Console Application 工程,工程名为”test”点击确定,如图 1-1 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第1张图片
图 1-1 创建 Win32 工程

2.在选择创建什么样的控制台应用程序框中,选择”An empty project”创建一个空项目,点击完成,如图 1-2 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第2张图片
图 1-2 创建空的控制台程序

3.在左侧工程框中点击右下角的”FileView”文件视图,然后点击 test files工程文件下的”Source Files”源文件夹,再到上方工具栏中点击”文件”新建一个 C++源文件,源文件名为”test.c”点击确定,如图 1-3 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第3张图片
图 1-3 创建 C++源文件

4.编写一个基于密码验证的 C++程序,正确密码为”1234567”,当输入密码不是”1234567”程序输出”incorrect password”错误密码提示信息,输入密码是”1234567”时,程序输出” congratulation! You have passed the verification!”恭喜,你已通过密码验证的提示信息,程序代码如下:
#include 
#define PASSWORD "1234567"
int verify_password(char *password)
{
	int authenticated;
	authenticated = strcmp(password,PASSWORD);
	return authenticated;
}
void 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 !=0)
		{
			printf("incorrect password!\n\n");
		}
		else
		{
			printf("congratulation! You have passed the verification!\n");
			break;
		}
	}
}
5.编译执行该程序,测试程序运行结果,当输入的密码不是”1234567”时,提示密码错误,当输入密码为”1234567”时,提示密码验证通过,测试结果如图1-4 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第4张图片
图 1-4 程序测试结果

6.程序运行成功后,打开 IDA Pro 软件,选择”运行”操作,如图 1-5 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第5张图片
图 1-5 运行 IDA 软件

7.选择文件打开操作,找到 test 程序的存放路径,默认情况下未修改路径,test程序的路径在 C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\test\Debug,选择 test 程序点击打开,如图 1-6 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第6张图片
图 1-6 打开 test 程序

8.选择左侧函数窗口下的 main 主函数,会出现 main 主函数的 IDA 视图,如图 1- 7 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第7张图片
图 1-7 main 函数 IDA 视图

9.设置 IDA 选项,点击工具栏上的选项→常规,出现 IDA 选项界面,将”行的前缀”这一项给勾选上,然后点击确定,如图 1-8 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第8张图片
图 1-8 IDA 选项设置

10.这时候我们找到在 mian 主函数 IDA 视图下的程序验证判断执行动作” jz short loc_4010E6”,将该执行动作的行前缀值” 004010D5”进行复制,后续根据该前缀值来改变程序的执行流程,如图 1-9 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第9张图片
图 1-9 复制执行动作的前缀值

11.复制完”004010D5”前缀值后,运行 OllyDbg 软件, 选择文件打开操作,找到test 程序的存放路径,默认情况下未修改路径,test 程序的路径在 C:\Program Files (x86)\Microsoft Visual Studio\MyProjects\test\Debug,选择 test 程序点击打开,如图 1-10 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第10张图片
图 1-10 OllyDbg 打开 test 程序

12.点击上方”转到反汇编窗口中的地址”按钮,在弹出的表达式框中粘贴前面复制的”004010D5”行前缀值,点击确定,这时候界面会跳转到该行前缀值所在的位置,如图 1-11 所示。

1、 软件漏洞挖掘与防护---修改程序验证流程_第11张图片
图 1-11 跳转到”004010D5”位置

13.我们会发现跳转到的位置显示内容正是我们之前在 IDA 软件中看到的程序验证执行动作语句,这时我们双击该语句,在弹出的汇编窗口中将”JE”修改成”JNE”,点击汇编然后点击取消,如图 1-12 所示。该操作的目的就是将原来的验证结果反转过来,即输入正确密码”1234567”时,程序会输出密码错误提示,而随意输入其它任意密码则提示密码验证通过。

1、 软件漏洞挖掘与防护---修改程序验证流程_第12张图片
图 1-12 修改 JE 语句

14.这时连续按两次 F9 运行程序,我们可以看到测试结果,当输入正确密码”1234567”时,提示密码错误,输入任意密码时,提示密码验证通过,如图 1-13 所示。至此该修改程序验证流程项目实现完毕。

1、 软件漏洞挖掘与防护---修改程序验证流程_第13张图片
图 1-13 最终测试结果

你可能感兴趣的:(软件漏洞挖掘与防护)