本帖最后由 hotpower 于 2012-11-1 22:30 编辑
;-------------------------------------------------------;
;阻止反汇编软件汇编演示程序
;雁塔菜农HotPower@126.com 2007.11.12
;-------------------------------------------------------;
$NOMOD51 ; disable predefined 8051 registers
#include <reg52.inc> // include CPU definition file (for example, 8052)
TEST_55H EQU 40H
TEST_AAH EQU 7FH
SP_MIN EQU 7FH;TEST_AAH
ORG 0000h
MAIN:
MOV SP,#SP_MIN
MOV B,#0
MAINLOOP:;真的主循环入口
INC B
MAINLOOPX:
MOV A,B
ANL A,#00000111B
MOV DPTR,#COMMANDJUMPTAB
ACALL COMMANDEXEC ;执行命令,哈哈~~~执行完后直接跳回MAINLOOP
DJNZ B,MAINLOOPX;假的,永远也不会执行的!!!
;命令跳转表(在此主要是让反汇编软件迷糊)
COMMANDJUMPTAB:
DW COMMAND0;命令0
DW COMMAND1;命令
DW COMMAND2;命令2
DW COMMAND3;命令3
DW COMMAND4;命令4
DW COMMAND5;命令5
DW COMMAND6;命令6
DW COMMAND7;命令7
;命令命令执行子程序
;入口条件: ACC=命令号
; DPTR=命令跳转表首指针
;出口条件:
;命令模块
COMMANDEXEC:
PUSH ACC;执行命令地址低8位
PUSH ACC;执行命令地址搞8位
MOV R0,#SP_MIN+4;实际是SP,主要防止反汇编跟踪SP等要害寄存器
RL A;
ANL A,#00011110B;只取8个命令
ADD A,#LOW COMMANDJUMPTAB
MOV DPL,A;存跳转表PROC;注意不要为0即可!!!
;注意下列的COMMANDEXEC1-1,跳如MOV A,#00H指令的第2个字节(00H)!!!
JZ COMMANDEXEC1-1;????哈哈,这个是假的~~~阻止火星人反汇编~~~
MOV A,#00H;应该这里的ACC必须为0
COMMANDEXEC1:
MOVC A,@A+DPTR;PROCH
XCH A,@R0;PSW
DEC R0;#SP_MINACC
MOV A,#01H
MOVC A,@A+DPTR;PROCL
XCH A,@R0;ACC
DEC R0
MOV @R0,#HIGH MAINLOOP
DEC R0
MOV @R0,#LOW MAINLOOP
RET;散转入@A+A+DPTR处PROC0~PROCF
COMMAND0:
NOP
RETI;返回到MAINLOOP
COMMAND1:
NOP
RETI
COMMAND2:
NOP
RETI
COMMAND3:
NOP
RETI
COMMAND4:
NOP
RETI
COMMAND5:
NOP
RETI
COMMAND6:
NOP
RETI
COMMAND7:
NOP
RETI
END
相关链接:https://bbs.21ic.com/upfiles/img/200711/20071112132219146.rar |