Segurança – Quebrando senhas de projetos VBA do Microsoft Office
Essa é uma informação um pouco perigosa, devo admitir. Ela compromete uma série de desenvolvedores de aplicativos baseados em VBA, principalmente no contexto de produto.
Mas como considero isso mais uma “falha” do que um “macete”, publicarei aqui a informação para registro e possíveis providências.
O lado bom
Os desenvolvedores VBA recorrem geralmente à proteção de seus projetos pelo mecanismo de proteção padrão oferecido pelo editor. Clicando com o botão direito sobre o projeto, selecione o opção VBAProject Properties (Propriedades do Projeto VBA):
A seguinte janela será mostrada após a seleção da aba Protection (Proteção):
Até aqui é o tradicional. Basta informar a senha nos dois campos e travar o projeto para visualização (lock project for viewing) que teremos nosso projeto VBA bloqueado para visualização e edição na próxima vez em que o arquivo for aberto.
O lado mau
Qualquer veterano na linguagem VBA sabe que existem uma série de programas que “quebram” as senhas destes projetos. Na verdade eles a sobrescrevem de alguma forma. O resultado é que os projetos, mesmo protegidos por senha ficam vulneráveis.
Geralmente estes softwares usam de artimanhas que vão desde a força bruta (tentativa e erro) ou eles entram mesmo no âmago do arquivo mexem no que não devem, substituindo assim a o dado devido.
Esses softwares são pagos na maioria das vezes, o que pelo menos caracteriza um pouco de profissionalismo por parte de seus fabricantes.
Concordo que em alguns casos existe o esquecimento por parte do autor, mas diria que este são a minoria. Geralmente alguém que tem conhecimento em VBA suficiente para construir um projeto que precisa ser protegido por senha, costuma ser organizado com este tipo de coisa. Temos uma outra situação onde empresas geralmente sofrem com funcionários de má fé que vão embora e largam arquivos bloqueados.
Estes são os únicos casos em que vejo necessidade da existência deste tipo de aplicativo, pois trata-se de cuidar da propriedade intectual do proprietário do código fonte.
Tirando isso, o resto pode ser caracterizado como violação de propriedade.
Bom, posto isso, vem aí a má notícia.
Quebrando o projeto VBA
É um pouco assustador, mas vamos lá.
Para ter acesso ao código de um projeto VBA, é fácil e barato. Basta baixar o Open Office neste endereço:
http://www.broffice.org/download
Para quem não sabe, o Open Office é uma suíte de aplicativos de escritório concorrente do Microsoft Office, assim como o Star Office. Não vou discutir as capacidades do Open Office, além da importante característica que ele possui de também ter disponível um suíte de programação muito semelhante ao VBA, também baseada no Visual Basic, capaz de construir aplicações da mesma forma.
Quando você abre um arquivo do Excel ou Word no aplicativos respectivos no Open Office (Calc e Writer), você tem acesso a todo o conteúdo do arquivo da mesma forma, bem como a todo o projeto VBA, incluindo módulos e formulários.
Muito bem, isso tudo é muito bom pois significa uma compatibilidade quase que universal entre arquivos e aplicativos. Com isso não seria necessário conversões na hora de trocar arquivos com outros sistemas.
O problema é que o Open Office abre o projeto em VBA, mesmo que ele esteja protegido por senha.
isso dá a qualquer um acesso completo a todo o código do projeto.
Não há como demonstrar isso aqui, mas para testar:
- crie um novo arquivo no Excel ou Word
- abra o VBA
- adicione alguns módulos e formulários
- adicione alguns controles a estes formulários e alguns códigos simples
- depois disso, proteja o projeto com senha e bloqueie-o para visualização (como mostrado acima)
- salve e feche o arquivo
- abra-o novamente no Microsoft Office para certificar-se de que o projeto está mesmo bloqueado para visualização
- após certificar-se, abra o Open Office Calc para abrir o arquivo de Excel ou o Open Office Calc para o abrir o arquivo do Word
- através do menu ferramentas, abra a tela de macros e selecione um objeto do projeto VBA e clique em editar para visualizar o código
Seguindo estes passos fica provado o fato do acesso extremamente facilitado ao projeto VBA através de um software livre e gratuito.
Conclusões e comentários
Contra a tecnologia não há nada que se possa fazer. Pelo menos com aquilo que veio da tecnologia.
Não dá para saber de quem é a culpa, se é que há algum culpado nesta história.
Da Microsoft por não promover um esquema de segurança mais eficaz?
Da fundação Open Office por não respeitar o esquema de segurança promovido pelo Microsoft Office?
Eu tenho minha opinião. Fica aqui o protesto pelo fato e o agradecimento a blogosfera por permitir descobrir e divulgar a informação.
Abraços
Tomás


