目录
基础知识
汇编语言依赖于CPU,每个产品用的CPU种类不同,则汇编语言也有略微差异
代码分析
汇编文件(主)
十六进制文件(辅)
逆向分析法
静态分析——分析源码
动态分析——调试分析
推荐方法:先静态分析再动态分析
修改应用程序文件或进程内存内容方法
打补丁——Patch
破解——Crack
入口点
调试器停止的地方即为PE文件执行的起始地址
修改地址方法
call [地址]
jmp [地址]
区分代码为部分的方法
goto命令
设置断点
注释
标签
快速查找制定代码
代码执行法
字符串检索法
API检索法
两个反调试方法
压缩器——修改文件结构、压缩后文件仍为可执行文件
保护器——压缩、反调试、反模拟、反转储
函数调用约定
函数执行完毕,ESP需要回滚(用户执行)
字符串
字符串编码
字符的编码方式不同,占据位数不同,调试代码要注意
Unicode码中字符长度不够后需要填充NULL
修改字符串方法
直接修改字符串缓冲区(新字符串长度大于原有字符串,覆盖可能损坏字符串后面的数据)
在其他内存区域生成新字符串并传递给消息函数(注意地址,地址并不是按照规定载入内存,其按一定规律,即其要按一定文件偏移,否则程序出错)。
内存
内存分区
应用程序被加载到内存有最小内存分配大小,若不够则要填充NULL(一般为1000)
字节序
多字节数据在计算机内存中存放的字节顺序(小端序和大端序)
采用大端序存储数据时,内存地址低位存储数据的高位,内存地址的高位存储数据的低位。例如:Unix CPU/网络协议。
采用小端序存储数据时,内存地址低位存储数据的低位,内存地址的高位存储数据的高位。例如:Intel x86 CPU。
PE文件
格式
PE头:DOS头到节区头
PE体:PE头其下的节区
文件中使用偏移,内存中使用VA(虚拟地址)来表示位置。
文件分为.text(代码)、.data(数据)、.rsrc(资源)节,其分别保存
PE头与各节区的尾部存在一个区域,称为NULL填充(不够最小基本单位则填充NULL)
地址映射
VA:虚拟内存的绝对地址,RVA:相对虚拟地址,ImageBase:基准地址
ImageBase+RVA=VA
32位Windows OS中,各进程分配有4GB的虚拟内存,VA范围为00000000~FFFFFFFF。
PE头
PE头由许多结构体组成(40字节),PE头的最前面添加了一个IMAGE_DOS_HEADER结构,用来扩展已有的DOS EXE头。
IMAGE_DOS_HEADER分为e_magic(DOS签名)、e_lfanew(指示NT头的偏移)。
所有PE文件在开始部分(e_magic)都有DOS签名(“MZ”)。
e_lfanew指向NT头所在位置(NT头:IMAGE_NT_HEADERS)。
DOS存根在DOS头下方,是个可选项,且大小不固定,其由代码和数据混合而成。
NT头结构分为签名、文件头、可选头三部分。
节区头
工具
Hex Editor:二进制->十六进制
OllyDbg:汇编逆向工具