作者:mobiledu2502890657 | 来源:互联网 | 2023-09-25 14:40
在没接触破解之前,觉得这玩意太神秘、遥不可及了。在怀着畏惧的内心,真正耐心的接触 破解 长达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天掌握破解,虽然说是有可能的,但对大多数人来说还是有一点难度的。
注意:请不要用于非法用途,谢谢。