当你在unix下拿到一个二进制文件但不知道它是什么的时候,可以通过以下方法得到一此提示

1、 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以:

  $ strings cr1 | more

  里面可能会有一些对于这个cr1的描述,这些信息都是编译之后在程序中留下的一些文本性的说明,所以可能会告诉你这个文件是什么.

  比如有输出:

  $ strings cr1 | more
  %s %s %s%s%s -> %s%s%s (%.*s)
  Version: 2.3
  Usage: dsniff [-cdmn] [-i interface] [-s snaplen] [-f services]
  [-t trigger[,...]] [-r|-w savefile] [expression]
  ...
  /usr/local/lib/dsniff.magic
  /usr/local/lib/dsniff.services
  ...

  那么我们就可以知道,其实 cr1就是dsniff命令.

  2、 如果这样的方法没有帮助你的话,那么你可以尝试:

  $ /usr/ccs/bin/nm -p cr1 | more

  比如说得到如下输出:

  cr1:
  [Index] Value Size Type Bind Other Shndx Name
  [180] |0 | 0| FILE | LOCL | 0 |ABS | decode_smtp.c
  [2198] |160348| 320| FUNC | GLOB | 0 | 9 | decode_sniffer

  这些都是生成这个二进制文件的obj文件的文件名称,这些名称会告诉你这个二进制文件的作用的.

  同样,如果希望查看二进制文件调用到的静态库文件都有哪些的话,可以使用nm -Du cr1来实现.

  3、 当然我们也可以通过使用dump命令来得到任何一个二进制文件的选定部分信息

  $ /usr/ccs/bin/dump -c ./cr1 | more

  dump命令的参数说明:

  -c Dump出字符串表

  -C Dump出C++符号表

  -D Dump出调试信息

  -f Dump出每个文件的头

  -h Dump出section的头

  -l Dump出行号信息

  -L Dump出动态与静态链接库部分内容

  -o Dump出每个程序的可执行头

  -r Dump出重定位信息

  -s 用十六进制信息Dump出section的内容

  -t Dump符号表.

  4、 可以使用file命令得到二进制文件的信息

  $ file cr1

  5、 如果还是不清楚的话,那么我们可以使用ldd命令

  $ ldd cr1

  比如说输出为:
  ...
  libsocket.so.1 => /usr/lib/libsocket.so.1
  librpcsvc.so.1 => /usr/lib/librpcsvc.so.1
  ...

  那么我们就可以知道这个程序与网络库相关,我们就可以知道它的大概功能了.

  我们也可以能过adb命令来得到一个二进制文件的执行过程.

  比如说:
  $ adb cr1
  :r
  Using device /dev/hme0 (promiscuous mode)
  192.168.2.119 -> web TCP D=22 S=1111 Ack=2013255208
  Seq=1407308568 Len=0 Win=17520
  web -> 192.168.2.119 TCP D=1111 S=22 Push Ack=1407308568

  我们知道这个程序是一个sniffer.

  6、 如果你确定要运行这个程序的话,你可以先通过:

$ truss -f -o cr.out ./cr1
listening on hme0
^C
$

  truss命令可以帮你打开系统的信号与调用输出.你就可以知道这个程序到底干了什么.

  有了上面这些工具的话,我们就可以大概了解到一个未知的二进制程序到底是干什么的.

  最后提示大家,运行不了解的二进制程序有严重的安全问题,请大家小心.

