IDA Pro学习笔记-1

0 概述

本文主要介绍常用的,简单的逆向和反汇编工具

1 分类工具

在遇到一个新文件时,我们需要知道,这是一个什么类型的文件;记得,看后缀名来判断是不准确的,下面的几个工具,用来帮助你检验文件类型

  1. file
    Linux下面的命令行工具,可以利用后缀名,文件头的特征码,文件开头的特殊命令行来判断类型,能识别绝大多数的文件类型

  2. PE Tools
    一组用于分析windows系统中正在运行的进程和可执行文件的工具。能捕获进程,并将内存映像转储,然后用PE
    sniffer来分析可执行文件是由何种编译器构建的

  3. PEiD
    windows工具,用于识别构建EXE文件所有的编译器,并确定混淆代码的工具类型

2 摘要工具

在分析到类型后,我们就需要分析文件内的详细信息,下面这些工具就该派上用场了

  1. nm
    显示出目标文件中的所有符号;我们知道,obj文件里面都有很多符号段,用于存储符号信息,nm就可以将这些信息给打印出来,便于分析

  2. ldd
    用于解析静态链接或者动态链接的库信息

  3. objdump
    大而全的工具,用于显示目标文件的所有信息,比如节头部,专用头部,调试信息,符号信息,反汇编代码等
    还有一个readelf工具,也有同样的功能;
    二者的区别是:objdump依赖于libbfd,readelf不依赖libbfd

  4. otool
    mac OS X底下的objdump工具

  5. dumpbin
    VS套件里面的一个工具,功能类似objdump和ldd

  6. C++filt
    C++会将重载函数进行重命名(name-mangling),从而保证符号唯一性,但这样为我们理解反编译函数名称造成了困难,filt就是复原原始函数名用的
    ,比如nm a.out | grep demo | c++filt就可以复原a.out里面所有的demo函数名

3 深度监测工具

  1. strings
    用于提取文件中的字符串内容,我们经常在windows里面可以看到提示性文字,通过这个工具,我们就知道文字的位置,然后反向找出调用文字的程序
    代码,最后修改代码即可
    但是记住,不要用文字信息来推断程序功能

  2. 反汇编器
    X86架构下的ndisasm和diStorm可以用来反汇编代码和数据

4 最后

这些工具很基础,都是linux下的常用工具,应该掌握