ATIVANDO CONTROLES

Este tutorial irá ensinar como alterar o estado de um controle ( um Command Button, nesse caso ) em qualquer aplicativo criado em Visual Basic. Não vamos utilizar o Olly ( pode ser usado também, mas não vale a pena ). Em vez dele, vamos usar um editor hexadecimal qualquer, que tenha alguma ferramenta de busca embutida. Eu gosto do WinHex

Como sempre, baixe o alvo ( codado em VB )

Download: ativeme.zip

Antes de tudo, vou explicar um pouco sobre o código do VB. Ao contrário do que muitos pensam, aplicativos em VB, se compilados em Native Code, geram códigos normais de assembly, que podem ser abertos em qualquer debugger. A diferença está que além do aplicativo, ele utiliza um "linker", uma dll ( MSVBM60.dll ) que contém todas as funções que o VB utiliza. Assim, quando você faz uma comparação de strings por exemplo, ele chama a função "vbaStrCmp" da MSVBM60.dll. Devido a essa conexão entre o executável e a DLL, eles são normalmente ( quando compilados em Native Code ), mais complicados de se fazer o debug.

Apesar de ser mais complicado de reverter códigos assembly criados pelo VB, ele tem algo que também facilita a sua edição. Todas as informações sobre os controles, como o estado, nome, cor, texto e tamanho, ficam armazenados em forma de texto dentro do executável. Isso siginifica que se nós procurarmos pelo texto de algum botão em um editor hexadecimal ( ou até mesmo abrir ele no bloco de notas e procurar ), nós vamos poder alterar as suas propriedades básicas.

Se você já executou o nosso alvo, deve ter visto que o objetivo é habilitar um Command Button, então vamos lá. Abra o alvo em algum editor Hexadecimal.

Como eu disse logo acima, ele armazena as informações dos controles em forma de texto no executável. Que tal procurarmos pelo texto do botão ( Ative-me )? Vá em "Search->Find Text". Selecione o modo ASCII e procure por "Ative-me" ( se as áspas ). O WinHex deve ter o levado até o offset 125A ( linha 1250, coluna A ).

Na parte central você pode ver os valores em hex de cada byte do arquivo, e no lado direito, os caracteres ASCII correspondentes a esses valores. Não vem ao caso explicar o que é cada pedaço ali, a parte importante mesmo é o que está marcado em vermelho. O estado do botão vem logo após o valor que define a sua altura, seguido do byte 08 ( SEMPRE ). A altura do botão no caso é indicada pelo "EF 01" ( na ordem reversa de byte fica 01EFh = 495d ), seguido do byte 08 e de um byte 00. 00 indica que o botão está desabilitado (Enabled = False ), e 01 indica que está ativo ( Enabled = True ). Então basta alterar o byte 00 para 01

Antes Depois
EF 01 08 00 EF 01 08 01

Agora é só salvar o arquivo pelo WinHex ( "File->Save" ). Se você executar o alvo novamente, o botão estará habilitado ;D

F3rGO!