一、加密解密基础
1.1 如何设置断点的问题
正确恰当的设置好断点对于快速有效的解密非常重要,好的断点设置可以迅速找到关键的程序段,而不恰当的断点则会对解密造成不必要的精力消耗,甚至根本就不能拦截到程序的运行。
但具体什么时候用什么断点比较合适很难说,这需要自己去积累经验。总的来说,Bpx Hmemcpy 这个万能断点对大多数注册码方式的软件都有用。
对于那些需要暴力破解的非注册码方式的软件,通常应该拦截对话框(如 Bpx DialogBox)和消息框(如 Bpx MessageBox(A))等。不论对于那一类软件,当设置的断点均没有效果时,可以试一下 Bpx Lockmytask,这个断点的作用是拦截任何一个按键的动作。
1.2 如何跟踪程序的问题
通常,软件的程序内部都会利用一个子程序(即CALL *.......*)去验证输入的注册码正确与否,对于注册码显示存在的程序,一般都会将所输入的注册码和正确的注册码放进寄存器,然后调用验证子程序进行判断,将结果返回,应用程序根据子程序返回的结果决定是否注册成功,这样的程序经常具有如下的形式:
****:******** MOV EAX,[********](或 PUSH EAX 等形式)
****:******** MOV EDX,[********](或 PUSH EDX 等形式)
****:******** CALL ********
****:******** TEST EAX,EAX(或 TEST AL,AL,或是没有这一句等形式)
****:******** JNZ ********(或 JZ ********等形式)
其中EAX和EDX指向的内存区域就是输入注册码和正确的注册码地址,这里寄存器EAX和EDX是随意写的,也可以是ECX,EBX,EDI,ESI等。
1.3 常见的汇编语言指令
1.跳转命令
根据条件做出是否跳转的命令的决定,通常前面会有一个判断语句,例如:
CMP AX,BX 比较AX与BX
JZ XX 相减为0则跳转到XX标号行
上面两行语句命令意为用AX减BX,它的值如果为0则跳转到XX标号行。
常用的跳转命令有:
JZ/JE 相等或为0则跳转(机器码为74或0F84)
JNZ/JNE 不相等或不为0则跳转(机器码为74或0F85)
JL/JLE 小于、小于或等于则跳转
JG/JGE 大于、大于或等于则跳转
JMP 无条件跳转(机器码为EB)
2.比较语句
CMP AX,BX AX寄存器减去BX寄存器的内容
AND AX,BX AX与BX做“与运算”
OR AX,BX AX与BX做“或运算”
TEST AX,BX 与AND AX,BX有相同效果
XOR AX,BX 使AX的内容清零,每个寄存器与自己做异或
3.子程式
以下就是一个子程式的例子。CALL 15F:334422
在软件的加密解密中,子程式是一个很重要的概念,它是一个主程序的分支,用来指定某些特定动作,即一个程序不可能就是一条主程序到头,肯定会调用子程序,用子程序来处理发送的注册住处,并对其进行比较,然后标记是否注册正确。因此,破解的关键在于找准程序作注册判断的部分,进入那个注册子程序。子程序的返回码是RET。
4.算术运算
ADD AX,BX 加法运算 AX=AX+BX
SUB AX,BX 减法运算 AX=AX-BX
INC AX 寄存器加 -AX=AX+1
DEC AX 寄存器减 -AX=AX-1
MUL 乘法运算
DIV 除法运算
5.数据操作
MOV AX,BX 数据传输指令,将BX的值移送到AX中
XCHG AX,BX 将AX与BX的值互换
1.4 软件解密方式及注册保护方式
1.4.1 软件解密方式
在软件解密中有3种常用的解密方式:爆破方式、跟踪注册方式及写出注册机。
1.4.2 软件注册保护方式
1.注册码方式
(1)机器码+注册码
(2)用户名+注册码
(3)组合方式+注册码
2.加密狗方式
(1)爆破
(2)硬件复制
(3)软狗模拟
3.光盘加密
4.网络验证
5.NAG窗口
软件没有注册或使用的是软件的试验版本,往往会经常弹出一些提示窗口,这些提示窗口被称为 NAG 窗口,在软件试用期过后,该窗口就要屏蔽软件的正式窗口或某些重要功能窗口,使软件不能正常使用。
只能用爆破的方式破解 NAG 窗口,通过修改软件的窗体资源或修改窗体所在代码来屏蔽或强行跳过之后,才可以使 NAG 窗口不再运行。
6.将软件与机器硬件信息结合
这种加密算法的优点如下:
(1)不同机器注册码不同。
(2)不需要任何硬件或软盘。
(3)可以选择控制软件运行所在的机器、运行的时间或次数等。
(4)可以让软件在不注册前变为演示软件,只能运行一段时间或执行部分功能。软件注册后就立即变为正式软件。
(5)采用特别加密技术可使解密者很难产生注册号码的规律。
(6)在采用注册号产生软件(注册机)时可采用使用密码、密钥盘及总次数限制等方法。
7.时间限制
二、代码分析技术
2.1 代码分析技术基础
1.从操作过程和软件使用说明中分析软件
2.静态反汇编
对反汇编出来的程序清单进行阅读,就可以了解该软件的编程思路,便于对它进行顺利破解。
常用的静态分析工具只要有 W32DASM、IDA、HIEW 等。
3.动态跟踪分析
是使用 SoftICE 或 TRW2000执行程序的过程。
(1)对软件进行粗跟踪
在跟踪时大块大块地跟踪程序,也就是每次遇到调用CALL命令、重复操作指令REP、循环LOOP指令以及中断调用INT指令的时候,一般不跟踪,而是根据执行结果分析该程序的功能。
(2)对关键部分进行细跟踪
对软件进行了一定程度的粗跟踪之后,便可以过去软件中所关心的模块过程序段,这样,就可以对该模块进行针对性地跟踪分析。
2.2 静态分析技术及流行工具
2.2.1 程序类型分析工具
进行程序类型分析的工具主要有 FileInfo、PEID、Gtw 等,下面就分别对它们做一下简单介绍。
1.FileInfo
FileInfo 又称为 Fi 工具,支持DOS、NE、PE等文件格式,可以检测大多数编译语言、病毒和加密的壳,包括文件是使用什么软件压缩或使用什么软件加密的,简单好用。Fi运行时是DOS界面,Windows长文件名,支持Windows9x/2000/XP。
FileInfo工具的语法结构:Fi<drive:\path\><*.*></r></f></d-></1+></p+>
其中,Fi/r或/s列出当前目录和子目录的所有文件信息;Fi/f仅列出能够识别的文件。
在DOS窗口中运行程序相当不方便,可以给Fi建一个快捷方式,然后把快捷方式放进Windows系统中的SendTo文件夹中。
2.PEID工具
PEID是PEidentifier的简称,类似于FileInfo的工具,具有GUI界面。它能检测出300多种文件类型,其识别能力不亚于FileInfo。该工具可以检测出450种壳,非常方便。还增加了病毒扫描功能,是目前各类查壳工具中性能最强的。另外,还可识别出EXE文件是用什么语言编写的(比如,Visual C++、Delphi、Visual Basic等)。
2.2.2 资源编辑器工具
1.ResourceHacker
略(内容很多,实践了就知道,不必多说)
2.eXeScope
功能强大,可以直接编辑任何未加壳EXE,DLL。
2.2.3 反汇编工具
1.W32Dasm10.0
静态解密工具,具体步骤:
① 查看软件注册方式,寻找突破口。
② 运行要解密的软件,试着用任意注册码去注册,当出现错误提示信息后,将错误提示信息记录下来。
③ 测试该软件有没有加壳,如果加壳应该先脱壳。
④ 打开W32Dasm10.0反汇编程序。
⑤ 在串式报考中找到错误提示信息或可能是正确的提示信息后单击鼠标左键。
⑥ 接着在W32Dasm10.0的主窗口中分析相应汇编程序,找到关键跳转和CALL'
⑦ 绿色光条停在关键跳转,在pw32dasmgold主窗口底部找到关键跳转的偏移抵制。
⑧ 十六进制编辑器找到偏移地址修改机器码保存。
⑨ 利用W32Dasm10.0解密成功。
2.IDA Pro Advanced
程序分析工具。
2.3 动态分析技术及流行工具
1.TRW2000
此工具只能在Win2000和WinNT系统下运行。
2.SoftICE
功能极其强大,内核模式调试器。
3.OllyDbg
功能强大、可视化友好界面。
三、常见的软件加密技术
3.1 口令加密技术概述
3.1.1 什么是口令加密技术
在最为经典的一些口令加密实例程序中,通常都是利用系统的功能调用07H来接受键盘输入命令的,在口令输入的过程中,以回车键(0DH)作为结束符,将输入后的口令字与事先安排在程序中的规定值进行比较,如果两者一致,则显示“OK,PASS...”等信息,然后运行程序;否则,将提示用户输入合法的口令字。
……
3.2 激光加密技术基础
用激光在磁盘的数据区过扇区标识符上烧若干个痕迹(所产生的激光孔极小,不仔细看几乎不能被发现),使磁盘的某几点失去磁性,从而在磁盘的表面产生永久不可恢复的标志,最终达到加密的目的。
由于磁盘在激光处理过的区域进行读写时,所产生的激光孔破坏了其磁道上的磁性介质记录数据的正常功能,因此,就必然产生CRC检验错误。
而此方法就有对应的加密程序来进行对此,如果不产生CRC错误,则认为这是复制盘,从而实现无法复制的目的,对用户程序起到了很好的保护作用。
3.3 软件自毁技术的实现
当用户试图修改此软件时,也可能导致软件实现自毁。
3.3.1 自毁软件的基本原理
要实现本软件自毁技术,鉴于单纯设置一个计数器易被差出的情况,可通过修改使其不起作用,这里通过两套计数基数,A、b为第一组,B、c为第二组,……。作一个数据文件,把第一组的计数基数放在数据文件中,放的位置由设定的两个关键字(数值)决定。
软件执行前先通过关键字找到计数基数,然后作计算与判别,如果在合理范围之外,就启动软件自毁功能;如果在合理范围之内,则改变数据文件并设定新的关键字,从而将第二组的计数基数放在由新关键字指定的位置。由此计数,直到达到使用的次数为止。而在数据文件中存放关键字的位置则是不变的,如定为第4、5位与第27、28位。
下面先看第一组数据,如图 3-5 所示。
1
位置 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
数据 X U T N Q 7 a h d g A W Y N H L J I 3 7
┬ ↑
└────────┘
2 3
位置 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
┌──┐
┴ ↓
数据 M Q S T 3 2 Z 0 4 0 b F E e f h y a a a
图 3-5 第一个数据文件
从中可知其关键字分别为07和04,并且由于第一个关键字的第一位数字起的第7位是第一行数基数A,从第二个关键字的第一位数起的第4位是第二计数基数b,因此,就可以通过这两个计数基数的ASCⅡ码来对其进行运算和判断。
如果设变换后的关键字分别为15和11(其中X代表随机产生的任意ASCⅡ字符),则可以得到新的数据文件如图 3-6所示。
1
位置 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
数据 x x x x 1 [5] x x x x x x x x x x x x [B] x
┬ ↑
└───────────────────┘
3
位置 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
数据 x x x x x 5 x 1 [1] x x x x x x x x [c] x x
┬ ↑
└─────────────┘
图 3-6 得到的新数据文件
由此可知,如果不是软件设计者,要找出其破解规律是不可能的。
3.3.2 如何设计实现软件自毁
下面来看一个限制使用次数n=4,也就是说当第5次使用该软件时进即行自毁的程序。
一个实例,不太懂,只写关键语句
写入 date.date
代码1 n=1
保存
对比
成功运行
*
写入 date.date
代码2 n=2
保存
对比
成功运行
*
写入 date.date
代码3 n=3
保存
对比
成功运行
*
写入 date.date
代码4 n=4
保存
对比
成功运行
*
写入 date.date
代码5 n>4
保存
对比
错误,执行自毁
*
3.4 软件狗加密技术
3.4.1 什么是软件狗加密技术
软件狗是插在微机并行口上的一个软件保护装置,它包括主机检查程序和密钥(也称加密盒)两部分。
软件狗采取了各种的加密技术,目前较先进的加密技术有以下几种:
(1)AS技术:API函数调用与SHELL外壳加密结合,即使外壳被破坏,加密程序依然不能正常运行。
(2)反跟踪
①数据交换随机噪音技术:有效地对抗逻辑分析仪的分析及各种调试工具的攻击。
②迷宫技术:在程序入口和出口之间包含大量判断跳转干扰,动态改变执行次序,提升狗的抗跟踪能力。
(3)抗共享:可从硬件对抗并口共享器,由开发商选择是否共享狗。
(4)口令:可由软件开发商设置32位口令,口令错误将不能对存储区进行读写。
(5)时间闸:某些狗内部设有时间闸,各种操作必须在规定的时间内完成。狗正常操作用时很短,但跟踪时用时较长,超过规定时间狗将返回错误结果。
(6)单片机:硬件内置单片机,由于固化的单片机软件保证外部不可读,从而保证了狗不可仿制。
(7)存储器:提供20字节掉电保持存储器供开发商存放关键数据、配置参数等信息。
【结束了,突然结束了。
6月份把这本《加密解密全攻略(第二版)》借来,7月放署假,8月续期,一直没看。10月再次续期,到一个星期前,我终于把它还回去了。
书大致看了三遍,基本上全部看懂。四个月,我总算结实地踏出加密解密世界的第一步,不过笔记最终还是没能做完。当我学会里面的所有内容时,发现里面的内容全部都只是皮毛,还是要从最基础看起。
现在,我或许会骄傲地说,我能脱XX的壳!可是那都没用,菜鸟基本技术!
而这个笔记最终没能完成,书太简单了,而且回过头来,这些笔记却什么用都没有,没有任何参考价值。而且,实践出真知,至理名言。