Commit Graph

202 Commits

Author SHA1 Message Date
Markus F.X.J. Oberhumer
4a8efd2e2f src: rework optimizeReloc handling; cleanups 2023-02-21 15:19:24 +01:00
Markus F.X.J. Oberhumer
c5059231dc all: rename win32/arm back to wince/arm 2023-02-12 18:58:11 +01:00
Markus F.X.J. Oberhumer
f584c91386 all: canonicalize win32 and win64 file names 2023-02-10 09:49:29 +01:00
Markus F.X.J. Oberhumer
b8d9c2b755 all: assorted updates and cleanups 2023-02-05 17:20:32 +01:00
Markus F.X.J. Oberhumer
0653bb5a72 src: some xspan cleanups 2023-01-30 11:03:11 +01:00
Markus F.X.J. Oberhumer
a444a8a704 src: pefile: fix overly tricky canUnpack0 logic 2023-01-29 12:40:00 +01:00
Markus F.X.J. Oberhumer
3fa18c1799 src: clang-format pefile 2023-01-29 12:34:05 +01:00
Markus F.X.J. Oberhumer
19147963b9 src: pefile: try to work-around a scan-build warning 2023-01-29 12:21:15 +01:00
Markus F.X.J. Oberhumer
58343fc78d src: more outstanding util/xspan renaming; NFC 2023-01-18 10:11:29 +01:00
John Reiser
425b1b44bc Initialize output_capacity for loader
modified:   pefile.cpp
2023-01-09 09:20:43 -08:00
Markus F.X.J. Oberhumer
dd1d5a92d2 all: welcome 2023 2023-01-01 19:49:30 +01:00
Markus F.X.J. Oberhumer
9da4f7a6dc src: clang-format more files; cleanups; NFCI 2022-11-27 12:34:15 +01:00
Markus F.X.J. Oberhumer
d7508d8c09 src: pefile.cpp: replace "membuffer + x - y" with "membuffer + (x - y)"
This is needed because "membuffer + x" is now bounds-checked, and
the temporary addition would trigger an exception.
2022-11-10 00:40:41 +01:00
Markus F.X.J. Oberhumer
28f0bb4e11 src: fix pefile.cpp otls allocation not accounting for alignment. Closes #621. 2022-11-09 19:29:16 +01:00
Markus F.X.J. Oberhumer
ce21254ed2 all: misc cleanups 2022-11-06 08:35:00 +01:00
Markus F.X.J. Oberhumer
e0bf460993 src: rename membuffer "Uncompression" to "Decompression" 2022-10-28 10:34:31 +02:00
Markus F.X.J. Oberhumer
7dd2cdea1e src: deprecate util/bptr.h 2022-10-27 17:52:15 +02:00
Markus F.X.J. Oberhumer
c4437cb293 all: add support for a basic "make test" 2022-10-06 14:10:35 +02:00
Markus F.X.J. Oberhumer
c75d7a685d src: major cleanups, introduce new eXtended Span class
- initial minimally invasive eXtended Span implementation
- rename ptr_diff to ptr_diff_bytes
- move some files to util subdir
- lots of cleanups
- start using the new checked pointers - this needs some real-world testing
2022-09-16 13:26:13 +02:00
Markus F.X.J. Oberhumer
aa8cdca0a9 src: consistently use TESTING for internal development tests 2022-09-04 04:24:39 +02:00
Markus F.X.J. Oberhumer
6931a3aa70 src: enable -Wzero-as-null-pointer-constant when using clang 2022-09-04 04:24:39 +02:00
Markus F.X.J. Oberhumer
d001a63bce Welcome 2022. 2022-09-04 04:24:39 +02:00
John Reiser
dadbbbdc64 Avoid trouble: disallow empty name of export directory
https://github.com/upx/upx/issues/425
	modified:   pefile.cpp
2022-08-13 12:25:30 -07:00
John Reiser
bfd2153f2b Delete trailing space characters
https://github.com/upx/upx/pull/589
	modified:   pefile.cpp