Olá!
Achei muito interessante seus comentários, gotaria de saber existe algum software que descobra a senha do projeto visual basic do Access. Você pode me ajudar?
Grato,
Augusto.
Augusto,
Dê uma olhada nisto:
http://www.tomasvasquez.com.br/blog/microsoft-office/recupere-senhas-perdidas-ou-esquecidas-para-aplicativos-do-microsoft-office
Abraços
Tomás
Ok, Tomás.
Obrigado pela dica.
Augusto.
Achei interessante, e bem explicado mas postei estas informações a um tempo na internet e não se encontra disponível…
Muito boa sua colocação
Certo, agora e como faço pra quebrar a senha de um suplemento, como o Solver, que ficam lá no Project Explorer? Você poderia me ajudar?
Mateus,
O artigo mostra uma forma de fazer a quebra de senhas, mas no intuito de fazer um protesto, não oferecer um guia ou passo a passo de como realizar a proeza.
Fica por conta e risco. Dê uma olhada num link que já foi passado anteriormente:
http://www.tomasvasquez.com.br/blog/microsoft-office/recupere-senhas-perdidas-ou-esquecidas-para-aplicativos-do-microsoft-office
Abraços
Tomás
Mateus,
Sou iniciante no VBA, e gostaria de saber, já que a modos de se quebrar essa senha.. qual a melhor maneira de proteger um programa desenvolvido em VBA??
Obrigado
Artur,
Hoje em dia eu utilizo a proteção tradicional. Os leigos não se atreverão a mexer nisso e os experts não comprometerão um aplicativo desses em produção O farão por pura curiosidade. Agora, se o código contém informações sigilosas ou uma regra muito particular, eu não faria em VBA. Mesmo que utilizasse Excel, eu faria um aplicativo em código compilado, usando C++, Visual Basic ou .NET. Todos estes integram facilmente com os aplicativos no Office.
No seu caso, analise o quanto é necessário proteger este projeto. Em muitos casos, vi pessoas criarem “monstros” onde eles não existiam, compremetendo o andamento de um projeto com um cuidade desnecessário.
Abraços
Tomás
Tomas,
Proteçao tradicional que vc diz é só a senha?? ou tem alguma outra coisa?? estava pesquisando e descobri que existe um ofuscador de codigos.. mas nao achei nenhum pra VBA, vc conhece algum free??
No meu caso tem uma regra particular ( uma rotina de calculos), mas eu uso na área academica e quero proteger a idéia…. mas quero distribuir o software… e nao tenho familiariadade com outras linguagens
Obrigado pela ajuda
Abraço
Artur
é possivel usar este processo com um arquivo do ms access ? como fazer pra quebrar senha do vba do access
Fabio,
Não fiz o teste. Tem que haver um programa compatível. Se tiver sucesso, avise o pessoal.
Abraços
Tomás
Artur,
Sim, é só a senha. Quanto a ofuscar o código, isso não é possível no VBA pois ele não é compilado. Precisa ser em alguma linguagem nativa que já citei anteriormente. Quanto a sua regra, pense bem o quanto ela deve ser protegida. Como comentei, às vezes não vale a pena criar um transtorno sobre algo que não deveria sê-lo. Já escrevi isso uma vez. Tente pensar da seguinte forma:
Se você escrever em um documento a palavra “CONFIDENCIAL”, ele não chamará mais a atenção do que se ele não tivesse essa tarja?
Abraços
Tomás
Só uma correção (por mais que seja óbvio)… o texto deveria ser:
” (…) ou o Open Office Writer para o abrir o arquivo do Word “
Opa!
Valeu a dica!
Abraços
Tomás