查看Linux上的二进制文件

以下是八个Linux命令,用于查找二进制文件并在运行时查看有关可执行文件的详细信息。

分析/检查/检查/查找/研究/放大镜
思想库

Linux系统上的任何非文本文件都被认为是二进制文件——从系统命令和库到图像文件和已编译程序。但是这些文件是二进制的并不意味着你不能查看它们。实际上,您可以使用相当多的命令从二进制文件中提取数据或显示其内容。在这篇文章中,我们将探讨其中一些。

文件

从二进制文件中提取信息的最简单的命令之一是文件按类型标识文件的命令。它以几种方式执行此操作 - 通过评估内容,寻找“幻数”(文件类型标识符)和检查语言。虽然我们人类通常通过其文件扩展名来判断文件文件指挥部很大程度上忽略了这一点。注意它是如何响应下面所示的命令的。

$ file camper.png camper.jpgJPEG.图像数据,JFIF标准1.01,分辨率(DPI),
密度72x72,段长16,Exif标准:[TIFF图像数据,
小端,direntries=11,制造商=三星,型号=SM-G935V,
取向=左上角,xresolution = 164, yresolution = 172,
resoltionunit =2, software=GIMP 2.8.18, datetime=2018:04:30 07:56:54,
GPS数据],Progressive,Precision 8,3465x2717,组件3

文件命令轻松确定“camper.png”实际上是一个jpg文件,但在这种情况下,它告诉我们更多。这包括图像分辨率(3465x2717),拍摄照片的日期和时间,以及用于拍摄照片的图像和手机的细节。并非所有JPG文件都包含所有这些数据,但文件会告诉你什么是可用的。

询问系统二进制文件,输出看起来非常不同。

$文件/ bin / date / bin /日期:el64位LSB饼可执行,X86-64,版本1(SYSV),
解释器/lib64/ld-linux-x86-64.so.2,
BuildID [SHA1] = 9CE744916618C6EEF6F28FF70A3758675C307FB2,用于GNU / Linux
3.2.0,剥夺

在这种情况下,我们看到了日期命令并非令人惊讶的是,一个ELF(可扩展链接格式)文件以及其他一些细节。

ldd

ldd命令列出可执行文件使用的共享库。这日期命令只使用少数几个。

$ ldd / bin / date linux-vdso.so.1(0x00007fff21162000)libc.so.6 => /llib64/libc.so.6(0x00007f2572f45000)/lib64/ld-linux-x86-64.so.2(0x00007f2573141000)

ltrace

ltrace跟踪可执行文件的库调用。

$ ltrace pwd getenv(“posixly_correct”)= nil strrchr(“pwd”,'/')= nil setlocale(lc_all,“)=”en_us.utf-8“bindtextdomain(”coreutils“,”/ usr / share /locale“)=”/ usr / share / locale“textdomain(”coreutils“)=”coreutils“__cxa_atexit(0x5644cb982120,0,0x5644cb985b20,0x6c69747565726f63)= 0 getopt_long(1,0x7fff17badb18,”lp“,0x5644cb985b40,nil)=  -1 getcwd(nil,0)=“”(“/ home / shs”/ home / shs)= 10免费(0x5644CBDF440)=  __fpending(0x7f18d802a520,0,0x5644cb982120,1)= 0 fileno(0x7f18d802a520)=1 __freading(0x7f18d802a520,0,0x5644cb982120,1)= 0

str

str命令可以跟踪系统调用,被认为是非常有用的诊断、调试和指导性实用程序。它的一个不寻常之处在于,它将输出发送到stderr(标准错误),并将跟踪到stdout(标准输出)的命令输出。所以,如果你想将跟踪信息保存到一个文件中,可以使用以下命令:

$ $ head -8 output.txt execve("/usr/bin/ls", ["ls", "camper_10.jpg", "camper.jpg", "camper.png"], 0x7ffd7ec34f18 /* 34 vars */) = 0 brk(NULL) = 0x5646e6bae000 arch_prctl(0x3001 /* ARCH_??*/, 0x7ffc3d514cf0) = -1 EINVAL(无效参数)access("/etc/ld.so. ")openat(AT_FDCWD, "/etc/ld.so. conf ", /etc/ld.so. conf ", /etc/ld.so. conf ", /etc/ld.so. conf ", /etc/ld.so. conf缓存",O_RDONLY|O_CLOEXEC) = 3 newfstatat(3, ", ", {st_mode=S_IFREG|0644, st_size=61880,…}, AT_EMPTY_PATH) = 0 mmap(NULL, 61880, PROT_READ, MAP_PRIVATE, 3,0) = 0x7fb2b67a9000 close(3) = 0

