逆向者乃反汇编之人也。
反汇编乃将机器码变成助记符是的汇编文本。
汇编乃一切人类语言之编译之终点也。
有正向者即人类语言至机器语言者,反逆向之正统也。盾者。仁慈也。
逆向至正向途中必遇盾者,用矛刺之。杀戮也。
有盾必生矛,有矛必伤盾。常理也。
此循环何解???盾磨豆腐,矛叫卖也。
哈哈~~~什么乱七八糟的“鸟语”???
同为“矛盾之身”的菜农就给团员们揭开“矛盾之迷”~~~
开课:
在汇编语言中,指令被编码,
即告诉机器要做什么事情。此码叫操作码。认为命令也可。
命令可能需要一些数据,即操作数。
由于CPU的位数不同,编码方式不同,可能还需要一些操作数。
故有操作数1、2、N之多。
一般为操作码后跟N个操作码,MCS51为N=0~2
反汇编的最高境界---代码数据分离。
一般需要对每个分支语句进行2次扫描。
扫描遇到终止语句时,停止扫描。
扫描时先取出操作码(扫描的当前首个代码)。
在MCS51中只有0xA5是intel保留的一个操作码,至今不知干什么。
其他0x00~0xff都是合法的操作码,从NOP(0x00)直到MOV R7,A(0xff)
在操作码里可得到后跟几个操作数,是分支语句这2个最重要的信息。
菜农的“超级反汇编”的“反汇编扫描标志位”:
/********************************************** * 一次反汇编扫描函数disasm51sm1() * * 反汇编扫描标志位 * * 奇 地 址 偶 地 址 * * D7 D6 D5 D4 D3 D2 D1 D0 * * 进点 出点 尾码 扫描 进点 出点 尾码 扫描 * * 反汇编优化标志位 * * D7 D6 D5 D4 D3 D2 D1 D0 * * 跳转 继续 第一类型 第二类型 指令字节数 * **********************************************/
哈哈~~~什么阶级敌人都跑不出此圈套~~~
在扫描时,将结果跳入“扫描图”中,形象说明一下: C---操作码(扫描成功) N---操作数(扫描成功) D---纯数据(未扫描或扫描非法)
随后二次扫描分类(子程序,跳转,数据等) /********************************************** * 二次反汇编扫描函数disasm51sm2() * * 反汇编扫描标志位 * * D7 D6 D5 D4 * * 进点 出点 尾码 扫描 注 解 * * 0 0 0 0 0 未定义NOP * * 1 0 0 0 1 一般指令 * * 2 0 0 1 0 * * 3 0 0 1 1 尾码 * * 4 0 1 0 0 MOV DPTR,# * * 5 0 1 0 1 * * 6 0 1 1 0 DW * * 7 0 1 1 1 * * 8 1 0 0 0 * * 9 1 0 0 1 L有进点一般指令 * * A 1 0 1 0 * * B 1 0 1 1 S * * C 1 1 0 0 有进点 MOV DPTR,# * * D 1 1 0 1 L * * E 1 1 1 0 * * F 1 1 1 1 S * **********************************************/
这次就可得到结果: RESET: LJMP L2000 EXTI0: CLR 008H JNB 0C2H,L001D SETB 0C2H MOV DPTR,#1F20H MOV A,#000H MOVC A,@A+DPTR CJNE A,#00FH,L0018 EXTI1: ACALL S03AA LJMP L0800 L0018: ORL 0B1H,#002H TIMER1: SJMP $ L001D: MOV 085H,#0FBH SETB 0C1H SETB 0C3H SETB 0C0H MOV SP,#03AH ACALL S0047 L002B: ACALL S00E7 CJNE A,#055H,L002B
哈哈~~~比人写的整齐~~~ 如何知道原作者对L002B的标号,那么,除注解外,将和源程序写的一样~~~
而且绝对整齐~~~
那么我们革命群众如何对付俺这种人呢???
俺自己坦白吧~~~(望逆向者原谅~~~)
因为“逆向守则”规定:
分支跳入(或调用)地址必须是未反汇编过的区域,或为操作码的地址处。 否则,扫描失败,放弃本次扫描。认为这是一片数据区域(即都是 DB XXH)
若强行反汇编,虽然看到的都是“代码”,但编译器则通不过汇编。
既然我告诉了“逆向的帮规”,革命群众如何利用它来保护自己呢???
菜农为了不“背叛帮规”,也将指定
“正向守则”:
1. 利用汇编跳入操作数而不影响源程序 如: JNZ L0 - 1;//A<>0,跳入L0上的#00,即NOP语句 MOV A, /*操作码*/ #00 /*操作数一*/ /*L0-1:操作码 NOP*/ L0: ..............
此“守则”未破坏程序流程,而且可能对“流水线”,“强实时”等有好处
2. 掩盖所有的数据区,让敌人反出来的都是“代码”~~~
MOV DPTR,#BUFF CLR A JNZ BUFF;此句不可能执行,因为上句A=0,主要是引导阶级敌人入坑~~~ MOVC A,@A+DPTR RET BUFF:;以后将讲如何不让敌人改写下列字符串~~~ DB “菜农在此华容道等候曹贼多时了,看刀~~~哈哈~~~”,00H
总之,给他来个“真真假假,虚虚实实”~~~
这样的“核裂变”将会成让敌人自动撤退~~~让逆向者(包括菜农)回家卖豆腐
哈哈~~~俺也省心~~~否则中外的逆向总让俺反汇编闹心~~~
还是让俺卖豆腐去吧~~~
课毕 团长今天高兴唱了一天的“红旗飘飘”~~~
HotC51@126.com 2009.2.24 于菜地。 团部:http://group.ednchina.com/1623/
天下无贼论
|
|
文章评论(0条评论)
登录后参与讨论