53
第第第第 第第第第第第第 第第第第 第第第第第第第

第十三章 软件反跟踪技术

  • Upload
    una

  • View
    132

  • Download
    0

Embed Size (px)

DESCRIPTION

第十三章 软件反跟踪技术. 软件反跟踪技术. 软件分析技术概述 加密反跟踪技术 跟踪技术 反跟踪技术 执行程序结构 静态跟踪、防静态分析、反防静态分析. 软件反跟踪技术. 动态跟踪、防动态跟踪 破坏 debug 的基本方法 主动检测跟踪法 代码加密法 其他防跟踪方法 小结 软件防跟踪编程技巧 反跟踪程序例子 常用工具介绍. 软件分析技术概述. 在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问题是对软件及病毒进行分析。 这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具,分析跟踪其汇编代码。. 软件分析技术概述. - PowerPoint PPT Presentation

Citation preview

Page 1: 第十三章 软件反跟踪技术

第十三章 软件反跟踪技术第十三章 软件反跟踪技术

Page 2: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术软件分析技术概述软件分析技术概述加密反跟踪技术加密反跟踪技术– 跟踪技术跟踪技术– 反跟踪技术反跟踪技术执行程序结构执行程序结构静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

Page 3: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术

动态跟踪、防动态跟踪动态跟踪、防动态跟踪– 破坏破坏 debugdebug 的基本方法的基本方法– 主动检测跟踪法主动检测跟踪法– 代码加密法代码加密法– 其他防跟踪方法其他防跟踪方法– 小结小结– 软件防跟踪编程技巧软件防跟踪编程技巧

反跟踪程序例子反跟踪程序例子常用工具介绍常用工具介绍

Page 4: 第十三章 软件反跟踪技术

软件分析技术概述软件分析技术概述在进行软件的破解、解密以及计算机病毒在进行软件的破解、解密以及计算机病毒分析工作中,一个首要的问题是对软件及分析工作中,一个首要的问题是对软件及病毒进行分析。病毒进行分析。这些软件都是机器代码程序,对于它们分这些软件都是机器代码程序,对于它们分析必须使用静态或动态调试工具,分析跟析必须使用静态或动态调试工具,分析跟踪其汇编代码。 踪其汇编代码。

Page 5: 第十三章 软件反跟踪技术

软件分析技术概述软件分析技术概述从软件使用说明和操作中分析软件从软件使用说明和操作中分析软件– 欲破解软件,首先应该先使用该软件,了解一下功能欲破解软件,首先应该先使用该软件,了解一下功能

是否有限制,最好阅读一下软件的说明或手册,特别是否有限制,最好阅读一下软件的说明或手册,特别是自己所关心的关键部分的使用说明,这样也许能够是自己所关心的关键部分的使用说明,这样也许能够找点线索。 找点线索。

静态反汇编静态反汇编– 所谓静态分析即从反汇编出来的程序清单上分析。 所谓静态分析即从反汇编出来的程序清单上分析。 – 大多数软件在设计时,都采用了人机对话方式,所以大多数软件在设计时,都采用了人机对话方式,所以

提示信息入手进行分析。提示信息入手进行分析。– crackcrack 时常用的静态分析工具是时常用的静态分析工具是 W32DASMW32DASM 和和 HIEWHIEW

等。 等。

Page 6: 第十三章 软件反跟踪技术

软件分析技术概述软件分析技术概述动态跟踪分析 动态跟踪分析 – 虽然从静态上可以了解程序的思路,但是并不虽然从静态上可以了解程序的思路,但是并不

可能真正了解地了解软件的细节,如静态分析可能真正了解地了解软件的细节,如静态分析找不出线索,就要动态分析程序 找不出线索,就要动态分析程序

– 另外,碰到压缩程序,静态分析就无能为力了,另外,碰到压缩程序,静态分析就无能为力了,只能动态分析了 只能动态分析了

– 所谓动态分析是利用所谓动态分析是利用 SOFTICESOFTICE 或或 TRW2000TRW2000一步一步地单步执行软件。 一步一步地单步执行软件。

Page 7: 第十三章 软件反跟踪技术

软件分析技术概述软件分析技术概述为什么需要动态跟踪分析?为什么需要动态跟踪分析?– 许多软件在整体上完成的功能,一般要分解成若干模许多软件在整体上完成的功能,一般要分解成若干模

块来完成,而且后一模块在执行时,往往需要使用其块来完成,而且后一模块在执行时,往往需要使用其前一模块处理的结果,这一结果我们把它叫中间结果。前一模块处理的结果,这一结果我们把它叫中间结果。如果我们只对软件本身进行静态地分析,一般是很难如果我们只对软件本身进行静态地分析,一般是很难分析出这些中间结果的。 分析出这些中间结果的。

– 有许多软件在运行时,其最初执行的一段程序往往需有许多软件在运行时,其最初执行的一段程序往往需要对该软件的后面各个模块进行一些初始始化工作,要对该软件的后面各个模块进行一些初始始化工作,而没有依赖系统的重定位。 而没有依赖系统的重定位。

– 有许多加密程序为了阻止非法跟踪和阅读,对执行代有许多加密程序为了阻止非法跟踪和阅读,对执行代码的大部分内容进行了加密变换,而只有很短的一段码的大部分内容进行了加密变换,而只有很短的一段程序是明文。加密程序运行时,采用了逐块解密,逐程序是明文。加密程序运行时,采用了逐块解密,逐块执行和方法 块执行和方法

Page 8: 第十三章 软件反跟踪技术

软件分析技术概述软件分析技术概述如何进行动态跟踪分析?如何进行动态跟踪分析?– 对软件进行粗跟踪对软件进行粗跟踪

