ITEEDU

第1章 Iczelion的Win32汇编教程

第2章 Iczelion的ODBC教程

第3章 Iczelion的VxD教程

第4章 Iczelion的PE教程

第5章 罗云彬的Win32汇编教程

第6章 Win32ASM经验点滴

第7章 X86汇编语言编程

第8章 加密解密

第9章 病毒的分析和防治

指令动态执行加密法

概述:

这儿讲述的是用单条指令加密法,再用 int 1 单步中断解下一条指令的第一字节,由于用另外程序解密时无法预知指令长, 所以不能用编程的方法解密,只能用手工一条一条地解。具体实现见注释,这种加密法的麻烦只处就是加密时也要一句一句来。

汇编编程示例:

        CODE  SEGMENT
              ASSUME    CS:CODE,DS:CODE
              ORG       100H
      START:
              JMP       INSTALL

        D_OK  DB        'OK, passed...',0DH,0AH,24H

     TEMP_BX  DW        ?
        OFF1  DW        ?
        SEG1  DW        ?

       INT1:
              MOV       TEMP_BX,BX  ;save bx
              MOV       BX,SP       ;BX=SP=0016h
              MOV       BX,SS:[BX]
              XOR       BYTE PTR DS:[BX],55H    ;decode
              MOV       BX,TEMP_BX
              IRET

    INSTALL:
              MOV       AX,3501H    ;保存原 INT 1 中断向量
              INT       21H
              MOV       OFF1,BX     ;设置新 INT 1 到 offset int1
              MOV       SEG1,ES
              MOV       AX,2501H
              MOV       DX,OFFSET INT1
              INT       21H

              XOR       BYTE PTR X1,55H         ;这些指令是先把以下
              XOR       BYTE PTR X2,55H         ;的一些指令加密
              XOR       BYTE PTR X3,55H         ;当然,在应用时就不会有这些指令了
              XOR       BYTE PTR X4,55H
              XOR       BYTE PTR X5,55H
              XOR       BYTE PTR X6,55H
              XOR       BYTE PTR X7,55H
              XOR       BYTE PTR X8,55H
              XOR       BYTE PTR X9,55H

              PUSHF
              POP       AX
              OR        AX,0100H
              PUSH      AX
              POPF                  ;打开单步跟踪

              NOP                   ;由于单步跟踪要在执行下一条指令后才激活
         X1:                        ;所以这儿是一条 NOP 指令
              MOV       AH,9
         X2:
              MOV       DX,OFFSET D_OK
         X3:
              INT       21H
         X4:
              PUSHF
         X5:
              POP       AX          ;从 X1 到 X9 的指令要在
         X6:
              AND       AX,0FEFFH   ;执行中才由 INT 1 逐句解开
         X7:
              PUSH      AX
         X8:
              POPF
         X9:
              NOP

              MOV       AX,2501H    ;把 INT 1 复原
              LDS       DX,DWORD PTR OFF1
              INT       21H

              INT       20H