转:http://broadviewsec.blog.51cto.com/640388/157206
3.2.2 IDA Pro简介
IDA Pro(简称IDA)是DataRescue公司(
www.datarescue.com)出品的一款交互式反汇编工具,它功能强大、操作复杂,要完全掌握它,需要很多知识。IDA最主要的特性是交互和多处理器。操作者可以通过对IDA的交互来指导IDA更好地反汇编,IDA并不自动解决程序中的问题,但它会按用户的指令找到可疑之处,用户的工作是通知IDA怎样去做。比如人工指定编译器类型,对变量名、结构定义、数组等定义等。这样的交互能力在反汇编大型软件时显得尤为重要。多处理器特点是指IDA支持常见处理器平台上的软件产品。
IDA支持的文件类型非常丰富,除了常见的PE格式,还支持Windows,DOS,UNIX,Mac,Java,.NET等平台的文件格式。单击菜单“File/Open”打开目标软件ReverseMe.exe,IDA一般能自动识别出格式,如图3.3所示。也可单击菜单“File/New”以向导模式打开文件。
图3.3 IDA打开文件
IDA打开文件分自动和手工两种模式,默认是自动模式,手工模式(Manual load)可以自由选择需要加载的区块。IDA装载PE文件时,是按区块来装载的,比如.text(代码块)、.data( 数据块)、.rsrc(资源块)、.idata(输入表)、.edata(输出表)等。IDA反汇编的时间与程序大小及复杂程度有关,需要等一段时间才能完成。此过程分两个阶段,第一阶段将程序的代码和数据分开,然后为各函数作标记并分析其参数调用,分析跳转、调用等指令关系并给标签赋值等。在第二阶段,如果IDA识别出文件的编译类型,就装载对应的编译器特征文件,然后给各函数赋名。
Kernel option1、Kernel option2、Processor option这三个选项可以控制反汇编引擎的工作状态,一般按默认即可。IDA会自动识别程序类别与处理器类型,在大多数情况下,分析选项的默认值在准确性与方便性之间提供一个折中参数,如果IDA分析出有问题的代码时,将核心选项1中的“Make final analysis pass”选项关闭是一个很好的方法。在有些情况下,一些代码因不在预计的位置而不被确认,尝试将核心选项2中的“Coagulate Data Segments in the final pass”选上是有帮助的。
IDA打开文件后,默认是处于图形化模式下,如果要切换到代码模式,执行右键菜单“Text view”。
3.2.3 IDA的配置
合理配置IDA文件,可以大大提高工作效率。Windows图形界面的主程序是idag.exe,可通过菜单“Options(选项)”来配置IDA,但是这种配置仅对当前的项目有效,新建一个项目时,会恢复成默认配置,改变默认配置必须编辑ida.cfg文件。
在IDA的cfg目录下查找ida.cfg或idagui.cfg文件,这是一个文本文件。不能用Windows记事本打开ida.cfg编辑,因为记事本对一些特殊字符识别不好,继续编辑和保存文件,文件将会被破坏。此时配置文件会导致IDA运行失败,如图3.4所示。建议用户用EditPlus、UltraEdit等工具修改ida.cfg等配置文件。
图3.4 ida.cfg文件损坏警告窗口
ida.cfg文件由两部分组成。第一部分定义文件的扩展名、内存、屏幕等设置;第二部分配置普通参数,如代码显示格式、ASCII字符串显示格式、脚本定义和处理器选项等。另外,一些问题也与ida.cfg有关,如MAX_ITEM_LINES,默认为5000行,对于许多大文件经常会不够使用,因而发生错误。
1.反汇编选项(Disassembly)
这个选项直接控制反汇编窗口的代码显示格式。单击菜单“Options(选项)”中的“General(常规)”,将出现如图3.5所示的对话框。
图3.5 反汇编选项配置
ida.cfg与这部分配置对应的是文本格式(Text representation)。由于其项目较多,下面只列出重点部分。配置如下:
OPCODE_BYTES = 6 ;机器码字节数,默认是0
INDENTION = 0 ;指令缩进,默认是16,设为0代码整洁一些
COMMENTS_INDENTION = 30 ;注释缩进,默认是40
MAX_TAIL = 16 ;交叉参考的深度,默认是16
MAX_XREF_LENGTH = 80 ;交叉参考显示的右边距
MAX_DATALINE_LENGTH = 100 ;主窗口代码右边距,默认是70
SHOW_AUTOCOMMENTS = NO ;自动注释
SHOW_BAD_INSTRUCTIONS = NO ;坏指令标记
SHOW_BORDERS = YES ;数据与代码之间分界
SHOW_EMPTYLINES = YES ;显示空白,使汇编代码易读
SHOW_LINEPREFIXES = YES ;显示行前缀(如1000:0000)
SHOW_XREFS = 15 ;显示大量的交叉参考,默认值是2
SHOW_ORIGINS = NO ;产生“org”标记,默认是YES
2.ASCII字符串与符号(ASCII strings & names)
ASCII字符串风格可在菜单“Options/ASCII String styles”中打开字符串设置窗口,对应的ida.cfg部分配置如下:
ASCII_GENNAMES = YES ;生成符号名
ASCII_TYPE_AUTO = YES ;自动产生符号名
ASCII_PREFIX = "a" ;符号名前缀
#define ASCII_STYLE_C 0x00000000 ;ASCII字符串
#define ASCII_STYLE_UNICODE 0x00000003 ;Unicode字符串
3.显示中文字符
IDA默认是不显示中文字符串的,只需要在ida.cfg中搜索AsciiStringChars,将cp866 version这段注释掉,恢复full version这段即可显示中文。
// (cp866 version)
//AsciiStringChars =
// "\r\n\a\v\b\t\x1B"
// " !\"#$%&'()*+,-./0123456789:;<=>?"
// "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
……
// "噌忏溴骁栝觌祉铒";
//(full version)
AsciiStringChars =
"\r\n\a\v\b\t\x1B"
" !\"#$%&'()*+,-./0123456789:;<=>?"
"@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
……
"懒旅呐魄壬仕掏蜗醒矣哉肿刭谯茌捱"
"噌忏溴骁栝觌祉铒瘃蝮趱鲼?";
3.2.4 IDA主窗口界面
IDA分析完目标程序后进入主窗口,界面显得专业和复杂。IDA相当智能,尽量分析程序各模块的功能,并给出相应提示,例如为API函数的参数自动加上注释,相当直观易懂。对于那些IDA不能正常分析的代码,则需要手工来辅助分析。
1.翻页
当执行跳转功能后,需要返回时,只要在工具栏中单击
按钮或按Esc键,列表便会往后跳一页;若要往前一页,单击
按钮或按“Ctrl+Enter”键,有点像浏览器。
2.子窗口
在工具栏上单击
按钮或从菜单“View/Open subviews/Disassembly”中打开反汇编子窗口,这样可以用多个子窗口来分析同一段程序,不必来回翻页查看代码了。
3.导航器
单击菜单“View/Toolbars/Navigation”打开导航器,如图3.6所示。各部分含义:Library function为库函数,Regular function为规则函数,Instruction为指令,Data为数据,Unexplored为未查过的,External symbol为外部符号,这样根据需要可快速跳到相关代码部分。
图3.6 导航器
在导航器中执行右键菜单“Zoom in”、“Zoom out”可以调整导航条的显示比例。对于手工分析,导航器的作用非常大,选择适当的倍率可以起到意想不到的效果。
4.注释
IDA可以方便地在代码后面输入注释。在窗口右边空白处单击鼠标右键,显示输入注释的菜单,一种是Enter comment(快捷键是冒号),另一种是Enter repeatable comment(快捷键是分号)。按分号键输入的注释,所有交叉参考处都会出现,按冒号键输入的注释只在该处出现。如果一个地址有两种注释,则只显示非重复注释。
5.提示窗口
IDA最下面的提示窗口主要反馈各种信息。若同时安装了IDA的高低不同版本,有可能导致该窗口消失。解决办法是打开注册表,查找“Datarescue”并删除该主键即可。
本文节选自电子工业出版社2008年7月出版的
《加密与解密(第3版)》。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。