转: 关于Linux常用的二进制文件分析方法的更多相关文章

  1. Linux内核源码分析方法_转

    Linux内核源码分析方法 转自:http://www.cnblogs.com/fanzhidongyzby/archive/2013/03/20/2970624.html 一.内核源码之我见 Lin ...

  2. Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

  3. 【转】Linux内核源码分析方法

    一.内核源码之我见 Linux内核代码的庞大令不少人“望而生畏”,也正因为如此,使得人们对Linux的了解仅处于泛泛的层次.如果想透析Linux,深入操作系统的本质,阅读内核源码是最有效的途径.我们都 ...

  4. linux常用的日志分析脚本

    linux实用的日志分析脚本 日志分析 随意的tail一个access_log文件,下面是一条经典的访问记录 /Dec/::: +] “GET /query/trendxml/district/tod ...

  5. 3.linux常用软件的安装方法

    linux 上的软件不像windows上直接运行安装那么容易,在linux上有很多不同的安装包,大概常见的就有deb.tar.gz.tar.bz(tar.bz2).rpm等类型文件 1.deb文件安装 ...

  6. mysq常用l性能分析方法

    orzdba查看读写./orzdba.pl --mysql -S /data/mysql30001/mysql.sock 语句查看读写命令数量,以及数据库TPS,传输的大小 查看processlist ...

  7. Linux常用命令及使用方法

    一.Linux命令格式 command [-option] [parameter1] ..... 即:命令名 [选项] [参数] 选项:控制命令 参数:可有0个,1个或多个 二.常用命令及用法 1.与 ...

  8. Linux 常用命令及使用方法

    1.  type   :查询命令 是否属于shell解释器 2.  help  : 帮助命令3.  man : 为所有用户提供在线帮助4.  ls  : 列表显示目录内的文件及目录 -l    以长格 ...

  9. Linux常用的日志分析命令与工具

    >>基础命令 操作 命令 说明 查看文件的内容 cat -n access.log -n显示行号 分页显示文件 more access.log Enter下一行,空格下一页,F下一屏,B上 ...

随机推荐

  1. EEPROM的存储大小

    学习单片机时,常见的EEPROM如24C02的大小为2Kbit(有的也称2KB).这里的2KB到底能存储多少数据呢? 2KB中,B表示单位bit,K表示1024. 单片机编程中常用的数据类型为unsi ...

  2. 在Vue中遇到的各种坑 及性能提升

    Vue: (1)    没有再模板里引用data数据,会不会引起update.beforeUpdate生命周期函数的执行? 不会 (2)组件改成异步 (3)v-once (4)如果不用template ...

  3. Ioc 之 Unity的AOP功能

    前面我们介绍了Unity的依赖注入功能,现在来介绍下Unity的AOP功能.AOP是面向切面编程,它能够使我们在不改变现有代码结构的情况下额外的为其添加一些功能. 我们还是使用配置文件来对类型进行注入 ...

  4. DedeCMS文章标题长度最全修改方法

    有时候DedeCMS首页或者其他页面不能全部展示文章标题,造成读者阅读体验差.一般来说标题精简.概括性强.有本文关键词就是一个好标题.写软文不比写“作文”,也不是论坛的标题党,软文是用来做排名的,主要 ...

  5. java文件上传,自动判断文件类型

    public enum FileType { /** * JEPG. */ JPEG("FFD8FF"), /** * PNG. */ PNG("89504E47&quo ...

  6. IOS学习笔记3—Objective C—简单的内存管理

    今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制 ...

  7. vector性能调优之resize与reserve

    vector的resize与reserve reserve()函数为当前vector预留至少共容纳size个元素的空间.(译注:实际空间可能大于size) resize() 函数( void resi ...

  8. dubbo负载均衡策略和集群容错策略

    dubbo负载均衡策略 random loadbalance 默认情况下,dubbo是random load balance随机调用实现负载均衡,可以对provider不同实例设置不同的权重,会按照权 ...

  9. Mybatis 头信息

    在使用IDEA开发中,如果不使用Mybatis-Generator时,那么就需要手写Mapper文件,而在创建xml文件时无法直接创建带有mybatis头信息的mapper文件,这里来记录一下Myba ...

  10. Shell流程语句

    1. shell流程控制 流程控制是改变程序运行顺序的指令.linux shell有一套自己的流程控制语句,其中包括条件语句(if),循环语句(for,while),选择语句(case). 2. if ...