所谓粗跟踪,即在跟踪时要大块大块地跟踪,也就是说每次遇所谓粗跟踪,即在跟踪时要大块大块地跟踪,也就是说每次遇到调用到调用 CALLCALL 指令、重复操作指令指令、重复操作指令 REPREP ,循环操作,循环操作 LOOPLOOP 指指令以及中断调用令以及中断调用 INTINT 指令等,一般不要跟踪进去,而是根据执指令等,一般不要跟踪进去,而是根据执行结果分析该段程序的功能。行结果分析该段程序的功能。

– 对关键部分进行细跟踪对关键部分进行细跟踪对软件进行了一定程度的粗跟踪之后,便可以获取软件中我们对软件进行了一定程度的粗跟踪之后,便可以获取软件中我们所关心的模块或程序段,这样就可以针对性地对该模块进行具所关心的模块或程序段,这样就可以针对性地对该模块进行具体而详细地跟踪分析。体而详细地跟踪分析。一般情况下,对关键代码的跟踪可能要反复进行若干次才能读一般情况下,对关键代码的跟踪可能要反复进行若干次才能读懂该程序,每次要把比较关键的中间结果或指令地址记录下来,懂该程序,每次要把比较关键的中间结果或指令地址记录下来,这样会对下一次分析有很大的帮助。 这样会对下一次分析有很大的帮助。

Page 9: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术软件分析技术概述软件分析技术概述加密反跟踪技术加密反跟踪技术– 跟踪技术跟踪技术– 反跟踪技术反跟踪技术执行程序结构执行程序结构静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

Page 10: 第十三章 软件反跟踪技术

加密反跟踪技术加密反跟踪技术跟踪技术跟踪技术– DOSDOS 中的动态跟踪调试软件中的动态跟踪调试软件 DEBUG DEBUG – 单步中断和断点中断 单步中断和断点中断 – 通过对单步中断和断点中断的合理组合,可以通过对单步中断和断点中断的合理组合,可以产生强大的动态调试跟踪功能,这就对磁盘加产生强大的动态调试跟踪功能,这就对磁盘加密技术造成了巨大的威慑,所以破坏单步中断密技术造成了巨大的威慑,所以破坏单步中断和断点中断,在反跟踪技术中就显得十分必要,和断点中断,在反跟踪技术中就显得十分必要,成为反跟踪技术中的成为反跟踪技术中的 "" 必修课必修课 "" 。 。

Page 11: 第十三章 软件反跟踪技术

反跟踪技术反跟踪技术作为反拷贝技术的保护者反跟踪技术是整作为反拷贝技术的保护者反跟踪技术是整个磁盘加密技术中最能显示技术水平的部个磁盘加密技术中最能显示技术水平的部分,如果它稍有漏洞就会影响到整个磁盘分,如果它稍有漏洞就会影响到整个磁盘加密技术的可靠性。加密技术的可靠性。

Page 12: 第十三章 软件反跟踪技术

反跟踪技术反跟踪技术一个有效的反跟踪技术应该具有一个有效的反跟踪技术应该具有 33 大特性:大特性:– 重要程序段是不可跳越和修改的重要程序段是不可跳越和修改的

PROLOKPROLOK 的解密过程是通过修改判读指纹的程序段的解密过程是通过修改判读指纹的程序段来实现的,这其实是激光加密系统中反跟踪技术的来实现的,这其实是激光加密系统中反跟踪技术的一个败笔,一个有效的反跟踪技术应该对加密系统一个败笔,一个有效的反跟踪技术应该对加密系统中的某些甚至全部程序段进行保护,如果这其中有中的某些甚至全部程序段进行保护,如果这其中有内容被修改,将导致出错内容被修改,将导致出错主要方法有累计、累或和异或和程序段等方法主要方法有累计、累或和异或和程序段等方法同时还要保证重要程序段一定要被执行,方法主要同时还要保证重要程序段一定要被执行,方法主要有加密程序分段加密,运行时逐层解密,逐层清除有加密程序分段加密,运行时逐层解密,逐层清除的方法,即只有运行了重要的程序段,才能将下一的方法,即只有运行了重要的程序段,才能将下一层程序代码从密码形式转换成明码形式层程序代码从密码形式转换成明码形式

Page 13: 第十三章 软件反跟踪技术

反跟踪技术反跟踪技术– 不通过加密系统的译码算法,密码不可破译不通过加密系统的译码算法,密码不可破译 ::

为塑造一个封闭的加密系统,杜绝使用外调自编子为塑造一个封闭的加密系统,杜绝使用外调自编子程序甚至手工转换密码,规定只能由加密系统的译程序甚至手工转换密码,规定只能由加密系统的译码程序来转换密码码程序来转换密码 ; ;

– 加密系统是不可动态跟踪执行的加密系统是不可动态跟踪执行的动态跟踪是对加密系统的窥视,所以反跟踪技术应动态跟踪是对加密系统的窥视,所以反跟踪技术应该绝对禁止对加密系统的动态跟踪。 该绝对禁止对加密系统的动态跟踪。

Page 14: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术软件分析技术概述软件分析技术概述加密反跟踪技术加密反跟踪技术– 跟踪技术跟踪技术– 反跟踪技术反跟踪技术执行程序结构执行程序结构静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

Page 15: 第十三章 软件反跟踪技术

