![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IDA
花熊
毕业于西安交通大学
展开
-
IDA---取地址
假定基地址为sobase,那么入参就是。原创 2023-10-12 22:15:55 · 357 阅读 · 0 评论 -
1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
启动 启动IDA,会出现以下对话框:New:启动一个标准的File Open对话框,让你选择Go:打开一个空白工作区,这时只需把二进制文件直接拖入到IDA工作区Previous:打开最近用过的文件中一个 加载文件 拖入文件后,会弹出一个加载对话框,如果未识别文件,则默认为Binary File为唯一选项原创 2010-09-01 23:02:00 · 13492 阅读 · 1 评论 -
2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶Open Subviews菜单打开反汇编窗口反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具0.在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,遗憾的是,在打开的其他窗口中,ESC键用于关闭窗口IDA使用术语流来表原创 2010-11-15 16:12:00 · 11744 阅读 · 0 评论 -
3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)
导出窗口导出窗口列出文件的入口点。这包括程序的执行入口点(在程序的文件头部分指定),以及任何由文件导出给其他文件使用的函数和变量0.对于exe来说,至少有一个导出函数,程序的执行入口点。IDA将这个入口点取名为start导入窗口导入窗口的功能与导出窗口的功能正好相反。它列出由被分析的二进制文件导入的所有函数。只有在二进制文件使用共享库时,IDA才需要原创 2011-07-11 16:43:01 · 9105 阅读 · 0 评论 -
4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)
跳转到地址使用Jump▶Jump to Address命令或在处于活动状态的反汇编窗口中按下热键G,均可以打开Jump to Address对话框,如果把这个对话框看成Go对话框,可能有助于你记住相关的热键。IDA会记住你在这个对话框中输入的值,并通过一个下拉列表显示,以方便你随后使用导航按钮(导航历史)导航按钮,每个按钮旁边还有一个历史记录下拉列表,你原创 2011-11-07 19:59:36 · 7881 阅读 · 0 评论 -
5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
1.文本搜索IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过Search▶Text(热键:ALT+T)命令启动文本搜索选择Find all occurences(查找所有结果),IDA将在一个新的窗口中显示搜索结果,最后,使用CTRL+T或Search▶Next Text(Ctrl+T)命令可重复前一项搜索,以找到下一个匹配结果2.二进制搜索使用Sea原创 2011-11-10 16:41:31 · 41253 阅读 · 0 评论 -
6.IDA-重命名、注释
由于IDA基础数据库的本质,你对反汇编代码所做的更改将迅速“扩散”到IDA的所有子窗口中,以使反汇编代码保持一致说明记住,IDA不提供撤销功能。在操纵数据库时,请一定记住这一点。你所能做的,就是经常保存数据库,并恢复到最近保存的数据库版本。1.改名多数情况下,要修改一个名称,只需单击你希望修改的名称(使其突出显示),并使用热键N打开更名对话框。另外,右击需要修改的名称,并在出现的上原创 2011-12-20 20:53:22 · 8419 阅读 · 0 评论 -
19.IDA-栈指针调节、设置函数特性
栈指针调节 IDA会尽其所能跟踪函数内每一条指令上的栈指针的变化。IDA跟踪这种变化的准确程度,在很大程度上影响着函数的栈帧布局的准确程度。如果IDA无法确定一条指令是否更改了栈指针,你就需要手动调整栈指针 如果一个函数调用了另一个使用stdcall调用约定的函数,就会出现上述情况,这是最简单的一种情况。如果被调用的函数位于IDA无法识别的共享库中(IDA拥有与许多常用库函数的签名和调用约原创 2016-02-03 11:26:17 · 6241 阅读 · 0 评论 -
9.IDA-重新设置函数类型、创建数组结构
重新设置函数类型写一个简单的代码做测试:int fun(int a, double b){ return 0;}int _tmain(int argc, _TCHAR* argv[]){ int c = fun(1, 2); return 0;}release生成,去掉pdb,由于fun内部没有任何操作,所以IDA是无法通过类型传播来得到正确的函数参数和数据类型的,默认原创 2012-06-16 21:25:32 · 7601 阅读 · 0 评论 -
20.IDA-修改二进制文件、显示修改点
1.功能选项Edit▶Patch Program菜单是GUI版本的IDA的一项隐藏功能,用户需要编辑idagui.cfg配置文件才能激活该菜单 可用选项如图所示 1.1.Change byte用于编辑IDA数据库中的字节值。相关的字节编辑对话框如图所示 这个对话框显示了从光标所在位置开始的16个字节的值。你可以更改显示的部分或全部字节。 同时,Address表示了虚拟地址,File of原创 2016-02-10 21:06:41 · 23186 阅读 · 3 评论 -
18.IDA-创建自己的sig
工具flirt68.zip pcf.exe/pcf: 生成一个模式文件.pat sigmake.exe: 生成一个签名文件.sig流程创建PAT生成pat文件,pat.txt文件说明各个模式的格式。第一部分列举了它所代表的函数的初始字节序列,最长为32个字节。一些字节因为重定位的入口而有所不同,这些字节将得到“补偿”,每个字节以两点显示。。如果一个函数短于32个字节(例如前面代码中的_原创 2016-01-30 21:16:25 · 6036 阅读 · 1 评论 -
11.IDA-this指针
所有非静态C++成员函数都使用this指针。任何时候调用这样一个函数,this都被初始化,指向用于调用该函数的对象. 最好是把this看成是传递到所有非静态成员函数的第一个隐藏参数.this存放的地方1.Visual C++利用thiscall调用约定,并将this传递到ECX寄存器中 2.GNU g++编译器则把this看做是函数的第一个(最左边)参数,并在调用该函数之前将用于调用函数的对象的原创 2016-02-09 17:11:37 · 2299 阅读 · 0 评论 -
7.IDA-创建结构体
结构体的一个显著特点在于,结构体中的数据字段是通过名称访问,而不是像数组那样通过索引访问。不好的是,字段名称被编译器转换成了数字偏移量。结果,在反汇编代码清单中,访问结构体字段的方式看起来与使用常量索引访问数组元素的方式极其相似。注意的是,结构体中有个内存对齐规则,所以不要认为编译器会利用所需的最小空间来分配结构体。默认情况下,编译器会设法将结构体字段与内存地址对齐,以最有效地读取和写入这些字原创 2011-12-26 22:22:55 · 16033 阅读 · 1 评论 -
8.IDA-数据与代码、函数互相转换
1.删除原来的格式在重新格式化之前,首先必须删除其当前的格式(代码或数据)。右击你希望取消定义的项目,在结果上下文菜单中选择Undefine(也可使用Edit▶Undefine命令或热键U),即可取消函数、代码或数据的定义------------>------------------->------------------------>转换成code后,此时不能使用图形view原创 2011-12-26 23:26:52 · 4355 阅读 · 0 评论 -
10.IDA-基本操作
打开IDA,拖拽一个EXE文件进去,首先会弹出如下窗口:Kernel option1、Kernel option2、Processor option这三个选项会控制反汇编引擎的工作状态,一般按默认即可,大多数情况下,分析选项的默认值在准确性和方便性之间提供一个折中参数,如果IDA分析出有问题的代码时,把Kernel option1中的选项Make final analysis pass选项原创 2012-07-11 15:43:03 · 16468 阅读 · 1 评论 -
13.IDA-显示正确的函数名称(去掉c++后缀命名)
随便看一段IDA的反汇编: C++编译器用于区分重载函数的机制。为了给重载函数生成唯一的名称,编译器用其他字符来修饰函数名称 图左就是C++的后缀命名法,图右是正常的函数名字为了显示正常的函数名字,使用Options▶Demangled Names 比如,我们选中Names,反汇编将显示为: 附 如果一个二进制文件使用了后缀命名,IDA的取消改编功能会立即展示函数的参数类型和返回原创 2016-01-26 21:34:43 · 7993 阅读 · 0 评论 -
0.IDA-基本的反汇编算法
1.线性扫描原理:一条指令结束,另一条指令开始关键:确定起始位置 流程:从起始,逐条反汇编指令,直到完成整个代码段优点: 可覆盖程序的所有代码段缺陷: 如果代码段中混有数据!gdb windbg objdump均采用线性扫描原创 2010-07-13 21:08:00 · 2482 阅读 · 0 评论 -
14.IDA-XREF(交叉引用)概述
XREF分类 CODE XREF:代码交叉引用 DATA XREF:数据交叉引用XREF描述含义这是个代码交叉引用sub401000是被引用者,main+2A是引用者(引用sub401000的位置)下箭头表示引用者的地址比sub401000高,你需要向下滚动才能到达引用者地址(main+2A),上行反之~ 4.每个交叉引用注释都包含一个单字符后缀(箭头后面),用以说明交叉引用的类原创 2016-01-27 16:35:16 · 18771 阅读 · 0 评论 -
15.IDA-查看XREF列表
查看XREF列表在某个位置显示的交叉引用注释的数量由ida.cfg控制,其默认设置为2,当然你可以改变它SHOW_XREFS = 2 // Show 2 cross-references (the rest is accessible by Ctrl-X)示例代码:int read_it; int write_it; int ref_it; void callflow() {} int原创 2016-01-27 18:09:57 · 3291 阅读 · 0 评论 -
16.IDA-列出函数中存在的全部call
有时待分析的函数反汇编太长,需要确认此函数调用了哪些call 选择View▶Open Subviews▶Function Calls窗口 窗口的上半部分列出了所有调用当前函数(由打开窗口时光标所在位置决定)的位置 窗口的下半部分列出了当前函数做出的全部调用如,查看fopen的反汇编调用原创 2016-01-28 10:30:25 · 5048 阅读 · 0 评论 -
17.IDA-基本块的定义
基本块是一条或数条指令的组合,它拥有唯一一个指向块起始位置的入口点和唯一一个指向块结束位置的退出点,通常,为判定基本块,应忽略函数调用指令并未将控制权转交到当前函数这一事实,除非已知被调用的函数无法正常返回。 基本块在行为方面有一个重要的特点 一旦基本块中的第一条指令开始执行,块中的其他指令都会执行,直到最后一条指令 因此,你可以为每个基本块的第一条指令设置断点,当这些断点被触发时,相关原创 2016-01-28 17:17:50 · 2139 阅读 · 0 评论 -
12.IDA-虚函数和虚表
vtable编译器会为每一个包含虚函数的类(或通过继承得到的子类)生成一个表,其中包含指向类中每一个虚函数的指针,这样的表就叫做虚表(vtable)__vfptr每个包含虚函数的类对象都获得__vfptr指针,并且是对象的第一个数据成员 编译器必须要保证虚函数表的指针存在于对象实例中最前面的位置在计算对象的总大小时,也必须考虑到虚表指针。比如new,传递给new的大小值不仅包括类(以及任何超类原创 2016-01-26 17:29:12 · 5407 阅读 · 0 评论 -
IDA视频路径
1.http://www.woodmann.com/TiGa/idaseries.html2.http://www.sgoldcn.com/apps.php?q=weibo&uid=6584原创 2012-08-05 18:13:05 · 1483 阅读 · 0 评论