首页 > 编程知识 正文

混淆 linux elf,python 反编译

时间:2023-05-06 02:33:26 阅读:151307 作者:3164

在使用Linux系统时,经常会看到elf32-i386、ELF 64-bit LSB等文字。 那么ELF是什么呢?

几种常见的ELF文件

在Linux上,编译gcc后生成的可执行文件是ELF文件。

ELF是文件类型的一种,并不是指特定后缀的文件。 可执行和可链接格式(elf )文件格式在Linux上主要有三种类型的文件:

可执行文件(.out ) :包含可执行文件、代码和数据且可以直接执行的程序。 代码和数据具有固定地址(或与基地址的偏移),系统可以基于这些地址信息将程序加载到存储器中执行。

可重定位文件(o文件) )是一个包含基本代码和数据的relocatable文件,但代码和数据没有绝对地址,因此可以链接其他目标文件来创建可执行文件或目标文件

共享目标文件(.so ):Shared Object File (链接时链接器) (ld )、运行时动态链接器)、libc.so.l和LD-Linux.so.libc

ELF形式的结构大致如下。

ELF文件由ELF header、Program header table、Section和Section header table四部分组成。

实际上,一个文件不限于包含所有的内容,另外,它们的位置也不限于如图所示那样配置,只有ELF头的位置被固定,剩馀的各部分的位置、大小等信息由ELF头的各值决定。

使用读我工具

在Linux上,可以使用readELF命令工具显示有关elf格式文件的信息。 接下来,准备与动态链接相关的demo。

文件1(main.c ) :

include 'test.h '

入主(void ) )。

{

print_hello (;

返回0;

}

文件2(test.c ) :

include 'test.h '

voidprint_Hello(void ) ) ) ) ) ) ) ) ) ) )。

{

打印(hello world (n ) );

}

文件3(test.h ) :

ifndef __TEST_H

#define __TEST_H

#包含

voidprint_hello(void;

#endif

执行相关命令以生成相关文件。 分别是. out文件、 o文件和. so文件。 例如:

让我们使用readelf命令来查看这三种文件的信息。 readelf命令的格式如下。

自述文件(s )。

显示可执行文件的标头信息:

从可执行文件的标头信息来看,标头信息类型为共享库文件,而从可执行文件的角度来看,这是否不一致?

在调查了一些资料后,gcc编译在缺省情况下添加了--enable-default-pie选项。

position-independent-executable是Binutils、glibc和gcc的功能,可以创建介于共享库和普通可执行代码之间的代码。 像共享库这样可以重新分配地址的程序必须连接到Scrt1.o。 标准可执行文件需要固定的地址,只有加载到这个地址中,程序才能正确运行。 使用PIE,可以将程序加载到主存储器中的任意位置,就像共享库一样。 这需要编译程序并将其链接到ELF共享对象,而不考虑其位置。

引入PIE的原因是,使得程序能够加载到随机的地址,通常,如果内核在固定的地址执行,替代地可以在无关位置的情况下执行,则攻击者将难以使用系统内的可执行代码执行攻击像缓冲区溢出这样的攻击将无法实施。 而且这个安全提高的代价很小。

也就是说,pie是保护我们可以执行的程序的手段。 这里只是在做实验。 可以添加-no-pie参数,首先关闭pie。

如你所见,终于可以打字了。 ELF标头信息还包括诸如进入点地址、程序头开始和安全头开始之类的信息。

要显示可重定位文件的标头信息:

要显示共享目标文件的标头信息:

同样,readELF和其他参数的组合可以显示elf文件的其他信息。

使用objdump工具

objdump工具显示一个或多个目标文件的信息。 objdump命令格式:

objdump

可执行文件、可重定位文件和共享目标文件都属于目标文件,因此可以使用此命令查看某些信息。

要显示可重定位文件的反汇编信息:

要显示可执行文件的反汇编信息:

要显示共享目标文件的反汇编信息:

总结

以上就是这次的共享。 简要介绍了ELF文件的一些信息,同时介绍了分析ELF文件的两种工具。 ELF文件的内容很多、抽象,详细分析是一个很深的漏洞。 姑且简单了解一下,我现在没有这个能力,或者还没有这个需求,所以学习、分析这些基础的东西,之后在深入学习的时候再做别的分享。 感兴趣的同学可以和我一起学习

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。