执行程序结构执行程序结构在微机上主要可执行程序是在微机上主要可执行程序是 COMCOM格式与格式与 EXEEXE格格式。 式。 COMCOM 文件结构是程序在一个段中,无堆栈,长度文件结构是程序在一个段中,无堆栈,长度小于小于 64k64k ,在程序头预留,在程序头预留 100h100h字节,在偏移为字节,在偏移为 1100h00h 处是可执行代码。 处是可执行代码。 COMCOM 文件加载过程为:文件加载过程为:– 在可用内存低端建立程序段前缀在可用内存低端建立程序段前缀 psppsp ,长度,长度 100h100h– PspPsp 上方读入上方读入 comcom 文件文件– PcPc== psppsp++ 100h100h

Page 16: 第十三章 软件反跟踪技术

执行程序结构执行程序结构ExeExe 文件结构包括:文件结构包括:– 文件头文件头

格式化区格式化区重定位表重定位表

– 程序体程序体代码段代码段数据段数据段堆栈段堆栈段

ExeExe 文件的长度可以大于文件的长度可以大于 64k64k 。。

Page 17: 第十三章 软件反跟踪技术

ExeExe 文件头格式为:文件头格式为:偏移量 偏移量 意义意义 偏移量 偏移量 意义意义

00h-01h00h-01h MZMZ ,为,为 EXEEXE 文文件标记件标记

0eh-0fh0eh-0fh 堆栈段的段值堆栈段的段值(SS) (SS)

2h-03h2h-03h 文件长度除文件长度除 512512的余数 的余数

10h-11h10h-11h SPSP

04h-05h04h-05h 文件长度除文件长度除 512512的商 的商

12h-13h12h-13h 文件校验和文件校验和

06h-07h06h-07h 重定位项的个数重定位项的个数 14h-15h14h-15h 被装入模块入口被装入模块入口IPIP值值

08h-09h08h-09h 文件头除文件头除 1616 的的商商

16h-17h16h-17h 被装入模块入口被装入模块入口的的 CSCS

0ah-0bh0ah-0bh 程序运行所需最程序运行所需最小段数小段数

18h-19h18h-19h 第一个重定位项第一个重定位项的位移的位移

0ch-0dh0ch-0dh 程序运行所需最程序运行所需最大段数大段数

1ah-1bh1ah-1bh 覆盖号覆盖号

1ch1ch 可变保留区可变保留区

Page 18: 第十三章 软件反跟踪技术

执行程序结构执行程序结构ExeExe 文件装载过程是文件装载过程是– 确定内存起始段确定内存起始段– 确定长度确定长度– 读读 exeexe 文件到内存文件到内存– 根据重定位表对内存的根据重定位表对内存的 exeexe 文件体进行重定位文件体进行重定位

取出重定位项中的段值取出重定位项中的段值段值加起始段=实际段值段值加起始段=实际段值加偏移量得到程序体的一个字加偏移量得到程序体的一个字取出该字,加上起始段值取出该字,加上起始段值写回内存原来位置写回内存原来位置

– 初始化寄存器初始化寄存器– 控制权转移,开始执行控制权转移,开始执行

Page 19: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术软件分析技术概述软件分析技术概述加密反跟踪技术加密反跟踪技术– 跟踪技术跟踪技术– 反跟踪技术反跟踪技术执行程序结构执行程序结构静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

Page 20: 第十三章 软件反跟踪技术

静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

静态跟踪,使用反汇编程序将可执行程序静态跟踪,使用反汇编程序将可执行程序转换为汇编程序,阅读汇编程序以获得原转换为汇编程序,阅读汇编程序以获得原始信息的方法。始信息的方法。防静态跟踪是将关键代码变形,使得反编防静态跟踪是将关键代码变形,使得反编译结果不知所云的技术。防静态分析,必译结果不知所云的技术。防静态分析,必须防止从反汇编的程序清单入手分析的方须防止从反汇编的程序清单入手分析的方法,必须防止用户对代码的静态分析与阅法,必须防止用户对代码的静态分析与阅读。 读。

Page 21: 第十三章 软件反跟踪技术

静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

防静态分析技术主要有:防静态分析技术主要有:– 将程序放在隐蔽的位置:将程序某段或者某字将程序放在隐蔽的位置:将程序某段或者某字

节放置到其他位置,使得反汇编结果无法正确节放置到其他位置,使得反汇编结果无法正确运行。而在正常运行中,有合适的机制将真实运行。而在正常运行中,有合适的机制将真实的代码拼凑完整。例如的代码拼凑完整。例如 EXEEXE头文件转移,再如头文件转移,再如文件头放在特殊的地方。文件头放在特殊的地方。

– 对程序代码进行变换:以密文形式存在执行文对程序代码进行变换:以密文形式存在执行文件中。被加密的程序不能执行,必须先解密,件中。被加密的程序不能执行,必须先解密,关键在于密码对代码段的加密。关键在于密码对代码段的加密。

Page 22: 第十三章 软件反跟踪技术

静态跟踪、防静态分析、反防静态分析静态跟踪、防静态分析、反防静态分析

反防静态分析是针对防静态分析而应用的技术,反防静态分析是针对防静态分析而应用的技术,主要使用动态跟踪方法,通过跟踪程序的运行,主要使用动态跟踪方法,通过跟踪程序的运行,寻找真实判定正版处的跳转,修改代码,使得先寻找真实判定正版处的跳转,修改代码,使得先解密,忽略判定条件,直接执行程序体。解密,忽略判定条件,直接执行程序体。一种较为高级防静态分析方法,是后续模块需要一种较为高级防静态分析方法,是后续模块需要前面的模块运行结果,仅仅看代码是无法了解程前面的模块运行结果,仅仅看代码是无法了解程序控制流,这样可以防止破解者阅读程序。另外序控制流,这样可以防止破解者阅读程序。另外的方法还有程序自行初始化,不使用系统重定位的方法还有程序自行初始化,不使用系统重定位的方法,也破坏汇编代码的解释。 的方法,也破坏汇编代码的解释。

