遇到不熟悉的事情时,我进行了许多CTF活动。由于我对开发和逆向工程不太熟悉,所以我对此并不熟悉。

我有7个ELF二进制文件。我一直在使用readelf来更好地了解每块放置在何处。但是我仍然无法收集订单,除了第4部分包含标题,而第6部分包含节名称。 readelf和gdb。

作为参考,可以在0x0539.net-> Fangorn Forest-> Fragmented中找到特定示例,以供参考。我不想要答案。我正在寻找的是有人将我指向正确的方向。

评论

如何创建一个小的python脚本,将尝试其余部分的组合并检查能否将其解释为有效的ELF文件呢?某些组合可能会导致错误,其余组合可以手动检查。

#1 楼

这是标志:


FLAG {1ts_l1k3_4_m0r3_fun_puzz1e_m0m}


注释: > readelf -SW用于查看2个小的基准二进制文件:一个简单的“ hello world”风格的ELF二进制文件和cat实用程序。这为GCC如何以二进制形式组织信息提供了参考框架。
然后将片段的十六进制转储与这两个程序的十六进制转储进行了比较。
特别重要的区域是某些部分及其边界,例如.plt.text.rodata之间。包含字符串的部分提供了有用的参考点,某些部分包含具有重复模式的类似表格的结构,并且仅通过查看转储也可以识别目标代码。可以将六边形转储中的偏移与readelf -SW输出的信息进行交叉引用,以使转储中的位置与不同部分相匹配。
在确定了第一块和最后一块之后,将对其进行进一步分析以确定它们属于哪些部分包含。如您所指出的,frag_4包含ELF头,frag_6包含节头的字符串表。但是,这2个片段实际上不仅仅包含此信息。

frag_3包含过程链接表,而.text部分的开头
片段2、3、5和7包含对象代码

frag_5看起来好像包含了.text部分的结尾。
此时,顺序看起来像这样:4,1,{2,3,7-顺序不能是},5、6
2、3和7件是使用Capstone使用以下脚本拆卸的:


>

在查看了拆解后,做出了有根据的猜测:3,2,7
然后重建了文件: />

结果文件:


#!/usr/bin/python3

from capstone import *
import sys


md = Cs(CS_ARCH_X86, CS_MODE_64)

def disassemble(buf):
    for i in md.disasm(buf, 0x4004e0):
        print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))


def main():
    file_buf = []

    for arg in sys.argv:
        file_buf.append(arg)

    buf = []
    for file in file_buf[1:]:
        with open(file, 'rb') as f:
            buf = f.read()
            print(f.name + '\n')
            disassemble(buf)
            print('\n\n')

if __name__ == '__main__':
    main()



由于符号表和节头表是完整的,因此使用objdump -dj .text reassembled.elf将文件中代码的反汇编与cat的反汇编进行比较以检查一致性。尽管有一些区别,但事实无关紧要,因为即使程序出现段错误,该标志也可以恢复:

评论


我知道我出了问题,谢谢!

– t3nt0nbr1ck
19/12/30在1:52

欢迎您@ t3nt0nbr1ck

– julian♦
19/12/30在1:54

我不会发布该标志:)这有点作弊,如果他们想要该标志,他们应该自己做IMO。

– macro_controller
19/12/30在8:40

@ macr0controller我同意。

– t3nt0nbr1ck
1月2日17:08

#2 楼

研究标题中的标志实际含义可能会有所帮助。这将告诉您有用的信息,例如“事物”的位置以及所述“事物”的大小。另外,您将更好地了解ELF文件格式!

评论


因此,我尝试了这两种方法,但实际上却无处可寻。我能够将生成的文件仅排序为带有elf头的文件(720),然后编写了一个Shell脚本来尝试运行每个文件,但由于我不断拒绝访问而失败了。尝试文件,它确实确认几乎所有文件都被视为有效的可执行文件。当我尝试一个objdump时,我只是在每个文件上遇到错误,指出有些引用超出了文件大小。我有点迷路了。有什么建议吗?

– t3nt0nbr1ck
19/12/29在21:16