X86逆向5:破解程序的自效验
在软件的破解过程中,经常会遇到程序的自效验问题,什么是自效验?当文件大小发生变化,或者MD5特征变化的时候就会触发自效验暗装,有些暗装是直接退出,而有些则是格盘蓝屏等,所以在调试这样的程序的时候尽量在虚拟机里面进行吧。
这里作者编写了一个文件自效验的例子,并且使用UPX进行了加壳处理,这个CM程序,如果不脱壳的情况下是可以正常执行的,但只要一脱壳程序就废了,这也是大多数程序作者惯用的反破解手法,今天我们就来搞一搞,最终实现的效果是,软件被脱壳,并且程序还照样正常的执行,好了废话不多说,直接开搞。
------------------------------------------------------------
本章难度:★★★☆☆☆☆☆☆☆
课程课件:CM_05.zip
------------------------------------------------------------
1.首先将程序载入OD中,默认会出现一个提示窗口,一般看到这个窗口就说明软件被压缩了,这里点是点否都可以,为了节约时间我就点否了哈。

2.然后直接运行程序,观察程序的OEP位置,会发现有壳,一般情况下看到【pushad】之类的指令开头,八成是压缩壳。

3.先来脱壳,直接上ESP定律,按下【F8】单步一次,观察右侧寄存器窗口,只用ESP寄存器变红,就可以使用ESP定律。

4.右键点击ESP寄存器中的数值,直接选择最下方的【HW break [ESP]】,然后点击运行程序。

5.然后单步【F8】,或者在sub esp的位置按下【F4】,然后直到jmp跳转。

6.会看到下面就是程序的OEP位置了,你或许会有疑问,我咋知道这是OEP呢?原因很简单,看多了就记住了,就像老司机,开车开多了啥都懂了,这些特征需要自己熟记。

上图我们需要记住一个关键数据【0045FB81】,这个地址是程序的OEP地址,我们要减去【00400000】,也就是只要记住【5FB81】就好,为啥要减去00400000 ?
哈哈,回到OD,按下【Alt +E】,看到了吧,基地址也就是程序在编译时指定的一个地址段,我们只需要得到偏移地址就好。

7.现在OD程序不要动,我们接着打开神器【LordPE】,来完整转存一份镜像。

8.接着打开【Import REC】来进行脱壳修复。

9.删除无效函数,和可疑函数,然后点击【修复转存文件】,然后转存到【dumpe.exe】上面。

10.此时在桌面生成了一个dumped_.exe文件,这就是我们脱壳后的程序,程序可以照常运行了并没有出现错误,说明程序脱壳顺利,但是程序内部存在暗装,由于我们脱掉了他的衣服,所以触发了暗装程序被迫终止了。下一步是直接破解跳过这个暗装。

这个程序其实有很多种破解思路,如果用MessageBox信息框的方式来解决是很简单的,但是有些程序在脱壳后,是不会有任何提示的,程序会直接终止执行,本章我不打算使用信息框断点来拦截,我们得想一种新的思路,确保在程序没有任何提示的情况下依然能够破解程序。
:我尝试过通过下ExitProcess程序退出断点,但是无法回朔到程序领空,因为程序执行ExitProcess函数直接就退出了。
:后来我想,程序运行之前是不是要读取当前程序的字节数,然后我通过下了一个ReadFile读文件断点,成功的找到了破解方法。
---------------------------------------------------------
11.接着搞,直接OD载入程序,然后选择【设置API断点】,选择【文件】,下一个ReadFile断点。

12.直接【F9】运行程序,发现当场断下,我们直接【alt + F9】回朔到用户代码,观察变化。

13.发现这一层并没有能跳过的call,直接出这个CALL

14.又跑到了系统领空,直接出call,按下【alt + F9】执行到用户代码。

15.点击弹出的弹窗提示,OD再次断下,回到OD,然后发现还是没有能跳过的关键跳转。

16.继续出这个CALL,下图也没有能跳过的关键跳,继续出CALL。

17.返回后看到了下图所示,我们向上找找看吧。

18.终于找到了,就是这里【je 00401130】,这里就是判断了,判断程序是否被破解的关键,下图的常量【62C00】就是程序的大小。

19.计算一下【62C00】刚好是十进制的【404480】,然后对比一下脱壳前和脱壳后的文件大小。

20.直接将cmd指令后面的常量改为【806912】=十六进制的【C5000】,然后保存文件。

21.直接保存文件,并运行看看吧。

