idapro使用技巧及大杂烩_第1页
idapro使用技巧及大杂烩_第2页
idapro使用技巧及大杂烩_第3页
idapro使用技巧及大杂烩_第4页
idapro使用技巧及大杂烩_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IDA Pro 使用技巧及大杂烩IDA Pro 基本简介IDA加载完程序后,3个立即可见的窗口分别为 IDA-View ,Named 和消息输出窗口 (output Window)。IDA图形视图会有执行流,Yes箭头默认为绿色,No箭头默 认为红色,蓝色表示默认下一个执行块。在寄存器窗口中显示着每个寄存器当前的值和对应在反汇编窗口中的内存地址。函数在进入时都会保存堆栈地址EBP也可以按 F9 键)和ESP退出函数时恢复。选择菜单 Debugger 下的 Start process来开始调试。调试会让程序在电脑中执行,所以IDA会提示注意提防恶意程序、病毒和木马。打开IDA Pro,为进入ID

2、A界面提供三种选项, 分别是New(新建),Go (运行),Previous (上一个)。选择File菜单下的Open打开想要逆向的可执行文件,会显示一个 Load a new file的界面。这里可以选择 :1.程序的类型;2.处理器的类型;3.加载的段地址和偏移量;4.是否允许分析;5.些加载选项;6.内核和处理器的一些选项;7. windows 系统 dll 所在的目录。默认选择PE文件就可以,对于一些网络数据包或者其他格 式的文件,可以使用二进制加载,自己进行解析。工作区有多个子窗口,IDA View-A 是反汇编窗口,HexView-A 是十六进制格式显示的窗口,Imports 是导

3、入表(程序中调用到的外面的函数)Functions 是函数表(这个程序中的函数)Structures 是结构,Enums是枚举。IDA view: 定位要修改的代码段在哪里。Hex view: 用来修改我们的数据 exports window: 导出窗口import window: 导入窗口 names window: 函数和参数的命名列表functions window:样本的所有函数窗口 strings window: 字符串显示窗口,会列出程序中的所有字 符串IDA 很智能,鼠标移到某些标识符上会自动有适当的提示, 双击还能自动跳到相应的位置。把一个函数逆向的方法很简 单,只要按F5键就

4、会出来逆向出的 C语言程序了。退出 IDA 时,会进行文件保存确认, 如果需要继续进行分析, 将 IDA 中间数据库打包,下次继续打开就可以进行分析;如IDB。果不需要继续分析,选择不要打包,不要存储数据库。IDA 打开应用程序时,会为其创建一个数据库,后缀为IDB 由 4 个文件组成 : 后缀为 id0 的二叉树形式的数据库, 后缀为 id1 的程序字节标识,后缀为nam的Named窗 口的索引信息, 后缀为 til 的给定数据库的本地类型定义的相关信息。旦 IDA 为某个可执行程序创建数据库,它本身就不再需要访问这个可执行文件,除非使用IDA 的 Debug 功能。跳转指令分三类 : 无条

5、件跳转 : JMP;根据 CX、ECX 寄存器的值跳转 : JCXZ(CX 为 0 则跳转 ) 、JECXZ(ECX为0 则跳转);根据 EFLAGS 寄存器的标志位跳转 , 这个太多了 .学 Win32 汇编 28 - 跳转指令 : JMP、JECXZ、JA、JB、JG、JL、 JE、JZ、 JS、JC、JO、JP 等 MOVSX MOVZX比如MOVSX EAX, BYTE PTR 00401000MOVZX EAX, BYTE PTR 00401000在 C 语言中应该如何表达啊比如定义一个全局变量BYTE bt = 101;DWORD dw;应该如何把bt赋值到dw中.并且功能与 MO

6、VSX/MOVZ相同汇编语言与C语言的语言构件不同,并不是一定能转成完全 等价的C语言的代码的。对于以上代码,可以这样理解: movsx = dw = (DWORD) ( (signed char) (bt) ) movzx = dw = (DWORD) ( (unsigned char) (bt) ) movzx 是把高位全部用 0 填充,而 movsx 是把原来数的最高 位扩展成超出的位。对于bt=101,也就是0x65,八位二进制是“ 01100101 ”,因 为它的最高位是 0,因此这两种情况, dw 都等于 0x00000065 换一个,比如bt=247,也就是0xF7,八位二进制是

7、“”它 的最高位是 1。经过 movsx 变换后, dw 等于 0xfffffff7 而经过 movzx 变换后, dw 等于 0x000000f7 交叉参考通过交叉参考(XREF)可以知道指令代码互相调用的关系.如.text:00401165 loc_401165: ;CODE XREF:sub_401120+B|j 这句 CODE XREF:sub_401120+B|j 表示该调用地址是 401120,表示跳转 (jump)o”表示偏移值 (offset)p”表示子程序 (procedure)双击这里或按回车键可以跳到调用该处的地方参考重命名 : 找到一段代码 ( 一般为函数入口名 ),

8、右键点击选择” Rename” 可以将函数名称变成易懂的名称标签的用法 :在菜单” Jump”中选择” Mark Position ” 将会打开标记当前位置功能 , 输入一个名称 , 在菜单” Jump/Jump to 称, 便会到达制定的代码位置 进制的转换 :marked position ”中或按” Ctrl+M ”键双击想要调转的名选择快捷键的 #可以转换进制 , 选择” Toggle leading zeroes ”功能是用 0 填补数据前的空位 .cqd,为Convert Double to Quad的缩写,意为将双字数据 扩展为四字。该指令先把 edx 的每一位置成 eax 的最

