当你在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. 使用ABAP正则表达式解析HTML标签

    需求就是我用ABAP的某个函数从数据库读取一个字符串出来,该字符串的内容是一个网页. 网页的form里包含了很多隐藏的input field.我的任务是解析出name为svyValueGuid的inp ...

  2. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 忘记mysql密码

    [root@mysql-db03 ~]# mysql -uroot -poldboy123Warning: Using a password on the command line interface ...

  3. navicat 链接数据库查看的工具 可以同时查看各种数据库 MySql SqlServer

    navicat 链接数据库查看的工具 Navicat_Premium_10.0.11.0_XiaZaiBa

  4. docker 应用数据的管理

    容器数据存储的三种方式 docker volume docker管理素质及文件系统的一部分,保存数据最佳方式 bind mounts   将宿主机的文件映射到容器里 tmpfs   存储在宿主机的内存 ...

  5. Java中wait()方法为什么要放在同步块中?(lost wake-up 问题)

    问题起源 事情得从一个多线程编程里面臭名昭著的问题"Lost wake-up problem"说起. 这个问题并不是说只在Java语言中会出现,而是会在所有的多线程环境下出现. 假 ...

  6. DI:Defect Index(缺陷率)

    DI:Defect Index(缺陷率) 定义:DI值是衡量软件质量的高低的指标之一. 公式:DI= 致命级别的问题个数*10+严重级别的问题个数*3+一般级别的问题个数*1+提示级别的问题个数*0. ...

  7. SQL Server 删除表的默认值约束

    首先查出字段的默认值约束名称,然后根据默认值约束名称删除默认值约束 ) select @constraintName = b.name from syscolumns a,sysobjects b w ...

  8. 5.1 qbxt 一测 T1

    禁咒检验 (3MB / 2s)[问题描述] 在古老的世界里,有一个神奇的职业叫做魔法师. 魔法师的特点是会魔法,施放魔法需要念咒语. 在古老的世界里,有一个神奇的职业叫做码农.码农的工作是帮助魔法师记 ...

  9. poj3537 Crosses ans Crosses

    题目描述 题解: 一道非常简单的$SG$函数应用. 对于一个长度求它的$SG$函数,然后判断是否为$0$即可. 代码: #include<cstdio> #include<cstri ...

  10. 【JDBC-MVC模式】开发实例

    JDBC - 开发实例-MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server< ...