打印

指令歧义及程序飞和逆向工程的关系

[复制链接]
2555|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hotpower|  楼主 | 2007-11-16 21:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
指令歧义及程序飞和逆向工程的关系


1.标准程序样例
    MOV   DPTR,#0013H;外部中断1入口地址
    JNZ   NEXT1;ACC<>0,取INT1地址
    MOV   DPTR,#0003H;外部中断0入口地址
    SJMP  NEXT
NEXT1:
    RRA;
NEXT:
    MOVC  A,@A+DPTR
    MOV   P3,A;
    LCALL XXXXH;


2.对应标准程序样例可等效非典指令序列
    MOV   DPTR,#0013H
    JNZ   NEXT-1;借用下条指令的操作数2的03H为一个隐含的RRA指令!
    MOV   DPTR,#0003H;低8位的03H实际为RRA指令(操作码03H)!!!
NEXT:
    MOVC  A,@A+DPTR
    MOV   P3,A
    LCALL XXXXH;

可以看出,2个功能相同的指令后者很简化,当然那个03H实际存在的概率几乎是没有的

估计会有人说,为什么标准程序样例不像如下所示???
    MOV   DPTR,#0003H;外部中断0入口地址
    JZ    NEXT;
    MOV   DPTR,#0013H;外部中断1入口地址
    RRA;
NEXT:
    MOVC  A,@A+DPTR
    MOV   P3,A;
    LCALL XXXXH;
虽然它不如2精简,但却通用许多,而且条理清晰,至少RRA让人看的很明白。

问题很好也不错,所有逆向工程正是利用了人们善良带来的漏洞予以攻击。成功率几乎为100%.
因为逆向工程利用二次扫描技术实现代码和数据的剥离,对于剩下的数据区再多次攻击(虚拟机)
直到逆向到满意的代码和数据的剥离结果。

对2的攻击会带来以下2种程序源码。

3.当ACC为零时可等效为下列指令序列
    MOV   A,#00H
    MOV   DPTR,#0013H
    SJMP  NEXT1;
NEXT1:
    MOV   DPTR,#0003H
NEXT:
    MOVC  A,@A+DPTR
    MOV   P3,A
    LCALL 0000H;

4.当ACC非零时可等效为下列指令序列
    MOV   A,#0FFH
    MOV   DPTR,#0013H
    SJMP  NEXT1;
    DW    9000H;其中90H为MOV DPTR,#00XXH的操作码
NEXT1:
    RRA;利用数据藏代码
NEXT:
    MOVC  A,@A+DPTR
    MOV   P3,A
    LCALL 0000H;

而实际上我们的1个程序却同时需要这2个源码,因为ACC总存在0和非0两种状态。

所以暴力反汇编经常会出现以下的结果

5.
    MOV   DPTR,#0013H
    JNZ   NEXT;
    DW    9000H;这个对于搞过反汇编或熟悉51指令集的人才知道是残缺的MOV DPTR,#00XXH
NEXT:
    RRA
    MOVC  A,@A+DPTR
    MOV   P3,A
    LCALL XXXXH;

当如像64K大的程序时,要有多少个象5一样不解的结果呀。

不管是用什么法则,如果采用暴力反汇编生成的代码肯定不会全对。甚至导致编译失败!!!

而遵守扫描法则的反汇编都将2判定为非法代码序列。直接做为数据处理。这类反汇编出来的

汇编代码将会100%的通过汇编器的重新编译!!!

菜农的超级反汇编软件就是遵从了这一原则可以逆向任何“守法代码”。

故认为使用以下雷同的代码来保护后跟的代码和数据

如6:
    JNZ   $+3;肯定运行NOP;LCALL DO_CRC;
    DW    1200H;低8位为NOP指令
    LCALL DO_CRC;CRC校验,最终正确结果CRC=0(注意这个0将会被多次使用)

例如都用这样带有指令歧义的分支代码来保护,那么遵循任何法则的逆向工程每个分支都应该
提供2个程序清单。

假使有3个带有指令歧义分支的的程序,应该最多提供4份程序清单。
在这个分支时,用第1份看,这那个分支用第N份看,....晕否???

菜农在这里不谈如何破译,而是“代码隐身”,就和以前的“中断隐身”类同。

从以上分析,特别是2给我们的启示,实际上程序飞也是个“代码隐身”的问题。

“代码隐身”可以根据分支的条件将代码重新组合,而程序飞也是PC值突变脱离了我们正常代码
序列的范围,如进入数据区或代码区指令的操作数1或操作数2。

这就是为什么程序飞工作运行的莫名其妙的原因之所在。因为它是不可控的毫无任何规律可寻的。

所有我们适当地采用例2的保护方法,将会使逆向工作更加困难,让他们和“程序飞”打交道吧...


菜农 HotPower@126.com 2007.11.16 于西安大雁塔菜地
相关链接:https://bbs.21ic.com/club/bbs/bbsview.asp?boardid=11&t=2755622&tp=%B2%CB%C5%A9%B5%C4%BC%D3%C3%DC%C0%ED%C2%DB%2D%2D%2D%CC%EC%CF%C2%CE%DE%D4%F4%C2%DB

相关帖子

沙发
hotpower|  楼主 | 2007-11-16 21:09 | 只看该作者

从此---不再过问"政治事",世间不平"闭眼睛"

使用特权

评论回复
板凳
tyrone3000| | 2007-11-16 22:50 | 只看该作者

汇编的高手!

使用特权

评论回复
地板
hotpower|  楼主 | 2007-11-16 22:58 | 只看该作者

楼上过奖了~~~不过俺做了25年的A人了,想法是有些的~~~

以后别这样说,谢谢!!!
相关链接:https://bbs.21ic.com/club/bbs/ShowAnnounce.asp?v=&ID=2746250

使用特权

评论回复
5
jack.king| | 2007-11-17 08:34 | 只看该作者

我好崇拜您 hotpower

使用特权

评论回复
6
McuPlayer| | 2007-11-17 10:27 | 只看该作者

hotpower这个帖子才是防反汇编的远离

大叔A了十几年,没想到在二姨家里被好几个人A了一顿,于是高悬“莫谈国事”,哈哈

使用特权

评论回复
7
maychang| | 2007-11-17 21:05 | 只看该作者

回6楼 McuPlayer

“大叔A了十几年,没想到在二姨家里被好几个人A了一顿,于是高悬“莫谈国事”,哈哈”
没有的事。
那几个人根本不知道是怎么回事,乱说一气罢了。

使用特权

评论回复
8
simon21ic| | 2007-11-18 01:49 | 只看该作者

花指令,这种应用在Win平台上用的不少

在其他具有不同指令字长的系统中也可以找到应用

使用特权

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

本版积分规则

1538

主题

21697

帖子

506

粉丝