Fix unpacking of ASLR enabled PE files
This commit is contained in:
parent
740b4ff865
commit
1ce6f0e6f4
@ -2933,6 +2933,18 @@ void PeFile::unpack0(OutputFile *fo, const ht &ih, ht &oh,
|
||||
ft.unfilter(obuf + oh.codebase - rvamin, oh.codesize);
|
||||
}
|
||||
|
||||
//NEW: disable reloc stripping if ASLR is enabled
|
||||
if(ih.dllflags & IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE)
|
||||
opt->win32_pe.strip_relocs = false;
|
||||
|
||||
// FIXME: ih.flags is checked here because of a bug in UPX 0.92
|
||||
if ((opt->win32_pe.strip_relocs && !isdll) || (ih.flags & RELOCS_STRIPPED))
|
||||
{
|
||||
oh.flags |= RELOCS_STRIPPED;
|
||||
ODADDR(PEDIR_RELOC) = 0;
|
||||
ODSIZE(PEDIR_RELOC) = 0;
|
||||
}
|
||||
|
||||
rebuildImports<LEXX>(extrainfo, ord_mask, set_oft);
|
||||
rebuildRelocs(extrainfo, sizeof(ih.imagebase) * 8, oh.flags, oh.imagebase);
|
||||
rebuildTls();
|
||||
@ -2966,18 +2978,6 @@ void PeFile::unpack0(OutputFile *fo, const ht &ih, ht &oh,
|
||||
oh.headersize = rvamin;
|
||||
oh.chksum = 0;
|
||||
|
||||
//NEW: disable reloc stripping if ASLR is enabled
|
||||
if(ih.dllflags & IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE)
|
||||
opt->win32_pe.strip_relocs = false;
|
||||
|
||||
// FIXME: ih.flags is checked here because of a bug in UPX 0.92
|
||||
if ((opt->win32_pe.strip_relocs && !isdll) || (ih.flags & RELOCS_STRIPPED))
|
||||
{
|
||||
oh.flags |= RELOCS_STRIPPED;
|
||||
ODADDR(PEDIR_RELOC) = 0;
|
||||
ODSIZE(PEDIR_RELOC) = 0;
|
||||
}
|
||||
|
||||
// write decompressed file
|
||||
if (fo)
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user