网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 其他技术区 > 网络安全 >

x86花指令

时间:2025-04-08 13:37

人气:

作者:admin

标签:

导读:花指令 参考: https://bbs.kanxue.com/thread-279604.htm#msg_header_h3_21 两种反编译算法 线性扫描算法:逐行反汇编(无法将数据和内容进行区分) 递归进行算法:当遇到分支指令时,会递归进入分...

花指令

参考: 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;
}

本文来自博客园,作者:ClownLMe,转载请注明原文链接:https://www.cnblogs.com/ClownLMe/p/18814445

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信