⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brandelf.py

📁 UPX 源代码
💻 PY
字号:
#! /usr/bin/env python## vim:set ts=4 sw=4 et: -*- coding: utf-8 -*-##  brandelf.py --##  This file is part of the UPX executable compressor.##  Copyright (C) 1996-2007 Markus Franz Xaver Johannes Oberhumer#  All Rights Reserved.##  UPX and the UCL library are free software; you can redistribute them#  and/or modify them under the terms of the GNU General Public License as#  published by the Free Software Foundation; either version 2 of#  the License, or (at your option) any later version.##  This program is distributed in the hope that it will be useful,#  but WITHOUT ANY WARRANTY; without even the implied warranty of#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the#  GNU General Public License for more details.##  You should have received a copy of the GNU General Public License#  along with this program; see the file COPYING.#  If not, write to the Free Software Foundation, Inc.,#  59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.##  Markus F.X.J. Oberhumer              Laszlo Molnar#  <mfx@users.sourceforge.net>          <ml1050@users.sourceforge.net>#import getopt, os, re, sysclass opts:    bfdname = None    dry_run = 0    elfosabi = None    verbose = 0# /***********************************************************************# //# ************************************************************************/def do_file(fn):    done = 1    if opts.dry_run:        fp = open(fn, "rb")    else:        fp = open(fn, "r+b")    fp.seek(0, 0)    e_ident = fp.read(16)    fp.seek(0, 0)    def write(s):        if not opts.dry_run:            fp.write(s)    def brand_arm(s):        if e_ident[4:7] != s:            raise Exception, "%s is not %s" % (fn, opts.bfdname)        write("\x61") # ELFOSABI_ARM    def brand_freebsd(s):        if e_ident[4:7] != s:            raise Exception, "%s is not %s" % (fn, opts.bfdname)        write("\x09")    def brand_linux(s):        if e_ident[4:7] != s:            raise Exception, "%s is not %s" % (fn, opts.bfdname)        ##write("\x00Linux\x00\x00\x00")        write("\x00" * 9)    def brand_openbsd(s):        if e_ident[4:7] != s:            raise Exception, "%s is not %s" % (fn, opts.bfdname)        write("\x0c")    if opts.bfdname[:3] == "elf":        if e_ident[:4] != "\x7f\x45\x4c\x46":            raise Exception, "%s is not %s" % (fn, "ELF")        fp.seek(7, 0)        if opts.bfdname == "elf32-bigarm" and opts.elfosabi == "arm":            brand_arm("\x01\x02\x01")        elif opts.bfdname == "elf32-i386" and opts.elfosabi == "freebsd":            brand_freebsd("\x01\x01\x01")        elif opts.bfdname == "elf32-i386" and opts.elfosabi == "linux":            brand_linux("\x01\x01\x01")        elif opts.bfdname == "elf32-i386" and opts.elfosabi == "openbsd":            brand_openbsd("\x01\x01\x01")        elif opts.bfdname == "elf32-littlearm" and opts.elfosabi == "arm":            brand_arm("\x01\x01\x01")        elif opts.bfdname == "elf32-littlemips" and opts.elfosabi == "linux":            brand_linux("\x01\x01\x01")        elif opts.bfdname == "elf32-powerpc" and opts.elfosabi == "linux":            brand_linux("\x01\x02\x01")        elif opts.bfdname == "elf64-x86_64" and opts.elfosabi == "linux":            brand_linux("\x02\x01\x01")        else:            done = 0    else:        done = 0    fp.close()    if not done:        raise Exception, ("error: invalid args", opts.__dict__)def main(argv):    shortopts, longopts = "qv", [        "bfdname=", "dry-run", "elfosabi=", "quiet", "verbose"    ]    xopts, args = getopt.gnu_getopt(argv[1:], shortopts, longopts)    for opt, optarg in xopts:        if 0: pass        elif opt in ["-q", "--quiet"]: opts.verbose = opts.verbose - 1        elif opt in ["-v", "--verbose"]: opts.verbose = opts.verbose + 1        elif opt in ["--dry-run"]: opts.dry_run = opts.dry_run + 1        elif opt in ["--bfdname"]: opts.bfdname = optarg.lower()        elif opt in ["--elfosabi"]: opts.elfosabi = optarg.lower()        else: assert 0, ("getopt problem:", opt, optarg, xopts, args)    # process arguments    if not args:        raise Exception, "error: no arguments given"    for arg in args:        do_file(arg)    return 0if __name__ == "__main__":    sys.exit(main(sys.argv))

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -