逆向中静态分析工具——IDA初学者笔记

//******************************************************************************
//IDA初学者笔记

//******************************************************************************
//作者:Cai
//日期:2011-10-18
//******************************************************************************

本人作为一个初学者,尽量让本文也从一个初学者的角度讲一些比较适合的内容,对于高手而言,价值深浅就见笑了。

IDA打开一个Win32的EXE后,会出现一系列窗口,默认定位到“IDA View”窗口中的入口函数处,即VC程序的WinMain,

到这里,最重要最艰难的反编译工作已经被IDA这个工具完成了,但逆向工程,远不止这些。

接下来要来进行跟踪调试、修改 ,这就必须先学习如何使用这个IDA工具,不过同时进行也是最好的学习方法。

在正式开始前,有2个实用的浏览快捷键需要记住,就是前进后退:

前进:Ctrl+Enter

后退:Esc

当然也可以使用工具栏的按钮:

或菜单:

提示:若工具栏没有按钮则在主菜单View-Toolbars-Jump勾上即可:

1.主要窗口介绍:

IDA作为一个具有强大核心引擎和灵活辅助插件的组合型工具,有太多地方需要去研究熟悉的,但是学习是一个循序渐进、

由浅到深的过程,因此,本文从入眼就接触到的窗口开始介绍,应该是条正确的道路。

1)IDA View

该窗口可通过View-Open subviews-Disassembly调出:

该窗口有2种模式,一种是Text View,另一种是Graph View,2种大同小异, 关于两种浏览模式的转换,   可在右键菜单

中切换:

·Text View切换到Graph View:(注意:在 Text View中有时右键菜单不是这样的,这时换个有代码的位置点右键就可以了)

·GraphView切换到Text View:

以下采用比较通用的Text View为例来介绍,如下图:

主要是三个区域:地址区、OpCode区(操作码区)、反编译代码区

A.地址区

该处地址以PE文件加载到内存后的虚拟地址为准,即镜像基址+偏移地址,如例子的程序基址是0x00400000,

如图中.text:0048FEEC位置数据如下:

该处地址是基址0x00400000 + 偏移地址8FEEC,假如我们使用WinHex打开查看,可以看到偏移地址8FEEC 处的数据

如下:

可以看出,两处数据是相同的,因此在WinHex中修改 8FEEC 处的数据将会影响到IDA中.text:0048FEEC处的数据。

这里顺便转一下,虚拟内存空间地址表:

高2G空间 (Ring0级能访问区域) :

0xFFFFFFFF-0xC0000000:1GB用于VxD、存储器管理和文件系统;

0xBFFFFFFF-0x80000000:1GB共享的WIN32 DLL、存储器映射文件和共享存储区;

低2G空间(Ring3权限区域)

0x7FFFFFFF-0x00400000:约2GB为每个进程的WIN32专用地址;

0x003FFFFF-0x00001000:为MS-DOS系统 和 WIN16应用程序;

0x00000FFF-0x00000000:为防止使用空指针的4,096字节;

同时顺便提醒一下,不管EXE或DLL基址都是可变的,但一个DLL加载到EXE后,基址会被重定向,但偏移地址是不变的;

而对于PE文件,PE头的长度并不是固定的,当然有着同样的解析标准,可也导致IDA中偏移地址-基址不一定等于文件地址,

判断代码在文件中的基址很容易,通常PE头在WinHex中可以清晰的看到“This program cannot be run in DOS.....”,之后就是

一些段名称:如.text,.rdata。接着就是一小段00,之后出现数据的地方就是代码基址,大部分是55 8B或56 8B等。

B.OpCode区

该区域默认不会显示出来,需要打开菜单Options-General,

在“Disassembly”页中的“Display Disassembly  line parts”中,设置”Number of opcode bytes“,例子中设置 8,默认为0则不显示。

OpCode区字面上看是操作码区的意思,当然这是一个以16进制字符显示二进制数据的形式,这样结合反编译代码会更具直观性,

但也使界面复杂化,仁者见仁。

  C.反编译代码区

该区域是IDA的主要功能区域,具有很多特性,如相同字符串高亮、双击函数名或引用变量名可调整到对应的跳转地址等,这里功能快捷键繁多,留待以后慢慢学习熟悉。同样介绍几个快捷键:

·字符串搜索:             搜    索:Alt+T          下一个:Ctrl+T

·反编译为C代码:      在反汇编代码中按F5即可。

D.跳转指引区

该区域主要是显示一些跳转地址指引箭头,作用简单明了。

2)Hex View

该窗口如下图所示,与一般的16进制编辑器类似。

默认为只读状态,可使用快捷键F2对数据区域(绿色字符区域)在只读/编辑二种状态间切换,也可以使用patch program功能来编辑(后面会介绍该功能)。

3)其他窗体

IDA的窗体均可在主菜单View-Open subviews中打开/关闭,其他如pseudocode为反编译C代码窗体、strings为程序字符串列表窗口,均为十分有用的辅助窗口,以后再慢慢介绍

附:

1.启用patch program(修改代码)菜单:

idagui.cgf中DISPLAY_PATCH_SUBMENU改为YES,即可将修改二进制代码的菜单,

