逆向分析并修改Hello World程序《逆向工程核心原理》《软件逆向工程原理与实践》
文章目录
- OllyDbg窗口及快捷键
- 步骤1:VS生成需逆向的文件
- 步骤2:OllyDbg中打开该程序的exe文件,找到需修改的位置
- 步骤3:修改
- 修改1:修改指令
- 修改2:修改字符串
- 修改3:输出任意英文
- 软件逆向工程原理与实践前三章课件
OllyDbg窗口及快捷键
步骤1:VS生成需逆向的文件
visual studio新建工程文件,编译以下程序时选择visual studio的Release模式,减少调试信息。点击本地windows调试器进行编译运行。
#include "windows.h"
#include "tchar.h"
int _tmain(int argc, TCHAR* argv[]) {MessageBox(NULL,_T("Hello World!"), _T("www.xidian.edu.cn"), MB_OK);
}
保存后在Release文件夹里面点击.exe文件:
步骤2:OllyDbg中打开该程序的exe文件,找到需修改的位置
EP(EntryPoint,入口点)是Windows可执行文件(EXE、DLL、SYS等)的代码入口点,是执行应用程序时最先执行的代码的起始位置。
用OD调试XX.exe刚开始默认跳转的位置就是EP处。
汇编代码窗口可以查看汇编指令,地址等相关信息,即寻找操作。
数据窗口可以进行数据修改。
执行的修改都是在main函数中,需要寻找到main函数的主体:
通过字符串查找
在汇编代码窗口点击右键,选择 查找->所有的参考文本字串 或 搜索->所有被应用的字符串(针对不用版本)
在被引用的列表中选择“www.xidian.edu.cn”或者是“Hello World!”
双击字符串即可查找到这两个字符串的push操作。过程如下:
步骤3:修改
修改1:修改指令
可以做的第一个修改是对调界面上的“www.xidian.edu.cn”和“Hello world!”这两个字串的位置。
可以对这两个字符串压栈的PUSH指令,将两条指令的地址互换。
由图可知,汇编指令对应的十六进制机器码分别是F8201B01和0C211B01。
在最左列可以看到,两条指令的地址在011B002。
在数据区域执行所有的修改操作:
在数据区域快捷键Crtl+G,搜索地址011B002,找到该地址,选中需要修改的区域,如下紫色部分。
再按快捷键Ctrl+E进入修改。
在编辑窗口修改该数据,将其修改为0C211B01,点击确定即可。
同样的步骤对后面的0C211B01进行修改,修改为F8201B01。完成两条指令的交换。修改后汇编代码窗口可以观察到两者的变化。
最后选择被修改的区域,如下紫色部分,在数据区域右键->复制到可执行文件。在生成的文件中右键->保存文件即可。
修改2:修改字符串
将原来的“Helloworld”界面上的“Hello world!”字符串,更改为“Hello Student!”
利用步骤二中的方法可以找到该字符串的地址,同样在数据区域找到该位置,选择该区域。
当然,由于“Hello Student!”比“Hello world!”要长,因此需要选择稍微大一点的区域,由于该条语句后面都是00,所以多选择区域不会造成错误。
Ctrl+E修改。直接对ASCII进行操作即可改变汇编代码指令。确定保存。
修改3:输出任意英文
题目来源:《软件逆向工程原理与实践》P11,1.6思考与练习
对以下C程序进行反汇编和逆向工程,得到能够在控制台上输出“一定长度的任意英文”的EXE程序。
#include"stdafx.h"
#include"stdio.h"
int main(int argc,char* argv[]){printf("Hello World\n");return 0;
}
下图中空白位置是自定义的一段英文。结果放到cmd窗口方便展示。
软件逆向工程原理与实践前三章课件
软件逆向工程原理与实践第1章软件逆向工程概述.pptx
软件逆向工程原理与实践第2章x86与x64体系结构.pptx
软件逆向工程原理与实践第3章ARM体系结构.pptx
逆向分析并修改Hello World程序《逆向工程核心原理》《软件逆向工程原理与实践》相关推荐
- Android逆向分析(一) - 反编译看看手Q口令红包的实现原理
原文:http://blog.zhaiyifan.cn/2016/02/09/android-reverse-1/ 本系列文章是<Android软件安全与逆向分析>的实践笔记(一些工具的版 ...
- Android逆向分析(1) 反编译看看手Q口令红包的实现原理
前言 本篇文章是作者MarkZhai的逆向分析系列的第一篇,已授权发布,并计划之后该系列的更新会第一时间发布在本公号上,敬请关注! 原文 本系列文章是<Android软件安全与逆向分析>的 ...
- 第八章 Android 原生程序开发与逆向分析(五)(原生 C 程序逆向分析)
文章目录 原生 C 程序逆向分析 编译原生 C 程序 for 循环分支结构 for1() for2() while 循环分支结构 dowhile() whiledo() if--else 分支结构 i ...
- HBBuilderProjest逆向分析与安全性扯淡
最近公司让我整一个app逆向分析如何修改状态栏,结果发现应该不是原生工程,而是第三方app,后面经过比对资产目录文件,特征码mainfest.json ,百度搜了一下·dclould.io的产品,也知 ...
- 应用程序逆向分析 有道词典_逆向工程媒体应用程序(并使其中的所有故事免费)...
应用程序逆向分析 有道词典 上周,我意识到距我在这里的最新帖子已经一年了. 我喜欢写故事,也喜欢阅读别人的故事,但前提是我认为这些故事足够有趣,而老实说这是一个很高的标准. 我最近一直在对Androi ...
- 【Windows 逆向】CheatEngine 工具 ( 汉化版 CE 工具推荐 | 编写简单 C++ 程序 | C++ 程序执行分析 | 使用 CE 修改上述 C++ 程序 )
文章目录 一.汉化版 CE 工具推荐 二.编写简单 C++ 程序 三.C++ 程序执行分析 四.使用 CE 修改上述 C++ 程序 一.汉化版 CE 工具推荐 推荐一个汉化版的 CE 工具 : htt ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( 使用 IDA 分析要修改的内存特征 | 根据内存特征搜索修改点 | 修改进程内存 )
文章目录 一.使用 IDA 分析要修改的内存特征 二.根据内存特征搜索修改点 三.修改进程内存 一.使用 IDA 分析要修改的内存特征 在前的博客 [Android 逆向]逆向修改游戏应用 ( 分析应 ...
- 二进制逆向工程师_利用Ghidra逆向分析Go二进制程序(下篇)
(接上文) 动态分配字符串结构 在第一种情况下,字符串结构是在运行时创建的,为此,需要使用一系列汇编指令在字符串操作之前设置相应的结构.由于指令集的不同,不同的架构之间的结构也是不同的.让我们通过几个 ...
- IDA、X32dbg逆向分析易语言程序窗口标题、宽度、高度
分析背景 源于对某软件的广告删除分析,发现其为易语言程序,特此写一篇关于易语言程序的分析思路,而此篇所讲述的为修改易语言编译后程序的标题.宽度和高度.(大佬勿喷,自己分析的思路记录) 环境准备 我们首 ...
最新文章
- Redis——由分布式锁造成的重大事故
- python while if 区别_对python中for、if、while的区别与比较方法
- 玩转“网上邻居”之WINS解析(一)
- JavaScript中的数组操作
- 反调试技巧总结-原理和实现(1)(2)(3)(4)(5)(6)......
- 运动基元_Java更快地对基元数组进行排序?
- [Vue warn]: Failed to mount component: template or render function not defined. (found in root insta
- vue js 和原生app调用回调方法问题
- 汉语中的通用量词:个,块
- postman测试JSON参数接口
- 最新Jrebel激活码,Jrebel激活激活服务,Jrebel激活码,Jrebel破解
- 苹果画画软件_想在iPad 上画画,推荐用这些软件
- 计算机已从异常关机中恢复,win7系统经常遇到“windows已从异常关机中恢复”的解决方法...
- python爬虫——爬取拉勾网一线与新一线城市职位信息
- 爬取笔趣阁《斗破苍穹》小说,只需改一下网址,笔趣阁所有小说任意下载
- 逻辑思维训练和推理思维训练
- (已解决)STM32报错Error: L6218E: Undefined symbol assert_param (referred from misc.o).
- 程序员专业常用英语词汇
- 管理客户信息并非易事
- 算法工程师的核心竞争力是什么?