王柳 发表于 2025-4-8 14:34:53

x86花指令

花指令

参考: https://bbs.kanxue.com/thread-279604.htm#msg_header_h3_21
两种反编译算法
线性扫描算法:逐行反汇编(无法将数据和内容进行区分)
递归进行算法:当遇到分支指令时,会递归进入分支进行反汇编。
简单花指令--跳转
//互补
_asm{
        jnz tag1;
        jz tag1;
        _emit 0xE8;
tag1:
}
//跳转
_asm {
        push ebx;
        xor ebx, ebx;
        test ebx, ebx;
        jnz tag1;//一定不会跳转,但是可以迷惑递归算法,**递归算法会跳转到0xE8然后解析call指令
        jz tag2;   //一定会跳转
tag1:
        _emit 0xE8;//0xE8 是call的机器码
tag2:
        pop ebx;
}简单花指令--call,ret
用Call构造跳转轻易让动态调试跟丢可以有用的恶心动态调试
//通过call跳转后将压栈的地址去除,达到jmp的效果
_asm{
        call tag1;
        _emit 0x83;
tag1:
        sub esp, 0x8;
}
//通过操控压栈的地址改变将要跳转到地方再ret实现跳转
_asm{
        call tag1;
        _emit 0x83;
tag1:
        add dword ptr ss : , 0x8;
        ret;
    __emit 0xF3;
}通过JMP和CALL指令结合
_asm{
      call LABEL9;
      _emit 0xE8;
      _emit 0x01;
      _emit 0x00;
      _emit 0x00;
      _emit 0x00;

   LABEL9:
      push eax;
      push ebx;
      leaeax, dword ptr ds : ;
      //将ebp的地址存放于eax      

      add dword ptr ss : , 26;
      //该地址存放的值正好是函数返回值,
      //不过该地址并不固定,根据调试所得。
      //加26正好可以跳到下面的mov指令,该值也是调试计算所得

      pop eax;
      pop ebx;
      pop eax;
      jmp eax;
      _emit 0xE8;
      _emit 0x03;
      _emit 0x00;
      _emit 0x00;
      _emit 0x00;
      mov eax,dword ptr ss:;
      #将原本的eax值返回eax寄存器
    }其他花指令思绪
1.通过当前标志寄存器状态构造花指令
2.利用函数返回固定值构造跳转条件
3.将特征码插入花指令中用于SMC自解码的搜索解密
_asm{
Jz Label
Jnz Label
_emit 'h'
_emit 'E'
_emit 'l'
_emit 'L'
_emit 'e'
_emit 'w'
_emit 'o'
_emit 'R'
_emit 'l'
_emit 'D'
Label:
}JMP/CALL结归并且用到变量
int a = 0;
__asm {
        push eax;****
        xor eax, eax;
        test eax, eax;
        jnzLABEL1;
        jz LABEL2;
LABEL1:
        _emit 0xE8;    //与call助记符的机器码相同
LABEL2:
        mov byte ptr, 0;****
        call LABEL3;
        _emit 0xFF;   //与adc助记符的字节码相同
LABEL3:
        add dword ptr ss : , 8;
        ret;
        __emit 0x11;
        mov byte ptr, 2;
        pop eax;
}去除花指令
1.花指令一般都是跳转形式,不管是call/ret照旧jcc指令
2.一般会保存环境push和pop出现
一些花指令干扰符号
_asm{
        _emit 0xE8;
        _emit 0xC7;
        _emit 0x21;
        _emit 0xFF;
        _emit 0x11;
        _emit 0xF3;
        _emit 0x83;
        _emit 0x74;
        _emit 0x50;
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: x86花指令