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 : [esp] , 0x8;
	ret;
    __emit 0xF3;
}

通过JMP和CALL指令结合

_asm{
        call LABEL9;
        _emit 0xE8;
        _emit 0x01;
        _emit 0x00;
        _emit 0x00;
        _emit 0x00;

     LABEL9:
        push eax;
        push ebx;
        lea  eax, dword ptr ds : [ebp - 0x0];
        //将ebp的地址存放于eax        

        add dword ptr ss : [eax-0x50] , 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:[esp-8];
        #将原本的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;
	jnz  LABEL1;
	jz LABEL2;
LABEL1:
	_emit 0xE8;    //与call助记符的机器码相同
LABEL2:
	mov byte ptr[a], 0;****
	call LABEL3;
	_emit 0xFF;     //与adc助记符的字节码相同
LABEL3:
	add dword ptr ss : [esp] , 8;
	ret;
	__emit 0x11;
	mov byte ptr[a], 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;
}
posted @ 2025-04-08 13:37  ClownLMe  阅读(59)  评论(0)    收藏  举报