
IDA
文章平均质量分 70
墨痕诉清风
始于情,行于心。
展开
-
20.IDA-修改二进制文件、显示修改点
Edit▶Patch Program菜单是GUI版本的IDA的一项隐藏功能,用户需要编辑idagui.cfg配置文件才能激活该菜单。这个文件的第一行是注释,第一行是最初的二进制文件的名称,随后则是文件中被修改的字节列表。每一行都指出被修改的字节的。然后,IDA会将得到的指令字节写入当前的屏幕位置。这个对话框显示了从光标所在位置开始的16个字节的值。你可以更改显示的部分或全部字节。DIF文件是一个纯文本文件,其中列出了一个IDA数据库中所有被修改的字节。用于编辑IDA数据库中的字节值。以及字节在数据库中的。原创 2019-02-21 12:27:09 · 2752 阅读 · 0 评论 -
19.IDA-栈指针调节、设置函数特性
栈指针调节IDA会尽其所能跟踪函数内每一条指令上的栈指针的变化。IDA跟踪这种变化的准确程度,在很大程度上影响着函数的栈帧布局的准确程度。如果IDA无法确定一条指令是否更改了栈指针,你就需要手动调整栈指针如果一个函数调用了另一个使用stdcall调用约定的函数,就会出现上述情况,这是最简单的一种情况。如果被调用的函数位于IDA无法识别的共享库中(IDA拥有与许多常用库函数的签名和调用约定...原创 2019-02-21 12:27:01 · 1379 阅读 · 0 评论 -
18.IDA-创建自己的sig(创建自己的标签)
工具flirt68.zippcf.exe/pcf: 生成一个模式文件.patsigmake.exe: 生成一个签名文件.sig流程创建PAT生成pat文件,pat.txt文件说明各个模式的格式。第一部分列举了它所代表的函数的初始字节序列,最长为32个字节。一些字节因为重定位的入口而有所不同,这些字节将得到“补偿”,每个字节以两点显示。。如果一个函数短于32...原创 2019-02-21 12:26:56 · 1479 阅读 · 0 评论 -
17.IDA-基本块的定义
基本块是一条或数条指令的组合,它拥有唯一一个指向块起始位置的入口点和唯一一个指向块结束位置的退出点,通常,为判定基本块,应忽略函数调用指令并未将控制权转交到当前函数这一事实,除非已知被调用的函数无法正常返回。因此,你可以为每个基本块的第一条指令设置断点,当这些断点被触发时,相关块中的每一条指令都被标记为“已执行”一旦基本块中的第一条指令开始执行,块中的其他指令都会执行,直到最后一条指令。基本块在行为方面有一个重要的特点。原创 2019-02-21 12:26:49 · 2207 阅读 · 0 评论 -
16.IDA-列出函数中存在的全部call(函数调用窗口,查看函数内调用了哪些call)
窗口的上半部分列出了所有调用当前函数(由打开窗口时光标所在位置决定)的位置。选择View▶Open Subviews▶Function Calls窗口。有时待分析的函数反汇编太长,需要确认此函数调用了哪些call。窗口的下半部分列出了当前函数做出的全部调用。如,查看fopen的反汇编调用。原创 2019-02-21 12:26:41 · 2161 阅读 · 0 评论 -
15.IDA-查看XREF列表(Ctrl+x)
打开View▶Open Subviews▶Names,只要这里面有的符号名字,如果它们出现在注释中,IDA会将这个符号作为反汇编指令中的一个操作数处理。双击该符号,反汇编窗口将跳转到相应位置。同时,右击该符号,将显示上下文菜单。callflow@@YAXXZ或callflow,使用CTRL+X就可以打开callflow的模态引用框了。在某个位置显示的交叉引用注释的数量由ida.cfg控制,其默认设置为2,当然你可以改变它。使用热键CTRL+X打开一个模态对话框。CTRL+X支持在任意位置打开交叉引用。原创 2019-02-20 15:02:12 · 1983 阅读 · 0 评论 -
14.IDA-XREF(交叉引用)概述
上处的虚线表示相邻的两条指令之间并不存在普通流(也就是00401048后没有跟着顺序执行的指令)数据交叉引用与IDA数据库中任何牵涉到虚拟地址的字节有关(换言之,数据交叉引用与栈变量毫无关系)指令用于调用函数,如③处的 call指令,它分配到一个调用流(call flow),表示控制权被转交给目标函数。与仅源自于指令位置的读取和写入交叉引用不同,偏移量交叉引用可能源于指令位置或数据位置,例如。普通流表示由一条指令到另一条指令的顺序流。偏移量交叉引用表示引用的是某个位置的地址(而非内容)原创 2019-02-20 14:56:33 · 3217 阅读 · 1 评论 -
13.IDA-显示正确的函数名称(去掉c++后缀命名)
随便看一段IDA的反汇编:C++编译器用于区分重载函数的机制。为了给重载函数生成唯一的名称,编译器用其他字符来修饰函数名称图左就是C++的后缀命名法,图右是正常的函数名字为了显示正常的函数名字,使用Options▶Demangled Names (选项 -> 解码名称)比如,我们选中Names,反汇编将显示为:附如果一个二进制文件使用了后缀命名...原创 2019-02-20 14:48:24 · 1770 阅读 · 0 评论 -
12.IDA-虚函数和虚表(vf代表虚函数,vf3代表this指向第三个函数)
vtable编译器会为每一个包含虚函数的类(或通过继承得到的子类)生成一个表,其中包含指向类中每一个虚函数的指针,这样的表就叫做虚表(vtable)__vfptr每个包含虚函数的类对象都获得__vfptr指针,并且是对象的第一个数据成员编译器必须要保证虚函数表的指针存在于对象实例中最前面的位置在计算对象的总大小时,也必须考虑到虚表指针。比如new,传递给new的大小值不仅包括类...原创 2019-02-20 14:43:17 · 1353 阅读 · 0 评论 -
11.IDA-this指针
所有非静态C++成员函数都使用this指针。任何时候调用这样一个函数,this都被初始化,指向用于.最好是把this看成是传递到所有非静态成员函数的第一个隐藏参数.原创 2019-02-20 14:28:32 · 784 阅读 · 0 评论 -
IDA实战视频
http://www.sgoldcn.com/apps.php?q=weibo&uid=6584出没地点8859630原创 2019-02-20 14:20:11 · 1652 阅读 · 0 评论 -
10.IDA-基本操作
打开IDA,拖拽一个EXE文件进去,首先会弹出窗口:Kernel option1、Kernel option2、Processor option这三个选项会控制反汇编引擎的工作状态,一般按默认即可,大多数情况下,分析选项的默认值在准确性和方便性之间提供一个折中参数,如果IDA分析出有问题的代码时,把Kernel option1中的选项Make final analysis pass选项关闭是很...转载 2019-02-20 14:11:51 · 892 阅读 · 0 评论 -
9.IDA-重新设置函数类型、创建数组结构
1.重新设置函数类型写一个简单的代码做测试: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是无法通过类型传播来得到正确的函数参数...原创 2019-02-20 14:03:42 · 3131 阅读 · 0 评论 -
8.IDA-数据与代码、函数互相转换
在重新格式化之前,首先必须删除其当前的格式(代码或数据)。在结果上下文菜单中选择Undefine(也可使用Edit▶Undefine命令或热键U),即可取消函数、代码或数据的定义,关键是,必须中间执行Undefine。原创 2019-02-20 13:22:11 · 1169 阅读 · 0 评论 -
7.IDA-创建结构体
结构体分类结构体的一个显著特点在于,结构体中的数据字段是通过名称访问,而不是像数组那样通过索引访问。不好的是,字段名称被编译器转换成了数字偏移量。结果,在反汇编代码清单中,访问结构体字段的方式看起来与使用常量索引访问数组元素的方式极其相似。注意的是,结构体中有个内存对齐规则,所以不要认为编译器会利用所需的最小空间来分配结构体。默认情况下,编译器会设法将结构体字段与内存地址对齐,以最有效地读...原创 2019-02-20 13:16:48 · 1893 阅读 · 0 评论 -
6.IDA-重命名、注释
由于基础数据库的本质,你对反汇编代码所做的更改将迅速“扩散”到IDA的所有子窗口中,以使反汇编代码保持一致说明记住,IDA不提供撤销功能。在操纵数据库时,请一定记住这一点。你所能做的,就是经常保存数据库,并恢复到最近保存的数据库版本。原创 2019-02-19 18:12:16 · 2640 阅读 · 0 评论 -
5.IDA-文本搜索、二进制搜索(16进制字节序列)、替换16进制
IDA文本搜索相当于对反汇编列表窗口进行子字符串搜索。通过Search▶Text(热键:ALT+T)命令启动文本搜索选择Find all occurences(查找所有结果),IDA将在一个新的窗口中显示搜索结果,最后,使用CTRL+T或Search▶Next Text(Ctrl+T)命令可重复前一项搜索,以找到下一个匹配结果文本搜索不一定准确,如以下汇编(IDA转换的),文本搜索是搜不到的(实际它对应的文字是:吾爱破解汇编指令查询器)原创 2019-02-19 17:08:15 · 3940 阅读 · 0 评论 -
4.IDA-导航(跳转到地址、导航按钮、栈帧、调用约定、局部变量布局、IDA的栈视图)
使用Jump▶Jump to Address命令或在处于活动状态的反汇编窗口中按下热键G,均可以打开Jump to Address对话框,如果把这个对话框看成Go对话框,可能有助于你记住相关的热键。原创 2019-02-19 16:57:12 · 1678 阅读 · 0 评论 -
3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)
在IDA中,ESC键是一个非常有用的热键。在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,而在打开的其他窗口中,ESC键用于关闭窗口。1.导出窗口导出窗口列出文件的入口点。这包括程序的执行入口点(在程序的文件头部分指定),以及任何由文件导出给其他文件使用的函数和变量,对于exe来说,至少有一个导出函数,程序的执行入口点。IDA将这个入口点取名为start2.导入窗口...原创 2019-02-19 16:38:33 · 7516 阅读 · 0 评论 -
2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
当IDA加载后,3个立即可见的窗口分别为IDA-View窗口、函数窗口和消息输出窗口,所有窗口都可通过View▶Open Subviews菜单打开反汇编窗口反汇编窗口也叫IDA-View窗口,它是操作和分析二进制文件的主要工具0.在反汇编窗口中,ESC键的作用与Web浏览器的“后退”按钮类似,遗憾的是,在打开的其他窗口中,ESC键用于关闭窗口IDA使用术语流来表示某个指令如何继续执行...原创 2019-02-19 16:27:34 · 3980 阅读 · 0 评论 -
1.IDA-基本操作(改变Image Base地址、打开、保存IDA的不同方式)
拖入文件后,会弹出一个加载对话框,如果未识别文件,则默认为Binary File为唯一选项,这时就需要你手动选择反汇编处理器了。当加载后,IDA首先会创建数据库,四个文件(.til、.id0、id1、.nam文件),用来保存各种识别的信息。Pack database(Store): 打包数据库,把上面的四个文件组合成一个IDB文件,如果原来有IDB,将会直接被覆盖。Don't ... : 不打包数据库,也就是不创建IDB文件,但是原来生成的.til、.id0、id1、.nam文件还是会在。原创 2019-02-19 16:03:12 · 4099 阅读 · 0 评论 -
0.IDA的反汇编算法方式
上面就不会执行inc eax这一句,也就是inc eax这句其实不应该被反汇编的,应该直接从后一句开始,如果不是inc eax,而是一段数据呢,那就OVER了。反汇编器会尝试定位到跳转的目标,但有可能失败(如JMP EAX,EAX在静态环境下无法确认)由于RET返回的地址实际是从栈中取得的,但反汇编器不可能访问到栈,所以就会终止。直接解析它后面的下一条指令,如MOV、PUSH、POP。从起始,逐条反汇编指令,直到完成整个代码段。和无条件分支指令相似,如CALL EAX。一条指令结束,另一条指令开始。原创 2019-02-19 15:58:45 · 1098 阅读 · 0 评论 -
IDA工具各个功能总结
生成文件:保存后生成的文件id0:二叉树数据库id1:文件包含描述每个程序字节的标记nam:包含IDA NAME窗口的数据库til:本地数据库有关信息 导航带颜色 常用菜单ESC键:后退键(避免在窗口标题栏使用,退出窗口) 绿色箭头为YES,红色箭头为NO,蓝色箭头为下一个立即执行的块,拖动线可以改变连接路径。恢复源图形,右键鼠标菜单,点击布局图表。...原创 2019-02-14 20:12:16 · 17822 阅读 · 4 评论