Quebrando aplicações Java criptografadas usando jhsdb (hotspot debugger)

Uma solução para proteção de código Java é a criptografia de arquivos class ou criptografia de arquivos jar. Este tipo de solução carrega o arquivo class ou arquivo jar criptografado através de um loader personalizado, o que é inútil devido à existência do mecanismo de Attach da JVM e pode ser facilmente quebrado com as ferramentas que acompanham o JDK.

Aplicação de Exemplo

Abaixo está uma aplicação de exemplo com uma janela swing simples e um botão. https://github.com/3-keys/test-swing-app

img

Criptografar Aplicação

Exporte um arquivo jar executável com Eclipse e use uma ferramenta de criptografia para criptografar o arquivo jar. Após a criptografia, a estrutura do arquivo jar é a seguinte:

img

test-swing-app.jar são os dados do arquivo jar criptografado, as classes Launcher são as classes de carregamento personalizadas desta ferramenta, e o pacote jar criptografado ainda é executado através do comando padrão java -jar

Quebrar a aplicação criptografada

Primeiro, execute o arquivo jar criptografado, depois encontre o diretório bin do JDK e você deverá encontrar um arquivo jhsdb.

1_nsxbwNJrGJB4mpzsQv55VA

Execute jhsdb hsdb, abra o HotSpot Debugger, se estiver no Windows, pode ser necessário executar como administrador, clique em File para selecionar Attach to HotSpot process…,

img

Use o comando ps aux | grep java no sistema Linux, e encontre o pid do processo através do Gerenciador de Tarefas no sistema Windows. Insira o pid do processo na caixa de diálogo abaixo.

img

Após conectar com sucesso, clique em Tools->Class Browser

img

O Class Browser contém informações sobre todas as classes carregadas, pesquise por com.example e você poderá ver todas as classes em com.example

img

Clique em com.example.TestWindow @0x0000…. e depois clique em "Create .class File"

img

cd para o diretório onde o comando jhsdb foi executado antes, você pode ver o arquivo class gerado

img

Use Luyten ou jadx para abrir o arquivo class e você poderá ver o código descompilado

img