Created the Tuesday 29 March 2022. Updated 12 months ago.
Anti-UPX Unpacking is the technique to prevent malware from being unpacked by tools like UPX. UPX packed binary indicates that the section names starting with UPX followed by a number (UPX0 and UPX1) and the string “UPX!” at the end of the PE header. This UPX reference structure is located at the end of the PE header and the header includes checksums, packed and unpacked sizes, and compression details.
There are some methods to bypass unpacking using "upx -d" since a long time ago.
One easy way is to change section names to different strings, this is the example. The normal section names packed by UPX are "UPX0", "UPX1" .. and ".rsrc". The unpacking command "upx -d" raises this kind of exception of "CantUnpackException: file is possibly modified/hacked/protected; take care!" in this case and results in preventing from unpacking.
Another method is zero-padding against any size or checksum infos in UPX reference structure. The "upx -d" raises this kind of exception of "CantUnpackException: header corrupted" at this time and results in preventing from unpacking.
The resources provided below are associated links that will give you even more detailed information and research on current evasion technique. It is important to note that, while these resources may be helpful, it is important to exercise caution when following external links. As always, be careful when clicking on links from unknown sources, as they may lead to malicious content.
- upx/header.S at master · upx/upx · GitHub
- UPX Packing and Anti-Packing Techniques | Machines Can Think
- Anti-UPX Unpacking Technique - JPCERT/CC Eyes | JPCERT Coordination Center official Blog