Page 23: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术

动态跟踪、防动态跟踪动态跟踪、防动态跟踪– 破坏破坏 debugdebug 的基本方法的基本方法– 主动检测跟踪法主动检测跟踪法– 代码加密法代码加密法– 其他防跟踪方法其他防跟踪方法– 小结小结– 软件防跟踪编程技巧软件防跟踪编程技巧

反跟踪程序例子反跟踪程序例子常用工具介绍常用工具介绍

Page 24: 第十三章 软件反跟踪技术

动态跟踪、防动态跟踪动态跟踪、防动态跟踪动态跟踪是使用动态跟踪是使用 11号号 33号中断,跟踪执行号中断,跟踪执行程序运行的方法。程序运行的方法。防动态跟踪,是在使用防动态跟踪,是在使用 debugdebug ,, codeviewcodeview ,,soft-icesoft-ice ,, trw2000trw2000 进行动态跟踪时,使得进行动态跟踪时,使得跟踪方法难以进行。跟踪方法难以进行。

Page 25: 第十三章 软件反跟踪技术

破坏破坏 debugdebug 的基本方法的基本方法抑制跟踪中断抑制跟踪中断– DEBUGDEBUG 的的 TT 和和 GG命令分别要运行系统的单步命令分别要运行系统的单步

中断和断点中断服务程序,在系统向量表中这中断和断点中断服务程序,在系统向量表中这两个中断的中断向量分别为两个中断的中断向量分别为 11 和和 33 ,中断服务,中断服务程序的入口地址分别存放在程序的入口地址分别存放在 0000:00040000:0004 和和 0000000:000C0:000C起始的起始的 44 个字节中。个字节中。

– 因此,当这些单元中的内容被修改后,因此,当这些单元中的内容被修改后, TT 和和 GG命令将无法正常执行命令将无法正常执行

Page 26: 第十三章 软件反跟踪技术

破坏破坏 debugdebug 的基本方法的基本方法– 具体实现方法具体实现方法 ::

将这些单元作为堆栈使用 将这些单元作为堆栈使用 在这些单元中送入软件运行的必要数据在这些单元中送入软件运行的必要数据 ;;将软件中某个子程序的地址存放在这些单元中,当需要调用时将软件中某个子程序的地址存放在这些单元中,当需要调用时使用使用 INT1INT1 和和 INT3INT3 指令来代替指令来代替 CALLCALL 指令指令 ;;放入惩罚性程序的入口地址。 放入惩罚性程序的入口地址。

封锁键盘输入封锁键盘输入– 在加密系统无须从键盘或屏幕输入、输出信息时,关在加密系统无须从键盘或屏幕输入、输出信息时,关

闭这些外围设备,以破坏跟踪调试软件的运行环境:闭这些外围设备,以破坏跟踪调试软件的运行环境:改变键盘中断服务程序、改变键盘中断服务程序、 BIOSBIOS 的键盘的键盘 I/OI/O 中断服务程序的入中断服务程序的入口地址口地址 禁止键盘中断禁止键盘中断 禁止接收键盘数据禁止接收键盘数据 不接受指定键法(比如不接受指定键法(比如 TT ,, PP ,, GG 等等 DEBUGDEBUG 键)键)

Page 27: 第十三章 软件反跟踪技术

破坏破坏 debugdebug 的基本方法的基本方法设置显示器的显示性能 设置显示器的显示性能 – 当加密系统无需在屏幕上显示信息时,可以通过各种当加密系统无需在屏幕上显示信息时,可以通过各种

方法关闭屏幕,这样可使解密者无法得到跟踪调试软方法关闭屏幕,这样可使解密者无法得到跟踪调试软件返回的任何信息,以阻止解密者对加密系统的破译:件返回的任何信息,以阻止解密者对加密系统的破译:封锁屏幕显示封锁屏幕显示 :: 可以重新设置屏幕特性,将前景和背景色彩置可以重新设置屏幕特性,将前景和背景色彩置成同一种颜色,使解密者在跟踪期间无法看见调试信息 成同一种颜色,使解密者在跟踪期间无法看见调试信息 通过获取屏幕信息的检查加密系统是否处于被监控状态 通过获取屏幕信息的检查加密系统是否处于被监控状态 修改显示器修改显示器 I/OI/O 中断服务程序的入口地址 中断服务程序的入口地址 定时清屏 定时清屏 直接对视屏缓冲区操作 直接对视屏缓冲区操作

Page 28: 第十三章 软件反跟踪技术

破坏破坏 debugdebug 的基本方法的基本方法DEBUGDEBUG 等跟踪调试软件在运行时大量地使等跟踪调试软件在运行时大量地使用了用了 DOSDOS 提供的各类中断,不仅如此,比提供的各类中断,不仅如此,比DEBUGDEBUG 功能更强大,甚至针对反跟踪技术功能更强大,甚至针对反跟踪技术设计的高级反反跟踪调试软件也调用了设计的高级反反跟踪调试软件也调用了 DODOSS 中断,典型的例子就是使用其它中断来代中断,典型的例子就是使用其它中断来代替断点中断的反反跟踪技术。 替断点中断的反反跟踪技术。 破坏中断向量表显然可以从根本上破坏一破坏中断向量表显然可以从根本上破坏一切跟踪调试软件的运行环境,以达到切跟踪调试软件的运行环境,以达到 "" 以不以不应万变应万变 "" 的最终目的 的最终目的

Page 29: 第十三章 软件反跟踪技术

