浅谈逆向——静态分析简介(静态分析1)

IDA PRO

  • IDA是按照区块装载PE文件的。
    .text | 代码块
    .data | 数据块
    .rsrc | 资源块
    .idata | 输入表
    .cdata | 输出表

IDA反汇编选项配置

Option->General(选项->常规)在这里插入图片描述

左侧从上至下分别为

  • 函数偏移
    包含段地址
    使用段名

  • 空白行
    数据/代码分界
    基础块边界
    源程序行号

  • 行前缀范例
    空白下限
    空白上限

右侧从上至下分别是

  • 行前缀
    栈指针
    注释
    可重复注释
    自动注释
    坏指令标记
    机器码数

  • 指令缩进
    注释缩进
    右边距

IDA界面简介

在这里插入图片描述

A:反汇编窗口 通过空格键切换图形界面和文字界面

B:输入窗口中列出了可执行文件调用的所有函数,列出了函数名称和包含该函数库的名称,列出的地址为虚拟地址,双击即转跳

C:导航栏提供加载文件地址空间线性视图

D:提示窗口用来反馈文件分析进度,状态消息,错误消息及IDA脚本或插件信息。

E:字符串窗口使用Shift+F12打开,它显示从二进制文件中提取的一组字符串,双击反汇编窗口则会跳转到该处与交叉引用结合使用,可以实现快速定位。

F:Ctrl+G 跳转到地址窗口,知道目标地址即可实现输入跳转。

交叉参考

XREF
CODE XREF:sub_XXXXXX+B(上箭头)j
j表示跳转
o表示偏移量
p表示子程序

参考重命名

将反汇编中默认名称改为你认为更适合自己理解的名称,增加代码可读性。方法:单击需要修改的名称,使用快捷键N打开更名对话框

Local name:局部符号名的作用域仅限了当前函数
Include in name list :将有一个名称被添加到名称窗口中
Public name: 由二进制文件输出的名称(DLL)
Autogenerated name:自动创建符号名
Weak name:弱符号,是公共符号的一种特殊形式

标签

Jump->Mark position,打开标记当前位置功能。使用快捷键Ctrl+M或者双击标签,执行跳转到标记位置,即可转跳到指定代码。

创建函数

IDA允许手动干预创建,编辑,删除函数。新函数由不属于某个函数的现有指令创建,或者由未被IDA以任何方式定义的原始数据创建。

将光标移动到创建的函数的第一个字节上Edit->Functions->Creat Functions,创建一个函数。(快捷键未P)必要时,IDA会将数据转化为代码,以便分析函数的结构,如果找到函数的结束部分,IDA将生成一个新的函数名,以函数形式重组代码。如果无法确定函数结束部分,或者发现非法指令,这个操作将会终止。删除函数Edit->Functions->Delete Function

代码和数据的转换

很多工具在进行反汇编的时候可能无法正确分区数据和代码,数据字节和代码字节可能会被互相错误的识别,程序可以利用这一点对抗反汇编。IDA可以使用人脑手动鉴别二者。

如果确信某段十六进制数据是一段指令,将光标移动至第一个字节的偏移位置,执行菜单Edit->Code(快捷键C)。P可以将某段代码定义为子程序,并列出参数调用。取消定义则Edit->Undefine(快捷键U)数据将重新以16进制的方式显示。

在代码行按D键,数据类型会在db,dw,dd之间转换.执行菜单Options->SetUp->Data types可以设置能多数据类型。

IDA 对简单结构的处理

字符串:

  • 以0结尾的C语言字符串 快捷键A转化确定未字符串的16进制数据 按U可转换会16进制数据

  • 以$结尾的DOS字符串 A默认是C语言字符串,可以在Options->ASCII string style中更改

  • 有时无法确定ASCII字符串 原因为字符串在程序中没有被直接调用过

  • 所有生成的字符串都可以在Names窗口看到(View->Open subviews->Names)

数组:

  • 将光标移动到需要处理的数据处,选择菜单栏Edit->Array(快捷键*)打开数组排列调整窗口

  • 每行项数会自动调整,调整右边距可以增加。三个填空分别是:数组大小,每行项数,对齐方式。

IDA对复杂结构的处理

结构体:

  • 创建结构体:
    对于一些常见的文件类型,IDA会自动加载相应的类库,在底层分析时,可以增加mssdk(windows.h),ntddk(ntddk.h)。这些类型库中由相应的结构体,用户分析代码的时候可以直接引用。快捷键Shift+F11(打开加载类型库窗口)

    单击右键菜单Load Type library弹出窗口Available Type Libraries窗口中选择类型库,查看并选择内置的结构体数据结构。View->Open subviews->Structures打开结构体管理窗口,单击Insert在弹出窗口中单击Add Standard Structure按钮,打开添加标准结构库窗口,查找所需函数名,就可以使用这些库了。

IDA调试器

Debugger->Select debugger 选择适合的调试器列表,根据文件类型选择后,就可以打开本机模式调试目标软件,Debugger菜单会以其他形式展开,通过Start Process调试目标文件。附加进程Debugger->Attach to process

在这里插入图片描述

A:反汇编
B:通用寄存器
C:显示加载到进程内存空间的可执行文件和共享库,双击打开符号的输出列表。
D:栈窗口

操作和OD差不多 不再赘述 有兴趣的老哥们可以研究下IDC

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值