Dicas para (UPX -> Binarios)

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 97
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Dicas para (UPX -> Binarios)

Mensagem 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
Anexos
patcher.prg
(3.32 KiB) Baixado 14 vezes
Kapiaba
Colaborador
Colaborador
Mensagens: 1935
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Curtiram: 1 vez
Contato:

Re: Dicas para (UPX -> Binarios)

Mensagem 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.
Kapiaba
Colaborador
Colaborador
Mensagens: 1935
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Curtiram: 1 vez
Contato:

Re: Dicas para (UPX -> Binarios)

Mensagem 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.
Avatar do usuário
mauricioportela
Usuário Nível 2
Usuário Nível 2
Mensagens: 97
Registrado em: 29 Jul 2016 04:22
Localização: Vitoria da Conquista/Bahia

Re: Dicas para (UPX -> Binarios)

Mensagem 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
Kapiaba
Colaborador
Colaborador
Mensagens: 1935
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Curtiram: 1 vez
Contato:

Re: Dicas para (UPX -> Binarios)

Mensagem 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.
Responder