主动检测跟踪法主动检测跟踪法当解密者利用各种跟踪调试软件对加密系统分析当解密者利用各种跟踪调试软件对加密系统分析执行时,势必会造成许多与正常执行加密系统不执行时,势必会造成许多与正常执行加密系统不一致的地方,如运行环境、中断入口和时间差异一致的地方,如运行环境、中断入口和时间差异等等。如果在反跟踪技术中对不一致的地方采取等等。如果在反跟踪技术中对不一致的地方采取一定的措施,也同样可以起到保护加密系统的目一定的措施,也同样可以起到保护加密系统的目的。 的。 实现这种方法的关键在于以下两个方面实现这种方法的关键在于以下两个方面 :: 一是检一是检测加密系统是否被跟踪,二是检测到被跟踪后如测加密系统是否被跟踪,二是检测到被跟踪后如何进行处理,前一个方面的实现主要依靠加密者何进行处理,前一个方面的实现主要依靠加密者对对 DOSDOS 内核和跟踪调试软件的深入了解,后者则内核和跟踪调试软件的深入了解,后者则一般是一种死循环、启动机器或提示非法跟踪并一般是一种死循环、启动机器或提示非法跟踪并停止运行的程序, 乃至惩罚性程序。停止运行的程序, 乃至惩罚性程序。

Page 30: 第十三章 软件反跟踪技术

主动检测跟踪法主动检测跟踪法定时检测法定时检测法– 一个程序在正常运行和被跟踪运行时,所花的时间是一个程序在正常运行和被跟踪运行时,所花的时间是

大不相同的,可以想象一个被跟踪运行的程序往往要大不相同的,可以想象一个被跟踪运行的程序往往要花费极长的时间,反跟踪技术抓住这个特点,根据执花费极长的时间,反跟踪技术抓住这个特点,根据执行时间的长短来判断是否被跟踪。 行时间的长短来判断是否被跟踪。

偶尔检测法偶尔检测法– 在加密系统中加入判断时间的功能,并且当时间满足在加密系统中加入判断时间的功能,并且当时间满足某一条件时再对加密系统中的关键部位进行判断,如某一条件时再对加密系统中的关键部位进行判断,如果关键部位不存在或发现了变化则可判定加密系统已果关键部位不存在或发现了变化则可判定加密系统已经被破坏,应立即做出相应的反应 经被破坏,应立即做出相应的反应

Page 31: 第十三章 软件反跟踪技术

主动检测跟踪法主动检测跟踪法利用时钟中断法利用时钟中断法– 在反跟踪技术中利用时钟中断可以定时检查前台任务在反跟踪技术中利用时钟中断可以定时检查前台任务

执行的情况,如果发现前台的程序被非法跟踪调试,执行的情况,如果发现前台的程序被非法跟踪调试,可以立即采取相应的措施,也可以对中断向量表作定可以立即采取相应的措施,也可以对中断向量表作定时检查、计算程序执行时间、密文的译码操作和前面时检查、计算程序执行时间、密文的译码操作和前面说到的定时清屏等等 说到的定时清屏等等

PSPPSP 法法– 每个程序在执行时都必须建立对应的程序段前缀每个程序在执行时都必须建立对应的程序段前缀 PSPPSP ,,当程序未被跟踪执行时,当程序未被跟踪执行时, PSPPSP 中中 14H14H与与 16H16H开始的开始的两个字节是相同的,当被跟踪运行时,这些内容就不两个字节是相同的,当被跟踪运行时,这些内容就不会相同。 会相同。

Page 32: 第十三章 软件反跟踪技术

主动检测跟踪法主动检测跟踪法中断检测法中断检测法– 一个执行的程序如未被跟踪,则一个执行的程序如未被跟踪,则 INT1INT1 和和 INT3INT3

的入口地址相同,且都为哑中断,如被跟踪则的入口地址相同,且都为哑中断,如被跟踪则相反,所以通过检测相反,所以通过检测 INT1INT1 和和 INT3INT3 的入口地址的入口地址即可判断是否被跟踪。 即可判断是否被跟踪。

Page 33: 第十三章 软件反跟踪技术

设置堆栈指针法设置堆栈指针法跟踪调试软件在运行时,会产生对堆栈的跟踪调试软件在运行时,会产生对堆栈的操作动作,比如操作动作,比如 ::保存断点。因而在反跟踪保存断点。因而在反跟踪技术中对于堆栈指针的运用就显得相当重技术中对于堆栈指针的运用就显得相当重要了,比如对堆栈指针的值进行设计,并要了,比如对堆栈指针的值进行设计,并力求使设计的结果具备一定的抗修改性,力求使设计的结果具备一定的抗修改性,以免解密者通过再次修改堆栈指针的值来以免解密者通过再次修改堆栈指针的值来达到继续跟踪的目的。 达到继续跟踪的目的。

Page 34: 第十三章 软件反跟踪技术

设置堆栈指针法设置堆栈指针法将堆栈指针设到将堆栈指针设到 ROMROM区区 :: 只读存储区只读存储区 ROMROM 是无是无法保存数据的,堆栈指针如果指向法保存数据的,堆栈指针如果指向 ROMROM区域,区域,势必不能保存数据,这将会使跟踪调试无法继续势必不能保存数据,这将会使跟踪调试无法继续进行下去。进行下去。设在程序段中设在程序段中 ::堆栈指针如果设在将要执行的程堆栈指针如果设在将要执行的程序段中,那么任何的堆栈操作都会破坏程序代码,序段中,那么任何的堆栈操作都会破坏程序代码,使程序不能正常运行。使程序不能正常运行。设在中断向量表内设在中断向量表内 :INT1:INT1 和和 INT3INT3 是反跟踪技术一是反跟踪技术一定要破坏的中断,所以将堆栈指针设在内存的低定要破坏的中断,所以将堆栈指针设在内存的低地址段内,既可以进行少量的堆栈操作地址段内,既可以进行少量的堆栈操作 (( 跟踪调跟踪调试软件一般需要大量的堆栈来存放数据试软件一般需要大量的堆栈来存放数据 )) ,还可,还可以破坏单步和断点中断的入口地址。 以破坏单步和断点中断的入口地址。

