Linux CTF 逆向入门

1.ELF格式

我们先来看看 ELF 文件头,如果想详细了解,可以查看ELF的man page文档

Linux CTF 逆向入门关于ELF更详细的说明:e_shoff:节头表的文件偏移量(字节)。如果文件没有节头表,则此成员值为零。sh_offset:表示了该section(节)离开文件头部位置的距离

Linux CTF 逆向入门

2.可执行头部(Executable Header)

ELF文件的第一部分是可执行文件头部(Executable Header),其中包含有关ELF文件类型的信息。ELF文件在各种平台下都通用,ELF文件有32位版本和64位版本,其文件头内容是一样的,只不过有些成员的大小不一样。它的文件图也有两种版本:分别叫“Elf32_Ehdr”和“Elf64_Ehdr”。这里以32位版本为例:

Linux CTF 逆向入门使用readelf对ELF文件格式进行分析

Linux CTF 逆向入门

我们可以使用以下计算方法来计算整个二进制文件的大小:

size = e_shoff + (e_shnum * e_shentsize)size = Start of section headers + (Number of section headers * Size of section headers)size = 137000 + (29*64) = 138856计算结果验证:

Linux CTF 逆向入门

3、程序头部(Program Headers)

程序头部是描述文件中的各种segments(段),用来告诉系统如何创建进程映像的。

Linux CTF 逆向入门

4、节表头部(Section Headers)

节表头部(Section Headers)包含了描述文件节区的信息,比如大小、偏移等,但这些对二进制文件的执行流程来说并不重要。

  • sections 或者 segments:segments是从运行的角度来描述elf文件,sections是从链接的角度来描述elf文件,也就是说,在链接阶段,我们可以忽略program header table来处理此文件,在运行阶段可以忽略section header table来处理此程序(所以很多加固手段删除了section header table)。从图中我们也可以看出, segments与sections是包含的关系,一个segment包含若干个section。

  • Linux CTF 逆向入门Linux CTF 逆向入门

    5、表(Section)

    5.1 .bss Section

    保存未初始化的数据,比如那些未初始化的全局变量。

    5.2 .data Section

    保存已初始化的数据。

    5.3 .rodata Section

    保存程序中的只读数据。

    5.4 .text Section

    本节包含程序的实际代码,逻辑流程。使用readelf查看ELF文件表结构

  • Linux CTF 逆向入门Linux CTF 逆向入门

    6、完成简单的CTF挑战