方法实际大同小异,不过最后又人脑来决定入口.
菜农的超级反汇编大概如下:
1.采用循环扫描方式. 扫描表初始化只有1个0x0000. 从扫描表取出一个待扫描的地址(首次为0000H),遇到合法的分枝语句暂做停止,并标记将要跳入的合法地址. 且装入待扫描表中.
若遇到无条件跳转语句本次扫描结束. 扫描经过的单元填入扫描代码的序号(0为数据,1为操作码,2为操作数1,3为操作数2)
重复以上操作,得到第1次扫描.
这里的"合法"最重要. 每次扫描如果遇到:分枝跳入序号>=2或越界的都将视为非法. 如跳入已经扫描过的指令的操作数 分枝语句步长不对,如JZ $+3;(二次扫描后才能确定) 非法是将放弃这次的全部扫描.
2.根据中断向量表进行选择扫描 用户可根据感觉填入. 重复1.
3.根据散转表进行选择扫描 自动或人为干预. 重复1.
4.根据扫描表进行选择扫描 人为干预. 重复1.
5.生成反汇编代码 扫描代码的序号为0的反汇编为DB数据 和DPTR有关的标号. 同时产生扫描文件.
6.根据人脑判断 做出响应改动.重新反汇编.
大致介绍到这.当然要复杂很多,基本不需人管.
菜农的这些设计绝对不可能出现常用反汇编软件反汇编后不能再编译的怪现象!!!
因为菜农的设计是:
即使一句都反汇编不出来,那好吧,俺全反汇编成DB XXH你总不能说俺玩赖吧~~~
哈哈~~~菜农以来不管什么理论,俺通过再汇编才算数,哪怕它全看不懂.
|
|
文章评论(0条评论)
登录后参与讨论