本章我们将学习各种打补丁的方式,补丁在软件的破解过程中非常的重要,比如软件无法脱壳我们就只能通过打补丁的方式来破解程序,补丁原理就是当程序运行起来会被释放到内存并解码,然后补丁就通过地址或特征码定位到关键的位置,并替换关键的跳转。

------------------------------------------------------------
本章难度:★☆☆☆☆☆☆☆☆☆
课程课件:CM_12.zip
------------------------------------------------------------

通过特征码打补丁

1.首先OD附加,CM_12.vmp.exe 这个加过壳的程序,然后我们通过前期学过的内容找到关键跳转,并记录下它的特征码。

根据上方我们可以提取出【0F 84 56 00 00 00 BB 06】这一段代码为特征码使用,我们需要将此处的代码替换成【90 90 90 90 90 90】。

2.按下【Ctrl + B】然后搜索一下【0F 84 56 00 00 00 BB 06】看提取的特征码是否能够定位到关键位置。

3.使用易语言编写一个小程序,然后写入以下代码,即可完成特征码的替换了。

4.编译并生成可执行文件,我们运行程序让其完全加载,然后运行补丁程序,点击打补丁,如下程序会被完美破解。

给DLL文件打补丁

1.OD直接载入CM_12这个程序,该程序会调用check.dll 动态链接库来完成用户名密码的验证,所以我们需要给Dll打补丁。

2.按下【Alt + E】观察发现这个check.dll 基地址是【00F90000】,我们双击这个模块跳转到模块中去。

3.这个程序的破解非常的简单,我们需要将下图中的两个jnz 跳转取反就可以完成验证啦,这里我们记下他们两个的特征码。

4.我们需要将上图中的【0F852F000000/ 0F850F000000】这两处全部替换成【90 90 90 90 90 90】,其补丁程序核心代码如下。

5.运行源程序,并运行补丁,然后我们点击验证Dll ,程序被顺利的破解。

X86逆向12:内存补丁的制作的更多相关文章

  1. X64下MmIsAddressValid的逆向及内存寻址解析

    标 题: [原创]X64下MmIsAddressValid的逆向及内存寻址解析 作 者: 普通朋友 时 间: 2015-10-21,20:03:52 链 接: http://bbs.pediy.com ...

  2. Navicat Premium 12破解补丁

    Navicat Premium 12破解补丁是专门针对Navicat 12制作的一款破解工具,它可以帮助大家成功激活软件,激活后就可以免费使用软件所有功能了,小编亲测可用,有需要的可以下载试试. Na ...

  3. C# 简单内存补丁

    写在开头:看了一些视频教程,感觉OD为什么别人学个破解那么容易,我就那么难了呢,可能是没有那么多时间吧. 解释:个人见解:所谓内存补丁,即:通过修改运行程序的内容,来达到某种目的的操作.修改使用Ope ...

  4. error : Could not load UI satellite dll 'TrackerUI.dll'. Make sure it exists in an LCID subdirectory of 'C:\Program Files (x86)\MSBuild\12.0\bin\'.

    原因  VS2013 + QT环境部署好后, 又安装了VS2015\ 解决方案:  在另一台电脑里重装VS2013, 并将  C:\Program Files (x86)\MSBuild\12.0\B ...

  5. Linux-3.14.12内存管理笔记【伙伴管理算法(1)】

    前面分析了memblock算法.内核页表的建立.内存管理框架的构建,这些都是x86处理的setup_arch()函数里面初始化的,因地制宜,具有明显处理器的特征.而start_kernel()接下来的 ...

  6. Linux-3.14.12内存管理笔记【构建内存管理框架(1)】

    传统的计算机结构中,整个物理内存都是一条线上的,CPU访问整个内存空间所需要的时间都是相同的.这种内存结构被称之为UMA(Uniform Memory Architecture,一致存储结构).但是随 ...

  7. Linux-3.14.12内存管理笔记【建立内核页表(1)】

    前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的.下面就基于RAM大于896MB,而小于4GB ,切CON ...

  8. X86逆向4:VMP壳内寻找注册码

    本节课将讲解一下重启验证,重启验证在软件中也是非常的常见的,重启验证的原理很简单,用户在注册界面输入注册码以后程序会自动将输入的注册信息保存到配置文件中,这里可能保存到注册表,也可能使用INI文件来保 ...

  9. DLL补丁劫持制作

    DLL: 由于输入表中只包含 DLL 名而没有它的路径名,因此加载程序必须在磁盘上搜索 DLL 文件.首先会尝试从当前程序所在的目录加载 DLL,如果没找到,则在Windows 系统目录中查找,最后是 ...

随机推荐

  1. maven坐标及依赖范围的学习(1)

    首先,我们先了解什么是maven的坐标(重中之重): 在这里我们可以看到那三个红色的行,基本是pom.xml中出现的最多的配置     例如这个配置:这里我们可以看到我们这个项目的pom文件中,他对名 ...

  2. Nslookup: command not found error on RHEL/CentOS 7

    Reference: https://unix.stackexchange.com/questions/164210/nslookup-command-not-found-error-on-rhel- ...

  3. LeetCode 20. 有效的括号(Valid Parentheses )

    题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正确的顺序闭合. 注意空字 ...

  4. DockerFile 简单使用

    Dockerfile 是用来构建 Docker 镜像的构建文件,是由一系列命令和参数构成的脚本. 以 CentOS 为例(https://hub.docker.com/_/centos): FROM ...

  5. docker save/load以及export/import使用测试

    对于有些环境需要离线安装的情况,docker以及docker容器都需要能够支持离线安装,对于docker离线安装,比较简单,按照https://www.cnblogs.com/qq931399960/ ...

  6. leetcode-hard-ListNode-148. Sort List

    mycode    97.37% 如果用上一个题目中”参考“的方法,res中放节点而不是val,就会超时 # Definition for singly-linked list. # class Li ...

  7. Scala中的列表可以添加元素吗?

    列表或许是Scala程序中最常用到的数据结构了,其与数组非常相似,最重要的两点差别为: 1.列表是不可变的: 2.列表具有递归结构,而数组是连续的. 在实际使用中非常容易这样用: val a = Li ...

  8. python中计时模块timeit的使用方法

    timeit 模块: timeit 模块定义了接受两个参数的 Timer 类.两个参数都是字符串. 第一个参数是你要计时的语句或者函数. 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导 ...

  9. iOS创建带删除线和价钱符号的Label

    效果显示如下: 只需要子类化Label,重写DrawRect()方法即可: #import "MyLabel.h" @implementation MyLabel - (insta ...

  10. coreDNS域名无法解析问题

    问题: 在pod内无法解析域名 解决: busybox的镜像有bug,导致ping可以解析,但是nslookup无法解析 kubectl run -it --rm --image=infoblox/d ...