OllyDbg、CE简单介绍

基础知识:

想要破解软件,需要一些基础知识:
文件格式:Windows对应PE、Linux对应ELF、IOS对应Mash-0。文件格式是指操作系统规定的每个段(代码段、数据段、堆、栈)的大小、顺序等信息。
汇编语言:需要知道简单的x86、 x64汇编
工具:Ollydbg、CE等
Windows API:会开发才会知道怎么逆向

所需工具链接:https://pan.baidu.com/s/1n5J0jSlhM-u9f3QIdw3m3Q?pwd=d3sv

Ollydbg简单案例

在链接中有一个CrackMe.exe文件,运行它提示输入序列号:
在这里插入图片描述
要求:找出正确的序列号,或者不知道序列号也可以通过验证。
分析:一个exe的所有代码都在里面(如果不需要动态链接库dll),我们可以通过工具(Ollydbg)查看它的汇编代码,并且分析判断序列号的代码,然后进行修改源代码,从而达到要求。
其中CrackMe.exe文件里面都是二进制代码,很难分析(需要文件格式知识),可以通过Ollydbg工具自动分析出汇编代码(在同一架构的CPU汇编代码和机器码一一对应),从而轻易知道各个段在哪(代码段对于破解最重要,并且一旦编译完成,代码段和数据段地址是固定的,当然这里指的地址都是虚拟地址,真实地址需要mmu进行映射。堆区和栈区是运行时才分配的,它们的地址不固定)。

Ollydbg简单应用
运行Ollydbg:
在这里插入图片描述
将CrackMe.exe软件拖入Ollydbg(将exe文件代码通过Ollydbg从硬盘加载到内存):

在这里插入图片描述
因为代码比较短,可以很容易定位到序列号的部分(如果代码很长就需要打断点判断):
在这里插入图片描述jnz是一个跳转指令,可以大概猜到程序员当时应该用的if-else类似的语句。很容易看到jnz上两句入栈了两个数,然后调用了一个函数(Ollydbg帮我们分析出了这个函数叫"lstrcmpA",系统函数就可以分析出对应的文件名),我们在这个函数打上一个断点(F2),并运行:
在这里插入图片描述
然后随便输入一个序列号,点Check,此时Ollydbg就会暂停:
在这里插入图片描述
发现String1是我们输入的序列,String2就是正确的序列号。(要求1完成)

假如不进行跳转语句,那么就不会进入匹配失败的代码。只需要在跳转语句处右键-》二进制-》用NOP填充(汇编说明都不操作的指令)。NOP占用1个字节,所以自动使用两个进行替换,这样不会改变程序其他部分。
这时候我们再运行任何序列号都成功了:
在这里插入图片描述

然后可以保存修改后的程序,右键-》复制到可执行文件-》所有修改-》全部复制,然后会多出一个exe文件(修改源代码后的),然后右键保存为CrackMe-破解版就行了:

在这里插入图片描述
在这里插入图片描述
破解版直接运行就不用输入正确的序列号了(要求二完成)

2.CE简单使用

CE则侧重于实时修改内存数据以影响程序行为,有时候我们只希望找到某个变量的内存地址,而不管代码怎么编写的,这时候用CE就比较合适。
下面就植物大战僵尸这个游戏来介绍,下载链接:https://pan.baidu.com/s/1maefowdbE7fI4TUn4a2x3g?pwd=caad

