《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验

** 实验前需安装以下工具: **

  1. IDA Pro(反汇编)
  2. OllyDbg(调试器)
  3. LordPE(PE工具)
  4. UltraEdit(十六进制编辑器)

Step1: 用于实验的C代码

#include 
#include 
#define PASSWORD "1234567"
int verify_password(char *password){
    int flag;
    flag = strcmp(password,PASSWORD);
    return flag;
}
void main(){
    int valid_flag;
    char password[1024];
    while(1){
        printf("Please input password: ");
        scanf("%s",password);
        valid_flag = verify_password(password);
        if(valid_flag){
            printf("Incorrect password!\n");
        }
        else{
            printf("Congratulations!\n");
            break;
        }
    }
}

将程序编译成功后得到.exe文件。
从程序源码中,不难发现,密码的验证完全取决于main函数当中的if判断。因此,我们要做的事情就是在.exe文件中找到if判断的二进制机器码,将其进行修改,那么,即使我们输入错误的密码,也可以通过验证!

Step2: 用IDA打开.exe文件

用IDA打开.exe文件会自动绘制函数流程图,如下:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第1张图片
IDA1.png

在流程图中 用鼠标找到if分支点,然后按空格键切换到汇编指令界面,千万别把分支点找错了,本次实验中if分支点对应的指令是 jz short loc_4010DF.

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第2张图片
IDA3.png

从上图中可以看出该指令位于PE文件(.exe文件)的.text节,并且IDA已经将该指令的地址自动转换成运行时内存地址VA: 0x004010CE.

Step3: 用OllyDbg打开.exe文件

用OllyDbg打开.exe文件,按快捷键Ctrl+G,在弹出来的对话框中输入地址0x004010CE,可以直接跳到此处,如下图:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第3张图片
Ollydbg9.png

在这里我们做个测试,在此处F2加一个断点,然后F9运行,OllyDbg暂时挂起,Console界面会提示输入密码,我们随便输入一个错误密码,OllyDbg会中断程序,如下图:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第4张图片
Ollydbg10.png

预执行区(左下角)看到提示:Jump is not taken!
现在,我们要把JE这条指令修改成JNE,那么整个程序的逻辑就会颠倒过来:输入错误的密码会通过验证,反而输入正确的密码会要求重新输入。
双击JE这条指令,在弹出的对话框中将JE修改成JNE,单击“汇编”按钮将其写入内存,会看到原来JE的机器码74变成了JNE的机器码75.如下图:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第5张图片
Ollydbg11.png

Step4: 用LordPE打开.exe文件

以上的步骤只是在内存中修改了程序,现在我们要在.exe文件中也修改相应的字节。
用LordPE打开.exe文件,查看PE文件的节信息,计算文件偏移地址,如下图:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第6张图片
LordPE1.png

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第7张图片
LordPE2.png

利用公式计算:
文件偏移地址 = 虚拟内存地址(VA) - 装载基址 - 节偏移
= 0x004010CE - 0x00400000 - (0x1000 - 0x10000)
= 0x10CE
也就是说,这条指令在.exe文件中位于距离文件开始处10CE字节处。

Step5: 用UltraEdit打开.exe文件

使用UltraEdit打开.exe文件,使用快捷键Ctrl+G,输入0x10CE,可以直接跳到该指令的机器代码处,在可写模式下修改,将74改为75,重新保存该可执行文件。如下图:

《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第8张图片
UltraEdit5.png

.exe文件修改之前和修改之后 运行对比图

2016-11-14 19-50-37.png
《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验_第9张图片
2016-11-14 21-37-32.png

你可能感兴趣的:(《0day安全:软件漏洞分析技术》—— 1.4 Crack小实验)