利用OD破解一个简单的C语言程序
最近在学习汇编(看的是王爽老师的《汇编语言(第三版)》),然后想尝试使用OD(Ollydbg)软件破解一个简单的C语言程序练练手。
环境:
C语言编译环境:VC++6.0
系统:在Windows10下开的VM虚拟机中的Windows XP
C语言程序代码:
#include <STDIO.H>
int main(){
int age;
age=;
if (age==){
printf("Successful\n");
}else{
printf("No Access\n");
}
getchar();
return ;
}
这个程序编译后,正常运行输出的是"Successful",而现在的目的是采用反汇编让该程序输出"NO Access"。
我们先在VC6中分析一下这个程序反汇编(Disassembly)之后的结果:(这个步骤不会请自行百度)

简单分析之后,可以看出"if (age==10)"被编译为:
CMP DWORD PTR [EBP-4],0AH
JNE main+34H
分析一下这两条汇编指令:
CMP用于将SS:[EBP-4]内存单元中(这个内存单元保存的就是变量age的值)数据与0AH做减法运算,但是不保存结果,只影响标志位,由于被减数和减数都是0AH,所以相减为0,标志位ZF=1。
JNE全称为Jump if Not Equal,它与JNZ(Jump if Not Zero)指令等价(为什么要说到JNZ呢,因为在OD软件中是JNZ而不是JNE),JNE/JNZ判断标志位ZF是否为1,如果为1则不跳转,显然此时的ZF=1,那就是不跳转了,将继续执行下面的指令,就输出了"Successful"了。
而我们需要输出"No Access",就需要让它跳转,那怎么让它跳转呢,很简单,只需要将JNE修改为JE就行了,JE就是如果ZF=1则跳转。
知道了突破口,用OD打开这个程序,找到00401033H行(由于编译环境不同,读者可能不是此行,建议使用ASCII字符串搜索"Successful"进行跳转,此方法自行百度)。

双击选中的行,将jnz改写为jz,然后单击“汇编”按钮即可。

在修改的行右键,选择“复制到可执行文件”->“所有修改”,在跳出的对话框中选择“全部复制”。

在跳出的新窗口中右键选择“保存文件”即可保存修改之后的程序。

然后运行修改之后的程序,显示的就是"No Access"啦!

利用OD破解一个简单的C语言程序的更多相关文章
- 一个简单的C语言程序(详解)
C Primer Plus之一个简单的C语言程序(详解) #include <stdio.h> int main(void) //一个简单的 C程序 { int num; //定义一个名为 ...
- 利用ANTLR4实现一个简单的四则运算计算器
利用ANTLR4实现一个简单的四则运算计算器 ANTLR4介绍 ANTLR能够自动地帮助你完成词法分析和语法分析的工作, 免去了手写去写词法分析器和语法分析器的麻烦 它是基于LL(k)的, 以递归下降 ...
- 从零开始的程序逆向之路基础篇 第二章——用OllyDbg(OD)分析一个简单的软件
作者:Crazyman_Army 原文来自:https://bbs.ichunqiu.com/thread-43469-1-1.html 0x00知识回顾 (由于笔者省事,没开XP虚拟机,而且没关闭A ...
- 利用 nodeJS 搭建一个简单的Web服务器(转)
下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序
iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: // // YYcar ...
- 一个简单的MDI示范程序(Delphi)
http://www.cnblogs.com/pchmonster/archive/2012/01/07/2316012.html 最为一个巩固之前有关窗体和对象的有关知识,下面就建立一个简单的MDI ...
- 一个简单的python爬虫程序
python|网络爬虫 概述 这是一个简单的python爬虫程序,仅用作技术学习与交流,主要是通过一个简单的实际案例来对网络爬虫有个基础的认识. 什么是网络爬虫 简单的讲,网络爬虫就是模拟人访问web ...
- 一个简单的C#爬虫程序
这篇这篇文章主要是展示了一个C#语言如何抓取网站中的图片.实现原理就是基于http请求.C#给我们提供了HttpWebRequest和WebClient两个对象,方便发送请求获取数据,下面看如何实 1 ...
- 【Java】一个简单的Java应用程序
简单记录,Java 核心技术卷I 基础知识(原书第10 版) 一个简单的Java应用程序"Hello, World!" Hello, World! Goodbye,World! 一 ...
随机推荐
- SVN安装及其汉化
1.百度搜索SVN,点击官网进去 2.点击download进入下载页面,选择合适的安装包 3.当前页面往下拉,看到汉化包下载页面,要注意版本 4.2个下载完,先安装软件在安装汉化包,要注意软件和汉化包 ...
- (办公)记事本_通过xshell连接Liunx服务器
任务:需要用xshell连接到Liunx服务器,装配环境,放置项目,查看日志,以后就要做,磁盘扩容,均衡负载,以及病毒错误. 第一步,先连接上: 1.xshell新建会话,刚才买的liunx的公网地址 ...
- Python的filter方法实现筛选功能
filter方法可以实现筛选,第一个参数是一个函数,返回值是True或者False,第二个参数可以是str.tuple.list,将后面的参数依次传递给函数,依次判断结果,留下结果为 True的.比如 ...
- linux的装配与虚拟机的快照
一.科普 1969年,“c语言之父”,“b语言之父”,ken Thompson,开发了一个叫unics系统,是unix系统的雏形,只不过此时的UNICS是用汇编语言写的.移植到其它计算机上需要改很多源 ...
- vuex——action,mutation,getters的调用
一.子模块调用根模块的方法 mutation调用 context.commit('clearloginInfo',{key_root:data},{root:true}); action调用 co ...
- PowerMock学习(八)之Mock Argument Matcher的使用
前言 本计划在上周六日将powermock学完,并同步到博客中,结果自己没经得住诱惑,又开始去打王者荣耀了.虽然两天时间我从钻石一升到了星耀V四星,但是我并没有觉得很开心,相反很失落呢.不得不说腾讯的 ...
- jQuery 源码解析(二十三) DOM操作模块 替换元素 详解
本节说一下DOM操作模块里的替换元素模块,该模块可将当前匹配的元素替换指定的DOM元素,有两个方法,如下: replaceWith(value) ;使用提供的新内容来替换匹配元素集合中的每个元 ...
- 基于 Swoole 的微信扫码登录
随着微信的普及,扫码登录方式越来越被现在的应用所使用.它因为不用去记住密码,只要有微信号即可方便快捷登录.微信的开放平台原生就有支持扫码登录的功能,不过大部分人还是在用公众平台,所以扫码登录只能自行实 ...
- [Spring cloud 一步步实现广告系统] 10. 使用Ribbon 实现微服务调用
在使用Ribbon调用广告投放系统API之前,我们需要先创建2个VO对象,AdPlanVO,AdPlanGetRequestVO. //数据请求对象 @Data @NoArgsConstructor ...
- PHP strstr 字符串函数
定义和用法 strstr - 查找字符串的首次出现 版本支持 PHP4 PHP5 PHP7 支持 支持 支持 V5.3.0 新增可选的 before_needle 参数. V4.3.0 strstr( ...