当然修改代码的窗体中仍是以16进制字符显示,这个修改于Alt+F2不一样,可以将修改于原文件的不同地方保存到一个dif文件里。

2.快捷键:

在IDA View中按F5可以生产C代码查看,  也可以将整个保存为C文件进行查看。

在Hex View中按F2可直接编辑16进制数据。

IDA显示字节机器码

菜单

Options >> General

Disassembly选项卡Number of opcode bytes写上非0,写1好像没啥用,只显示1位根本没用,16就差不多了

逆向中静态分析工具——IDA初学者笔记的更多相关文章

  1. 逆向中静态分析工具——IDA初学者笔记之字符串分析

    逆向中静态分析工具——IDA初学者笔记之字符串分析 程序中往往包含很多字符串资源,这些资源存在于PE文件的rdata段,使用IDA反编译后,可以查找到这些字符串, 逆向破解程序通常需要一个突破点,而这 ...

  2. android apk 逆向中常用工具一览

    关于apk 逆向中的一些工具的使用,看了不少文章,也使用过有很长一段时间了,今天对此做一总结: 几种文件之间的转换命令: 1. odex -> smali java -jar  baksmali ...

  3. 静态分析:IDA逆向代码段说明 text、idata、rdata、data

    静态分析:IDA逆向代码段说明 text.idata.rdata.data 通常IDA对一个PE文件逆向出来的代码中, 存在四个最基本的段text.idata.rdata.data, 四个段为PE文件 ...

  4. Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题, Core Foundation 类型指针内存泄漏

    Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题   今天使用Analyze 看了下项目,   解决办法,项目中使用了ARC,OC的指针类型我们完全不考虑release的问题 ...

  5. 秒味课堂Angular js笔记------Angular js中的工具方法

    Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...

  6. JUC学习笔记--JUC中并发工具类

    JUC中并发工具类 CountDownLatch CountDownLatch是我目前使用比较多的类,CountDownLatch初始化时会给定一个计数,然后每次调用countDown() 计数减1, ...

  7. 逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构

    逆向知识第一讲,IDA的熟悉使用,以及TEB,PEB结构 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打 ...

  8. 逆向知识第一讲,IDA的熟悉使用

    逆向知识第一讲,IDA的熟悉使用 一丶熟悉IDA,以及手工制作sig文件. IDA,静态分析工具,网上随便找一个即可下载. 首先,我们写一个可执行EXE,最简单的 使用IDA打开. 1.提示使用什么格 ...

  9. 代码静态分析工具--PMD,Findbugs,CheckStyle

    最近学习Mybatis的官方文档,看到了[项目文档]一节有很多内容没有见过,做个笔记,理解一下. PMD 扫描Java源代码,查找潜在的问题,如: 可能的bugs,如空的try/catch/final ...

随机推荐

  1. 【洛谷3796】【模板】AC自动机(加强版)

    点此看题面 大致题意: 一道模板题,给你\(N\)个模式串和一个文本串,要你求出在文本串中出现次数最多的若干个模式串并输出它们. \(AC\)自动机 都说了是\(AC\)自动机的模板题,做法肯定是\( ...

  2. java 学习集锦

    java学习系列 http://www.cnblogs.com/skywang12345/category/455711.html

  3. CentOS创建不需要输入密码的sudo用户

     linux 怎么让普通用户使用sudo权限不需要输入密码.    在网上看到很多资料,都只说到了在/etc/sudoers添加下列行即可:    username  ALL=(ALL)       ...

  4. C#事件与接口编程实例

    很多初学c#的朋友对于事件与接口感到迷惑不解,不明白它们之间的关系,下面我就用实例来简单的分析讲解一下. 事件,用event修饰符来代表一个事件,我们要创建一个C#事件必须按以下顺序来扫行: 1,创建 ...

  5. 十一、Shell 输入/输出重定向

    Shell 输入/输出重定向 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令 ...

  6. DeepFaceLab报错, Could not create cudnn handle 解决方法!

    DeepFaceLab 虽然没有可视化界面,但是在众多换脸软件中,是安装最方便,更新最快,整体性能最佳的一个.这个软件对于系统依赖很低,也就是不需要装各种各样的“插件”. 但是即便如此,由于版本的不断 ...

  7. PHP 批量操作 Excel

    自己封装了一个批量操作excel文件的方法,通过xls文件地址集合遍历,第三个参数传入一个匿名函数用于每个需求的不同进行的操作,实例中我想要得到列表中含有折字的行,封装成sql语句返回. xls文件超 ...

  8. unix gcc编译过程

    gcc编译过程 现代编译器常见的编译过程: 源文件-->预处理-->编译/优化-->汇编-->链接-->可执行文件 对于gcc而言: 第一步 预处理       命令: ...

  9. A1083 List Grades (25)(25 分)

    A1083 List Grades (25)(25 分) Given a list of N student records with name, ID and grade. You are supp ...

  10. [USACO]Bovine Genomics

    Description 给定两个字符串集合A,B,均包含N个字符串,长度均为M,求一个最短的区间[l,r],使得不存在字符串\(a\in A,b\in B,\)且\(a[l,r]=b[l,r]\) , ...