Page 35: 第十三章 软件反跟踪技术

设置堆栈指针法设置堆栈指针法将堆栈指针移作它用:如果确认没有堆栈将堆栈指针移作它用:如果确认没有堆栈操作的话,可以将堆栈指针拿来做其它用操作的话,可以将堆栈指针拿来做其它用途,如保存经常要更换的数据,这样就可途,如保存经常要更换的数据,这样就可以使堆栈指针的值经常更换,从而使它根以使堆栈指针的值经常更换,从而使它根本无法保存数据。前提条件:本无法保存数据。前提条件:– 要保证将要执行的程序段不能进行有效的堆栈要保证将要执行的程序段不能进行有效的堆栈

操作操作 ;;– 在要进行堆栈操作时,必须首先恢复正确的堆在要进行堆栈操作时,必须首先恢复正确的堆栈指针。 栈指针。

Page 36: 第十三章 软件反跟踪技术

代码加密法代码加密法对程序分块加密执行对程序分块加密执行– 为了防止加密程序被反汇编,加密程序最好以为了防止加密程序被反汇编,加密程序最好以

分块的密文形式装入内存,在执行时由上一块分块的密文形式装入内存,在执行时由上一块加密程序对其进行译码,而且在某一块执行结加密程序对其进行译码,而且在某一块执行结束后必须立即对它进行清除,这样在任何时刻束后必须立即对它进行清除,这样在任何时刻内不可能从内存中得到完整的解密程序代码。内不可能从内存中得到完整的解密程序代码。

– 这种方法除了能防止反汇编外还可以使解密者这种方法除了能防止反汇编外还可以使解密者无法设置断点,从而从一个侧面来防止动态跟无法设置断点,从而从一个侧面来防止动态跟踪。 踪。

Page 37: 第十三章 软件反跟踪技术

代码加密法代码加密法对程序段进行校验对程序段进行校验– 对一个加密程序的解密工作往往只是对几个关对一个加密程序的解密工作往往只是对几个关

键指令的修改,因此对程序段特别是关键指令键指令的修改,因此对程序段特别是关键指令的保护性校验是十分必要的,这样可以防止解的保护性校验是十分必要的,这样可以防止解密者对指令进行非法篡改。具体方法有累计、密者对指令进行非法篡改。具体方法有累计、累减、累或和异或和程序段等方法。累减、累或和异或和程序段等方法。

Page 38: 第十三章 软件反跟踪技术

代码加密法代码加密法迷惑、拖垮解密者迷惑、拖垮解密者– 在加密系统中多多设置专门针对解密者的在加密系统中多多设置专门针对解密者的 ""陷陷阱阱 " "

– 设置大循环 设置大循环 – 废指令法废指令法 :: 在加密程序中设置适当的无用程序段 在加密程序中设置适当的无用程序段 – 程序自生成技术程序自生成技术 :: 程序的自生成是指在程序的运程序的自生成是指在程序的运

行过程中,利用上面的程序来生成将要执行的指行过程中,利用上面的程序来生成将要执行的指令代码,并在程序中设置各种反跟踪措施的技术 令代码,并在程序中设置各种反跟踪措施的技术

Page 39: 第十三章 软件反跟踪技术

代码加密法代码加密法指令流队列法指令流队列法– CPUCPU 为了提高运行速度,专门开辟了一个指令流队列,为了提高运行速度,专门开辟了一个指令流队列,

以存放将要执行的指令(流水)以存放将要执行的指令(流水)– 在程序正常执行时,其后续指令是存放在指令流队列在程序正常执行时,其后续指令是存放在指令流队列

中的,而跟踪调试程序时因为它牵涉到动态修改程序中的,而跟踪调试程序时因为它牵涉到动态修改程序指令代码指令代码 ((包括后续指令包括后续指令 )) 的原因,所以无论后续指令的原因,所以无论后续指令是否被存放在指令流队列中,被修改的指令都将被执是否被存放在指令流队列中,被修改的指令都将被执行行 ((包括后续指令包括后续指令 )) ,这一点和程序正常执行时是相反,这一点和程序正常执行时是相反的,因为正常执行时,的,因为正常执行时, CPUCPU 只从指令流队列中读取指只从指令流队列中读取指令,即使后续指令刚刚被正在执行的指令修改过。 令,即使后续指令刚刚被正在执行的指令修改过。

Page 40: 第十三章 软件反跟踪技术

举例举例JMPJMP S2S2S1:JMPS1:JMP S1;S1;死循环死循环S2:LEAS2:LEA SISI ,, S1S1LEALEA DIDI ,, S3S3PUSH PUSH CSCSPUSH PUSH CSCSPOP POP DSDSPOPPOP ESESCLDCLDLODLOD SWSWSTOSTO SWSW设计在设计在 S3S3 处存放处存放 S1S1 处的指令,如果在正常执行时,由于处的指令,如果在正常执行时,由于 S3S3 处的其处的其它指令已经被存入指令流队列中,所以它会正常运行,反之则执行它指令已经被存入指令流队列中,所以它会正常运行,反之则执行 SS11 处的死循环指令。处的死循环指令。

Page 41: 第十三章 软件反跟踪技术

逆指令流法逆指令流法– 指令代码在内存中是从低地址向高地址存放的,指令代码在内存中是从低地址向高地址存放的,

