Manual do VBReFormer Desktop
Manual do usuário do VBReFormer Desktop: instalar, ativar a licença, ler as sete vistas, analisar um binário, exportar um projeto VB6 recarregável no IDE.
Atualizado em 20/09/202614 capítulos
O aplicativo instalado na sua máquina Windows. Ele abre seus executáveis Visual Basic 5 e 6, reconstrói o código-fonte deles e devolve um projeto que o IDE do VB6 consegue reabrir – com a bancada de trabalho completa: bytes, recursos, designer, grafos, referências cruzadas e patches binários.
Nota sobre a tradução. A interface do aplicativo desktop está disponível em inglês, francês e espanhol. Este manual cita os nomes de menus e vistas em inglês, tal como aparecem no aplicativo.
1. Instalação
O VBReFormer Desktop é distribuído como um instalador MSI, um por idioma de interface. O pacote é autocontido: ele incorpora tudo o que precisa, não há nenhum framework a instalar previamente.
| requisito | |
|---|---|
| Sistema | Windows 10 versão 1607 ou posterior, ou Windows 11 |
| Arquitetura | x64 |
| Framework | nenhum – o pacote é autocontido |
| Conexão | necessária para a descompilação e a validação da licença |
| Idiomas da interface | inglês, francês, espanhol |
Windows XP, Vista, 7 e 8 não são suportados. O aplicativo depende de uma plataforma que exige no mínimo o Windows 10. Se a sua máquina for mais antiga, o VBReFormer Online funciona em qualquer navegador, em qualquer sistema – esse é o caminho recomendado nesse caso.
Onde o motor trabalha
O aplicativo é local; a reconstrução do código, porém, é executada nos nossos servidores. É isso que o nome da edição significa – Desktop + Cloud. Tudo o que é lido do arquivo (o formato, os bytes, a desmontagem, os recursos) é calculado na sua máquina; tudo o que é reconstruído passa pelo serviço.
A caixa Help ▸ About (Ajuda ▸ Sobre) informa a qualquer momento a versão do motor conectado, a versão do contrato e a lista de capacidades servidas (Capabilities served) – útil quando uma função não aparece: se ela não está nessa lista, não é a interface que a recusa.
2. Ativar sua licença
Sem licença, o aplicativo abre e funciona: você pode explorar um binário, ler a desmontagem completa, os bytes, os recursos e o designer. O que a licença desbloqueia é a reconstrução do código VB6 e a exportação do projeto.
Um posto de cada vez
Uma licença VBReFormer abre uma estação de trabalho de cada vez. Se você já a estiver usando em outro lugar, o aplicativo diz isso claramente e oferece duas saídas: transferir a licença para esta máquina a partir da sua conta, ou adicionar um posto.
É uma recusa suave: você pagou, nada está faltando. A mensagem diz isso dessa forma em vez de devolver um erro técnico.
Um navegador aberto no VBReFormer Online também conta como um posto: o estúdio web e o aplicativo desktop consomem a mesma licença.
3. A janela
- Abra um binário. File ▸ Open a VB6 binary (Arquivo ▸ Abrir um binário VB6,
Ctrl+O). Os formatos aceitos são.exe,.dll,.ocxe.scr. A barra de status mostra a análise em andamento, depois o nome do arquivo e sua forma de compilação – código nativo ou P-code. - Percorra o painel PROJECT. À esquerda, o binário é apresentado do jeito que o VB6 o via: formulários, classes, módulos e seus procedimentos. A árvore é preenchida sob demanda – expandir um nó solicita seus filhos; nada é calculado antecipadamente, o que mantém a abertura rápida mesmo em um executável grande.
- Selecione um procedimento. As vistas desse nó aparecem à direita. Se nenhuma vista for servida para um nó, o motivo é escrito na tela em vez de um painel vazio.
Os painéis inferiores
| aba | para que serve |
|---|---|
| Output (Saída) | o log das operações. Ele conserva o idioma em que cada linha foi escrita, mesmo que você mude o idioma da interface – um log é um registro, não uma exibição. |
| Diagnostics (Diagnósticos) | o que o motor se recusou a fazer, e por quê. O reflexo a ter assim que um resultado surpreender você. |
| Analyser (Analisador) | referências cruzadas: chamadores de um procedimento, ocorrências de um símbolo. O resultado é clicável. |
Visibilidade dos membros
Cada membro da árvore traz sua visibilidade tal como o binário a declara – (Public), (Private), (Friend). São palavras-chave do VB6: não são traduzidas. Um membro cuja visibilidade não pôde ser lida não traz marca nenhuma: não escrevemos o que não sabemos.
4. As sete vistas
Elas estão organizadas em três famílias, e essa separação diz de onde vem o que você lê. É a coisa mais útil a entender.
A família “Code” – reconstruída pela análise
| vista | o que mostra | quando consultá-la |
|---|---|---|
| Visual Basic 6 | o código-fonte reconstruído e estruturado | por padrão – é isso que você procura |
| IR | a representação intermediária | para ver o que o motor entendeu |
| Disassembly (Desmontagem) | as instruções de máquina x86 | para ver o que o processador executa |
| P-code | os opcodes da máquina virtual do VB6 | somente binários em P-code |
Descer nesta lista é ir em direção à máquina. Na dúvida sobre uma linha: Visual Basic 6 diz a intenção, Disassembly diz o fato.
A família “Project files” – lida, não inferida
Designer (.frm), Project (.vbp) e Structure (Estrutura). Nada aqui passa pela reconstrução de código: tudo foi lido de tabelas do binário, e o que não pôde ser lido é escrito com todas as letras em vez de preenchido. É a família mais confiável do produto, e a que não depende de nenhuma inferência.
A família “Resources”
Veja o capítulo 9.
5. O que a compilação conserva, e o que ela descarta
Este capítulo explica por que algumas partes do seu código voltam quase intactas e outras com nomes técnicos. A regra é simples:
O que o Visual Basic precisa em tempo de execução, ele gravou no arquivo: o VBReFormer o encontra de novo. O que ele não precisava mais depois da compilação, ele descartou – e ninguém consegue recuperar.
O que sobrevive: nomes de formulários, classes e módulos · nomes de controles · manipuladores de eventos · membros públicos das classes · todas as propriedades de interface · chamadas ao runtime do VB (635 funções) · API Win32 (15.680 assinaturas) · a estrutura do código · as strings.
O que não está no arquivo: comentários · nomes de variáveis locais · nomes de parâmetros · constantes nomeadas, substituídas pelo seu valor · nomes de procedimentos em módulos .bas · a indentação original · Option Explicit e os Enum.
A consequência prática. Seus formulários voltam muito legíveis. Seus módulos
.basvoltam corretos, mas com nomes técnicos (proc_42C506). A função Rename (Renomear,F2) existe para isso, e ela propaga o novo nome a todos os pontos de chamada do projeto – veja o capítulo 7.
Dois exemplos verificáveis
Os trechos abaixo vêm do SETUP1.EXE, o assistente de instalação distribuído com o Visual Basic 6. A Microsoft distribui seu código-fonte na mesma pasta – assim você pode refazer a comparação por conta própria.
Um procedimento de módulo .bas
Fonte original, COMMON.BAS:
Sub AddDirSep(strPathName As String)
If Right(Trim(strPathName), Len(gstrSEP_URLDIR)) <> gstrSEP_URLDIR And _
Right(Trim(strPathName), Len(gstrSEP_DIR)) <> gstrSEP_DIR Then
strPathName = RTrim$(strPathName) & gstrSEP_DIR
End If
End Sub
Renderizado pelo VBReFormer:
Public Sub proc_42C506(ByRef arg_8 As String)
If ((Right(Trim(arg_8), Len("/")) <> "/") And (Right(Trim(arg_8), Len("\")) <> "\")) <> 0 Then
arg_8 = (RTrim$(arg_8) & "\")
End If
End Sub
Lógica idêntica, linha por linha. Right, Trim, Len, RTrim$ têm nome; a passagem ByRef é inferida corretamente. Em contrapartida, o nome do procedimento e o do parâmetro se perderam, e as constantes aparecem como seu valor – foi o compilador que as substituiu, não o VBReFormer.
Um manipulador de evento
Fonte original, BEGIN.FRM:
Private Sub cmdExit_Click()
ExitSetup Me, gintRET_EXIT
End Sub
Renderizado pelo VBReFormer:
Private Sub cmdExit_Click()
Set var_18 = Me
basSetup1.proc_41CE2D var_18, var_1C
End Sub
O nome do formulário, o do botão e o do manipulador estão intactos; Me é reconhecido; o módulo chamado tem nome, o que diz aonde ir. Só o procedimento chamado, que vive em um .bas, mantém seu nome de endereço.
Os marcadores
O VBReFormer nunca adivinha. Um valor que não pode ser estabelecido é marcado em vez de inventado – um valor plausível e errado é o pior resultado que um descompilador pode produzir.
| marcador | significado | o que fazer |
|---|---|---|
proc_42C506 |
procedimento designado pelo seu endereço | renomeie-o (F2) |
var_18, arg_8 |
variável local ou parâmetro | leia seu uso, depois renomeie |
vtbl_3C |
chamada por tabela virtual não resolvida | o Object Browser costuma dizer de que biblioteca se trata |
? |
valor não estabelecido | consulte a vista Disassembly no mesmo lugar |
Um arquivo que contém um
?será rejeitado pelo IDE do VB6. O marcador está ali para você decidir, não para ser recompilado como está.
6. As ferramentas de análise
É aqui que a edição desktop mais se diferencia: ela oferece uma bancada de trabalho completa, enquanto o estúdio web se concentra em ler, descompilar e exportar.
| ferramenta | atalho | o que ela oferece |
|---|---|---|
| Analyse references (Analisar referências) | Shift+F12 |
chamadores de um procedimento, ocorrências de um símbolo – resultado clicável, e a cobertura é quantificada: o que a análise não vê é contado, não silenciado |
| Symbol list (Lista de símbolos) | Ctrl+Shift+S |
o inventário completo, filtrável por tipo e por escopo – ele distingue os nomes lidos dos nomes sintetizados |
| Call graph (Grafo de chamadas) | Ctrl+Shift+A |
quem chama o quê, em três escalas, com filtros de chamadores / chamados |
| Control-flow graph (Grafo de fluxo de controle) | Ctrl+Shift+G |
a forma de um procedimento: blocos, laços, arestas de retorno, blocos inacessíveis |
| Object Browser (Navegador de objetos) | Ctrl+Shift+B |
“onde isto está definido?”, quando a resposta está fora do binário |
| API Browser (Navegador de API) | Ctrl+Shift+P |
protótipos, aliases e notas das declarações Win32 |
| Cited libraries (Bibliotecas citadas) | Ctrl+K |
do que o binário depende |
| Find VB programs (Localizar programas VB) | Ctrl+L |
encontrar os executáveis VB de uma pasta |
| Find (Localizar) | Ctrl+Shift+F |
busca de texto nas vistas servidas |
| Bookmarks (Marcadores) | Ctrl+F2 |
marcar lugares e voltar a eles (F8 / Shift+F8) |
| Back / forward navigation (Navegação para trás / para a frente) | Alt+← Alt+→ |
como em um navegador |
Por que a cobertura é quantificada. O grafo de chamadas nativo vê as chamadas diretas; ele não vê as chamadas por tabelas virtuais nem por ponteiros de função. Em vez de apresentar uma lista parcial como completa, o VBReFormer mostra o que ele omite, contado. Você sabe então até que ponto confiar no resultado.
7. Renomear
É o gesto central do trabalho em um binário: o descompilador devolve a lógica, você devolve os nomes. F2 sobre um símbolo, ou a partir da lista de símbolos.
A caixa mostra três coisas que os descompiladores costumam esconder:
- a origem do nome atual – dado por você, inferido pelo descompilador ou reconstruído;
- as propostas do descompilador, cada uma com sua prioridade e a fonte de onde vem;
- o nome original, ao qual você sempre pode voltar.
A renomeação é global. Renomeie um procedimento uma vez, e os pontos de chamada nos outros módulos acompanham – inclusive os que você ainda não abriu.
Uma renomeação recusada é sempre recusada com o seu motivo. Dois casos frequentes: o motor não anuncia a capacidade de renomeação neste documento, ou a vista atual só carrega fragmentos lexicais – o bastante para colorir o texto, não o bastante para designar uma entidade. Nos dois casos, a mensagem diz isso, em vez de não fazer nada.
8. Bytes e patches binários
Navigate ▸ Show bytes (Navegar ▸ Mostrar bytes, Ctrl+Shift+H) abre a vista hexadecimal anotada: ela não mostra apenas bytes, ela diz o que cada área representa. Go to address (Ir para o endereço, Ctrl+G) leva você diretamente até lá.
Modificar o executável
O modo “raw” permite gravar bytes e produzir um executável modificado. Ele é delimitado por quatro recusas, e cada uma protege alguma coisa:
| recusa | por quê |
|---|---|
| O arquivo analisado nunca é o destino | o motor nunca o abre para gravação; a interface não desfaz essa garantia |
| Sobrescrever um arquivo existente exige confirmação | “isto não pode ser desfeito” |
| A assinatura Authenticode será removida | seu consentimento é pedido antes; você pode assinar de novo com seu próprio certificado |
| Um patch recusado não grava nada | nenhum arquivo gravado pela metade |
O estúdio web não oferece patches binários nem a vista hexadecimal: são duas funções específicas da edição desktop.
9. Recursos e designer
Os recursos do binário
Ícones, cursores, bitmaps, tabelas de strings, informações de versão: tudo o que um arquivo .res teria carregado. Cada entrada mostra seu tipo, seu tamanho e o que pode ser feito com ela, e a extração é possível entrada por entrada ou em bloco.
Um recurso que o produto não sabe desenhar continua listado e é mostrado como bytes: ele nunca é escondido. E se entradas do diretório não puderam ser seguidas, um aviso diz isso – você sabe então que a lista é mais curta do que o binário contém.
O designer de formulários
A superfície do formulário é desenhada do jeito que o VB6 a teria mostrado, a partir das propriedades lidas no binário, na ordem de desenho correta. A imagem do formulário pode ser exportada (Ctrl+I).
As propriedades são somente leitura: o VBReFormer sabe ler a superfície de um formulário, mas ainda não sabe regravá-la no executável compilado. Veja o capítulo 13.
10. Exportar o projeto
- Verifique primeiro o painel Diagnostics. Ele diz o que não pôde ser feito. Lê-lo antes da exportação evita que você procure depois por que um elemento está faltando.
- File ▸ Export the VB6 project (Arquivo ▸ Exportar o projeto VB6). Escolha uma pasta de destino vazia.
- Leia as notas de exportação. O VBReFormer escreve o que não conseguiu recuperar, e por quê. Algumas informações – referências externas, opções de compilação, o modo de inicialização – não estão em nenhuma estrutura do binário: não foram apagadas, nunca estiveram lá. Elas são sinalizadas em vez de inventadas.
- Abra o
.vbpno Visual Basic 6. Os cabeçalhos que o IDE exige (VERSION,Attribute VB_Name) são gravados. Se uma referência estiver faltando, adicione-a em Project ▸ References (Projeto ▸ Referências).
Duas recusas de gravação que protegem você. Os arquivos do VB6 são gravados em ANSI 1252. O VBReFormer se recusa a gravar se esse conjunto de caracteres não estiver disponível na máquina – gravar em outro produziria um arquivo errado silenciosamente – ou se um caractere do seu código não existir nele, e nesse caso ele diz qual é e seu ponto de código.
11. As opções
| configuração | o que faz |
|---|---|
| Indentation width (largura da indentação) | só se aplica ao código reconstruído: a desmontagem, a IR, o P-code, o bloco do designer e o .vbp não são formatados por este editor. |
| Code page (designer) (página de código do designer) | a página na qual as legendas e os textos do designer são lidos. Um binário VB6 não declara a sua em lugar nenhum – medido em 236 binários. Se os rótulos de um formulário aparecem como caracteres incoerentes, é esta a configuração a mudar. |
Group under With…End With (agrupar sob With…End With) |
desligado por padrão. A saída é totalmente qualificada (Frame1.Caption), porque o compilador dissolve os blocos With e reconstruí-los seria uma adivinhação. Ligue se preferir legibilidade a literalidade. |
| Syntax colouring (coloração de sintaxe) | um papel, uma cor – os papéis vêm do motor, que diz o que cada fragmento é. Notação #RRGGBB; uma paleta inválida não é aplicada pela metade. |
| Interface language (idioma da interface) | inglês, francês, espanhol – a mudança é imediata. |
As configurações de renderização viajam com cada solicitação de exibição; elas nunca são definidas como estado de sessão. Mudar a indentação, portanto, não reanalisa nada.
12. Atalhos
| atalho | ação |
|---|---|
Ctrl+O |
Abrir um binário VB6 |
F2 |
Renomear o símbolo sob o cursor |
Shift+F12 |
Analisar referências |
Ctrl+Shift+F |
Localizar no projeto |
Ctrl+G |
Ir para o endereço |
Ctrl+Shift+H |
Mostrar bytes |
Ctrl+Shift+S |
Lista de símbolos |
Ctrl+Shift+B |
Object Browser |
Ctrl+Shift+P |
API Browser |
Ctrl+Shift+G |
Grafo de fluxo de controle |
Ctrl+Shift+A |
Grafo de chamadas |
Ctrl+K |
Bibliotecas citadas |
Ctrl+L |
Programas VB de uma pasta |
Ctrl+F2 |
Ativar/desativar marcador |
F8 / Shift+F8 |
Marcador seguinte / anterior |
Ctrl+Shift+F2 |
Lista de marcadores |
Alt+← / Alt+→ |
Navegação para trás / para a frente |
Ctrl+I |
Salvar a imagem do formulário |
13. Limites conhecidos
Modificar a interface de um executável compilado
O VBReFormer lê a superfície de um formulário e todas as suas propriedades – ele ainda não sabe regravá-las no executável. Substituir um recurso incorporado e adicionar uma propriedade oculta sem recompilar não estão disponíveis. Os patches binários – gravar bytes em um endereço – estão (capítulo 8).
Recursos .ctx de UserControl
Nenhum arquivo .ctx é gravado na exportação. Se o seu projeto contém UserControl com recursos persistidos, essa parte precisa ser reconstruída.
Windows anterior ao 10
Use o VBReFormer Online: um navegador basta, seja qual for o sistema.
O que nenhum descompilador ultrapassa
Comentários, nomes de variáveis locais, constantes nomeadas: não estão no arquivo. Veja o capítulo 5.
14. Perguntas frequentes
Uma função do menu não responde. Por quê? Abra Help ▸ About e veja a lista de capacidades servidas (Capabilities served). Se a função não está lá, não é a interface que recusa: o motor não a serve para este documento. As mensagens do aplicativo também dizem isso explicitamente.
O código exportado recompila como está? Muitas vezes: em uma bancada de 149 projetos, 121 recompilam sem nenhuma alteração. Os outros precisam de uma referência adicionada ou de alguns marcadores tratados.
Os rótulos do meu formulário estão ilegíveis. É a página de código. Um binário VB6 não declara em lugar nenhum a página dos seus textos de designer – defina-a nas Opções (capítulo 11).
Por que meus formulários são mais legíveis do que meus módulos? Porque o VB6 conserva os nomes dos controles e dos eventos para funcionar, enquanto resolve os procedimentos de módulo em simples endereços. Veja o capítulo 5.
Meu executável está empacotado (packer). Isso é um problema? Sim: ele precisa ser desempacotado antes, senão as estruturas do VB6 não ficam visíveis no arquivo.
É possível descompilar um .ocx ou uma .dll ActiveX?
Sim, e o inventário de membros públicos costuma ser mais rico nesses casos, já que o COM exige nomeá-los.
Meu binário é enviado para algum lugar? A leitura do formato, os bytes, a desmontagem e os recursos são processados na sua máquina. A reconstrução do código é executada nos nossos servidores – é esse o sentido da edição Desktop + Cloud.
É legal? Depende da sua jurisdição e dos seus direitos sobre o binário. O uso previsto é recuperar o seu próprio código, ou um código sobre o qual você detém os direitos ou uma autorização.
Veja também
Manual do VBReFormer OnlineExperimente sem comprar