예제 #1
0
def _fake_elffile_extract(self, path):
    name = os.path.basename(path)
    if name in [
            'fake_elf-2.26', 'fake_elf-bad-ldd', 'fake_elf-with-core-libs',
            'fake_elf-bad-patchelf'
    ]:
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.2.5')
        glibc.add_version('GLIBC_2.26')
        return '/lib64/ld-linux-x86-64.so.2', '', {glibc.name: glibc}
    elif name == 'fake_elf-2.23':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.2.5')
        glibc.add_version('GLIBC_2.23')
        return '/lib64/ld-linux-x86-64.so.2', '', {glibc.name: glibc}
    elif name == 'fake_elf-1.1':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_1.1')
        glibc.add_version('GLIBC_0.1')
        return '/lib64/ld-linux-x86-64.so.2', '', {glibc.name: glibc}
    elif name == 'fake_elf-static':
        return '', '', {}
    elif name == 'fake_elf-shared-object':
        openssl = elf.NeededLibrary(name='libssl.so.1.0.0')
        openssl.add_version('OPENSSL_1.0.0')
        return '', 'libfake_elf.so.0', {openssl.name: openssl}
예제 #2
0
def _fake_elffile_extract(self, path):
    arch = ("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64")
    name = os.path.basename(path)
    if name in [
            "fake_elf-2.26",
            "fake_elf-bad-ldd",
            "fake_elf-with-core-libs",
            "fake_elf-bad-patchelf",
    ]:
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.2.5")
        glibc.add_version("GLIBC_2.26")
        return (arch, "/lib64/ld-linux-x86-64.so.2", "", {
            glibc.name: glibc
        }, False)
    elif name == "fake_elf-2.23":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.2.5")
        glibc.add_version("GLIBC_2.23")
        return (arch, "/lib64/ld-linux-x86-64.so.2", "", {
            glibc.name: glibc
        }, False)
    elif name == "fake_elf-1.1":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_1.1")
        glibc.add_version("GLIBC_0.1")
        return (arch, "/lib64/ld-linux-x86-64.so.2", "", {
            glibc.name: glibc
        }, False)
    elif name == "fake_elf-static":
        return arch, "", "", {}, False
    elif name == "fake_elf-shared-object":
        openssl = elf.NeededLibrary(name="libssl.so.1.0.0")
        openssl.add_version("OPENSSL_1.0.0")
        return arch, "", "libfake_elf.so.0", {openssl.name: openssl}, False
    elif name == "fake_elf-with-execstack":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.23")
        return (arch, "/lib64/ld-linux-x86-64.so.2", "", {
            glibc.name: glibc
        }, True)
    elif name == "fake_elf-with-bad-execstack":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.23")
        return (arch, "/lib64/ld-linux-x86-64.so.2", "", {
            glibc.name: glibc
        }, True)
    elif name == "libc.so.6":
        return arch, "", "libc.so.6", {}, False
    elif name == "libssl.so.1.0.0":
        return arch, "", "libssl.so.1.0.0", {}, False
    else:
        return arch, "", "", {}, False
예제 #3
0
def _fake_elffile_extract(self, path):
    arch = ('ELFCLASS64', 'ELFDATA2LSB', 'EM_X86_64')
    name = os.path.basename(path)
    if name in [
            'fake_elf-2.26', 'fake_elf-bad-ldd', 'fake_elf-with-core-libs',
            'fake_elf-bad-patchelf'
    ]:
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.2.5')
        glibc.add_version('GLIBC_2.26')
        return (arch, '/lib64/ld-linux-x86-64.so.2', '', {
            glibc.name: glibc
        }, False)
    elif name == 'fake_elf-2.23':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.2.5')
        glibc.add_version('GLIBC_2.23')
        return (arch, '/lib64/ld-linux-x86-64.so.2', '', {
            glibc.name: glibc
        }, False)
    elif name == 'fake_elf-1.1':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_1.1')
        glibc.add_version('GLIBC_0.1')
        return (arch, '/lib64/ld-linux-x86-64.so.2', '', {
            glibc.name: glibc
        }, False)
    elif name == 'fake_elf-static':
        return arch, '', '', {}, False
    elif name == 'fake_elf-shared-object':
        openssl = elf.NeededLibrary(name='libssl.so.1.0.0')
        openssl.add_version('OPENSSL_1.0.0')
        return arch, '', 'libfake_elf.so.0', {openssl.name: openssl}, False
    elif name == 'fake_elf-with-execstack':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.23')
        return (arch, '/lib64/ld-linux-x86-64.so.2', '', {
            glibc.name: glibc
        }, True)
    elif name == 'fake_elf-with-bad-execstack':
        glibc = elf.NeededLibrary(name='libc.so.6')
        glibc.add_version('GLIBC_2.23')
        return (arch, '/lib64/ld-linux-x86-64.so.2', '', {
            glibc.name: glibc
        }, True)
    elif name == 'libc.so.6':
        return arch, '', 'libc.so.6', {}, False
    elif name == 'libssl.so.1.0.0':
        return arch, '', 'libssl.so.1.0.0', {}, False
    else:
        return arch, '', '', {}, False
예제 #4
0
def _fake_elffile_extract_attributes(self):
    name = os.path.basename(self.path)

    self.arch = ("ELFCLASS64", "ELFDATA2LSB", "EM_X86_64")
    self.build_id = "build-id-{}".format(name)

    if name in [
            "fake_elf-2.26",
            "fake_elf-bad-ldd",
            "fake_elf-with-core-libs",
            "fake_elf-with-missing-libs",
            "fake_elf-bad-patchelf",
    ]:
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.2.5")
        glibc.add_version("GLIBC_2.26")

        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = {glibc.name: glibc}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "fake_elf-2.23":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.2.5")
        glibc.add_version("GLIBC_2.23")

        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = {glibc.name: glibc}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "fake_elf-1.1":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_1.1")
        glibc.add_version("GLIBC_0.1")

        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = {glibc.name: glibc}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "fake_elf-static":
        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = dict()
        self.execstack_set = False
        self.is_dynamic = False
        self.has_debug_info = False

    elif name == "fake_elf-shared-object":
        openssl = elf.NeededLibrary(name="libssl.so.1.0.0")
        openssl.add_version("OPENSSL_1.0.0")

        self.interp = ""
        self.soname = "libfake_elf.so.0"
        self.needed = {openssl.name: openssl}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "fake_elf-with-execstack":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.23")

        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = {glibc.name: glibc}
        self.execstack_set = True
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "fake_elf-with-bad-execstack":
        glibc = elf.NeededLibrary(name="libc.so.6")
        glibc.add_version("GLIBC_2.23")

        self.interp = "/lib64/ld-linux-x86-64.so.2"
        self.soname = ""
        self.needed = {glibc.name: glibc}
        self.execstack_set = True
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "libc.so.6":
        self.interp = ""
        self.soname = "libc.so.6"
        self.needed = {}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    elif name == "libssl.so.1.0.0":
        self.interp = ""
        self.soname = "libssl.so.1.0.0"
        self.needed = {}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False

    else:
        self.interp = ""
        self.soname = ""
        self.needed = {}
        self.execstack_set = False
        self.is_dynamic = True
        self.has_debug_info = False