x86反汇编

对《恶意代码分析实战》第4章的总结。
1、恶意代码分析时的三种编码层次:
恶意代码作者高级编程语言——>CPU机器码——>恶意代码分析师低级汇编语言。
通常,计算机系统被描述为以下六个抽象层次:
1)硬件
2)微指令 又称固件,通常是为特定的计算机硬件设计的。
3)机器码 由操作码opcode组成,是一些十六进制形式的数字。一般由多条微指令实现,由高级语言编写的计算机程序编译而来。
4)低级语言 主要是汇编语言,恶意代码分析师使用这一层。在获取不到高级源码时,汇编语言是从机器码中能可信并保持一致地还原得到的最高一层语言。
5)高级语言 被一个编译器经过称为编译的过程转化为机器码,包括C\C++等。
6)解释型语言 不会被编译为机器码,而是被翻译为字节码。字节码在解释器中执行,解释器在运行时将字节码实时翻译为可执行机器码的程序。
2、x86体系结构:
遵循冯·诺伊曼结构,
中央处理器(CPU),寄存器+算术逻辑单元(ALU)+控制单元
内存(RAM)
输入/输出设备(I/O)
3、内存
数据节:存储程序初始加载时的值,程序运行时这些值可能并不发生变化。
代码节:包含了在执行程序任务时CPU所取得的指令。
堆:为程序执行期间需要的动态内存准备的,用于创建新的值,释放不再需要的值。其内容在程序运行期间经常被改变。
栈:用于函数的局部变量及参数,以及控制程序的执行流。
4、指令(采用Intel汇编语法)
助记符 目标操作数 源操作数 mov ecx,0x42
x86架构使用小端字节序,网络数据使用大端字节序
操作数有3种类型:1)立即数 2)寄存器 3)内存地址
最常用的x86寄存器可以归为以下四类:
通用寄存器:CPU在执行期间使用,一般用于存储数据或内存地址。EAX 32位;AX 低16位;AL 低8位;AH次低8位。一些x86指令只能使用特定的寄存器,乘法和除法指令只能使用EAX和EDX。
段寄存器:用于定位内存节
标志寄存器:用于做出决定。32位,每一位是一个标志。对恶意代码分析,重要的标志:ZF\CF\SF\TF
ZF:当一个运算的结果等于0时,ZF被置位,否则被清除。
CF:当一个运算的结果相对于目标操作数太大或太小时,CF被置位,否则被清除。
指令指针:用于定位要执行的下一条指令,告诉处理器接下来要做什么。攻击者先要使用攻击代码进入内存,然后改变EIP使其指向那段代码,从而攻击系统。

mov eax,ebx
mov eax,0x42
mov eax,[0x4037C4]
mov eax,[ebx]
mov eax,[ebx+esi*4]
mov eax,ebx+8 (无效)
lea eax,[ebx+8]区别于 mov eax,[ebx+8]
sub eax,0x10
add eax,ebx
inc edx
dec ecx
mul 0x50  # 总是将eax乘上value;乘法的结果以64位的形式分开存储在EDX和EAX寄存器中。
div 0x75  # 将EDX和EAX合起来存储的64位值除以value;商存储在EAX,余数存储在EDX。
xor eax,eax 优化了 mov eax,0
or eax,0x7575
mov eax,0xA   shl eax,2  # shr和shl 移位指令
mov bl,0xA  ror bl,2   # ror和rol 循环移位指令
# 在分析恶意代码时,如果遇到一个函数中只有xor or and shl ror shr rol这样的指令,并且它们反复出现,
可能遇到了一个加密或压缩函数。
NOP指令 实际上是xchg eax,eax的一个伪名字,什么事情也不做。在缓冲区溢出中,当攻击者无法完美地控制利用代码,
就经常使用NOP滑板。起到了填充代码的作用,降低shellcode可能在中间部分开始执行所造成的风险。
条件指令
test eax,eax   #逻辑运算指令 ,与它自身的test经常被用于检查它是否是一个NULL值,与and指令的功能一样。
cmp属于算术运算指令,两个操作数做减法,与sub指令的功能一样。
分支指令
最常见的分支指令是跳转指令
jmp 无条件跳转指令,可转到内存中任何程序段。使用jmp无法实现与if语句等价的逻辑。
有30多种不同类型的条件跳转,将条件跳转缩写为jcc。
重复指令是一组操作数据缓冲区的指令。最常见的数据缓冲区操作指令是movsx\cmpsx\stosx\scasx,其中x可以是
b\w\d,分别表示字节、字、双字。(1字节=8个二进制位(简称位)  1字=2字节=16位  1双字=2字=4字节=32位)
rep  # 循环终止条件 ECX=0
repe/repz # 循环终止条件 ECX=0 or ZF=0
repne/repnz # 循环终止条件 ECX=0 or ZF=1
repe cmpsb # 用于比较两块数据缓冲区
rep stosb # 用于用一个给定的值初始化一块缓冲区中所有字节
rep movsb # 一般用于复制缓冲区中的字节
repne scasb # 用于在一段数据缓冲区中搜索一个字节


