偷取过程中会偷入口处和中间任意处;执行被偷取的代码时还会加入花指令。偷的过程:在对Code段解密后把被偷的地方不放回去,而不是从被偷的地方直接复制到申请内存中再清00的过程。
识别被偷:
偷入口,执行到原始Code段时不是明显的某种语言的入口标志;偷中间,执行到原始Code段后在某处又跳转到申请的内存中执行一些代码又回来Code段。
针对偷入口,识别各种语言入口标志,把偷的复制回来;针对偷中间,执行到原始Code段后对申请的内存下段,加到申请的内存处执行的代码就是被偷的,同样复制回来。
如果怀疑某处是被偷的入口点的话,可以查看当前各个寄存器的值,对于程序入口,系统对各个寄存器的初值有一定的规律。。。。
只是对几个程序的入口做了一下比较:
相同的:EAX=00000000 ECX=0012FFB0 EDX=7C92E514 ntdll.KiFastSystemCallRet EBP=0012FFF0 ESI=FFFFFFFF EDI=7C930228 ntdll.7C930228
不同的:EBX 和 ESP