先打开游戏,进入关卡:
在这里插入图片描述
然后打开CE软件,选择植物大战僵尸进程(CE就可以操作这个游戏了):
在这里插入图片描述
下图是CE的界面简单介绍
在这里插入图片描述

  1. 寻找阳光的地址
    然后假如要找阳光的地址(有了某个数据的地址,我们修改地址对应的值就可以修改数据了),已知现在阳关是150(一般整数用int存),然后首次搜素int为150的值:

    在这里插入图片描述
    总共进程找到75个int类型150的数据,现在不能判断到底是哪一个,需要缩小范围(改变值),可以种一个植物,变为50了:
    在这里插入图片描述

    在这里插入图片描述
    这个地址就是阳关的地址(大部分的时候不能缩小到一个,需要再次验证),然后去操作这个数:
    在这里插入图片描述
    双击修改为999,然后进游戏发现就改变了:
    在这里插入图片描述
    为了验证这个阳关地址是固定的还是每次重玩随机的,可以关掉游戏再次寻找,然后发现这次阳关地址为:
    在这里插入图片描述
    发现不是固定的,由此可以推断他是一个局部变量,并且不是指针:

    int SumValue = 50;
    

    后面会出一起CE操作自己写的控制台程序,加深对指针有更好的理解。

  2. 寻找僵尸血量,od修改血量代码达到秒杀僵尸
    我们先分析一下僵尸血量的代码:

    Zoombie zoombie;  //僵尸对象
    zoombie.life -= 10;   //僵尸血量减少,10可能是某个植物的攻击力
    

    如果我们将生命改成0就能实现秒杀僵尸的效果:

    zoombie.life = 0;
    

    因此步骤:先找到僵尸血量的地址,然后通过这个地址找到什么代码修改了这个地址,修改这个代码就可以实现秒杀僵尸的效果。等僵尸出来(如果没出来可能还没有new出来),选择“未知的值”(结果有特别多):
    在这里插入图片描述
    然后马上再次使用”未变动的数值“扫描”(可以多次):
    在这里插入图片描述
    种上植物,减少僵尸血量,然后使用“减少”的数值再次扫描:
    在这里插入图片描述
    就这样交替扫描,可以筛掉很多不相关的地址(可以加入比10000小的范围,因为一般血量就不会很大):
    在这里插入图片描述
    一般血量可以被10整除,大概率就是150那个,这时候可以右键点击“Find out what writes to the address”,结果如下:
    在这里插入图片描述

    00531313 - 89 44 24 1C  - mov [esp+1C],eax
    00531317 - 8B C5  - mov eax,ebp
    00531319 - 89 BD C8000000  - mov [ebp+000000C8],edi <<
    0053131F - E8 ECC3FFFF - call PlantsVsZombies.exe+12D710
    00531324 - 8B D8  - mov ebx,eax

    接下来分析代码,"[]"里面的内容表示是一个地址,这个地址是ebp寄存器+0xC8,并且这个地址就是这个僵尸血量的地址。这句代码意思:将edi寄存器的值赋给ebp+0xC8所指向的地址。
    我们先在CE里修改为一个很大的数(不要超过int取值范围),然后再游戏就发现僵尸好像死不了了。
    我们再从借助Ollydbg分析源代码。按Ctrl+G然后输入地址00531319 :
    在这里插入图片描述
    假如直接将00531319 地址处的代码改为:

    mov [ebp+000000C8],0
    

    这样的汇编代码会比原来的长(如果更短可以用NOP填充),这样会修改下面的代码,不可行。
    所以再在上面找一下哪里可以修改edi的代码,把它改为0就可以了。发现上面三行的代码:

    0053130F      2B7C24 20     sub edi,dword ptr ss:[esp+0x20]
    

    用edi寄存器减去了esp+0x20所指向地址的值作为edi的值,改为下面汇编代码就可以将edi的值变为0:

    0053130F      2B7C24 20     sub edi,edi
    

    在这里插入图片描述
    这句汇编指令字节数更少,不影响程序运行。
    然后右键保存更改后的代码,这样秒杀僵尸的破解版就成功了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/487172.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

泷羽sec学习打卡-brupsuite4

声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-proxy proxyInterceptHTTP history/WebSocket history&#xff08;历史记录&a…

Wallpaper壁纸制作学习记录10

图像准备 外部图像编辑器快速访问 Wallpaper Engine 允许您配置自己喜欢的外部图像编辑器&#xff0c;以用作补充图像编辑工具&#xff0c;您可以在整个编辑器中快速访问该工具。 您可以在Wallpaper Engine 编辑器中配置您选择的图像编辑器&#xff0c;通过顶部的文件菜单&am…

【C++算法】36.位运算_只出现一次的数字 II

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;解析 题目链接&#xff1a; 137. 只出现一次的数字 II 题目描述&#xff1a; 解法 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。说明时间复杂度O(n)&#xff0c;空间复杂…

transformer学习笔记-自注意力机制(1)

自注意力机制&#xff0c;可以说是transformer中最核心的部分之一&#xff0c;注意力机制&#xff0c;主要是在处理序列数据时&#xff0c;根据序列数据提供的上下文环境信息识别需要关注的特征数据&#xff0c;注意力机制通常用于不同序列之间的交互&#xff0c;表示不同序列环…

日志基础示例python和c++

文章目录 0. 引言1. python2. c 0. 引言 本文主要记录python版本和c版本常用的日志基础示例。 1. python python版本常用的是logging库&#xff0c;结合colorlog库&#xff0c;可根据不同日志级别打印不同颜色的日志&#xff0c;为了便于分析问题&#xff0c;还添加了日志保…

TimeXplusplus——提高时间序列数据的可解释性,避免琐解和分布偏移问题的深度学习可解释性的框架

摘要 论文地址&#xff1a;https://arxiv.org/abs/2405.09308 源码地址&#xff1a;https://github.com/zichuan-liu/timexplusplus 信号传输技术的优化对于推动光通信的发展至关重要。本文将详细探讨线路编码技术的目标及其实现方式。线路编码旨在提高带宽和功率效率&#xf…

