最近因为工作需要在看0day的软件漏洞分析,发现这本《0day安全软件漏洞分析技术(第2版)》真是本好书,唯一缺点就是书上的环境是Windows XP 32Bit的,基于现状难以进行实践,于是笔者打算使用紧跟潮流但又尽量满足书上的环境——Windows 10 Profession 32Bit,希望对大家学习有所帮助。

一、环境以及要用的软件

系统:Windows 10 Profession

软件:UltraEdit、LordPE、OllyDBG、VC++ 6.0、IDA Pro

下图作者的系统信息,就是一个虚拟机而已:

二、实验目的

本次实验的目的是通过更改软件的十六进制值达到输入任何密码都能突破验证。

三、实现过程

首先我们用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语言编程兵书等等。

上述代码经过编译运行会形成如下的运行结果:

从运行结果与我们程序的代码不难发现,这个软件的密码只会是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版)》 王清 主编

《0day安全软件漏洞分析技术》学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  10. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

随机推荐

  1. 【带着canvas去流浪(9)】粒子动画

    目录 一. 粒子特效 二. 开发中遇到的问题 2.1 卡顿 2.2 轨迹 2.3 复位 2.4 防护层 2.5 二维向量类 三. 实现讲解 3.1 粒子类的update方法 3.2 粒子群的绘制 3. ...

  2. 应届生offer指南

    通用技术 1.一般公司对应届生都要考察编程能力,所以应聘之前先刷刷题.我做面试官出的编程题两年没有变过.就是这道

  3. Unitest自动化测试基于HTMLTestRunner报告案例

    报告效果如下: HTMLTestRunner脚本代码如下: #coding=utf-8 # URL: http://tungwaiyip.info/software/HTMLTestRunner.ht ...

  4. Java反射04 : 通过Array动态创建和访问Java数组

    java.lang.reflect.Array类提供了通过静态方法来动态创建和访问Java数组的操作. 本文转载自:https://blog.csdn.net/hanchao5272/article/ ...

  5. 20180918 begin

    20180918-20190717 风 雅 颂(305,每天一首): 诗经鉴赏, 180918-1030 魔鬼经济学 <唐宋词十七讲>叶嘉莹<最美的宋词> 布谷鸟<诗境浅 ...

  6. python while语句

    一.while 1.while 死循环 f=True while f: print(1) print(2) 2.while 活循环 ①.正序 count = 1 while count <= 5 ...

  7. python通过重启线程,实现服务的热加载

    这个思路后来证明不能用于工作. 因为线程调用没有及时返回,所以不能用这种方式来重启服务. 但作为脑洞,也应该作个记录. import os import shutil import datetime ...

  8. 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛

    传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...

  9. java 通过Qrcode生成二维码添加图片logo和文字描述

    /** * 二维码创建 * @author yhzm * */ public class printServiceImpl extends BaseService { public void barC ...

  10. 【西北师大-2108Java】第八次作业成绩汇总

    [西北师大-2108Java]第八次作业成绩汇总 作业题目 面向对象程序设计(JAVA)--第10周学习指导及要求 实验目的与要求 (1)掌握java异常处理技术: (2)了解断言的用法: (3)了解 ...