打印

让程序飞起来

[复制链接]
1161|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
无名小豆丁|  楼主 | 2011-10-21 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是朋友的朋友送给我的一个程序,说是可以用来加密,刚刚毕业,看不懂,也不知道有没有用. 有没有高手帮我解释一下原理, 还有这玩艺到底管不管用?
;===============================================
;该方法可以打乱指令执行顺序。其用处主要是加密一段程序
;1. 将数据和指令糅合在一起。
;2. 将加密指令组隐藏在正常程序中,即所谓隐行程序。
;3. 以上需要和密码及算法联合使用才最好。
;4. 以上如果佐以花指令效果更好.
$ set (**=1)       ;是否**  0--不是,1--是         
Name  Pwd

InstructionAdrRdy BIT 00H   ;表示当前指令地址已经准备好
   DSEG AT 30H
iPC:       ds  2         ;虚地址
rPC:       ds  2         ;实地址
nTemp:     ds  2
nReg0:     ds  3         ;应用程序寄存器
nReg1:     ds  3         ;加密程序寄存器
nStack:    ds  8         ;加密程序栈,本例中没有用
;============================================================================
CSEG  AT 0000H
ljmp  MainProc
CSEG  AT 0003H   ;int 0
   reti
CSEG  AT 000BH   ;timer 0
   ljmp  Timer0Proc  
Timer0Proc:
   clr  TF0
   jnb  InstructionAdrRdy,tpOver
   clr  InstructionAdrRdy
   push  iPC+1
   push  iPC
tpReturn:
   reti   
tpOver:
   pop  nTemp
   pop  nTemp+1
clr ET0
sjmp tpReturn

;=====================================================================
RunOneInstruction:
   mov  B,nReg1+2
   mov  A,nReg1+1
   mov  PSW,nReg1+0
   setb InstructionAdrRdy
   setb ET0
   nop
nop
nop
   mov  nReg1+0,PSW
   mov  nReg1+1,A
mov  nReg1+2,B
   ret
;==========================================================================
TestProc:
db  78H     ;随机数   
Instruction2:
add  A,B
db  45H,61H ;随机数   
Instruction1:      
   mov  A,#033H
db  85H     ;随机数  
Instruction0:
mov  B,#055H
; nop
; ret      ;本例不能处理ret/call和各种跳转指令,如需要请自己弄
;=====================================================================
MainProc:
   mov  SP,#80H
$if **==1
mov  AUXR,#0C0H
$endif
   mov  TMOD,#22H
mov  TH0,#0ffH
   mov  TL0,#0ffH
setb TR0
clr  ET0
   
   mov  nReg1+0,#08H
   mov  nReg1+1,#00H
   mov  nReg1+2,#00H
clr  InstructionAdrRdy
   
setb EA
;执行一条指令 0
mov  iPC,#high (Instruction0)
mov  iPC+1,#low (Instruction0)
lcall RunOneInstruction
;执行一条指令 1
mov  iPC,#high (Instruction1)
mov  iPC+1,#low (Instruction1)
lcall RunOneInstruction
;执行一条指令 2
mov  iPC,#high (Instruction2)
mov  iPC+1,#low (Instruction2)
lcall RunOneInstruction
   mov  SCON,#50H         ;Set UART to mode 1
   orl  PCON,#80H
mov  TH1,#(256-39)            
   mov  TL1,#(256-39)
setb TR1

   mov  R0,#nReg1
mov  R7,#10H
a000:
   clr  TI
mov  sbuf,@R0
jnb  TI,$
inc  R0
   djnz R7,a000
   sjmp $
end

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

56

帖子

1

粉丝