Você está na página 1de 6

.

NET Anti-Reversing Introduo


Carssimos leitores, este mais um artigo dos demais j publicados no blog, respetivamente sobre a temtica de Engenharia Reversa. Atualmente uma das plataformas com crescimento mais acentuado na indstria de desenvolvimento de software, o .NET Framework. Muitas pessoas no seu dia-a-dia questionam-se sobre: O que o .NET Framework?. O .NET Framework essencial para executar vrios programas que foram desenvolvidos com o uso desta tecnologia da Microsoft. Estes binrios nativos (programas .exe), no momento da sua execuo detm algumas dependncias, estas decretadas aquando o seu desenvolvimento. Uma maneira de solucionar este problema, foi a implementao da plataforma .NET Framework, que oferece todo o suporte aos binrios nativos provenientes das ferramentas Microsoft.

Ele possu dois principais componentes, que so: o Common Language Runtime (CLR), que o mecanismo de execuo que manipula os aplicativos que esto em execuo, e a biblioteca de classes do .NET Framework, que fornece uma biblioteca de cdigo testado e, reutilizvel que os desenvolvedores podem chamar a partir dos seus prprios aplicativos. Fonte: http://msdn.microsoft.com/ptBr/library/hh425099(v=vs.110).aspx

natural, que atualmente as tcnicas e procedimentos com o intuito de alterar o cdigo nativo dos executveis sejam cada vez mais sofisticados. Naturalmente existem tambm diferentes tcnicas e procedimentos para dificultar (diferente de impedir) a modificao do binrio. De entre elas, est por exemplo, a ofuscao, algo que ser abordado mais adiante num artigo deste blog.

Proteger um binrio (uma aplicao) contra engenharia reversa uma obrigao para todos os programadores, ou ento concordamos que o binrio possu uma falha na sua construo. Atualmente este tipo de falha apelidada de vulnerabilidade, que poder trazer prejuzos incalculveis. Mais, esta vulnerabilidade pode ser classificada como uma vulnerabilidade de codificao, melhor dito, um erro cometido aquando a concretizao do cdigo do binrio. Este um dos assuntos j largamente discutido no blog. Pode ser consultado atravs do link a seguir: http://infptavares.blogspot.pt/2013/12/vulnerabilidades-no-software-eataques.html . Nas linguagens provenientes da Microsoft, como o caso do Visual Basic .NET, no h muito a ser dito, pois um binrio poder ser revertido ( crackado) ou corrigido em menos de 10 minutos. Como mencionado anteriormente, natural que existam procedimentos e tcnicas que podem ser implementadas, por forma a diminuir os estragos, isto , dificultar a vida ao engenheiro reverso. Uma maneira de o fazer criptografando o cdigo-fonte. Este processo atualmente apelidado e batizado como ofuscao. Ser um assunto a debater noutro artigo. Sendo este um artigo introdutrio ao tema de anti-reversing, necessrio deixar claro que os mtodos mencionados abaixo podem ser facilmente trespassados usando um debugger, como o conhecido OllyDbg ou IDA Pro. Mas ressalvo que isso conseguido por algum com conhecimento suficiente e afincado na rea. Em seguida so apresentados alguns mtodos de como programadores protegem os seus binrios.

1- Sistema de Licenciamento Online (HWID)


Muitas vezes um programa aps a sua execuo, efetua um request (pedido) de dados, ou faz alguma comparao com uma base de dados online. Por exemplo, supondo que eu disponibilizo um software licenciado via Internet. O processo usado para garantir que s os utilizadores com uma licena vlida o executam o seguinte:

a) Aps a execuo do programa, efetivar um request para o servidor de dados da empresa, no qual este verifica se o MAC Address do pedido consta na base de dados de licenas. b) Se o ponto a for verdade, ento enviado de volta o valor 1. c) Caso contrrio, enviado o valor 0, e o programa no executa, isto , terminado forosamente. A imagem seguinte apresenta um desses requests.

Nomeadamente feito um pedido pgina site.com atravs do URL /check_hwid.php?id=123234453543&uid=allan. Atualmente posso garantir que toneladas de software ainda utiliza este mtodo. Naturalmente o pedido (resquest) foi solicitado via protocolo HTTP. Soa de forma natural eu dizer isto, mas para os demais entendidos da rea, este o isco perfeito para reverter software, pois todos os parmetros (id e uid) do pedido so transportados em texto limpo na rede. Estes dados so normalmente analisados e recolhidos atravs do conhecido sniffer Wireshark. Uma soluo para combater este tipo de mtodos o uso de Transport Layer Security (TLS). Simplesmente o canal de comunicao deixa de ser inseguro e passa a ser seguro. A notao dada a este protocolo a de HTTPS. Naturalmente toda esta implementao poder gerar alguma controvrsia na entidade que disponibiliza o servio, visto envolver questes monetrias, relativamente certificao da ligao (certificado digital).

2- Ofuscadores de Cdigo-fonte
Ofuscadores de cdigo-fonte so programas com mtodos que tentam complicar o cdigo do binrio. Tudo isto feito apenas para dificultar a anlise de um engenheiro reverso. Normalmente estes programas so premium, mas ainda existem alguns gratuitos. Ser um assunto a abordar com maior detalhe e afinco num outro artigo.

3- Antis (anti-reversing)
Dando um passo frente, alguns programadores com uma outra mentalidade, implementam simples funes, de forma a evitar a reverso do binrio. A ideia muitos simples, e traduz-se no seguinte:

TERMINAR A EXECUO DO BINRIO QUANDO UM SOFTWARE DE DEBUGGING OU DISASAMBLING EXECUTADO OU EST EM EXECUO.

Parece um mtodo demasiado simples, mas adotado atualmente por imensos softwares, como o to conhecido Spotify. Basicamente implementada uma rotina associada a um temporizador. Esta rotina chamada (remotamente ou no) no software, e verifica no caso mais simples, o nome dos programas em execuo no terminal (computador). Aps obter os nomes de todos os processos, verificado se determinado processo consta na lista de nomes, em caso afirmativo, a execuo do binrio terminada. Em seguida so apresentados alguns excertos de cdigo relativamente a este mtodo.

Anti OllyDbg

Anti SandBoxie

Anti Wireshark

Anti Fiddler

Com mais ou menos detalhe, so este o tipo de funes implementadas, com o objetivo de proteger o binrio em tempo de execuo. De forma a completar o cdigo disponibilizado anteriormente, demostrado a seguir, como estas funes podem ser invocadas.

Lembre-se, nunca facilite na implementao daquilo que seja, tome as medidas certas, tente informar-se sempre dos processos que deve implementar e mantenha-se informado. importante para si programador, para o prestgio e bom funcionamento do software, da empresa prestadora de servios, e dos utilizadores que visam usufruir do servio. Espero que tenha ficado esclarecido relativamente a este assunto. Adiante, sero discutidas outras implementaes e mtodos de maneira a complicar o processo de reverso. Boa continuao. Qualquer dvida: infptavares@gmail.com http://infptavares.blogspot.pt