软件中反跟踪技术和软件调试

反跟踪技术

1、调试器分类:用户模式调试器(OD、VC++调试器、DRW2000)和内核模式调试器(SoftICE)

2、反调试技术:

a、窗口方法检测:利用WIN API函数查找调试器窗口类名或者标题窗口,找到则表示监视程序运行。几种调试器类名:flyOD或者OllyDBG(检测flyODBUG)、SICE(检测softICE)、DRW(检测DRW2000)

b、检查父进程:遍历操作系统所有进程,检查出当前进程是否为父进程。win32中一般的父进程:Explorer.exe、Cmd.exe、Service.exe

3、断点检测技术:

a、检测软件断点:调试器调试时常用int3断点,,检测时只需要检测函数首地址的机器码是否为0xCC(INT3)

b、屏蔽硬件断点:在调试器中能用的硬件断点只能存在Dr0-Dr3寄存器中,因此可以不间断地占用全部4个硬件断点组织软件的断点调试。

c、中间调用API:将API函数的一部分代码放到执行代码中,在执行这段代码后跳转到API函数剩余的代码,这样设置的断点就会失效。

4、花指令反静态分析:加入无用指令扰乱反汇编软件使其无法找到指令的其实位置(操作码)。去花方式:找到花指令后NOP掉。

5、CRC校验:散列函数的一种,检测文件完整性。将字串转换成CRC32值后存储,运行时重新转换后与之前的对比检测是否完整

6、程序自生成技术:利用前面的程序生成将要执行的代码,反汇编指令并不是要执行的代码,而且可以隐蔽关键指令。

软件调试

调试需求

1、调试功能函数:软件的加密、解密函数、网络软件的数据包发送函数、接收函数、窗口函数、算法函数、文件处理函数。

2、条件判断查找:修改跳转去向。

3、解密资源文件:存在用户信息、监测数据、资源等

4、截获网络数据包

5、还原数据结构:数组、链表、二叉树、结构体、类

6、调试寻址方式:函数入口地址、数据结构的访问地址、某个对象的this指针地址。

调试过程

1、查看软件是否加壳(保护壳、压缩壳、混合壳)、查看软件开发语言、查看软件本身提示信息。

2、反汇编可执行程序,找突破口。

3、反响追踪,找到代码位置。

4、记录调试过程,编写文档。

调试方法

1、设置断点:代码定位断点、数据断点、调试断点。

2、字符串追踪

3、API函数追踪。常见的有:GetWindowText、CreateFile、LoadLibrary、CreateProcess

4、代码屏蔽:屏蔽后推断这段代码实现了什么功能。测试某段代码和某个函数功能。

5、内存修改:测试内存中某段数据的实际意义。

原文地址:https://www.cnblogs.com/miaohj/p/5380428.html