python爬虫--某房源网站验证码破解

文章目录 使用模块爬取目标验证码技术细节实现成果代码实现使用模块 requests请求模块 lxml数据解析模块 ddddocr光学识别 爬取目标 网站验证码破解思路是统一的,本文以城市列表为例 目标获取城市名以及城市连接,之后获取城市房源信息技术直接替换地址即可 验证码 技术…

TimesFM模型论文内容

全文总结 这篇论文提出了一种基于解码器架构的时间序列预测基础模型TimesFM&#xff0c;旨在通过零样本学习在多种公共数据集上实现接近于监督学习模型的预测精度。 研究背景 研究问题&#xff1a;这篇文章要解决的问题是如何设计一个时间序列基础模型&#xff0c;使其在零样…

文生图模型开源之光!ComfyUI - AuraFlow本地部署教程

一、模型介绍 AuraFlow 是唯一一个真正开源的文生图模型&#xff0c;由Fal团队开源&#xff0c;其代码和权重都放在了 FOSS 许可证下。基于 6.8B 参数优化模型架构&#xff0c;采用最大更新参数化技术&#xff0c;还重新标注数据集提升指令遵循质量。在物体空间和色彩上有优势…

【高中生讲机器学习】28. 集成学习之 Bagging 随机森林!

创建时间&#xff1a;2024-12-09 首发时间&#xff1a;2024-12-09 最后编辑时间&#xff1a;2024-12-09 作者&#xff1a;Geeker_LStar 嘿嘿&#xff0c;你好呀&#xff01;我又来啦~~ 前面我们讲完了集成学习之 Boooooosting&#xff0c;这篇我们来看看集成学习的另一个分支…

双色Hanoi塔问题(hanoi)

双色Hanoi塔问题hanoi C语言实现C实现Java实现Python实现 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 设A、 B、 C是3 个塔座。开始时&#xff0c;在塔座A 上有一叠共n 个圆盘&#xff0c;这些圆盘自下而上&#xff0c;由大到小地叠在一…

微信小程序提交测试版,但是扫描体验版的二维码 显示 页面不存在

检查路径首页是否和我们微信小程序中的首页路径一致。 显然我的不一致。 {"pagePath": "pages/index/index","text": "产品","iconPath": "icons/Group 450.png","selectedIconPath": "/icons/组 …

12月9日IO

1.fread,fwrite实现文件拷贝 #include <myhead.h>int main(int argc, const char *argv[]) {// 打开两个文件FILE *fp fopen("1.txt", "r");FILE *fp1 fopen("2.txt", "w");if (NULL fp || NULL fp1) {perror("fopen&…

【服务器部署应用由http协议切换为https】

文章目录 服务器部署应用由http协议切换为https1. 下载openssl及其配置1.1 下载1.2 无脑下一步即可1.3 环境变量配置1.4 验证配置以及生成证书证书路径 2. nginx配置修改 服务器部署应用由http协议切换为https 1. 下载openssl及其配置 1.1 下载 openssl下载地址 根据系统选择…

如何创建基于udp的客户端和服务端

1.先创建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…

计算机视觉在科学研究(数字化)中的实际应用

计算机视觉是一种利用计算机技术来解析和理解图像和视频的方法。.随着计算机技术的不断发展&#xff0c;计算机视觉被广泛应用于科学研究领域&#xff0c;为科学家提供了无限的可能。 一、生命科学领域 在生命科学领域&#xff0c;计算机视觉被广泛用于图像识别、分类和测量等…

C++实现一个经典计算器(逆波兰算法)附源码

1、本篇要实现的内容 最近&#xff0c;大家讨论计算器的实现比较热&#xff0c;今天我也来用C和Visual Studio实现一个计算器的小程序。这里使用逆波兰算法&#xff0c;能够根据当前用户输入的算式表达式字符串&#xff0c;计算出所要的结果&#xff0c;算式字符串可以包括加、…

【电子元器件】音频功放种类

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 音频功放将小信号的幅值提高至有用电平&#xff0c;同时保留小信号的细节&#xff0c;这称为线性度。放大器的线性…

Linux图形化工具推荐

1、MobaXterm MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - DownloadFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Downloadhttps://mobaxterm.mobatek.net/download.html 2、FinalShell FinalShell SSH工具,服…

人工智能大模型LLM开源资源汇总(持续更新)

说明 目前是大范围整理阶段&#xff0c;所以存在大量机翻说明&#xff0c;后续会逐渐补充和完善资料&#xff0c;减少机翻并增加说明。 Github上的汇总资源&#xff08;大部分英文&#xff09; awesome-production-machine-learning 此存储库包含一系列精选的优秀开源库&am…