易码技术论坛

 找回密码
 加入易码
搜索
查看: 221005|回复: 4

[分享]几种汇编程序加密方法~

[复制链接]
发表于 2005-3-6 15:48:00 | 显示全部楼层
不过静态的分析就防不了了啊,还有,可以把单片机的代码放在虚拟机里执行,就可以解决时间问题了,因为虚拟机的时间是可以控制的啊,当然包括停止.
发表于 2005-3-29 11:07:00 | 显示全部楼层
1.可用于WQX,不过建议这么做:先在程序开始或某处保存当前的精确时间,然后到另一处检测时间差是否正确,以防被调试或被饶开

2.指令预取在WQX中不可用

3.花指令的确可在WQX中使用,但是具体的CPU有不同的花指令,像WQX的SPL1024/1064和其它的6502 CPU的花指令就不同,SUN加密的HGP 2.5和偶的高速FTP都用了花指令加密

4.指令动态执行恐怕很难在WQX上实现吧

WQX上保护(加密/反调试)还可以用堆栈检测、中断检测或破坏DEBUG等方式
怎么计算时间差?
发表于 2005-3-30 23:06:00 | 显示全部楼层
花指令好像很容易破掉的
win32的ollydbg有个插件就有这个功能  可能使用的是运行范围检测
发表于 2005-4-1 17:48:00 | 显示全部楼层
       在文曲星上编程,尤其是用汇编语言编程,会浪费很多时间,再费尽心思的加密,即使你是个高手也很无奈。(笔者觉得加密是没有必要的,要知道文曲星本身就很慢,这样做只会损失效率,这是任何一个优秀程序员都不愿意看到的。况且这些软件的技术含量并不是太高,即使他盗用了又能用到什么地方呢??不加密就能让更多人学习汇编,加密也只是防金远见吧!!--不过在我看来,好像没用。)文曲星所能实现的功能太少,而且大多都不实用,之所以红极一时,是因为有很多勤奋、爱学习的同学,他们大多数是为了学习而走到一起来得。况且,现在大多数软件都是游戏软件,看看GVMAKER大奖赛,就明白了。文曲星提高了我们的编程能力,这无庸置疑,可是在大多数同学看来,这好像只是金远见的一场游戏,他和我们买文曲星时的愿望相背。我倒觉得,爱编程还不如就在电脑上编,要在文曲星上编,也最好编一些实用的,尤其是学习用的。
      备受瞩目的HGP浏览器(SUN加密的HGP 2.5)虽然使一些机型能够勉强显示16位灰度图,但是要知道文曲星的下载速度,老大的灰度文件谁会平凡更换,我就用它来放置我亲人的照片,不过效果不是很好,毕竟是16位的,且是模拟的。
以上只是举一个例子:完全没有其他的意思,请站主海涵。
 楼主| 发表于 2005-3-5 14:14:01 | 显示全部楼层 |阅读模式
下面是几种用于电脑端的加密方法,某些方法同样适用于文曲星~

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

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-4-20 02:12 , Processed in 0.010019 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表