第一章 熟悉工作环境和相关工具
1.1 熟悉OllyDBG 操作技巧
1.2 反汇编静态分析工具 IDA(最专业的逆向工具)
快捷键 功能
Enter 跟进函数实现
Esc 返回跟进处
A 解释光标处的地址为一个字符串的首地址
B 十六进制数与二进制数转换
C 解释光标处的地址为一条指令
D 解释光标处的地址为数据,没按一次将会转换这个地址的数据长度
G 高速查找到相应的地址
H 十六进制数与十进制数转换
K 将数据解释为栈变量
; 加入�凝视
M 解释为枚举成员
N 又一次命名
O 解释地址为数据段偏移量
T 解释数据为一个结构体成员
X 转换视图到交叉參考模式
Shift+F9 加入�结构体
认识各视图功能
IDA View-A:分析视图窗体,用于显示分析结果。
Hex View-A:二进制视图窗体,打开文件的二进制信息。
Exports: 分析文件里的导出函数信息窗体
Imports: 分析文件里的导入函数信息窗体
Names: 名称窗体,分析文档中用到的标题号名称。
Functions: 分析文件里的函数信息窗体
Structures:加入�结构体信息窗体
Enums: 加入�枚举信息窗体
SIG文件的制作步骤 1、从LIB文件里提取出OBJ文件 2、将每一个OBJ文件制作成PAT文件 3、多PAT文件联合编译SIG文件
SIG文件制作批处理文件的过程
md %l_objs
cd %l_objs
for /F %%i in ('link - lib /list %l.lib') do link -lib /extract:%%i %l.lib
for %%i in (*.obj) do pcf %%i
sigmake -n"%l.lib" *.pat %l.sig
if exist %l.exc for %%i in (%l.exc) do find /v ";" %%i >adc.exc
if exist %l.exc for %%i in (%l.exc) do > abc.exc more +2 "%%i"
copy abc.exc %l.exc
del abc.exc
sigmake -n"%l.lib" *.pat %l.sig
copy %l.sig ..\%l.sig
cd ..
del %l_objs /s /q
rd %l_objs
代码说明
通过 md%l_objs 创建文件夹,文件夹名称为參数1
通过 cd %l_objs 进入刚刚创建的文件夹
在当前文件夹下 循环取出 LIB 中的OBJ名称 并逐个生成相应的OBJ
循环将生成的OBJ文件通过PCF转换相应的PAT文件
将文件夹下的全部的PAT文件生成一个SIG文件
将生成的SIG文件复制到上级文件夹中
返回上级文件夹,删除创建的文件夹中的全部数据
将创建文件夹删除
1.3 反汇编引擎的工作原理
Instruction Prefixes: 指令前缀
反复指令:REP、REPE\REPZ
跨段指令:如 MOV DWORD PTR FS:[xxxx],0
32位 16位 互换 如:MOV AX,WORD PTR DS:[EAX] MOV EAX,DWORD PTR DS:[BX+SI]
Opcode: 指令操作码
Mode R/M:操作数类型
SIB:辅助 Mode R/M,计算地址偏移
Displacement:辅助 Mode R/M, 计算地址偏移
Immediate:马上数
第二章 基本数据类型的表现形式
2.1 整数类型
无符号整数 有符号整数 差别就是最大位
2.2 浮点数类型
浮点数的编码方式 在内存中占4字节 最高位符号 剩余的31位中 左取8位指数 其余尾数
浮点寄存器的使用就是压栈/出栈的过程
比如
float fFloat =(float)argc; //argc为命令行參数
fild dword ptr [ebp+8] ;将地址ebp+8处的整形数据转换浮点型,并入st(0)中,相应变量 argc
fst dword ptr [ebp-4] ;从st(0)中取出数据以浮点编码方式放入地址ebp-4中,相应变量fFloat
printf("%f",fFloat);
;这里对esp运行减8操作 是因为浮点数作为变參函数的參数时 须要转换为双精度浮点值
;这步操作时提前准备8字节的栈空间,以便于存放double 数据
sub esp,8
fstp dword ptr [esp] ;将st(0) 中的 数据传入esp中,并弹出st(0)
push offset string "%f"
call printf
add esp,0ch
argc =(int)fFloat;
fld dwrod ptr [ebp-4] ;将地址 ebp-4处的数据以浮点数类型压入st(0)中
call _ftol ;调用函数_ftol 进行浮点类型转换
mov dword p