README
1 ooooo ooo ooooooooo. ooooooo ooooo
2 `888' `8' `888 `Y88. `8888 d8'
3 888 8 888 .d88' Y888..8P
4 888 8 888ooo88P' `8888'
5 888 8 888 .8PY888.
6 `88. .8' 888 d8' `888b
7 `YbodP' o888o o888o o88888o
8
9
10 The Ultimate Packer for eXecutables
11 Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
12 https://upx.github.io
13
14
15
16WELCOME
17=======
18
19Welcome to UPX !
20
21Please don't forget to read the file LICENSE - UPX is distributed
22under the GNU General Public License (GPL) with special exceptions
23allowing the distribution of all compressed executables, including
24commercial programs.
25
26
27INTRODUCTION
28============
29
30UPX is an advanced executable file compressor. UPX will typically
31reduce the file size of programs and DLLs by around 50%-70%, thus
32reducing disk space, network load times, download times and
33other distribution and storage costs.
34
35Programs and libraries compressed by UPX are completely self-contained
36and run exactly as before, with no runtime or memory penalty for most
37of the supported formats.
38
39UPX supports a number of different executable formats, including
40Windows 95/98/ME/NT/2000/XP/CE programs and DLLs, DOS programs,
41and Linux executables and kernels.
42
43UPX is free software distributed under the term of the GNU General
44Public License. Full source code is available.
45
46UPX may be distributed and used freely, even with commercial applications.
47See the UPX License Agreement for details.
48
49UPX is rated number one in the well known Archive Comparison Test. Visit
50http://compression.ca/ .
51
52UPX aims to be Commercial Quality Freeware.
53
54
55SHORT DOCUMENTATION
56===================
57
58'upx program.exe' will compress a program or DLL. For best compression
59results try 'upx --brute program.exe'.
60
61Please see the file UPX.DOC for the full documentation. The files
62NEWS and BUGS also contain various tidbits of information.
63
64
65DISCLAIMER
66==========
67
68UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.
69
70Having said that, we think that UPX is quite stable now. Indeed we
71have compressed lots of files without any problems. Also, the
72current version has undergone several months of beta testing -
73actually it's almost 8 years since our first public beta.
74
75This is the first production quality release, and we plan that future
76releases will be backward compatible with this version.
77
78Please report all problems or suggestions to the authors. Thanks.
79
80
81THE FUTURE
82==========
83
84 - AArch64 (64-bit ARM) for Linux and iOS.
85
86 - The Linux approach could probably get ported to a lot of other Unix
87 variants, at least for other i386 architectures it shouldn't be too
88 much work. If someone sends me a fresh hard disk and an official
89 FreeBSD/OpenBSD/NetBSD/Solaris/BeOS... CD I might take a look at it ;-)
90
91 - We will *NOT* add any sort of protection and/or encryption.
92 This only gives people a false feeling of security because
93 by definition all protectors/compressors can be broken.
94 And don't trust any advertisement of authors of other executable
95 compressors about this topic - just do a websearch on "unpackers"...
96
97 - Fix all remaining bugs - keep your reports coming ;-)
98
99 - See the file PROJECTS in the source code distribution if you want
100 to contribute.
101
102
103COPYRIGHT
104=========
105
106Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer
107Copyright (C) 1996-2020 Laszlo Molnar
108Copyright (C) 2000-2020 John F. Reiser
109
110This program may be used freely, and you are welcome to
111redistribute it under certain conditions.
112
113This program is distributed in the hope that it will be useful,
114but WITHOUT ANY WARRANTY; without even the implied warranty of
115MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
116UPX License Agreement for more details.
117
118You should have received a copy of the UPX License Agreement along
119with this program; see the file LICENSE. If not, visit the UPX home page.
120
121
122Share and enjoy,
123Markus & Laszlo & John
124
125
126 Markus F.X.J. Oberhumer Laszlo Molnar
127 <markus@oberhumer.com> <ezerotven+github@gmail.com>
128
129 John F. Reiser
130 <jreiser@BitWagon.com>
131
132
133[ The term UPX is a shorthand for the Ultimate Packer for eXecutables
134 and holds no connection with potential owners of registered trademarks
135 or other rights. ]
136
137[ Feel free to contact us if you have commercial compression requirements
138 or interesting job offers. ]
139
140
README.1ST
1 ooooo ooo ooooooooo. ooooooo ooooo
2 `888' `8' `888 `Y88. `8888 d8'
3 888 8 888 .d88' Y888..8P
4 888 8 888ooo88P' `8888'
5 888 8 888 .8PY888.
6 `88. .8' 888 d8' `888b
7 `YbodP' o888o o888o o88888o
8
9
10 The Ultimate Packer for eXecutables
11 Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar & John Reiser
12 https://upx.github.io
13
14
15MAJOR NEWS IN UPX 3
16===================
17
18The main news since UPX 2 are:
19
20 * new format: added support for linux elf/arm
21
22 * better compression using the LZMA algorithm (option '--lzma')
23
24 * better support for MacOS
25
README.SRC
1 The UPX Hacker's Guide
2 ======================
3
4
5Foreword
6--------
7
8 The precompiled UPX versions are linked against the NRV compression
9 library instead of the UCL library. Using the same compression algorithms,
10 NRV achieves a better compression ratio. NRV is not publicly
11 available, though, and probably never will be.
12
13 While you may be disappointed that you don't have access to the
14 latest state-of-the-art compression technology this is actually
15 a safe guard for all of us. The UPX source code release makes
16 it very easy for any evil-minded person to do all sort of bad
17 things. By not providing the very best compression ratio it is much
18 more difficult to create fake or otherwise disguised UPX versions (or
19 similar trojans), as any end user will notice when the compression
20 has gotten worse with a new "version" or "product".
21
22 Finally please be aware that you now have your hands on the source
23 code of the most sophisticated executable packer ever.
24 Let's join our forces to make it even better :-)
25
26 Share and enjoy,
27 Markus & Laszlo
28
29
30Introduction
31------------
32
33 Welcome to the UPX source code release!
34
35 UPX is not a toy for kids. Apart from basic knowledge about executables
36 and data compression you will need to be firm in C++, assembler,
37 Perl and Makefiles. Probably some other things as well.
38
39 If you can't manage to compile it then the sources are
40 probably not for you. Don't email us for help.
41
42 The authors use Linux for development. You might want to as well.
43
44
45Short overview
46--------------
47
48 The UPX source code consists of two mainly independent parts:
49
50 1) The src/stub directory contains the decompression stubs that
51 will get added to each compressed executable.
52 The stubs are mainly written in assembler and get "compiled"
53 into ordinary C header files.
54
55 2) The src directory contains the actual packer sources. The stubs
56 are #included by the individual executable format handlers.
57
58
59Prerequisites
60-------------
61
62 - first of all you need to build the UCL compression library
63 http://www.oberhumer.com/opensource/ucl/
64 Use "CC=gcc -std=gnu89" especially with gcc-6.3 and gcc-7.1.
65 To build for native aarch64 (64-bit ARM) the files config.guess
66 and config.sub must be updated according to the recipe at
67 https://www.gnu.org/software/gettext/manual/html_node/config_002eguess.html
68
69
70Tools needed to build/modify the UPX sources
71--------------------------------------------
72
73 - A C++ compiler: gcc >= 3.3 or clang.
74
75 - GNU make 3.81 or better
76
77 - zlib and zlib-devel [or zlib-dev] software packages for your
78 host environment
79
80 - LZMA SDK from https://github.com/upx/upx-lzma-sdk
81 When using git run 'git submodule update --init --recursive'.
82
83
84To compile the packer sources
85-----------------------------
86
87 Set the environment variable UPX_UCLDIR to point to your
88 UCL build directory, e.g.
89
90 set UPX_UCLDIR=c:\src\ucl-1.03 (DOS / Windows)
91 export UPX_UCLDIR=$HOME/local/src/ucl-1.03 (Unix)
92
93 Finally type
94
95 make
96
97
98If you want to modify the stub sources you'll also need
99-------------------------------------------------------
100
101 - Perl & Python
102
103 - upx-stubtools - a number of cross-assemblers and cross-compilers.
104 Precompiled binaries for i386-linux hosts are available from
105 https://github.com/upx/upx-stubtools/releases
106
107
108Misc. notes
109-----------
110
111 As the docs say: UPX is a portable, extendable and endian neutral
112 program, so if you want to add some new stuff, try not to break these
113 nice properties.
114
115 - Use the types LE16, LE32, BE16 and BE32 for fields in file headers.
116 - Use [sg]et_[bl]e(16|32) for getting/setting values in the data
117 stream.
118 - Use gcc extensions and other compiler specific stuff only through
119 macros.
120
121***
122
123Some conventions:
124
125 - follow our coding style
126 - indent level = 4
127 - expand all tabulators
128
129 - Use throwSomeException() functions instead of throw SomeException():
130 this makes the code shorter if used often.
131
132***
133
134Patches/Contributions
135
136 - Please send us bug fixes/contributions only using
137
138 diff -u oldfile newfile
139
140 or
141
142 diff -uNr olddirectory newdirectory
143
144
145# vim:set ts=4 sw=4 et:
146