转载:http://m.blog.csdn.net/ilnature2008/article/details/54912854

IDA简介

IDA是业界一个功能十分强大的反汇编工具,是安全渗透人员进行逆向安全测试的必备工具,其强大的静态反汇编和逆向调试功能能够帮助安全测试人员发现代码级别的高危致命安全漏洞,当然其价格也不便宜,国内一个license从几千到一万多不等。现在结合windows试用版的IDA,简单介绍一下其基本使用。

IDA基本界面

现使用C语言编写一个简单的主程序,代码如下:

可以被IDA解析的文件包括.exe、.so、.o等格式,在IDA中直接打开上述格式的文件即可,以.o文件为例(使用gcc编译器编译:gcc -o test test.c),打开过程选择如下:

红色窗口为函数列表,一个文件被反编译后所有的函数列表都可以在此窗格中显示;

蓝色窗口为汇编代码区,双击每个函数,可以看到对应函数对应的汇编代码段;

黑色窗口为输出窗口,文件反汇编过程中的信息都可以在此窗口中看到。

在汇编代码区输入空格键,可以切换汇编代码为流程图浏览模式:

在流程图模式下,绿线代表判定条件成立,红线代表判定条件不成立:

几个有用的窗口:

(1)常量字符串窗口:

通过此窗口可以看到程序中所有的常量字符串列表,逆向分析一个程序从字符串入手是一个方向:

(2)字符串查找窗口:

也可以通过ALT+T快捷键打开,可以通过此窗口查找某个指定的字符串:

(3)地址跳转:

也可以通过输入G打开窗口:

使用该窗口可以跳转到指定地址的汇编代码段。

(4)Debugger options:

在该窗口中设置调试程序的一些选项,包括调试时进行的一些操作设置、日志记录设置等等:

(5)Switch debugger

通过此窗口可以设置调用的调试器:

设置好调用的调试器后需要设置远程调试器的信息:

把我们想要在调试器服务端(Windows或Linux)调试的可执行文件拷贝到调试器客户端,使用IDA打开,上述设置的参数文件路径应该在远程调试服务端上有效,同时不要忘记输入调试器服务端的主机名字和IP地址,远程调试只有当这些设置完成后才有效。

(6)脚本执行窗口:

打开该窗口后,可以选择执行脚本(.idc或者.py格式),在静态分析汇报代码时需要编写一些自动化的脚本,都是通过此窗口进行执行,执行的结果会显示在前面提到的输出窗口中:

(7)汇编代码注释编写:

鼠标点击某一行汇编代码,然后输入分号“;”,就可以打开输入编辑注释的窗口,在阅读汇编代码的过程中编写注释是一个很好的习惯。

(8)Xrefs graph to和Xrefs graph from

在函数名上点击右键:

通过Xrefs graph to可以看到该函数被其他函数调用的信息:

通过Xrefs graph from可以看到该函数调用的其他函数:

通过此功能可以了解函数调用流程图。

IDA汇编代码介绍

还是以下这个简单的C语言程序为例说明IDA反汇编代码:

该程序的基本功能就是申请一块动态内存空间,并存储一块字符串信息,然后打印,最后释放动态内存。

使用gcc编译器对该c程序进行编译,程序输入出结果如下:

以下是对.o文件进行反汇编的汇编代码段,图中介绍了核心代码的含义:

个人经验,开始阅读汇编代码时结合源代码会更好理解些,毕竟C语言代码的可读性更强,理解一些简单的汇编代码段后,阅读更大量的汇编代码就会得心应手些。

另外很多人都有疑问,如果有源代码的话,直接走读源代码不是更好吗,为什么还需要走读汇编代码?试想一下,一个千万行代码级别的产品,走读代码,该从哪开始?何况源代码中有很多宏定义,也有可能很多代码都不会被编译,从源代码看到的问题点可能实际根本不会存在安全风险,而反汇编则可以避免这种问题,我们可以根据进程信息去提取出有效的文件进行反编译,反编译的结果都是优化以后的代码,可以简单清晰的看出程序的数据流图,只不过反汇编要求安全测试人员对汇编代码要非常熟悉,万事熟能生巧,汇编代码多读多写,自然慢慢就会熟悉了。