Hexdump.

Hexdump.以十六进制显示二进制文件的内容。加上- c选项,它还提供了一个字符转换,以便我们可以轻松地挑选出识别文件类型的“魔号” - JFIF和ELF在下面的示例中。

$ hexdump -c camper.jpg |HEAD-5 00000000 FF D8 FF E0 00 10 4A 46 49 46 00 01 01 01 00 48 | ......JFIF......h |00000010 00 48 00 00 FF E1 38 7E 45 78 69 66 00 00 49 49 49 49 | .h .... 8〜exif..ii |00000020 2A 00 08 00 00 00 0B 00 0102 00 02 00 08 00 00 00 08 00 00 00 | * ............... |00000030 92 00 00 00 00 10 01 02 00 09 00 00 00 00 9A 00 00 00 | ................ |00000040 12 01 03 00 01 00 00 00 01 00 00 00 00 00 01 00 00 00 00 00 01 01 05 00 | ................ |$ hexdump -c / bin / date |HEAD-5 00000000 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00el............|00000010 03 00 3e 00 01 00 00 00 40 42 00 00 00 00 00 00 |..>.....@B......| 00000020 40 00 00 00 00 00 00 00 70 9a 01 00 00 00 00 00 |@.......p.......| 00000030 00 00 00 00 40 00 38 00 0d 00 40 00 1f 00 1e 00 |....@.8...@.....| 00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 |........@.......|

这与使用od(八进制转储)命令,但是显示更容易阅读。

美元od hc camper.jpg |头6 0000000 d8ff e0ff 1000 464 4649 0100 0101 4800 377 330 377 340 \ 0 020 J F I F \ 0 0 H 0000020 4800 001 001 001 \ 0000 e1ff e38 7845 6669 0000 4949 \ 0 H \ \ 0 377 341 8 ~ E x我F \ \ 0 0000040 002 0008 0000 000 b 010 F 0002 0008 0000 * \ \ b \ 0 \ \ 0 v \ \ 0 017 001 002 \ \ b \ \ 0 \ 0

命令从二进制文件中取出“字符串”(可打印字符序列)。在下面的第一个示例中,请注意它是如何提取露营者图像上捕获的细节的。远超过前12行可能不会告诉您图像文件的更多有用信息,因为许多字节序列可能看起来是文本,尽管它们不是。

$ strings camper.jpg |Head -12 JFIF 8〜EXIF三星SM-G935V GIMP 2.8.18 2018:04:30 07:56:54 0220 0100 2018:04:2018:09 2018:04:29 13:23:09 0100 ASCII

也可以使用命令查看可执行文件。

$ strings helloworld |head -16 /llib64/ld-linux-x86-64.so 2 puts __libc_start_main libc.so.6 glibc_2.2.5 __gmon_start__ h =(@@ [] a \ a] a ^ a_ hello world; * 3 $“gcc:(GNU)11.0.0 20210210(Red Hat 11.0.0-0)GCC:(GNU)11.0.1 20210405(Red Hat 11.0.1-0)3G961运行GCC 11.0.0 20210210 Annobin GCC 11.0.0 20210210 GA *赠送给

读者

另一个查看ELF文件的有用命令是读者。但是,您需要选择一个选项来确定为您显示它的显示。在下面的例子中,我们正在研究标题(- h)。用——一个如果您想查看所有可用的数据。

readelf美元- h HelloWorld精灵头:魔法:7 f 45 4 c 46 02年01 01 00 00 00 00 00 00 00 00 00类:ELF64数据:2的补,小端字节序版:1(当前)OS / ABI: UNIX系统V ABI版本:0类型:EXEC(可执行文件)机:高级微设备x86 - 64版:0 x1入口点地址:0 x401040开始程序头文件:64 (bytes into file) Start of section headers: 23304 (bytes into file) Flags: 0x0 Size of this header: 64 (bytes) Size of program headers: 56 (bytes) Number of program headers: 13 (bytes) Size of section headers: 64 (bytes) Number of section headers: 31 section header string table index: 30

总结

Linux系统上有相当多的命令用于从二进制文件中提取信息。当您希望更深入地研究所运行的命令或希望了解更多的映像时,它们非常有用。

加入网络世界社区足球竞猜app软件脸谱网linkedin.对自己最关心的话题发表评论。
有关的:

版权所有©2021.足球竞彩网下载

了解IT领导者是如何建造网络统一的。参加CSO的网络安全和信托峰会 - 7 / 20-7 / 22