CPUCPU 执行指令的顺序也是如此,这个过程是由执行指令的顺序也是如此,这个过程是由硬件来实现的,而且这个规则已经被人和跟踪硬件来实现的,而且这个规则已经被人和跟踪调试软件牢牢接受。针对这个方面逆指令流法调试软件牢牢接受。针对这个方面逆指令流法特意改变顺序执行指令的方式,使特意改变顺序执行指令的方式,使 CPUCPU按逆按逆向的方式执行指令,这样就使得解密者根本无向的方式执行指令,这样就使得解密者根本无法阅读已经逆向排列的指令代码,从而阻止解法阅读已经逆向排列的指令代码,从而阻止解密者对程序的跟踪。 密者对程序的跟踪。

Page 42: 第十三章 软件反跟踪技术

其他防跟踪方法其他防跟踪方法混合编程法混合编程法– 因为高级编译语言的程序可读性本身就较差因为高级编译语言的程序可读性本身就较差 (( 如编译过的如编译过的 BASICBASIC 、、

COBOLCOBOL 程序等程序等 )) ,如果再将几种高级语言联合起来编写使用,一,如果再将几种高级语言联合起来编写使用,一定会极大的降低程序的可读性。 定会极大的降低程序的可读性。

自编软中断自编软中断 1313 技术技术– 由于反拷贝技术制作的指纹一般都存在于软盘上,所以现在的磁由于反拷贝技术制作的指纹一般都存在于软盘上,所以现在的磁盘加密系统都存在着一个明显的外部特征盘加密系统都存在着一个明显的外部特征 :: 即都要通过调用即都要通过调用 INT1INT133 来判断软盘上指纹的真伪,于是必须恢复中断表的内容,这就来判断软盘上指纹的真伪,于是必须恢复中断表的内容,这就过早地暴露了自己的弱点 过早地暴露了自己的弱点

内存翻卷技术内存翻卷技术– 对内存进行数据存取,采用内存翻卷:进行寻址操作时,如果数对内存进行数据存取,采用内存翻卷:进行寻址操作时,如果数

据地址的值超过地址空间,则从据地址的值超过地址空间,则从 0000:00000000:0000 开始计算。开始计算。

Page 43: 第十三章 软件反跟踪技术

软件反跟踪技术软件反跟踪技术

动态跟踪、防动态跟踪动态跟踪、防动态跟踪– 破坏破坏 debugdebug 的基本方法的基本方法– 主动检测跟踪法主动检测跟踪法– 代码加密法代码加密法– 其他防跟踪方法其他防跟踪方法– 小结小结– 软件防跟踪编程技巧软件防跟踪编程技巧

反跟踪程序例子反跟踪程序例子常用工具介绍常用工具介绍

Page 44: 第十三章 软件反跟踪技术

反跟踪程序例子反跟踪程序例子示例程序是破坏单步中断和带断点的中断的反跟示例程序是破坏单步中断和带断点的中断的反跟踪程序,可以将此程序安排在加密程序的适当位踪程序,可以将此程序安排在加密程序的适当位置上。置上。当程序没有被执行时,计算机的跟踪功能不变,当程序没有被执行时,计算机的跟踪功能不变,而当程序被执行后,系统的跟踪功能被修改。如而当程序被执行后,系统的跟踪功能被修改。如果此时再使用跟踪命令,不论是单步跟踪是带断果此时再使用跟踪命令,不论是单步跟踪是带断点跟踪,都会对正常程序的运行造成混乱,甚至点跟踪,都会对正常程序的运行造成混乱,甚至造成系统的死锁。 造成系统的死锁。 这样,只要加密程序被执行,跟踪行为就被阻止。这样,只要加密程序被执行,跟踪行为就被阻止。

Page 45: 第十三章 软件反跟踪技术

反跟踪程序例子反跟踪程序例子编写原理:编写原理:– 因为跟踪调试程序软件不外乎使用计算机单部因为跟踪调试程序软件不外乎使用计算机单部

及断点的中断功能,具体是调用及断点的中断功能,具体是调用 INT 01HINT 01H 和和 ININT 03HT 03H实现的,而实现的,而 INT 01HINT 01H 是单部中断,是单部中断, INT INT 03H03H 是断点中断。本程序通过修改是断点中断。本程序通过修改 INT 03HINT 03H 的的中断处理功能,但是仍保留单部中断功能。中断处理功能,但是仍保留单部中断功能。

Page 46: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍SoftICESoftICE– 是目前公认最好的跟踪调试工具。使用它可以很容易的跟踪一个是目前公认最好的跟踪调试工具。使用它可以很容易的跟踪一个

软件、或是监视软件产生的错误进行除错。你甚至可以用他来替软件、或是监视软件产生的错误进行除错。你甚至可以用他来替代代 CC 语言的调试器——如果你不喜欢使用语言的调试器——如果你不喜欢使用 CC 语言自己的调试器的语言自己的调试器的话。其有几种平台的版本,话。其有几种平台的版本, DOSDOS ,, WINDOW3.1WINDOW3.1 ,, WIN95/98/2WIN95/98/2000/NT000/NT 。。

Trw2000Trw2000– 是中国人自己编写的调试软件,完全兼容是中国人自己编写的调试软件,完全兼容 SOFTICESOFTICE 各种指令,各种指令,