后续会结合具体的应用信息介绍一下安全逆向分析与寻找安全漏洞的基本思路和方法。

逆向安全基础之IDA使用简介的更多相关文章

  1. J2EE基础之Web服务简介

    J2EE基础之Web服务简介 1.什么是Web服务? 在人们的日常生活中,经常会查询网页上某城市的天气信息,这些信息都是动态的.实时的,它是专业的气象站提供的一种服务.例如,在网上购物时,通常采用网上 ...

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

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

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

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

  4. Java基础-JVM调优策略简介

    Java基础-JVM调优策略简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.JVM结构分析 1>.JVM结构图 2>.JVM运行时数据区功能说明 JVM管理的内 ...

  5. Android逆向-Android基础逆向(5)

    本文作者:i春秋作家——HAI_ 0×00 前言 不知所以然,请看 Android逆向-Android基础逆向(1)Android逆向-Android基础逆向(2)Android逆向-Android基 ...

  6. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

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

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

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

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

  9. RE-1 逆向分析基础

    逆向分析基础 0x01-0x0C 本笔记使用汇编指令为x86架构下汇编指令,ARM架构汇编指令不做介绍 0x01. 关于RE 逆向工程(Reverse Engineering RE) 逆向分析方法: ...

随机推荐

  1. linux学习之centos(四):git的安装

    整个流程如下:(参考文章:linux安装git方法) [carsonzhu@localhost 桌面]$ wget https://github.com/git/git/archive/v2.8.3. ...

  2. pandas聚合aggregate

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/5/24 15:03 # @Author : zhang chao # @Fi ...

  3. BZOJ1834[ZJOI2010]网络扩容——最小费用最大流+最大流

    题目描述 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求:  1.在不扩容的情况下,1到N的最大流:  2.将1到N的最大流增加K所需的最小扩容费用 ...

  4. SpringBoot基础入门

    1.SpringBoot核心相关内容 1.1入口类 SpringBoot通常有一个入口类*Application,内部有一个main方法,是启动SpringBoot的入口.使用@SpringBootA ...

  5. 自学Zabbix4.1 zabbix监控web服务器访问性能

    自学Zabbix4.1 zabbix监控web服务器访问性能 使用Zabbix实现对web性能的监控,通过它可以了解web站点的可用性以及性能.最终将各项指标绘制到图形中,这样我们可以了解到一个站点的 ...

  6. [并查集+LCA USACO18OPEN ] Disruption

    https://www.luogu.org/problemnew/show/P4374 一看这道题就是一个妙题,然后题解什么树链剖分...珂朵莉树... 还不如并查集来的实在!我们知道并查集本来就是路 ...

  7. 构建MySQL-Cluster

    Mysql Cluster概述与部署MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而且对软硬件 ...

  8. NHibernate使用简单示例

    NHibernate使用小示例 1.新建Model类库项目. 使用代码生成器生成Model类. 此处以简单的UserInfo表作为示例. 注意字段前必须以 virtual 修饰. namespace ...

  9. 2018 省选 T1 一双木棋

    题目描述 菲菲和牛牛在一块n 行m 列的棋盘上下棋,菲菲执黑棋先手,牛牛执白棋后手. 棋局开始时,棋盘上没有任何棋子,两人轮流在格子上落子,直到填满棋盘时结束. 落子的规则是:一个格子可以落子当且仅当 ...

  10. [NOI2009]二叉查找树

    题目大意: 给定一棵严格的treap,父亲节点的优先级必然小于儿子节点的.权值按照二叉树的定义,左儿子小于父亲小于右儿子. 深度从1开始定义,每个点除优先级.数值之外,还有一个访问频度. 访问频度所产 ...