1 进程
1.1 需要调试进程的几种情况:
1) 正常的单进程调试
2) 父进程生成子进程:
a) 创建子进程时挂起状态,然后写入代码执行
b) 执行新文件(可能是新生成的文件)
3) 进程注入
创建新进程,代码注入
代码注入系统进程
1.2 针对每种调试的具体解决方法(通用方法——>逐步细分)
1.2.1 通用方法
对于通用方法,要将调试器是否能够拿到系统的最高权限的两种情况(是/否)区别开来,尤其是在调试系统进程注入代码的过程中,对于权限问题(因为只能附加调试,权限不够就不能附加)更是要注意。
因为我通常使用win7操作系统,因此后续将以win7的32位和64位举例来说明。使用这个操作系统来举例的原因是:
(1) 具有通用性,基本不会出现程序执行环境和实际执行环境不符的情况(如果程序本身的执行环境与实际执行环境不符,就会在最开始程序加载的时候在ntdll.dll直接出现异常,使用windbg调试时这个点尤其明显)
(2) 虽然有地址随机化,但是经过我目前的经验来看,在环境不变的情况下VirtualAlloc的地址也基本不变(尤其是在样本文件加载后保存快照的情况下,每次分配的地址都是不变的;但要区分一点,进程注入的地址一般是不变的)。如果非常勤快愿意再配置一个关闭地址随机化的环境,这样也是非常好的,能够确保