mov eax,DWORD ptr add eax,Start-Virus_Start上面两行代码是将病毒的代码入口点计算出来后头有用,计算方法简单,是我病毒开始执行地方的标号Start减去病毒开始的地方标号Virus_Start,你可能会有点不理解,这是因为病毒开始的地方不是我病毒开始执行代码的地方,我病毒开始执行代码的地方前面有一大段的数据,这些数据也是包含在代码段里的。 就是说我的病毒只有一个节.text。 (代码节叫。Text)-push DWORDptr pop DWORD ptr 保存目标文件原来的代码入口点,这是个偏移而已,如果真的要跳回原来的代码入口点还不能只执行AddressOfEntryPointer(原来代码入口点的指针),还要加个ImageBase成员再跳,否则就等于使你的病毒*。 为啥?因为AddressOfEntryPointer是个偏移,数字较小,一跳就很有可能会跳到2GB以上的系统进程空间去了,你看微软饶的了你不。 除非你使用SHE。push eaxpop DWORD ptr:现在将上一步的上一步计算出来的病毒的代码入口点地址加上了本节的偏移地址Virtual Address成员的值,填进去。 为啥要连加两个偏移呢? 因为你脑壳不会拐弯:(;计算新的sizeofimagemov eax,Virus_End-Virus_Startadd eax,DWORD ptr mov ecx,DWORD ptr invoke Align1mov DWORD ptr ,eax这个SizeOfImage成员搞不好很要命的哟! Windows2000下这个值稍微有点没对齐好就拜拜。 很多人曾经在这个地方吃过亏,FT。这个值的意思是整个可执行体映*后在内存中的大小。 将你新增的大小加上原来SIzeOfImage经过节对齐就好了。 如果你哪天感染了的文件无法运行,先看看这有问题没有。 inc WORDptr 刚刚增加了一个节,现在将NumberOfSection的值加一,仅共参考!




























