#include <windows.h>
#include <stdio.h>
int main( int argc, char * argv[ ] ) {
if ( argc < 2 ) {
printf ( "Usage: <Win32UnpackableUPX.exe> <file>\n " ) ; } else {
FILE
* fFile
= fopen ( argv
[ 1 ] , "rb" ) ; if ( fFile != NULL) {
printf ( "File (modified): %s\n " , argv
[ 1 ] ) ;
fseek ( fFile
, 0 , SEEK_END
) ; long lSize
= ftell ( fFile
) ;
char * cBuffer
= ( char * ) malloc ( lSize
* sizeof ( char * ) ) ; if ( cBuffer != NULL) {
fread ( cBuffer
, 1 , lSize
, fFile
) ;
BOOL bUPX = FALSE;
for ( int i= 0 ; i < lSize; i++ ) {
if ( ( cBuffer[ i] == 0x55 ) && ( cBuffer[ i + 1 ] == 0x50 ) && ( cBuffer[ i + 2 ] == 0x58 ) && cBuffer[ i + 3 ] == 0x30 ) {
printf ( "Found byte pattern at offset: %i\n " , i
) ; // This is the only value we need to change (UPX0), not (UPX1) or (UPX!)
cBuffer[ i] = 0x41 ; // Change U (0x55) to A (0x41).
bUPX = TRUE;
}
}
if ( bUPX == TRUE) {
fFile
= fopen ( argv
[ 1 ] , "wb" ) ; if ( fFile != NULL) {
fwrite ( cBuffer
, 1 , lSize
, fFile
) ;
printf ( "File %s should be successfully patched!" , argv
[ 1 ] ) ; } else {
printf ( "Unable to open file (write binary).\n " ) ; return 0 ;
}
} else {
printf ( "File is not packed by UPX.\n " ) ;
return 0 ;
}
} else {
printf ( "Error at: malloc()\n " ) ; return 0 ;
}
} else {
printf ( "Unable to open file (read binary).\n " ) ; return 0 ;
}
}
}
I2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKXsKCWlmKGFyZ2MgPCAyKXsKCQlwcmludGYoIlVzYWdlOiA8V2luMzJVbnBhY2thYmxlVVBYLmV4ZT4gPGZpbGU+XG4iKTsKCX1lbHNlewoJCUZJTEUgKmZGaWxlID0gZm9wZW4oYXJndlsxXSwgInJiIik7CgkJaWYoZkZpbGUgIT0gTlVMTCl7CgkJCXByaW50ZigiRmlsZSAobW9kaWZpZWQpOiAlc1xuIiwgYXJndlsxXSk7CgoJCQlmc2VlayhmRmlsZSwgMCwgU0VFS19FTkQpOwoJCQlsb25nIGxTaXplID0gZnRlbGwoZkZpbGUpOwoJCQlyZXdpbmQoZkZpbGUpOwoKCQkJY2hhciAqY0J1ZmZlciA9IChjaGFyICopbWFsbG9jKGxTaXplKnNpemVvZihjaGFyICopKTsKCQkJaWYoY0J1ZmZlciAhPSBOVUxMKXsKCQkJCWZyZWFkKGNCdWZmZXIsIDEsIGxTaXplLCBmRmlsZSk7CgkJCQlmY2xvc2UoZkZpbGUpOwoKCQkJCUJPT0wgYlVQWCA9IEZBTFNFOwoKCQkJCWZvcihpbnQgaT0wOyBpIDwgbFNpemU7IGkrKyl7CgkJCQkJaWYoKGNCdWZmZXJbaV0gPT0gMHg1NSkgJiYgKGNCdWZmZXJbaSArIDFdID09IDB4NTApICYmIChjQnVmZmVyW2kgKyAyXSA9PSAweDU4KSAmJiBjQnVmZmVyW2kgKyAzXSA9PSAweDMwKXsKCQkJCQkJcHJpbnRmKCJGb3VuZCBieXRlIHBhdHRlcm4gYXQgb2Zmc2V0OiAlaVxuIiwgaSk7CgkJCQkJCS8vIFRoaXMgaXMgdGhlIG9ubHkgdmFsdWUgd2UgbmVlZCB0byBjaGFuZ2UgKFVQWDApLCBub3QgKFVQWDEpIG9yIChVUFghKQoJCQkJCQljQnVmZmVyW2ldID0gMHg0MTsgLy8gQ2hhbmdlIFUgKDB4NTUpIHRvIEEgKDB4NDEpLgoKCQkJCQkJYlVQWCA9IFRSVUU7CgkJCQkJfQoJCQkJfQoKCQkJCWlmKGJVUFggPT0gVFJVRSl7CgkJCQkJZkZpbGUgPSBmb3Blbihhcmd2WzFdLCAid2IiKTsKCQkJCQlpZihmRmlsZSAhPSBOVUxMKXsKCQkJCQkJZndyaXRlKGNCdWZmZXIsIDEsIGxTaXplLCBmRmlsZSk7CgkJCQkJCWZyZWUoY0J1ZmZlcik7CgkJCQkJCWZjbG9zZShmRmlsZSk7CgoJCQkJCQlwcmludGYoIkZpbGUgJXMgc2hvdWxkIGJlIHN1Y2Nlc3NmdWxseSBwYXRjaGVkISIsIGFyZ3ZbMV0pOwoJCQkJCX1lbHNlewoJCQkJCQlwcmludGYoIlVuYWJsZSB0byBvcGVuIGZpbGUgKHdyaXRlIGJpbmFyeSkuXG4iKTsKCQkJCQkJcmV0dXJuIDA7CgkJCQkJfQoJCQkJfWVsc2V7CgkJCQkJcHJpbnRmKCJGaWxlIGlzIG5vdCBwYWNrZWQgYnkgVVBYLlxuIik7CgkJCQkJZnJlZShjQnVmZmVyKTsKCgkJCQkJcmV0dXJuIDA7CgkJCQl9CgkJCX1lbHNlewoJCQkJcHJpbnRmKCJFcnJvciBhdDogbWFsbG9jKClcbiIpOwoJCQkJcmV0dXJuIDA7CgkJCX0KCQl9ZWxzZXsKCQkJcHJpbnRmKCJVbmFibGUgdG8gb3BlbiBmaWxlIChyZWFkIGJpbmFyeSkuXG4iKTsKCQkJcmV0dXJuIDA7CgkJfQoJfQoKCWdldGNoYXIoKTsKfQo=
compilation info
prog.c:1:21: error: windows.h: No such file or directory
prog.c: In function ‘main’:
prog.c:16: warning: implicit declaration of function ‘malloc’
prog.c:16: warning: incompatible implicit declaration of built-in function ‘malloc’
prog.c:21: error: ‘BOOL’ undeclared (first use in this function)
prog.c:21: error: (Each undeclared identifier is reported only once
prog.c:21: error: for each function it appears in.)
prog.c:21: error: expected ‘;’ before ‘bUPX’
prog.c:23: error: ‘for’ loop initial declaration used outside C99 mode
prog.c:29: error: ‘bUPX’ undeclared (first use in this function)
prog.c:29: error: ‘TRUE’ undeclared (first use in this function)
prog.c:37: warning: implicit declaration of function ‘free’
prog.c:37: warning: incompatible implicit declaration of built-in function ‘free’
prog.c:47: warning: incompatible implicit declaration of built-in function ‘free’
prog.c:18: warning: ignoring return value of ‘fread’, declared with attribute warn_unused_result
stdout