写教程不容易,转载请加出处,您添加出处,是我创作的动力!
X86逆向5:破解程序的自效验的更多相关文章
- X86逆向3:通过修改关键CALL破解
软件逆向第一课中我们通过爆破的方式直接破解了程序的登录限制,但这一种方式很不合理,因为你只是破解了登录这一处的验证,如果程序内部还有其他的验证那么你需要再次爆破第二个验证,显然这种方式是很烦人的,如果 ...
- X86逆向8:向程序中插入新区段
本节课我们不去破解程序,本节课学习给应用程序插入一些代码片段,这里我就插入一个弹窗喽,当然你也可以插入一段恶意代码,让使用的人中招, 这里有很多原理性的东西我就不多罗嗦了毕竟是新手入门教程,如果想去了 ...
- Webstorm10.0.3破解程序及汉化包下载、Webstorm配置入门指南
核心提示: WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为“Web前端开发神器”.“最强大的HTML5编辑器”.“最智能的JavaSscri ...
- webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器
20160107以下亲测可行. webstorm11.0下载地址:http://www.fxxz.com/soft/109234.html webstorm11.0下载安装破解使用说明: 下载完Web ...
- X86逆向12:内存补丁的制作
本章我们将学习各种打补丁的方式,补丁在软件的破解过程中非常的重要,比如软件无法脱壳我们就只能通过打补丁的方式来破解程序,补丁原理就是当程序运行起来会被释放到内存并解码,然后补丁就通过地址或特征码定位到 ...
- X86逆向2:提取按钮通杀特征码
本章我们将学习特征码的提取与定位,特征码是软件中一段固定的具有标志性的代码片段,特征码的用途非常广泛,最常见的就是杀毒软件的查杀了,查杀就是根据特征码定位技术实现的,再比如木马的免杀也是修改了特征码的 ...
- Lua游戏逆向及破解方法介绍
Lua游戏逆向及破解方法介绍 背景介绍 随着手游的发展,越来越多的Cocos-lua端游开发者转移到手游平台.Lua脚本编写逻辑的手游也是越来越多,如梦幻西游.刀塔传奇.开心消消乐.游龙英雄.奇迹 ...
- X86逆向1:软件破解入门课【课件下载】
从本节课开始,我将带领小白入门学习软件破解的相关内容,大佬绕过,以后将会定期更新从最基本的破解知识点开始学习,由简单到复杂循序渐进,难度会逐步提高. 为了防止版权方面的争议,我将自行编写一些破解案例来 ...
- X86逆向9:通过关键常量破解
本章将讲解一下关于关键全局变量的一些内容,关键的全局变量对于软件的破解非常的有用,找到了关键全局变量并改写它同样可以完成完美爆破一个程序,这里我将使用CM小例子来讲解搜索关键变量的一些技巧,最后我们来 ...
随机推荐
- mysql的count和sum使用条件表达式
count函数条件不为null的时候显示结果.即使为false也也会显示结果. 可以是使用if条件或者case when语句.如果条件不为null即需要的结果. 使用count()函数实现条件统计的基 ...
- maven在pom文件中引入了icepdf-core包,pom文件却莫名的报错,说jai_core包missing
maven在pom文件中引入了icepdf-core包,却莫名的报错,说jai_core包missing,把这个jai_core包引入之后还是一样报错,PS:icepdf-core使用的时候不用引用j ...
- 配置默认编码为utf8
修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置,如下所示: [mysqld] character_set_server=utf8 init_connect='SET NAMES ...
- solr 初接触
solr教程,值得刚接触搜索开发人员一看 http://blog.csdn.net/awj3584/article/details/16963525
- Python 常用模块(2) 序列化(pickle,shelve,json,configpaser)
主要内容: 一. 序列化概述 二. pickle模块 三. shelve模块 四. json模块(重点!) 五. configpaser模块 一. 序列化概述1. 序列化: 将字典,列表等内容转换成一 ...
- DP————LIS(最长上升子序列)和LCS(最长公共子序列)问题
LIS问题 https://www.acwing.com/problem/content/898/ 思路:首先数组a中存输入的数(原本的数),开辟一个数组f用来存结果,最终数组f的长度就是最终的答案: ...
- 攻防世界新手Misc writeup
ext3 在Linux,使用root账户挂载linux文件,打开后使用find *|grep flag查找到一个flag.txt,打开后是base64编码,解码获得flag. give_you_fla ...
- 【JAVA开发】Eclipse几个版本说明
查看Eclipse的版本号: 1. 找到eclipse安装目录 2. 进入readme文件夹,打开readme_eclipse.html 3. readme_eclipse.html呈现的第二行即数字 ...
- python urllib2 实现大文件下载
使用urllib2下载并分块copy: # from urllib2 import urlopen # Python 2 from urllib.request import urlopen # Py ...
- tp5 ThinkPHP5 自定义异常处理类
在项目的开发过程中异常抛出尤为重要不仅能够做出友好提示帮助掩盖我们伟大的程序员们尴尬的瞬间,还能做到提示开发人员代码白编写的错误,下面进行自定义异常抛出类,纯属个人理解,希望大家指正 首先在框架中我们 ...