0day安全:软件漏洞分析技术(第二版) 例子一

 书中摘抄的代码如下,编译后的EXE文件,实现了简单的密码校验的功能。此次实验的目的,是按照书中的描述,修改EXE文件,使输入非匹配的密码可以通过验证。


#include <stdio.h>

#include <string.h>


#define PASSWORD "1234567"

int verify_password (char *password)

{           

    int authenticated;

    authenticated=strcmp(password,PASSWORD);

    return authenticated;

}

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;

        }

    }

}

使用Dev-C++ 5.11进行编译,编译的时候选择32位程序发布,编译生成文件0day_test1.exe:


图一


该程序运行效果如下:


图二

使用IDA静态反编译工具打开该EXE文件,找到匹配PASSWORD的判断分支指令,尝试修改EXE的代码逻辑为:PASSWORD匹配失败跳转到原来的密码比较成功逻辑分支,实现输入非匹配密码可以通过验证。


图三


在该指令上按空格切换命令界面,获取该指令的VA地址


图四

得到该指令的VA地址在.text段的00401578,可以看到得到的VA地址和原书中描述的地址并不一样。

.text:00401578                 jz      short loc_401588

关掉VA,使用管理员权限打开ollydbg,打开0day_test1.exe:

然后使用CTRL+G直接跳转到上述的VA地址


图五

双击该指令,将原本的“JE SHORT 00401588”改成“JNE SHORT 00401588”


图六

可以看到指令已经被改:


图七

目前被被改的仅仅是内存中的指令,需要写到EXE文件中。书中使用原始的方式在EXE文件中找到指令并修改,由于ollydbg有现成的功能实现这个功能。

单击该指令,右键--Edit--Copy to executable


图八

弹出窗口提醒保存文件,确认OK。然后从窗口选择保存文件


图九


图十


运行破解的EXE文件,可以发现输入错误密码可以通过认证。


图十一

上面使用ollydbg实现PE文件(EXE文件)的格式修改,下面实验手工查找PE文件中的执行指令。

使用PE Explorer打开PE文件


图十二


EXE文件的代码段.text段,内存装载基地址(Image Base)=00401000

指令的虚拟内存地址(VA)=00401578

.text段文件中偏移地址 = 00000400 

计算指令的文件偏移地址

指令在文件偏移地址=虚拟内存地址(VA)- 装载基址(Image Base)+.text段文件中偏移地址

=00401578-00401000+00000400 

=978

使用WinHex直接跳到指令在文件偏移地址:


图十三



图十四

改成:


图十五

保存文件,并运行:


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • ELF&PE 文件结构分析 说简单点,ELF 对应于UNIX 下的文件,而PE 则是Windows 的可执行文件,...
    刀背藏身阅读 12,640评论 1 27
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,909评论 0 27
  • 这个世界从来都不稀罕善良的人,这个世界喜欢强者。不过这也合乎于自然法则,优胜劣汰,强者为尊。做一个超级强的人,然后...
    懂提莫阅读 143评论 1 3
  • 很多人都说25岁之前皮肤好是爹妈给的底子好,25岁之后皮肤好,那是自己护肤做的好。 确实,很多女孩子明明有很好的皮...
    大象Y阅读 213评论 0 1
  • 关于本篇文章 了解一些 servlet 概念,本编文章只进行一些文章格式修改,文章内使用的图片均来自 Runoob...
    LeeSpringFly阅读 267评论 1 0