但现在许多软件能检测但现在许多软件能检测 SoftICESoftICE存在,而存在,而 TRW2000TRW2000 在这方面就在这方面就好多了。好多了。 TRW2000TRW2000 有它自己的独特方面,是针对破解软件优化有它自己的独特方面,是针对破解软件优化的,的, WindowsWindows 下的跟踪调试程序,跟踪功能更强;可以设置各种下的跟踪调试程序,跟踪功能更强;可以设置各种断点,只是断点种类更多;它可以象一些脱壳工具一样完成对加断点,只是断点种类更多;它可以象一些脱壳工具一样完成对加密外壳的去除,自动生成密外壳的去除,自动生成 EXEEXE 文件,只是留给用户更多的选择;文件,只是留给用户更多的选择;在在 DOSDOS 下的版本为下的版本为 TRTR 。。

Page 47: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍Wdasm8.93Wdasm8.93– 反汇编的工具。它可方便反汇编程序,能静态反汇编的工具。它可方便反汇编程序,能静态

分析程序流程,也可动态分析程序,操作简单、分析程序流程,也可动态分析程序,操作简单、是破解必备工具之一。 是破解必备工具之一。

HiewHiew– 一个十六进制工具,它除了普通十六进制的功一个十六进制工具,它除了普通十六进制的功

能外,它还有个特色,能反汇编文件,并可以能外,它还有个特色,能反汇编文件,并可以用汇编指令修改程序。 用汇编指令修改程序。

Page 48: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍Smartcheck Smartcheck – VBVB 程序执行时从本质上讲是解释执行 程序执行时从本质上讲是解释执行 – VBVB 的的 exeexe 是伪代码,程序都在是伪代码,程序都在 vbXXX.dllvbXXX.dll 里面里面

执行 执行 – SmartCheckSmartCheck 的出现,大大方便了我们,它可的出现,大大方便了我们,它可将将 VBVB 程序执行的操作完全记录下来,使我们程序执行的操作完全记录下来,使我们轻而易举的破解大部分轻而易举的破解大部分 VBVB 程序。 程序。 十六进制编辑器十六进制编辑器 HIEWHIEW 就是一种是十六进就是一种是十六进制工具 制工具

Page 49: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍注册表监视工具 注册表监视工具 侦测文件类型工具侦测文件类型工具– 这样的工具有这样的工具有 TYPTYP 、、 gtwgtw 或或 FileInfoFileInfo 等。这是一个能等。这是一个能侦测你的软件是被哪一种「壳」给加密了侦测你的软件是被哪一种「壳」给加密了 (( 就好像侦测就好像侦测你的文件档是被你的文件档是被 zipzip 、、 rarrar 、、 arjarj哪一个给压缩了一样,哪一个给压缩了一样,如果连被哪种软体加了壳都不晓得,那要剥壳就难很如果连被哪种软体加了壳都不晓得,那要剥壳就难很多多 )) 。一般配合。一般配合 PROCUDUMPPROCUDUMP 使用。使用。

PROCDUMPPROCDUMP– 脱壳工具,可剥许多壳,你使用的许多软件都是压缩脱壳工具,可剥许多壳,你使用的许多软件都是压缩过的,用该工具很方便把它们还原,然后再修改,并过的,用该工具很方便把它们还原,然后再修改,并可自己编写脚本文件,以便能脱壳新版的壳。 可自己编写脚本文件,以便能脱壳新版的壳。

Page 50: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍IceDumpIceDump– 配合配合 SOFTICESOFTICE 而使用的,可抓取内存的数据,而使用的,可抓取内存的数据,

以重建以重建 EXEEXE 文件,脱壳必备工具之一。 文件,脱壳必备工具之一。 crackcode2000crackcode2000 一种全新的注册机工具,一种全新的注册机工具,它可以从另一进程的内存中取出你想要的它可以从另一进程的内存中取出你想要的注册码 注册码 ERUERU 是是 windowswindows 安装盘自带的小工具,备安装盘自带的小工具,备份注册表等一些份注册表等一些 windowswindows 重要的配制文件 重要的配制文件

Page 51: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍filemonfilemon– 文件监视工具,可监视系统文件运行状况,如哪个文文件监视工具,可监视系统文件运行状况,如哪个文

件打开,哪个文件关闭,在哪个文件读取了数据等,件打开,哪个文件关闭,在哪个文件读取了数据等,破解时非常有用,以便了解程序在启动、关闭或验证破解时非常有用,以便了解程序在启动、关闭或验证注册码是做了哪些手脚。 注册码是做了哪些手脚。

EXESCOPEEXESCOPE– 资源修改器资源修改器 eXeScopeeXeScope 可以说是可以说是 EXEEXE 及及 DLLDLL 等执行文等执行文

件的解析终结工具,它有执行文件件的解析终结工具,它有执行文件 (EXE(EXE ,, DLLDLL 等等 )) 的的解析与显示功能;提取资源到外部文件;资源的重新解析与显示功能;提取资源到外部文件;资源的重新写入;记录文件的记录及其再编辑写入;记录文件的记录及其再编辑 (( 成批编辑成批编辑 )) 等功能。等功能。是汉化软件的常用工具,当然破解软件时也很有用。是汉化软件的常用工具,当然破解软件时也很有用。

Page 52: 第十三章 软件反跟踪技术

常用工具介绍常用工具介绍FrogsiceFrogsice– softicesoftice 加强软件。它并不是简单的将加强软件。它并不是简单的将 SICESICE隐隐藏,而是让你可以配合藏,而是让你可以配合 SICESICE避过现在流行的避过现在流行的各种加密、保护软件里面的各种防止各种加密、保护软件里面的各种防止 SICESICE 的的陷阱 陷阱

Page 53: 第十三章 软件反跟踪技术

作业作业学习学习 COM/EXECOM/EXE 格式,设计防静态跟踪的格式,设计防静态跟踪的执行程序执行程序实现实现 22种以上防动态跟踪方法种以上防动态跟踪方法