| 
 
注册时间2004-8-29最后登录1970-1-1 
 | 
 
| 下面是几种用于电脑端的加密方法,某些方法同样适用于文曲星~ 
 1。
 
 用时间差反跟踪
 
 
 
 概述:
 
 如果关掉中断,不仅仅是键盘不动了,时钟也不会走,所以可以利用时间差来反跟踪,具体方法是:先关掉中断, 再用当前时间作 key 加密,在执行一大堆指令后,偷偷地再用当前时间解密, 如果为了解密跳过关中断指令, 时间就会变化, 解密结果就会不对,然后...当然是死机啦 !
 
 汇编编程示例:
 
 code    segment
 assume    cs:code,ds:code
 org    100h
 start:
 jmp    install
 
 d1      db    'OK, passed ...',0dh,0ah,24h
 
 install:
 xor    ax,ax
 mov    es,ax
 mov    ax,es:[046ch]     ;系统时间计数
 xor    word ptr _code,ax     ;把 _CODE 处的指令加密
 
 mov    ah,0ffh
 in     al,21h
 xchg   ah,al
 out    21h,al             ;关掉中断,并保存原中断开关情况到 AH
 
 mov    cx,100             ;这儿是延时语句,模拟其他程序的执行时间
 lop1:
 push   cx
 xor    cx,cx
 lop2:
 loop   lop2
 pop    cx
 loop   lop1
 
 mov    bx,es:[046ch]     ;再把时间取回来解密
 xor    word ptr _code,bx
 xchg   ah,al             ;记得把中断复原
 out    21h,al
 _code:
 nop
 nop
 mov    ah,9
 mov    dx,offset d1
 int    21h
 int    20h
 
 code    ends
 end    start
 
 
 2。
 
 用指令预取反跟踪
 
 
 
 概述:
 
 CPU 的执行时并不是执行到哪一句再到内存中去取那一句,而是先读入到 CPU 的 Cache 中,如果指令已经到了 Cache 中,再将它修改也没有用了,如果用跟踪程序的话,CPU 的 Cache 中就不会是跟正常执行时的指令相同,所以可以改动下几条指令,当然是故意改错,如果没有跟踪,程序还回照常执行,有跟踪的话,那就...
 
 汇编编程示例:
 
 
 
 code     segment
 assume    cs:code,ds:code
 org    100h
 start:
 jmp    install
 
 d1      db    'OK, passed ...',0dh,0ah,24h
 
 install:
 mov    word ptr _code,20cdh
 _code:
 nop                   ;如果跟踪一下,就会发现下一条指令是 INT 20H,返回 DOS 了
 nop
 
 mov    si,offset _code1
 mov    di,si
 cld
 mov    ax,20cdh
 stosw
 lodsw
 _code1:
 nop
 nop
 
 mov    ah,9         ;now ax=20cdh
 mov    dx,offset d1
 int    21h
 int    20h
 
 code    ends
 end    start
 
 
 3。
 
 "花指令"加密法
 
 
 
 概述:
 
 用‘花指令’来进行静态加密是很有效的,这会使解密者无法一眼看到全部指令,杜绝了先把程序打印下来再慢慢分析的做法。我们知道,一条指令的长度是不等长的,假使有一条指令为 3 字节长,然后你从它的第二个字节开始反汇编,你照样会看到一条面目全非的指令,‘花指令’就是在指令流中插入很多‘垃圾’,使静态反汇编无法进行,如何实现你把以下程序编译出来用 Debug 的 U 指令看一下,跟踪一下就能理解了。
 
 汇编编程示例:
 
 
 XX1        MACRO
 local      _next1
 jmp    short _next1
 db    0e8h
 _next1:
 ENDM
 ;--------------------------------------
 XX2        MACRO
 local      _next2
 jmp    short _next2
 db    0e9h
 _next2:
 ENDM
 ;--------------------------------------
 XX3        MACRO
 local      _next3
 jmp    short _next3
 db    09ah
 db    0e8h
 _next3:
 ENDM
 ;--------------------------------------
 XX4        MACRO
 local      _next4
 jmp    short _next4
 db    09ah
 db    0e8h
 _next4:
 ENDM
 ;--------------------------------------
 .286
 CODE    SEGMENT
 ASSUME    CS:CODE,DS:CODE
 ORG    100H
 start:
 db    20 dup (90h)
 
 xx3
 mov    ax,0201h
 xx3
 mov    bx,0200h
 xx3
 mov    cx,0001h
 xx3
 mov    dx,0080h
 xx2
 int    13h
 xx2
 int    20h
 
 CODE    ENDS
 END    START
 
 
 4。
 
 指令动态执行加密法
 
 
 
 概述:
 
 这儿讲述的是用单条指令加密法,再用 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
 
 
 | 
 |