《IDA Pro权威指南》读书笔记

简介: IDA 6.1 预破解版 种子下载地址 http://thepiratebay.se/torrent/7686769/。 如果不能下了,谷歌搜索 “Hex-Rays Ida Pro Advanced Edition v6.1.1 PreCracked”。

IDA 6.1 预破解版 种子下载地址 http://thepiratebay.se/torrent/7686769/。 如果不能下了,谷歌搜索 “Hex-Rays Ida Pro Advanced Edition v6.1.1 PreCracked”。


Names窗口:

F,常规函数

L, 库函数

I,导入的名称。与库函数的区别:没有代码

G,命名代码

D,数据

A,字符串数据。

用于自动生成名称的一些常用前缀包括以下一些:

sub_xxxxxx:地址xxxxxxx处的子例程

loc_xxxxxx:地址xxxxxx处的一个指令

byte_xxxxxx:位置xxxxxx处的8位数据

word:16位

dword:32位

unk_xxxxxx:位置xxxxxx处的大小未知的数据


x86 fastcall约定:是stdcall约定的一个变体,它向CPU寄存器(而非程序栈)最多传递两个参数。 传递给函数的前两个参数将分别位于ECX和EDX寄存器中。剩余的其他参数则以类似stdcall约定的方式从右到左放入栈上。


push和pop会修改esp,要记住


在x86程序中,EBP寄存器通常专门用作栈帧指针。

bp-based frame:

push  ebp   ; save the caller's ebp value
mov  ebp, esp   ; make ebp point to the saved register value
sub  esp, 76   ; allocate space for local variables
……
mov esp, ebp   ; clears local variables by reseting esp
pop   ebp    ; restore the caller's value of ebp
ret      ; pop return address to return to the caller
使用一个专用的帧指针,所有变量相对于帧指针寄存器的偏移量得以计算出来。正偏移量用于访问函数参数,负偏移量用于访问局部变量。


反汇编清单可能会有错误,你可能需要对反汇编分析和显示过程进行更多的控制。

IDA提供的代码转换包括以下几类:

将数据转换为代码

将代码转换为数据

指定一个指令序列为函数

更改现有函数的起始或结束地址

更改指令操作数的显示格式


Edit->Array菜单中,可以指定连续的数据空间为数组。指定后,反汇编清单会更好看


为了字节对齐,编译器会插入几个字节

结构体在反汇编中看到的就是数据块,并不知道是结构体。可以自己创建。

可以反汇编自己编写一些程序来认识自己使用的编译器得到的结果


编译器会为每一个包含虚函数的类(或通过继承得到的子类)生成一个表,其中包含指向类中每一个虚函数的指针。这样的表就叫做虚表(vtable)。此外,每个包含虚函数的类都获得另外一个数据成员,用于在运行时指向适当的虚表。这个成员通常叫做虚表指针(vtable pointer),并且是类中的第一个数据成员。

通过虚表的分析,可以看出两个类间的关系。

如果两个虚表包含相同数量的条目,则与这两个虚表对应的类之间可能存在着某种继承关系

如果类x的虚表包含的条目比类y多,则x可能是y的子类

如果x包含的条目也可以在y的虚表中找到,则必定存在下面一种关系:x是y的子类,y是x的子类,或者x和y全都是同一个超类z的子类。

如果x包含的条目也可以在类y的虚表中找到,并且x的虚表中至少包含一个纯调用条目,而y的虚表中并没有这个条目,那么y是x的子类


代码交叉引用用于表示一条指令将控制权转交给另一条指令。在IDA中,指令转交控制权的方式叫做流(flow)。IDA中有3种基本流:普通流、跳转流和调用流。j表示跳转流jump,p表示调用,procedure。

数据交叉引用最常用的3种数据交叉引用分别用于表示某个位置何时被读取、何时被写入以及何时被引用。r后缀表示read cross-reference,w表示write,o表示偏移量交叉引用offset cross-reference。


常用快捷键:

g:jump to address

alt+t:搜索

ctrl+t:搜索下一个

ctrl+x:交叉引用列表

F5:反编译成C伪码


Mac OS X版的IDA没有破解,目前只发现6.0的试用版。 Mac版的IDA能更好地识别objective-c函数,并且反汇编结果是AT&T语法,可以和windows版互补一起用。

目录
相关文章
|
8月前
|
缓存 网络协议 算法
《HTTP权威指南》读书笔记
《HTTP权威指南》读书笔记
|
消息中间件 Kafka
《kafka权威指南》读书笔记
《kafka权威指南》读书笔记
115 0
|
NoSQL Shell 数据库
mongodb权威指南读书笔记
1.启动前要mkdir /data/db 2.mongod才是数据库启动程序,mongo是shell 3.db命令显示当前db   ,use foobar命令切换当前db 4.
894 0
|
7月前
|
存储 安全 编译器
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(下)
|
7月前
|
存储 算法 Java
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
[笔记]读书笔记 C++设计新思维《二》技术(Techniques)(二)
|
7月前
|
安全 Java C++
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计(上)
[笔记]读书笔记 C++设计新思维《一》基于策略的类设计
|
7月前
|
存储 编译器 程序员
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
C++ Primer Plus 第6版 读书笔记(10) 第十章 类与对象
38 0
|
7月前
|
存储 关系型数据库 编译器
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
C++ Primer Plus 第6版 读书笔记(9)第 9章 函数——内存模型和名称空间
66 1
|
7月前
|
存储 算法 编译器
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
C++ Primer Plus 第6版 读书笔记(8)第 8章 函数探幽(二)
32 1