9、高位(若 eax=0x, 则 edx=OxFFFFFFFF;若 eax 该指令常用于扩展被除数,很久前,指令集规定除数必须是 被除数的一半长,这个规定一直被沿用。使用 IDIV 执行除 法时,如果除数是 32 位,这就要求被除数是 64 位,即EDX:EAX所以扩展一下EAX以满足除法指令的条件并且得 到正确的结果。DIV 和 IDIVDIV和IDIV两个都是算术除法操作指令。DIV是无符号数除 法 DIV s ; 完成两个无符号数相除。IDIV 是有符号数除法指令,完成两个有符号数相除。被除 数、商、除数、余数存放位置及对s的规定与DIV指令相同。修改程序的指令或者数据,并进行保存 如何修改

10、数据 在 Hex View 窗口下,S1双击要修改的地方S2使用 F2 捷方式修改当前字节S3再按下 F2 快捷方式应用修改。如何改变执行流程 1 修改跳转指令。2 修改内存数据。3IDA View中使用下面的命令 Jump to IP,Set IP, Run tocursor 。保存修改使用下面的主菜单命令,直接把修改保存到输入文件中,即可。IDA Main Menu-Edit-PatchProgram-Apply patches to input file 0D中右键-保存到文件-选择我的0D是这样的,只能修改一条,通过选择,保存一条重新载 入再修改再保存 .如何对DLL文件进行动态跟踪用

11、F2在 IDA View 中当前代码行切换断点。启动装载DLL的EXE文件。使用 Debugger-Attach toprocess把当前二进制代码attach 到正在运行的进程中去。现在应该进入断点。 F7StepintoF8Stepover 。F9continue 。Cursor 移到内存位置后双击就可以查看到具体内存中的值, 右击快捷菜单 Jumpto IP 项,可以回到你刚才指令的地方。IDA View 中有很多行代码,可以使用 ; 快捷键对当前行进行注释。为了观察具体指令的二进制表示你还需要IDAView- 右击快捷菜单 -Synchronize with-Hex View 1这样

12、HexView 会和你的 IDA View中光标位置同步。在 IDA View 中为函数改名,用 N 快捷键。观察内存(变量) Tool bar-Open the watch list window,Toolbar-Add a variable towatch 如果作者混淆了二进制代码,你需要 IDAView 在频繁使用 Data快捷键,Code快捷键,强制IDA,解析指定数据块 为数据 (Data) 或代码 (Code) 。,有各这些 32 位寄存器有多种用途,但每一个都有“专长” 自的特别之处。EAX 是”累加器” (accumulator), 它是很多加法乘法指令 的缺省寄存器。EBX是

13、”基地址”(base)寄存器,在内存寻址时存放基地址。ECX是计数器(counter), 是重复(REP)前缀指令和 LOOP指 令的内定计数器。EDX 则总是被用来放整数除法产生的余数。ESI/EDI 分别叫做”源 / 目标索引寄存器”(source/destination index),因为在很多字符串操作指令中, DS:ESI 指向源串 , 而 ES:EDI 指向目标串 .EBP 是”基址指针” (BASE POINTER), 它最经常被用作高级 语言函数调用的”框架指针” (frame pointer). 在破解的 时候, 经常可以看见一个标准的函数起始代码push ebp ; 保存当

14、前 ebpmov ebp,esp ; EBP 设为当前堆栈指针 sub esp, xxx ; 预留 xxx 字节给函数临时变量 .这样一来,EBP构成了该函数的一个框架,在EBP上方分别 是原来的 EBP, 返回地址和参数 . EBP 下方则是临时变量 .函数返回时作 mov esp,ebp/pop ebp/ret 即可 .ESP 专门用作堆栈指针,被形象地称为栈顶指针,堆栈的顶 小。在32位平台上,ESP每次减少4字节。部是地址小的区域,压入堆栈的数据越多,ESP也就越来越汇编中的 ASSUME经常用来将寄存器当作结构体指针来用ASSUME edx:ptr STRUCT ;将edx定义为st

15、ruct指针变量把 STRUCT构体的起始地址 给 edx lea edx, STRUCT这个时候可以用edx.调用STRUCT勺字段ASSUME edx:nothing ;取消定义 这个时候 edx 不是指针edx. 不能调用字段了 如果是8086的那么将段REG ASSUME DS某个数据段)这样程序在使用这个数据段会用DS做段Code段是不能指定段 REG的 必须是CS:IP(EA)快捷键1. 按空格键切换反汇编窗口 ( 列表视图图形视图 )反汇编窗口有两种显示格式:面向文本的列表视图和图形视 图。不同视图在不同的场景下各有所长,按空格键可以快速 切换。2. 翻页 esc 和 Ctrl+

16、Enter当执行跳转功能后 , 需要返回时 ,只要在工具栏中点击 按” Ctrl+Enter ”键.3. 注释 “;”和” : ”按; 号输入的注释 ,所有交叉参考处都会出现按: 号键输入的注释只在该处出现- ”,“ +”查看函数之间的关系IDAView 下使用小键盘“”,“+”快捷方式可以在代码同关系图之间切换。5. 使用 X 查看符号引用IDA View 下使用 X 快捷方式,定位引用了当前符号的代码。6. 快捷键 F5 显示 C 伪代码 如果有 Main menu-View-OpenSubViews-Pseudocode F5 菜单,说明你已经安装了 HexRays decompiler 插件,可以在查看汇编的时候,按 F5 打 开伪代码子窗口。7. 使用快捷键” * ”把变量重定义为数组。8. 快捷键Ctrl+S,打开搜索类型选择对话框-双击Strings,跳到字符串段- 菜单项“ Search - Text ”;中输入要

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论