2022-07-26 20:09:16 -07:00
S01den
077793fa5e Update pefile.cpp
I found a bug by participating to the Binary Golf Grand Prix 3 (https://tmpout.sh/bggp/3/) : upx text.exe segfaults when NumberOfSections in the IMAGE_FILE_HEADER is NULL, so 
if (memcmp(isection[0].name,"UPX",3) == 0) triggers a NULL pointer dereference causing a crash.
To fix it, just have to check if isection is NULL (which means NumberOfSections = 0) or not.
2022-07-27 01:54:01 +02:00
John Reiser
a646231630 aligned_sotls, per Laszlo
https://github.com/upx/upx/issues/556
	modified:   pefile.cpp
2022-02-07 08:39:13 -08:00
John Reiser
1050de5171 Native alignment for the "load config" table
https://github.com/upx/upx/issues/556
	modified:   pefile.cpp
2022-01-15 06:45:47 -08:00
Kornel Pal
620955a724 PE: Fix has_oxrelocs (TLS always has oxrelocs) 2021-12-31 20:45:28 +01:00
John Reiser
2e64a277f8 Fix headway during optimizeReloc()
Later: "Assertion `(soxrelocs == 0) == !has_oxrelocs' failed."
https://github.com/upx/upx/issues/552
	modified:   packer.cpp
	modified:   packer.h
	modified:   pefile.cpp
2021-12-31 10:27:58 -08:00
John Reiser
ea567a8b14 Check when optimizeRelocs()
https://github.com/upx/upx/issues/513
	modified:   packer.h
	modified:   packer.cpp
	modified:   pefile.cpp
	modified:   p_wcle.cpp
	modified:   p_tmt.cpp
2021-12-29 16:57:52 -08:00
Kornel Pal
990d0ec543 PE: Remove duplicate oxrelocs write 2021-12-22 05:07:54 +01:00
Kornel Pal
937bfa4e49 PE: Add support for EFI images 2021-12-22 03:05:24 +01:00
Kornel Pal
1d9c211eed PE: Make imports in decompressor stub optional 2021-12-22 03:00:17 +01:00
Kornel Pal
76ddf6b8da PE: Add position independent decompressor stub for i386 2021-12-22 02:58:09 +01:00
Kornel Pal
7f1f29b0d8 PE: Remove empty non-compressed section 2021-12-22 02:57:10 +01:00
Kornel Pal
222471744f PE: Remove file alignment restriction 2021-12-22 02:56:09 +01:00
Kornel Pal
cc100be26e PE: Fix stripped relocation handling 2021-12-22 02:55:33 +01:00
Kornel Pal
bfd1f1fbfa PE: Fix relocation parsing and validation 2021-12-16 06:56:01 +01:00
bitraid
6da79783ea PE: Handle empty imports 2021-05-15 21:41:31 +03:00
John Reiser
02bd9cc403 IMAGE_SUBSYSTEM_EFI_APPLICATION
Beginning of support for compressing EFI files; lacks run-time decompressor.
https://github.com/upx/upx/issues/518
	modified:   p_armpe.cpp
	modified:   p_w32pe.cpp
	modified:   p_w64pep.cpp
	modified:   pefile.cpp
	modified:   pefile.h
2021-09-06 08:38:51 -07:00
bitraid
d55746f62d PE: disable CFG and compress with --force 2021-05-01 18:05:27 +03:00
bitraid
144010295e Improve --strip-relocs
- Remove .reloc section
- Enable for 64-bit images
- Abort if explicitly set on unsupported image
- Use with --force to remove ASLR / apply when imagebase < default
2021-04-25 20:15:07 +03:00
Markus F.X.J. Oberhumer
f6ff5a2805 Cleanups: start working on -Wsuggest-override, add some "final". NFCI. 2021-03-28 21:19:29 +02:00
bitraid
1518e5bc98 PE: fix SizeOfHeaders value of Optional Header field 2021-03-25 21:41:49 +02:00
John Reiser
ba5c77c9e5 Reject if MZ and PE headers overlap
Overlap ('leanify', etc.) causes headaches.
https://github.com/upx/upx/issues/231
	modified:   p_w32pe.cpp
	modified:   p_w64pep.cpp
	modified:   pefile.cpp
2021-03-14 15:20:15 -07:00
Markus F.X.J. Oberhumer
d86d5314ba Modernize libc usage: more cleanups. 2021-01-05 22:03:29 +01:00
Markus F.X.J. Oberhumer
700c8730cf Modernize libc usage: stop using off_t, use modern printf.
C++ 14 is here, and old versions of MSVC and MSVCRT have
haunted us long enough.
2021-01-05 18:52:05 +01:00
Markus F.X.J. Oberhumer
9131d5216f Welcome 2021. 2021-01-01 20:39:22 +01:00
Markus F.X.J. Oberhumer
f7e2266c3f Start using some C++ 14 features. 2020-12-08 05:40:17 +01:00
John Reiser
bb1df15958 Use 'mb_' prefix on instances of MemBuffer
modified:   pefile.cpp
	modified:   pefile.h
2020-12-05 13:53:14 -08:00
Liam Murphy
249431f45f tweak formatting to reduce diff 2020-11-26 03:00:21 +00:00
Liam Murphy
cbe129795e migrate to MemBuffer class from New() to remove leak 2020-11-26 00:14:00 +00:00
John Reiser
2a135e245b Prefer MemBuffer instead of New()+delete
https://github.com/upx/upx/issues/428
	modified:   pefile.cpp
	modified:   pefile.h
2020-12-05 13:44:19 -08:00
Markus F.X.J. Oberhumer
f218812858 Fix spelling of some constants. 2020-12-03 01:46:30 +01:00
Markus F.X.J. Oberhumer
8a7b980fc0 Avoid a MSVC warning. 2020-12-03 01:44:09 +01:00
John Reiser
10df93536e Yet another attempt to suppress MSVC C4245
https://github.com/upx/upx/issues/435
	modified:   pefile.cpp
2020-11-29 00:01:22 -08:00
John Reiser
6cad27896f Another attempt to suppress MSVC C4245
https://github.com/upx/upx/issues/435
	modified:   pefile.cpp
2020-11-28 23:53:49 -08:00
John Reiser
052392d97b Attempt workaround for MSVC C4245 signed/unsigned mismatch in template 'argument'
https://github.com/upx/upx/issues/435
	modified:   pefile.cpp
2020-11-28 20:23:01 -08:00
Matthijs Lavrijsen
4f3054f07d PE: only add a TLS relocation if tls_handler_offset_reloc != 0 2020-09-08 11:44:56 +02:00
bitraid
0d7bd52e21 Only pack w/ -f PE files that force integrity check 2020-10-31 19:53:33 +02:00
John Reiser
7c105d7af5 omemmove exactly as much
Fix 14992260c60b8d6677a677a9cdfae98b11353df7; revealed by testsuite
	modified:   pefile.cpp
2020-11-05 15:05:52 -08:00
John Reiser
143049922b Beware overlap when rebuildImports
Based on a hint from a little bird.
	modified:   pefile.cpp
2020-09-20 14:10:24 -07:00
Mattiwatti
89d0fda9fa Make PE load config directory address dword aligned 2020-01-21 16:03:40 +01:00
bitraid
6a85bab5da Don't pack Cotrol Flow Guard PE files 2020-07-28 17:36:13 +03:00
bitraid
17bd0b3248 Don't use --strip-reloc with -d
Always restore the relocation section of Portable Executables on
unpacking, if it exists in the compressed image.
2020-04-13 21:38:22 +03:00
bitraid
1ce6f0e6f4 Fix unpacking of ASLR enabled PE files 2020-04-12 03:19:57 +03:00
Markus F.X.J. Oberhumer
d1174385ef Welcome 2020. 2020-01-08 04:13:28 +01:00
Markus F.X.J. Oberhumer
c2aa5c35f7 Silence a gcc-4.6 compiler warning. 2019-02-25 13:41:54 +01:00
Markus F.X.J. Oberhumer
3667fa4e44 Welcome 2019. 2019-02-15 11:04:09 +01:00
John Reiser
70ed2d0d03 Allow Load Configuration directory > 256, with info().
https://github.com/upx/upx/issues/245
	modified:   pefile.cpp
2019-01-26 07:51:16 -08:00
John Reiser
b711d2f750 TLS callbacks: one entry only
https://github.com/upx/upx/issues/186  [partial, incomplete]
(Laszlo hints there is more, but meanwhile this does fix some.)
	modified:   pefile.cpp
2018-04-06 13:44:24 -07:00
Mattiwatti
2c2e108301 PE: fix comparison against a constant value
... due to size always being assigned to right before this comparison,
and instead check against the RVA and size of the export directory
from the header. (note: this is still stricter than the Windows loader
which ignores all of these except the directory RVA, but if the name RVA
is invalid the PE was probably tampered with).
Change 'offset' to 'RVA' in exception message; this field is always an RVA

  Author:    Mattiwatti <mattiwatti@gmail.com>
	modified:   pefile.cpp
2018-04-02 09:07:29 -07:00
John Reiser
563165e6ae Defensive patches from hints by Sean Williams <rootkit@google.com>
modified:   pefile.cpp
2018-03-29 16:55:21 -07:00
John Reiser
e4b23f7a47 Merge branch 'devel' of https://github.com/upx/upx into devel 2018-01-21 10:30:42 -08:00
John Reiser
f056ecdcd5 pefile: Allow overlap of MZ header and PE header (h.nexepos==0x10)
https://github.com/upx/upx/issues/169
This means .codebase is aliased to .nexepos, with both equal to 0x10.
	modified:   pefile.cpp
2018-01-21 10:29:17 -08:00
Markus F.X.J. Oberhumer
9248f02557 Silence some gcc-8-snapshot compiler warnings. 2018-01-19 14:13:58 +01:00
Markus F.X.J. Oberhumer
021c8db58a Welcome 2018. 2018-01-19 10:55:32 +01:00
John Reiser
ab35b685d4 Fix pefile.cpp bad range checking for reloc type 3 and 10
modified:   pefile.cpp
2018-01-18 11:11:19 -08:00
John Reiser
969efe687d MSVC pecadillos
modified:   p_lx_elf.cpp
	modified:   pefile.cpp
2018-01-11 12:01:00 -08:00
John Reiser
143f0accef PeFile check MZ offset to PE header
modified:   pefile.cpp
2017-11-21 13:07:42 -08:00
John Reiser
7a0514d9b4 PeFile more checks for Section table
modified:   pefile.cpp
2017-11-12 21:47:47 -08:00
John Reiser
7e7565299e PeFile check Section table
https://github.com/upx/upx/issues/132
	modified:   pefile.cpp
2017-11-12 21:02:52 -08:00
László Molnár
ed34a089c6 minor update for a memory derefencing check 2017-11-12 16:19:40 +01:00
John Reiser
d14a2c5282 PeFile fix the recently-added interval checking.
https://github.com/upx/upx/issues/143
	modified:   pefile.cpp
2017-11-09 21:58:25 -08:00
John Reiser
58771ecca6 PeFile: better checking for import descriptors
modified:   pefile.cpp
2017-11-08 12:38:54 -08:00
John Reiser
5d9dcb634b PeFile: Defend against bad crafted import descriptors
https://github.com/upx/upx/issues/143
	modified:   pefile.cpp
	modified:   pefile.h
2017-11-08 11:07:46 -08:00
Markus F.X.J. Oberhumer
c4da5e81fa Welcome 2017. 2017-01-03 12:02:07 +01:00
Markus F.X.J. Oberhumer
bc80d81432 Silence a bogus scan-build warning. 2016-12-30 23:59:31 +01:00
László Molnár
c7cb036536 fixed data corruption in import handling (issue #32,#34) 2016-12-30 21:31:50 +01:00
Markus F.X.J. Oberhumer
0b4ac35bc9 Tune some MSVC warnings. 2016-12-19 22:57:43 +01:00
László Molnár
c51864ca39 fixed TLS callback handling for PE64 2016-12-18 23:34:27 +01:00
John Reiser
134b829d59 prevent warning C4319: '~': zero extending 'const unsigned int' to 'upx_uint64_t' of greater size
modified:   linker.cpp
	modified:   p_lx_elf.cpp
	modified:   pefile.cpp
2016-11-19 16:46:01 -08:00
Markus F.X.J. Oberhumer
b0207ce524 Some refactoring. NFC. 2016-10-09 13:23:19 +02:00
László Molnár
297d44c614 PE: fixed file data alignment problem 2016-10-09 11:29:29 +02:00
Markus F.X.J. Oberhumer
4b991203df pefile.cpp: make import sorting independent from qsort() internals. 2016-10-09 00:48:40 +02:00
Markus F.X.J. Oberhumer
38a265741c Ongoing cleanups. 2016-10-08 18:49:14 +02:00
Markus F.X.J. Oberhumer
06eb244800 Add check_whitespace_git.sh. Minor cleanups. 2016-10-03 04:47:02 +02:00
Markus F.X.J. Oberhumer
f7554374ab Update email address. 2016-09-28 12:25:01 +02:00
Markus F.X.J. Oberhumer
a0582c5380 pefile.cpp: don't use VLA. 2016-09-27 20:19:43 +02:00
László Molnár
43231826b9 fixed address sanitizer problem (untested) 2016-09-26 08:56:23 +02:00