举个简单的例子:

    代码清单29.1: 花指令

    1. add esi, eax ; garbage
    2. add eax, ebx
    3. mov edx, eax ; garbage
    4. shl edx, 4 ; garbage
    5. mul ecx
    6. xor esi, ecx ; garbage

    如果开发人员肯定ESI寄存器始终为0:

    1. mov esi, 1
    2. dec esi
    3. ... ; some code not touching ESI
    4. cmp esi, 0
    5. ;fakeluggage
    6. real_code:

    逆向工程需要一段时间才能够执行到real_code。这也被称为opaque predicate。 另一个例子(同上,假设可以肯定ESI寄存器始终为0):

    1. instruction 1
    2. instruction 2
    3. instruction 3

    可以被替换为:

    1. dummy_data1 db 100h dup (0)
    2. message1 db hello world’,0
    3. dummy_data2 db 200h dup (0)
    4. ...
    5. mov eax, offset dummy_data1 ; PE or ELF reloc here
    6. add eax, 100h
    7. push eax
    8. call dump_string
    9. ...
    10. mov eax, offset dummy_data2 ; PE or ELF reloc here
    11. add eax, 200h
    12. push eax
    13. call dump_string
    14. ...

    IDA仅会显示dummy_data1和dummy_data2的引用,但无法引导到文本字符串,全局变量甚至是函数的访问方式都可能使用这种方法以达到混淆代码的目地。