用于x86架构对栈的内建支持的寄存器包括ESP和EBP。其中,ESP是栈指针,包含了指向栈顶的内存地址。
EBP是栈基址寄存器,用来确定局部变量和参数的位置。
与栈有关的指令包括push pop call leave enter ret。
在内存中,栈被分配成自顶向下的,最高的地址最先被使用。
栈只能用于短期存储,经常用于保存局部变量、参数和返回地址。主要用途是管理函数调用之间的数据交换。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反汇编Linux/Windows OS运行的32位/64位程序/动态库文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有CORE文件解调用栈、文本比较等功能。V2.0.3相对上一版本,完善ARM64、X8664、PPC64反汇编、ko反汇编,完善反汇编文本文件比较、IQ数据解析,修复小BUG;V2.0.2相对上一版本,完善ARM64、X8664反汇编、ARM64位core文件调用栈,完善文本文件比较、增加高亮、查找功能,修复小BUG;V2.0.0相对上一版本,完善ARM64反汇编、ARM64位core文件调用栈,完善C++符号名字解析,支持工具运行在英文版OS;V1.26.01相对上一版本,增加ARM64反汇编、64位core文件解析;V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS X86 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.26.01相对上一版本,增加ARM64反汇编、64位core文件解析;V1.26.00相对上一版本,增强EXE反汇编,增加dbx老邮件解析、二维码功能;V1.25.07相对上一版本,增加二进制反汇编、IQ数据解析功能,完善MIPS反汇编,修复小BUG;V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;V1.21相对上一版本,菜单调整,完善64位ELF文件解析,解析调试信息;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.25.05相对上一版本,增加内存数据按数据类型解析功能;V1.25.04相对上一版本,完善X86反汇编,修复小BUG;V1.25.02相对上一版本,COREDUMP统计、匹配目标文件等相关功能优化,修复小BUG;V1.25.00相对上一版本,相关功能支持动态库文件,查询代码支持无符号目标文件+有符号目标文件,COREDUMP统计、与问题单关联、目标文件/CORE文件/问题单同步;V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步完善COREDUMP文件解析与应用,增强软件管理;V1.24.01相对上一版本,进一步完善COREDUMP文件解析与应用,提供部分ARM Thumb指令反汇编;V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈调用关系分析;V1.23.03相对上一版本,提供32位X86反汇编;V1.23.02相对上一版本,提供源代码行查询指令地址,OBJ/COREDUMP文件解析,sprintf函数参数特定检查,完善文件拖放操作,修复小BUG;V1.23.01相对上一版本,提供ELF文件指令修改,修复ARM MLS指令反汇编错误等BUG;V1.23.00相对上一版本,提供程序地址对应源代码行查询,修复MIPS调试信息错误;V1.22相对上一版本,修复MIPS小端字节序反汇编错误,网上最新版本提示;另部分增强功能的菜单操作设有密码,如有兴趣欢迎咨询。欢迎大家反馈相关软件使用过程中的问题!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值