有没有办法检测 ELF 二进制文件是否损坏/篡改?

发布于 2024-10-11 18:02:36 字数 155 浏览 3 评论 0原文

如何以编程方式检测 ELF 二进制文件是否被篡改或损坏?

例如,如果我删除 ELF 二进制文件(或库共享对象)的后半部分并粘贴随机文本,这将损坏它并且之后将无法工作。我想检测 Unix ELF 32 二进制文件或 UNIX 共享 C 库对象是否受到此影响。

谢谢。

How do I programatically detect whether an ELF binary is tampered or broken?

For example, If I delete second half of an ELF binary (or a library shared object) and paste random text, this will corrupt it and it will not work after. I want to detect whether an Unix ELF 32 binary or UNIX shared C library object is subjected to this.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

じее 2024-10-18 18:02:36

我不确定你在想什么,但是验证 ELF 二进制文件的“正确方法”是使用 SHA-1、MD5 等哈希值。

当你创建 ELF 文件时,你还创建了“签名”文件”使用此 HASH 算法,即 MD5 并验证结果。

例如,在 Solaris 上,您可以使用命令创建 MD5、SHA1、SHA256 摘要。

# digest -a [algorithm] [/path/to/file] {-v}

因此,要验证“/bin/sh”以防止修改,您应该

# digest -v -a md5 /bin/sh
md5 (/bin/sh) = f4ad35f5246f817d68f4895463d79b09

# digest -v -a sha1 /bin/sh
sha1 (/bin/sh) = aa3843a19f2225458d7e3e765f44e229a09c0ad0

# digest -v -a sha256 /bin/sh
sha256 (/bin/sh) = a5e1a0062bb6600f06e029ce58f500169e966400b173b7fba504d5cd4635f291

在此处提供更多西班牙语示例 MD5 在 Solaris 中的位置以及如何使用它

如果散列不是解决方案,您可以使用(在Solaris上)命令来验证ELF为
elfdumpldd

您可以将 ldd-iv 一起使用来验证共享库初始化

itily@openzooey:~/hello.world$ ldd -iv hello

   find object=libc.so.1; required by hello
        libc.so.1 =>     /lib/libc.so.1
   find version=libc.so.1
        libc.so.1 (SYSVABI_1.3) =>       /lib/libc.so.1
        libc.so.1 (SUNWprivate_1.1) =>   /lib/libc.so.1

   object=/lib/libc.so.1; filter for /usr/lib/ld.so.1

   object=/lib/libc.so.1; filter for libm.so.2

   find object=libm.so.2; required by /lib/libc.so.1
        libm.so.2 =>     /lib/libm.so.2

   find object=libc.so.1; required by /lib/libm.so.2
   find version=libc.so.1
        libc.so.1 (SUNW_1.1) =>  /lib/libc.so.1
        libc.so.1 (SUNWprivate_1.1) =>   /lib/libc.so.1

   init object=/lib/libc.so.1

要生成以下校验和ELF 你可以使用选项-k

itily@openzooey:~/hello.world$ elfdump -k hello

elf checksum: 0x8922

但是,如果你没有可信的ELF来比较,我认为这有点困难。

我希望这就是你正在寻找的,

Urko,

I'm not sure what are you thinking about, but the "correct way" to validate a ELF binary is to use a HASH like SHA-1, MD5, etc.

When you create the ELF file, then you also create the "signature file" using this HASH algorithm, i.e. MD5 and validate the result.

For example on Solaris you can create a MD5, SHA1, SHA256 digest using the command

# digest -a [algorithm] [/path/to/file] {-v}

So, to validate the "/bin/sh" to prevent modifcations, you should make

# digest -v -a md5 /bin/sh
md5 (/bin/sh) = f4ad35f5246f817d68f4895463d79b09

# digest -v -a sha1 /bin/sh
sha1 (/bin/sh) = aa3843a19f2225458d7e3e765f44e229a09c0ad0

# digest -v -a sha256 /bin/sh
sha256 (/bin/sh) = a5e1a0062bb6600f06e029ce58f500169e966400b173b7fba504d5cd4635f291

Here you have more examples in spanish Where is MD5 in Solaris and HowTo Use it

If hashing is not the solution, you can use (on Solaris) commands to verify the ELF as
elfdump and ldd

You can use the ldd with -iv to verify the shared libraries initialization

itily@openzooey:~/hello.world$ ldd -iv hello

   find object=libc.so.1; required by hello
        libc.so.1 =>     /lib/libc.so.1
   find version=libc.so.1
        libc.so.1 (SYSVABI_1.3) =>       /lib/libc.so.1
        libc.so.1 (SUNWprivate_1.1) =>   /lib/libc.so.1

   object=/lib/libc.so.1; filter for /usr/lib/ld.so.1

   object=/lib/libc.so.1; filter for libm.so.2

   find object=libm.so.2; required by /lib/libc.so.1
        libm.so.2 =>     /lib/libm.so.2

   find object=libc.so.1; required by /lib/libm.so.2
   find version=libc.so.1
        libc.so.1 (SUNW_1.1) =>  /lib/libc.so.1
        libc.so.1 (SUNWprivate_1.1) =>   /lib/libc.so.1

   init object=/lib/libc.so.1

To generate a checksum of ELF you can use the option -k

itily@openzooey:~/hello.world$ elfdump -k hello

elf checksum: 0x8922

But, if you don't have a trusted ELF to compare, it's a bit dificult, I think.

I hope this is what you are looking for,

Urko,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文