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汇编代码和机器码一一对应),从而轻易知道各个段在哪(代码段对于破解最重要,并且一旦编译完成,代码段和数据段地址是固定的,堆区和栈区是运行时才分配的,它们的地址不固定)。
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的界面简单介绍:

-
寻找阳光的地址
然后假如要找阳光的地址(有了某个数据的地址,我们修改地址对应的值就可以修改数据了),已知现在阳关是150(一般整数用int存),然后首次搜素int为150的值:
总共进程找到75个int类型150的数据,现在不能判断到底是哪一个,需要缩小范围(改变值),可以种一个植物,变为50了:


这个地址就是阳关的地址(大部分的时候不能缩小到一个,需要再次验证),然后去操作这个数:

双击修改为999,然后进游戏发现就改变了:

为了验证这个阳关地址是固定的还是每次重玩随机的,可以关掉游戏再次寻找,然后发现这次阳关地址为:

发现不是固定的,由此可以推断他是一个局部变量,并且不是指针:int SumValue = 50;后面会出一起CE操作自己写的控制台程序,加深对指针有更好的理解。
-
寻找僵尸血量,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
这句汇编指令字节数更少,不影响程序运行。
然后右键保存更改后的代码,这样秒杀僵尸的破解版就成功了。
相关文章:
OllyDbg、CE简单介绍
基础知识: 想要破解软件,需要一些基础知识: 文件格式:Windows对应PE、Linux对应ELF、IOS对应Mash-0。文件格式是指操作系统规定的每个段(代码段、数据段、堆、栈)的大小、顺序等信息。 汇编语言࿱…...
Python函数——函数的返回值定义语法
一、引言 在Python中,函数的返回值是其核心功能之一,它使得函数能够将计算结果传递给调用者,进而推动程序的逻辑和功能实现。理解和掌握函数的返回值语法,不仅能够提高代码的模块化和可读性,还能使程序更加高效和灵活…...
【Pandas】pandas isna
Pandas2.2 General Top-level missing data 方法描述isna(obj)用于检测数据中的缺失值isnull(obj)用于检测数据中的缺失值notna(obj)用于检测数据中的非缺失值notnull(obj)用于检测数据中的非缺失值 pandas.isna() pandas.isna() 是 Pandas 库中的一个函数,用于…...
mysql 数据库表的大小
mysql 数据库表的大小 Mysql 查看数据库各个表占用空间 mysql如何查看数据库所有表大小 在MySQL中,要查看数据库所有表的大小,可以使用以下方法: 方法一:使用information_schema数据库 首先,通过命令行或图形界面…...
(6)JS-Clipper2之ClipperOffset
1. 描述 ClipperOffset类封装了对打开路径和关闭路径进行偏移(膨胀/收缩)的过程。 这个类取代了现在已弃用的OffsetPaths函数,该函数不太灵活。可以使用不同的偏移量(增量)多次调用Execute方法,而不必重新分配路径。现在可以在一次操作中对开放和封闭路…...
如何在Ubuntu中利用repo和git地址下载获取imx6ull的BSP
01-设置git的用户名和邮箱 git config --global user.name "suwenhao" git config --global user.email "2487872782qq.com"这里不设置的话后面在第5步的repo配置中还是会要求输入,而且以后进行相关操作都要输入,不妨现在就进行配置…...
Ruby On Rails 笔记5——常用验证下
3.Validation Options 3.1 :allow_nil 当验证值为nil时:allow_nil选项会跳过验证 class Coffee < ApplicationRecordvalidates :size, inclusion: { in: %w(small medium large),message: "%{value} is not a valid size" }, allow_nil: true end irb> Cof…...
JS听到了因果的回响
这是我学习JS的第11天了,,,我现在赶着周末学JS,然后还有二十多天就期末了呵呵呵。。。 图片切换模块 思路分析: 这是实现的代码,建议还是把不同的变量定义出来比较合适: //获取三个盒子// 小盒…...
【高中生讲机器学习】28. 集成学习之 Bagging 随机森林!
创建时间:2024-12-09 首发时间:2024-12-09 最后编辑时间:2024-12-09 作者:Geeker_LStar 嘿嘿,你好呀!我又来啦~~ 前面我们讲完了集成学习之 Boooooosting,这篇我们来看看集成学习的另一个分支…...
硬件设计 | Altium Designer软件PCB规则设置
基于Altium Designer(24.9.1)版本 嘉立创PCB工艺加工能力范围说明-嘉立创PCB打样专业工厂-线路板打样 规则参考-嘉立创 注意事项 1.每次设置完规则参数都要点击应用保存 2.每次创建PCB,都要设置好参数 3.可以设置默认规则,将…...
【Elasticsearch】实现用户行为分析
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
python字符串处理基础操作总结
1.去掉空格或者特殊符号 input_str.strip() #去掉所有空格 input_str.lstrip() #去掉左边空格 input_str.rstrip() #去掉右边空格 def print_hi():input_str 今天天气不错,风和日丽 out input_str.strip()print(input_str)print(out)if __name__ __main__:print…...
电子商务人工智能指南 6/6 - 人工智能生成的产品图像
介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...
【论文阅读】相似误差订正方法在风电短期风速预报中的应用研究
文章目录 概述:摘要1. 引言2. 相似误差订正算法(核心)3. 订正实验3.1 相似因子选取3.2 相似样本数试验3.3 时间窗时长实验 4. 订正结果分析4.1 评估指标对比4.2 风速曲线对比4.3 分风速段订正效果评估4.4 风速频率统计 5. 结论与讨论 概述&am…...
贪心算法 - 学习笔记 【C++】
2024-12-09 - 第 38 篇 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) 贪心算法 学习课程: https://www.bilibili.com/video/BV1f84y1i7mv/?spm_id_from333.337.search-card.all.click&vd_source2683707f584c21c57616cc6ce8454e2b 一、基本…...
精确的单向延迟测量:使用普通硬件和软件
论文标题:Precise One-way Delay Measurement with Common Hardware and Software(精确的单向延迟测量:使用普通硬件和软件) 作者信息:Maciej Muehleisen 和 Mazen Abdel Latif,来自Ericsson Research Eri…...
【MySQL 进阶之路】存储引擎和SQL优化技巧分析
1.InnoDB和MyISAM存储引擎的区别是什么?你在哪些场景下选择InnoDB? Innodb是高并发,支持事务跟行级锁,myisam不支持事务和行级锁,支持表级锁,不支持高并发。innodb底层是B树,适合范围查询&#…...
vue+elementUI从B页面回到A页面并且定位到A页面的el-tabs的某个页签
场景 做项目碰到一个需求,不能使用组件缓存keep-alive,但是需要跳转到B页面后,点击B页面的返回回到A页面的某个页签,灵机一动利用路由拦截去判断即将要跳转的页面后,在获取vm里对应的标签变量进行赋值,实现…...
{结对编程/大模型} 实践营项目案例 | 基于RAG搭建政策问答智能聊天助手
在构建政策问答智能聊天助手的过程中,我们采用了 RAG(Retrieval-Augmented Generation)技术。RAG 是一种结合了检索和生成的混合型自然语言处理技术,它通过检索相关信息来增强生成模型的上下文理解能力。RAG 的主要优点在于能够有…...
【Canvas与图标】乡土风金属铝边立方红黄底黑字图像处理图标
【成图】 120*120图标: 大小图: 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>金属铝边立方红黄底黑…...
纷析云开源财务软件:企业级财务管理完整解决方案指南
纷析云开源财务软件:企业级财务管理完整解决方案指南 【免费下载链接】纷析云财务软件 纷析云SAAS云财务软件开源版,包含账套、凭证字、科目、期初、币别、账簿、报表、凭证、结账等功能。 纷析云开源财务系统,餐饮行业财务软件、微服务架构财…...
【Python 教程】如何将 JSON 数据转换为 Excel 工作表
pagehelper整合 引入依赖com.github.pagehelperpagehelper-spring-boot-starter2.1.0compile编写代码 GetMapping("/list/{pageNo}") public PageInfo findAll(PathVariable int pageNo) {// 设置当前页码和每页显示的条数PageHelper.startPage(pageNo, 10);// 查询数…...
ArduPilot开源飞控之飞行模式切换机制解析
1. ArduPilot飞行模式概述 第一次接触ArduPilot时,最让我震撼的就是它丰富的飞行模式。就像开车时有手动挡、自动挡、运动模式一样,无人机也需要根据不同的飞行场景选择合适的"驾驶模式"。举个例子,新手练习时用Stabilize模式就像开…...
AIGlasses_for_navigation网络通信基础:TCP/IP协议栈与实时数据传输优化
AIGlasses_for_navigation网络通信基础:TCP/IP协议栈与实时数据传输优化 最近和几个做智能眼镜导航项目的朋友聊天,他们都在为一个问题头疼:眼镜端看到的导航画面,有时候会卡顿一下,或者指令响应慢半拍。这听起来是小…...
OpenClaw私有化方案:Qwen3-VL:30B+飞书自动化助手实战
OpenClaw私有化方案:Qwen3-VL:30B飞书自动化助手实战 1. 为什么选择私有化AI助手 去年我接手了一个特殊项目:需要将公司内部的技术文档自动整理成知识库,并推送到飞书文档。这个需求看似简单,但涉及几个棘手问题:文档…...
深入解析ACS SPiiPlus运动控制器的托管接口设计与实现
1. ACS SPiiPlus运动控制器托管接口概述 在工业自动化领域,运动控制器的性能直接影响着设备的精度和效率。ACS SPiiPlus系列作为业内知名的高性能运动控制器,其托管接口设计一直是工程师们关注的焦点。这套接口本质上是一套软件中间层,它架起…...
KeyDecoder项目架构分析:理解Flutter应用的数据流与状态管理
KeyDecoder项目架构分析:理解Flutter应用的数据流与状态管理 【免费下载链接】KeyDecoder KeyDecoder app lets you use your smartphone or tablet to decode your mechanical keys in seconds. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyDecoder Ke…...
PyTorch 2.8镜像实操手册:/workspace+/data+/output目录规范使用详解
PyTorch 2.8镜像实操手册:/workspace/data/output目录规范使用详解 1. 镜像环境概述 PyTorch 2.8深度学习镜像基于RTX 4090D 24GB显卡和CUDA 12.4深度优化,专为高性能计算任务设计。这个环境预装了完整的深度学习工具链,从基础框架到加速库…...
基于LMS算法的16位SAR ADC中电容失配数字校正技术研究:Split ADC原理、MAT...
基于lms电容失配数字校正的16bit sar adc的split adc MATLAB可对比校正前后精度,原理基于国外论文,不支持。 适合进阶学习,想要对sar adc数字校正建模有了解的同学可以。SAR ADC设计里最头疼的就是电容失配问题。当工艺跑到16bit精度时&#…...
揭秘USDT混币器:从智能合约代码到浏览器控制台,一次匿名转账的完整技术栈解析
揭秘USDT混币器:从智能合约代码到浏览器控制台的技术全景 在区块链世界中,隐私保护与交易透明性似乎是一对永恒的矛盾。当每一笔USDT转账都能被链上浏览器追踪到资金流向时,一种名为"混币器"的技术方案正在用密码学重新定义匿名边界…...
