花指令入门操作实践

根据逆向相关资料;下面有2段ASM代码;

1;

start_:
    xor eax, eax
    test eax, eax
    jz label1
    jnz label1
    db 0E8h   ;垃圾指令
label1:
    xor eax, 3
    add eax, 4
    xor eax, 5
    ret

2;

start_:
    xor   eax, eax
    test  eax, eax
    jz     label1
    jnz   label0            ;指向无效的跳转指令
label0:
    db 0E8h
label1:
    xor   eax, 3
    add  eax, 4
    xor   eax, 5
    ret
end start_

代码1添加了垃圾指令;

代码2添加了更垃圾一些,一个指向无效地址的跳转指令;

会迷惑反汇编器;导致反汇编出错;

在反汇编的过程中,存在几个关键问题;代码与数据的区分,汇编指令长度,多种多样的间接跳转实现形式;
反汇编算法必须恰当处理,保证反汇编结果的正确性;
主要的两类反汇编算法是:线性扫描Linear Sweep,递归行进Recursive traversal;

下面先来鼓捣一下;把这两段代码构建为exe文件;再用反汇编器打开;看有没有干扰的效果;

本机是win10;安装有masm32;

如果masm32环境变量没搞的话;先set path=g:\masm32\bin;%path%;

先把代码直接存为asm,然后ml;

出现两个错误:

1.asm(1) : error A2034: must be in segment block
1.asm(2) : error A2085: instruction or register not accepted in current CPU mode

那就还是要加以下几句在头部:

        .386
        .model flat,stdcall
        option casemap:none

        .code

因为代码看上去像是DOS汇编;执行如下;

ml /c 1.asm

link 1.obj

提示错误:

1.obj : warning LNK4033: converting object format from OMF to COFF
LINK : fatal error LNK1561: entry point must be defined

试验几次后;还是要如下图;才能构建出exe;

ml要带 /c /coff;link要带 /subsystem:windows;

然后1.exe,2.exe构建出来了;

根据逆向资料;1.exe会被W32DASM错误识别;

W32DASM在win10下使用;要先搞一下兼容性;

打开1.exe,看一下,果然反汇编错误;迷惑到了;

1.exe会被ollydbg正确识别;如下;加的  db 0E8h   ;垃圾指令 这条,被识别;

根据逆向相关资料;代码2会迷惑到ollydbg;打开看一下;

但是没有迷惑;正确识别了;应该是工具进步了;上面用的是ollydbg 2.x;

然后用ollydbg 1.x打开2.exe;识别错了;如下;

把这个花指令放到VC++嵌入汇编里面运行看看;

不能运行;嵌入汇编只能运行汇编代码块;不能带db和标号;

这两个exe不要运行它;只是用它看一下花的效果;

注意1.exe和2.exe被ollydbg反汇编后,只有00401006地址处略有差别;

发布了475 篇原创文章 · 获赞 545 · 访问量 304万+

猜你喜欢

转载自blog.csdn.net/bcbobo21cn/article/details/104934330