加密与解密 调试篇 静态分析技术 (一)文件类型/窗口/定位

目录

1.文件类型分析

2.静态反汇编

我们思索ida的分析过程

 2.ida的配置

ida.cfg

反汇编选项(Disassembly)

 ASCII字符串和符号(ASCC strings & names)

3.ida的主窗口

一.反汇编窗口

二.导航栏

三.注释

四.提示窗口

五.字符串窗口

六.输入窗口

 七.跳转到地址窗口

 4.交叉参考(XREF)


1.文件类型分析

逆向分析的第一步就是文件类型分析

文件使用什么写的 使用什么编译器编译的

是否被加密过

然后才能进入下一步

有很多工具可以进行分析

我选择exeinfo来查看

 

 但是并不是工具就可以直接分析完成

因为有些会存在欺骗

把入口代码改造成和Visual C++ 6.0类似的代码

就可以对该类软件进行欺骗

2.静态反汇编

先对程序进行检测工具查看是否加壳

如果加壳 先进性脱壳再反汇编

我们这里使用IDA Pro来进行静态反汇编的演示

取得随书文件 ReverseMe.exe

查壳

 发现没有加壳 并且是32位的 我们放入32位的ida

 IDA是通过区块加载PE文件的

例如
.text 代码块

.data 数据块

.rsrc 资源块

.idata 输入表

.edata 输出表

等

我们思索ida的分析过程

两个阶段

第一阶段:

将程序的代码和数据分开 分别标记函数

并且分析其参数调用、分析跳转、调用等指令 并且赋值



第二阶段:

如果ida能识别文件的编译类型 就装载对应的编译器特征文件

给各个函数赋名


然后 ida会创建数据库,他的组名分别保存在
.id0 .id1 .nam .til 四个文件中

如果我们关闭进程 就会保存为一个 IDB文件

ida一旦创建了数据库 就不需要重新访问可执行文件

除非需要动态调试

我们只需要打开数据库 就可以访问我们之前调试的进程

"kernel potion1"  "kernel potion2"  "processor potion"

是可以控制反汇编引擎工作状态的,一般是默认的

ida会自动识别程序类别和处理器类型

如果ida的代码分析出现问题

就把 kernel option2的 make final analysis pass 关闭

某些情况 会因为代码不在预计位置而不被确认

选中 kernel opinion2的 Coagulate Data Segments in the final pass 即可

 

 2.ida的配置

我们如果只是想 更改一次

在主程序界面的 Options选项修改即可

但是我们如果想一次性修改默认 就需要编辑 ida.cfg文件才可以

并且我们不能使用 记事本 因为有一些无法读取 会破坏文件

应该使用 EditPlus等软件

ida.cfg

ida.cfg由两个部分组成

第一部分是定义文件的扩展名、内存、屏幕等

第二部分是配置普通参数

例如代码显示格式等

反汇编选项(Disassembly)

这个选项直接控制反汇编窗口的显示

在 options->General->Disassembly可以配置

 我们也可以在ida.cfg中配置

 ASCII字符串和符号(ASCC strings & names)

3.ida的主窗口

一.反汇编窗口

有两个方式 图形视图(默认)和文本视图

图形视图的时候

是以程序流程图的形式显示代码

将函数分成很多基本块 

可以生动的显示函数的跳转和逻辑判断

我们可以使用空格来实现 图形文本视图的切换

或者 右键->Text view


当我们需要两个的时候

View -> Open subviews-> Disassembly 打开反汇编子窗口

这样就可以用多个窗口来分析

其他常用的窗口 "Functions" "Proximity browser"也可以打开

二.导航栏

View->Toolbars -> Navigation 可以打开导航栏

这里是可以看到线性视图

 在右键-> Zoom in 和Zoom out 可以调整显示倍率

三.注释

右键 ->Enter comment(:)/Enter repeatable(;)

';' 是在所有交叉参考处都会出现

':' 只出现在该处

如果一个地址有两个注释 就只会显示 非重复注释

四.提示窗口

IDA界面下面的提示窗口是IDA的输出控制台

用于反馈各种信息 例如 文件分析进度 状态消息 错误消息 ida脚本等

五.字符串窗口

View->Open Subviews->Strings

就可以打开字符串窗口

 这里面是显示从二进制文件中提取的一组字符串

双击字符串 反汇编窗口就会调到字符串所在的地址

右键->Setup 可以设置扫描字符串的类型

六.输入窗口

输入窗口包含了所有函数

在输入窗口的每一条目都列出了一个函数名称和函数的库的名称

每一条目列出的地址都是相关函数的虚拟地址

虚拟地址可以写为“段:偏移量”的形式

 双击函数可以调到反汇编窗口的函数地址

 七.跳转到地址窗口

我们可以在反汇编窗口进行滚动

直到看到想要访问的地址

如果我们知道目标地址

可以使用IDA的跳转到地址窗口

快捷键 G

 如果我们想要返回

 点击 <- 即可 或者 按ESC

 4.交叉参考(XREF)

例如这里

可以知道指令代码相互调用的关系

CODE XREF: sub_401120+B↑j

表示 该调用地址是 00401120h

j表示跳转

此外 这里  o表示是偏移量 offset

p 表示 子程序 procedure

双击 或者按 enter 可以跳转到调用该处的地方

 同时 在 loc_401164 按 X 可以打开交叉参考窗口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值