IDA使用初探-1.启动IDA

在传统的软件开发模型中,通过编译器、汇编器和链接器中的一个或几个创建可执行程序。为了回溯编程过程(对程序进行逆向工程),使用各种工具撤销汇编和编译过程,这些工具就叫做反汇编器和反编译器。反汇编器撤销汇编过程,可以得到汇编语言形式的输出结果;反编译器则以汇编语言甚至是机器语言作为输入,将高级语言结果输出。

但是反编译有几点困难至今还没有完美解决:编译过程造成损失;编译属于多对多操作;反编译非常依赖语言和库。

反汇编算法:线性扫描(linear sweep)和递归下降(recursive descent)两种主要的反汇编算法。

线性扫描:反汇编从第一个代码段的第一个字节开始,以线性模式扫描整个代码段,逐条反汇编每条指令,直到遍历全部字节。此方法对于长度固定的指令集(MIPS)反汇编会更加容易,因为可以方便的的定位到随后的指令。缺点就是无法正确的将嵌在代码中的数据分离出。

递归下降:根据一条指令是否被另一条指令引用来决定是否对其进行反汇编。

交互式反汇编器专业版,常常称其为IDA Pro,属于递归下降反汇编器。上周看书有一些心得,在这里一篇篇分享一下。

1.为了准备逆向用的实例,先用VC生成一个release版的Hello World。

1 #include <windows.h>
2 INT WINAPI WinMain(HINSTANCE hInstance,
3                    HINSTANCE hPrevInstance,
4                    LPSTR lpCmdLine,
5                    int nShowCmd)
6 {
7     MessageBox(NULL, "IDA Pro", "IDADemo", MB_OK);
8     ExitProcess(0);
9 } 

2.打开IDA 6.8,为进入IDA界面提供三种选项,分别是New(新建),Go(运行),Previous(上一个)。

3.对于没有进行过逆向分析的,点选New,新建一个工程,进入IDA界面。

4.选择File菜单下的Open,打开想要逆向的可执行文件,会显示一个Load a new file的界面。

这里可以选择

(1).程序的类型;

(2).处理器的类型;

(3).加载的段地址和偏移量;

(4).是否允许分析;

(5.)一些加载选项;

(6).内核和处理器的一些选项;

(7).windows系统dll所在的目录。

默认选择PE文件就可以,对于一些网络数据包或者其他格式的文件,可以使用二进制加载,自己进行解析。

5.加载完毕之后就进入逆向工作界面了。

6.初始是图形视图,有一个Graph overview窗口,可以在里面用鼠标拖动定位到程序的某个位置。也可以在IDA View-A中点右键选择Text view改成文字视图,这样能看到段和偏移量,快捷切换为空格键。

7.整个界面内容很丰富,但是一开始使用不到这么多功能,把不用的子窗口关闭。

工作区有多个子窗口,IDA View-A是反汇编窗口,HexView-A是十六进制格式显示的窗口,Exports是导出表(这个程序中能让外面调用的函数),Imports是导入表(程序中调用到的外面的函数),Functions是函数表(这个程序中的函数),Structures是结构,Enums是枚举。

8.IDA很智能,鼠标移到某些标识符上会自动有适当的提示,双击还能自动跳到相应的位置。把一个函数逆向的方法很简单,只要按F5键就会出来逆向出的C语言程序了。

9.退出IDA时,会进行文件保存确认,如果需要继续进行分析,将IDA中间数据库打包,下次继续打开就可以进行分析;如果不需要继续分析,选择不要打包,不要存储数据库。

IDA打开应用程序时,会为其创建一个数据库,后缀为IDB。IDB由4个文件组成,后缀为id0的二叉树形式的数据库,后缀为id1的程序字节标识,后缀为nam的Named窗口的索引信息,后缀为til的给定数据库的本地类型定义的相关信息。

一旦IDA为某个可执行程序创建数据库,它本身就不再需要访问这个可执行文件,除非使用IDA的Debug功能。

时间: 2024-12-29 01:56:17

IDA使用初探-1.启动IDA的相关文章

Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为了安全或者效率问题,会把一些重要的功能放到native层,那么这样一来,我们前篇说到的Eclipse调试smali源码就显得很无力了,因为核心的都在native层,Android中一般native层使用的是so库文件,所以我们这篇就来介绍如何调试so文件的内容,从而让我们破解成功率达到更高的一层.

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

《IDA Pro 权威指南》学习

在学习0day时,发现ida的知识没有跟上,所以此处进行相关IDA的基础学习. X86汇编语法: AT&T:%前缀,&文字常量前缀 Intel语法:源操作数位于右边,目的操作数位于左边.使用Interl语法. 反汇编: 线性扫描反汇编:GUN,WinDbg,OBJdump 递归下降: 最典型 IDA Pro 1.顺序流指令 2.条件分支指令 3.无条件分支指令 4.函数调用指令 5.返回指令 二 逆向与反汇编工具 摘要工具: nm:声明的函数与全局变量名称 ldd:所需动态库 objdum

Android逆向之旅---应用的&quot;反调试&quot;方案解析(附加修改IDA调试端口和修改内核信息)

一.前言 在前一篇文章中详细介绍了Android现阶段可以采用的几种反调试方案策略,我们在破解逆向应用的时候,一般现在第一步都回去解决反调试,不然后续步骤无法进行,当然如果你是静态分析的话获取就没必要了.但是有时候必须要借助动态调试方可破解,就需要进行操作了.现阶段反调试策略主要包括以下几种方式: 第一.自己附加进程,先占坑,ptrace(PTRACE_TRACEME, 0, 0, 0)!第二.签名校验不可或缺的一个选择,本地校验和服务端校验双管齐下!第三.借助系统api判断应用调试状态和调试属

IDA插件栈字符串识别插件

该插件是一款可以自动识别栈上局部变量为字符串的插件,字符串形式如下,并自动的加上注释 如图:可以自动识别栈上的字符串 项目主页地址:  https://github.com/fireeye/flare-ida 该项目有4个插件  本文介绍 stack_strings插件 该插件的原文介绍: https://www.fireeye.com/blog/threat-research/2014/08/flare-ida-pro-script-series-automatic-recovery-of-c

安卓动态调试七种武器之孔雀翎 – Ida Pro

安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation 安卓动

安卓APP动态调试-IDA实用攻略

0x00 前言 随着智能手机的普及,移动APP已经贯穿到人们生活的各个领域.越来越多的人甚至已经对这些APP应用产生了依赖,包括手机QQ.游戏.导航地图.微博.微信.手机支付等等,尤其2015年春节期间各大厂商推出的抢红包活动,一时让移动支付应用变得异常火热. 然后移动安全问题接憧而至,主要分为移动断网络安全和客户端应用安全.目前移动APP软件保护方面还处于初级阶段,许多厂商对APP安全认识不够深入,产品未经过加密处理,使得逆向分析者能够通过逆向分析.动态调试等技术来破解APP,这样APP原本需

[转载]安卓动态调试七种武器之孔雀翎 - Ida

本文转载自: http://drops.wooyun.org/tips/6840 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation

IDA调试.init_array和JNI_OnLoad

我们知道so文件在被加载的时候会首先执行.init_array中的函数,然后再执行JNI_OnLoad()函数.JNI_Onload()函数因为有符号表所以非常容易找到,但是.init_array里的函数需要自己去找一下.首先打开view ->Open subviews->Segments.然后点击.init.array就可以看到.init_array中的函数了. 但一般当我们使用ida进行attach的时候,.init_array和JNI_Onload()早已经执行完毕了,根本来不急调试.这