Página 1 de 1
Dicas para (UPX -> Binarios)
Enviado: 10 Set 2026 00:49
por mauricioportela
Uma dica para quem usa UPX nos binário.
Fiz esse patcher para 'dificultar' a extração do binário compactado com UPX.
Dicas são bem-vindas!
At.te
Mauricio Portela
Re: Dicas para (UPX -> Binarios)
Enviado: 10 Set 2026 16:34
por Kapiaba
Primeiro, muito obrigado pela dica. Achei excelente.
Segundo, modifiquei o seu Programa PATCHER.PRG, para adicionar uma Assinatura no .EXE, para o FireWall do windows não bloqueá-lo.
Terceiro, coloquei um PROGRAMA quase completo de CONTROLE DE PIZZARIA para você testar e tentar DESCOMPRIMIR. Não vai, seu programa funciona muito bem. E lógico, pedir sua opinião quanto a qualidade do CONTROLE DE PIZZARIA feito em FIVEWIN, por favor. Pode criticar sem dó. kkkkkk
Veja: PATCHER.RES -> é onde tem a assinatura do PATCHER.exe.
Download do meu Mega Upload:
https://mega.nz/file/IQlVXayb#su6sbw8j8 ... buRwf7XUdU
Exploda na Pasta: C:\PATCHER
A senha do sistema é automática, basta teclar <enter> - <enter>.
Obg, Gracias, tks.
Abs,
Regards, saludos.
Re: Dicas para (UPX -> Binarios)
Enviado: 10 Set 2026 16:43
por Kapiaba
P.S.: No meu .BAT de compilação, fiz:
REM C:\PECOMPACT\PEC2 /NB /EMP:Y /TM:Y /CR:Y /MC PETSHOP.EXE
C:\UPX5\UPX.EXE --lzma VENDAS.exe
C:\PATCHER\PATCHER.EXE VENDAS.EXE
Funciona perfeito.
Obg. abs.
Regards, saludos.
Re: Dicas para (UPX -> Binarios)
Enviado: 10 Set 2026 18:57
por mauricioportela
Boa noite, Kapiaba!
Esqueci de mencionar:
Essa sequencia - voce deve escolher qualquer outra!
LOCAL cNewSign := "C0CA" // Nova string (mesmo tamanho da 'cOldSign' (4))
No lugar de 'C0CA', coloque algo com 4 caracteres. Assim, vira sua assinatura!
Exemplos:
cNewSign := "d35k"
cNewSign := "XP1" + space(1)
cNewSign := replicate(chr(75),4)
cNewSign := chr(255)+chr(33)+chr(65)+"n"
At.te
Mauricio Portela
Re: Dicas para (UPX -> Binarios)
Enviado: 11 Set 2026 11:41
por Kapiaba
Valeu Mauricio, thank you. Nova versão.
Código: Selecionar todos
// PATCHER.PRG - By Mauricio Portela Pires
// MODIFICADO EM: 11/09/2026 by Kapiaba
/**
Mauricio Portela Pires <mauricioportelapires AT gmail DOT com>
--------------------------------------------------------------------------------
Objetivo:
Evitar que terceiros extraiam o binario comprimido com UPX.
(ou pelo menos, dificultar!)
Modifica a assinatura do UPX, trocando por qualquer outra sequencia.
--------------------------------------------------------------------------------
Procedimento:
1) compilar um arquivo com o hbmk2:
hbmk2 teste.prg
2) comprimir o arquivo binario gerado:
upx -9 teste.exe - com UPX5 Use: C:\UPX5\UPX.EXE --lzma NOME.exe
3) verificar se arquivo foi comprimido:
upx -l teste.exe
4) usar o codigo para trocar a string (assinatura) do UPX:
patcher teste.exe
5) teste se o arquivo pode ser extraido:
upx -d teste.exe
--------------------------------------------------------------------------------
Compilar:
hbmk2 patcher.prg -lhbct
**/
#include "FiveWin.ch"
#include "fileio.ch"
FUNCTION Main( cFile )
LOCAL cBakFile, hFile, cBuffer, cHashOri, cHashMod
LOCAL cOldSign := "UPX!"
// LOCAL cNewSign := "C0CA" // Nova string (mesmo tamanho da 'cOldSign' (4))
LOCAL cNewSign := chr(255)+chr(33)+chr(65)+"n"
/*
Esqueci de mencionar:
Essa sequencia - voce deve escolher qualquer outra!
LOCAL cNewSign := "C0CA" // Nova string (mesmo tamanho da 'cOldSign' (4))
No lugar de 'C0CA', coloque algo com 4 caracteres. Assim, vira sua assinatura!
Exemplos:
cNewSign := "d35k"
cNewSign := "XP1" + space(1)
cNewSign := replicate(chr(75),4)
cNewSign := chr(255)+chr(33)+chr(65)+"n"
*/
IF EMPTY(cFile)
/*
? "Uso correto: patcher.exe <nome_do_arquivo>"
? "Exemplo: patcher.exe arquivo[.exe]"
*/
MsgInfo( "Uso correto: patcher.exe <nome_do_arquivo>" +CRLF+CRLF+ ;
"Exemplo: patcher.exe arquivo[.exe] ", ;
"Uso Incorreto do patcher.exe " )
RETURN NIL
ENDIF
cFile := ALLTRIM(cFile)
IF .NOT. ( LOWER( RIGHT( cFile, 4 ) ) == ".exe" )
cFile += ".exe"
ENDIF
IF !FILE(cFile)
// ? "Erro: O arquivo '" + cFile + "' nao foi encontrado! C:\PATCHER"
MsgStop( "Erro: O arquivo '" + cFile + "' nao foi encontrado! PATCHER" )
RETURN NIL
ENDIF
hFile := FOpen(cFile, FO_READ)
IF (FError() != 0)
? "PATCHER: Erro ao abrir o arquivo para validação. Código:", FError()
RETURN NIL
ENDIF
cBuffer := Space(2)
FRead(hFile, @cBuffer, 2)
FClose(hFile)
IF .NOT. ( cBuffer == "MZ" )
? "PATCHER: Erro: O arquivo não é um executável Windows válido."
RETURN NIL
ENDIF
cHashOri := hb_MD5File(cFile)
cBakFile := cFile + ".bak"
// ? "Criando backup: " + cBakFile + "..."
IF FILE(cBakFile)
FErase(cBakFile)
ENDIF
IF (FileCopy(cFile, cBakFile) == 0)
? "PATCHER: Erro ao criar o arquivo de backup!"
RETURN NIL
ENDIF
hFile := FOpen(cFile, FO_READWRITE)
IF (FError() != 0)
? "PATCHER: Erro ao abrir o arquivo para modificação. Código:", FError()
RETURN NIL
ENDIF
// ? "Processando alteracoes no binario..."
cBuffer := Space(FSeek(hFile, 0, FS_END))
FSeek(hFile, 0, FS_SET)
FRead(hFile, @cBuffer, Len(cBuffer))
IF cOldSign $ cBuffer
cBuffer := StrTran(cBuffer, cOldSign, cNewSign)
FSeek(hFile, 0, FS_SET)
FWrite(hFile, cBuffer)
FWrite(hFile, "", 0)
FClose(hFile)
// ? "Sucesso! O arquivo '" + cFile + "' foi modificado com exito."
cHashMod := hb_MD5File(cFile)
// ? ""
// ? "INTEGRIDADE (MD5)"
// ? "....Backup (Original) :", cHashOri
// ? "....Binario Protegido :", cHashMod
? "Os hashes São Diferentes? " + IIF(cHashOri != cHashMod, ;
"SIM (Modificado com sucesso)", ;
"NÃO (Falha)")
ELSE
FClose(hFile)
? "Aviso: A assinatura 'UPX!' não foi encontrada neste binário. C:\PATCHER"
ENDIF
RETURN NIL
// FIN / END - kapiabafwh@gmail.com
Regards, saludos.