- 注册时间
 - 2011-1-27
 
- 最后登录
 - 2021-8-19
 
- 在线时间
 - 229 小时
 
 
 
 
 
终身VIP会员 
花钱是让你服务的,不是叫你大哥 ... 
    
	- 魔鬼币
 - 10656 
 
 
 
 | 
 
在没接触破解之前,觉得这玩意太神秘、遥不可及了。在怀着畏惧的内心,真正耐心的接触 破解 长达1天后,才发现,简单的破解是那么的容易。在此来略微总结下这1天的学习后,自己吸取领悟的一些原理。 
1.        壳、调试工具OD以及简单的汇编知识 
1.1        壳。 
破解一般有几个步骤,加载被加壳的软件----观察壳的入口点特征 以及分析 壳的类型 和 
壳的型号(即出厂厂家) ------寻找入口点 ----脱壳 ------修复(这是门学问) ------EP断优化 -----运行软件后加载OD,这时候观察是否已经完整脱壳---OVER!!! 
*壳一般分两种,国产和进口的!!!当然,另一种分法是 压缩壳和加密壳!!!压缩壳的原理和鉴别是非常简单的。 
1.1.1 如何鉴别壳是压缩壳? 
方法一:当软件加载OD后,OD会有提示:此乃压缩壳! 谓之方法一! 
方法二:顾名思义,压缩壳就是压压压缩缩缩,压缩壳的入口一般会有pushad、pushaf之类的指令,这其实是将入口地址的一些相关信息压进了堆栈,最后通过popad、popaf之类的指令再将它们弹出堆栈,popad第一个返回的EAX中存放的就是软件的真正的入口地址。 
1.1.2 如何鉴别壳是加密壳? 
方法一:当软件加载OD后,OD会有提示:此乃加密壳! 谓之方法一! 
方法二:骚泪,这方面的内容还没有接触过,不敢妄谈。。。 
 
1.2        调试工具OD介绍。 
1.2.1窗口介绍:常规的OD一般有5个窗口,左上角是反汇编窗口,右上角是寄存器窗口,左下角是数据窗口,右下角是堆栈窗口,还有一个信息提示窗口是夹在在 反汇编和数据窗口的中间。 
1.2.2菜单介绍: 这没什么好介绍的。。。真的。。。(好吧,主要是东西太多了,要写个半天。) 
1.2.3 快捷键图标介绍: 从左到右依次为:打开、重载、关闭、F9运行程序、暂停程序、步入、步过、跟入、跟过、执行到返回(CTRL+F9) 以及 转到反汇编窗口的地址(这个没用过)。 
  
接着往右数依次为:显示记录窗口、*模块(dll)窗口、*内存窗口、*线程窗口、Windows窗口、句柄窗口、*反汇编窗口、补丁窗口、*堆栈窗口、*断点窗口、显示参考窗口 以及 其他。(*代表比较重要。) 
  
 
1.2.4 寄存器窗口详解。 
我们选择的寄存器是FPU。 
前8个寄存器都是32位寄存器。分别为:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI 
EAX和EDX一般作为默认返回值来使用。当然,他们也拥有所有其他通用寄存器同样的功能。ESP是指针寄存器,永远指向栈顶,EBP同样是指针寄存器,他可以自由的访问堆栈段。 
EIP寄存器记录当前的指令所在的虚拟内存的位置; 
CPAZSTDO是8个标志位寄存器,标志位是非常重要的,虽然常常被我们冷落。他们一般记录的是当前的汇编指令操作后的一些重要信息。比如add指令会至少返回一个cf和of值,用来表明是否进位或者溢出。条件跳转指令,CPU都是根据标志位来决定是否执行跳转。 
St(0)~st(7)是8个浮点寄存器。浮点寄存器,顾名思义,是操作浮点的寄存器。所有操作浮点的相关指令,都会用到浮点寄存器。 
DR(0)~DR(7)寄存器,未在FPU界面显示,其实他们是调试寄存器。 
 
1.3        简单的汇编知识。 
随便找点书看看就行,这玩意还是很简单的。  
  
2.        破解方案 
破解的方法,按照我看了一些相关资料,整理出以下6种方法: 
0.1        单步跟踪之霸王硬上弓法 
0.2        堆栈指针观察法 
0.3        内存断点法 
0.4        Ctrl+F 搜索法 
0.5        模拟跟踪法 
0.6        最后一次异常法 
这些还是比较简单的。不详细说了。 
 
3.        CALL和retn的本质。 
3.1 call的本质: 
0.1.向堆栈中压入下一行程序的地址; 
0.2.JMP到call的子程序地址处。 
3.2 Retn的本质: 
0.1.将当前的ESP中指向的地址出栈; 
0.2.JMP到这个地址。 
 
4.        hr esp-4 
其实就是硬件访问,访问啥?访问谁访问了入口地址EAX。为什么要-4,因为-4处存放的就是EAX。这涉及到压栈顺序了,不多说 ,哈哈!!!! 
 
5.        内存断点、硬件断点 的区别。 
区别就是,内存断点是调用DR(0)~7调试寄存器。而硬断是直接把改地址的指令修改为int 3或者说是CC断点,这也是为什么每次硬断后需要删除硬断的原因。 
因为代码都被你改了。。。。 
 
简单就说那么多,要吃饭捏!!! 
最后想说的是,学破解是门耐心活,不要急,急不来的。1天掌握破解,虽然说是有可能的,但对大多数人来说还是有一点难度的。 |   
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?点击注册  
 
x
 
 
评分
- 
查看全部评分
 
 
 
 
 
 |