bouml 逆向分析c++_c++反汇编与逆向分析 小结

第一章  熟悉工作环境和相关工具

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值