最近由于工做须要在看0day的软件漏洞分析,发现这本《0day安全软件漏洞分析技术(第2版)》真是本好书,惟一缺点就是书上的环境是Windows XP 32Bit的,基于现状难以进行实践,因而笔者打算使用紧跟潮流但又尽可能知足书上的环境——Windows 10 Profession 32Bit,但愿对你们学习有所帮助。编程
1、环境以及要用的软件安全
系统:Windows 10 Profession学习
软件:UltraEdit、LordPE、OllyDBG、VC++ 6.0、IDA Pro测试
下图做者的系统信息,就是一个虚拟机而已:3d
2、实验目的调试
本次实验的目的是经过更改软件的十六进制值达到输入任何密码都能突破验证。code
3、实现过程blog
首先咱们用VC++ 6.0编写一个可供这次实验的C语言程序,代码以下:图片
#include<stdio.h> #include<string.h> #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) { printf("No, your password is False!\n\n"); } else { printf("Yes, your password is True!\n"); break; } } }
上述代码的具体意思不做解释,若想看懂请自行翻阅C语言的相关书籍,好比C语言编程兵书等等。input
上述代码通过编译运行会造成以下的运行结果:
从运行结果与咱们程序的代码不难发现,这个软件的密码只会是1234567,那么如今关闭它,开始咱们的破解之路吧。先用IDA Pro打开这个名为Crack的exe文件,做者的exe文件在C:\MyProjects\Debug\Crack.exe此目录下,你们请找到本身的文件所在位置,打开以后会出现以下图的样子:
某些时候打开会是一个一个的图片,请仔细看上图中的红框对应你软件的位置,那里有个黄色的小箭头,鼠标点住它往左拖就能够看到上面这种样式。
在上图黑框中有咱们程序中出现的一句话,这里是输入错误密码时才会出现的,那么前面的“JE short_loc xxxxxx”这句话其实就表明了程序中的if语句,请将这句话前面的号码记住复制下来,我这里是004010D5,以下图:
为啥要记住这个呢?由于咱们就要从if语句下手,分析程序能够知道if...else...语句其实就是用来判断咱们输入密码正确错误的关键,因此要对症下药。
当咱们找到004010D5时就能够关闭上一步的软件了,接下来打开OllyDBG,动态调试这个程序能够更好的为下面的步骤作准备,打开以后应该会出现下图所示:
按Ctrl+G,在弹出的窗口中输入刚刚复制的十六进制地址。以下图:
点击OK以后会跳转到前面第二步中咱们看到的代码上。如上图红框,注意红框中的数字“74”哦!点击以后按F2,打个断点,接下来按F8进行单步调试,在Crack程序的运行框中出现“please input password”字样后输入一个错误的密码,再返回到上图,点击“JE short_loc xxxxxx”字样的代码句,下面一个小框中会出现“Jump is NOT taken”的字样。以下图:
这自己是一个错误的密码,按照程序的逻辑,它会给咱们打印“No, your password is False!”,但别忘记咱们的初心是想让它给咱们打印“Yes, your password is True!”,这时候咱们双击“JE short_loc xxxxxx”字样的代码句,在弹出的框中将“JE”改为“JNE”,后面保持原状,以后点击Assemble按钮,注意看这句话它前面的数字变成了“75”哦,最后点击Olly DBG软件最上面的倒三角按钮。以下图:
这时候再转回去看输出的结果,会惊奇的发现,打印的是“Yes, your password is True!”这样咱们的目的就达到了,可这并非咱们的终极目标,咱们是想要修改本身编的软件,从根源上修改它!因而进入下一步。
在这一步中咱们须要用到第四个软件——LordPE,在打开以前请关闭OllyDBG软件,LordPE打开以后界面以下图所示:
点击PE Editor按钮打开Crack.exe以后会出现以下图所示:
这里主要是记住ImageBase后面的十六进制数字,用前面获得的十六进制数字减这个十六进制数字获得004010D5 - 00400000 = 0x10D5。
获得0x10D5后就能够关闭这个软件了,若是你用的是Windows10 64Bit的系统,就会发现你的ImageBase与个人彻底不同,以下图是64位Windows10的ImageBase:
这是最后一步,咱们打开UltraEdit,将Crack.exe拖入UltraEdit中,会出现一大片数字和字母,打开以后按Ctrl + G,在弹出的框中输入0x10D5以后回车,会跳转到一个地方,以下图:
在上图中箭头指向的地方有一个醒目的74,还记得前面第3步说过的数字“74”么?对,没错,这里的74就是第3步中的74!还记得咱们将“JE”改为“JNE”以后数字变成了“75”么?最后一步就是将这个“74”改为“75”,而后Ctrl + S保存便可哦,以下图:
这时候咱们再用OllyDBG打开Crack.exe测试发现,若是输入的密码为1234567,反而是错的了,其他的则是正确。测试以下图:
以上是今天要学习的内容,后面做者会持续更新这一系列的内容,但愿你们多多关注哦!
参考书籍
《0day安全软件漏洞分析技术(第2版)》 王清 主编