手动脱壳一般分为三步:1.查找程序的真正入口点2.抓取内存映像文件3.PE文件重建
程序的真正入口点称为OEP original entry point
抓取内存映像,也称为转存,即Dump
主要的两类反汇编算法是线性扫描算法和递归行进算法
线性扫描算法的缺点是使得无法将代码和数据分开,数据也将被作为代码来解码,从而导致反汇编出现错误
巧妙构造代码和数据,在指令流中插入很多“数据垃圾”,从而使反汇编无法缺点起始位置,这类代码数据称为“花指令”
对于多字节指令来说,反汇编软件需要确定指令的第一个字节的起始位置,操作码的位置,才能正确反汇编
SMC:self-modifying code在一段代码执行之前先对它进行修改
不同的字节码之间不通用
虚拟机保护技术即使将基于X86汇编系统的可执行代码转换为字节码指令系统的代码。这种指令执行系统和intel的80x86指令系统并不在同一个层次上,比如说80x86汇编指令是在CPU中执行的,而字节码指令系统是通过解释指令来执行的,字节码指令系统建立在x86指令系统上
字节码其实就是指令执行系统定义的一套指令和数据组成的一串数据流
指令按功能分为4类:
普通指令:算术指令,数据传输指令
栈指令:pop和push等进行栈操作的指令
流指令:jmp,jmpc,call,retn等会更改程序执行流程的指令
不可模拟指令:无法再次模拟,如int3,syscenter,in,out等
Windows操作系统提供了2中层次的进程控制和修改机制:1.跨进程内存存取机制
2.Debug API监控目标进程运行信息
数据对象是CPU结构的一部分,对齐的目的是为了提高CPU运行效率