Вы находитесь на странице: 1из 4

Rio de Janeiro, 10 de fevereiro de 2011 Reviso 4 em 12 de abril de 2011

O processo de construo de um analisador de executveis


por Fernando erc!s "fernando#mentebinaria$com$br% & 'icenciado sob a (reative (ommons )$0 &

1. Introduo *m analisador de executveis + um soft,are capa- de prover informa.es sobre um executvel /ue podem ser muito 0teis para pes/uisadores de 1e2urana da 3nformao na anlise de mal,are, forense computacional ou en2en4aria reversa$ 5ste arti2o ob6etiva demonstrar como um analisador de executveis + constru7do, abordando t+cnicas para uma anlise precisa e eficiente$ 8 utili-ado como base, um soft,are de c9di2o aberto c4amado :pev;, de desenvolvimento pr9prio, /ue analisa binrios <5)2 "usados no 1=>indo,s% e pode ser compilador tanto em sistemas *?3@= liAe /uanto no pr9prio >indo,s, pois foi escrito em B?13 ($ O processo de construo exi2e con4ecimento do ambiente e da lin2ua2em de pro2ramao escol4ida$ O estudo necessrio para tal + de 2rande valor na carreira do pes/uisador de se2urana$ 2. O executvel Bntes de iniciar, precisamos compreender o /ue + um ar/uivo executvel$ 1abemos /ue todo e /ual/uer ar/uivo no disco r72ido no passa de uma se/u!ncia de bits arma-enados por um processo elteroma2n+tico nos pratos do disco$ B diferena entre um ar/uivo <) e um <?C, por exemplo, + a forma como esses bits sero interpretados$ ?o caso do executvel, os bits presentes no ar/uivo representam instru.es de m/uina "BssemblD% para o microprocessador da ar/uitetura em /uesto "3ntel, 1<BR( etc%$ Ee6aF Binrio 01010101 Decimal GH Hexadecimal HH Assembly x8 pus4 ebp A!"II *

O mesmo bDte "con6unto de G bits% pode ser interpretado de diversas formas$ Ie fato, + por este motivo /ue um soft,are editor 4exadecimal abre /ual/uer tipo de ar/uivo, inclusive reas do disco diretamente, lendo bDte a bDte sem /ual/uer interpretao$ O ar/uivo executvel + um formato complexo "bem diferente de um ar/uivo em texto puro J clear text, por exemplo%$ Bl+m dos bDtes referentes ao c9di2o do pro2rama em si, + preciso adicionar mil4ares de bDtes /ue constituem informa.es para 2uiar o Aernel do 1O K execuo do binrio$ 8 preciso informar, por exemplo, para /ual ar/uitetura o executvel foi compilado, /uanto de mem9ria ser alocada para rodar o pro2rama, /ue partes do pro2rama em mem9ria sero exclusivas, somente para leitura e mais uma s+rie de diretivas$

#. O $ormato <ara suprir todas essas necessidades de informa.es + /ue existem os formatos$ 5stes definem padr.es /ue um ar/uivo deve se2uir para ser corretamente interpretado pelo seu pro2rama associado ou pelo pr9prio 1O, no caso de um executvel$ Btualmente lidamos basicamente com dois formatos de executveisF o <5 e o 5'F$ O primeiro + utili-ado pela fam7lia >indo,s e o se2undo, pelos sistemas *?3@=liAe$ O que um analisador precisa informar? J dissemos /ue num executvel no 4 somente o c9di2o /ue o pro2ramador escreveu na lin2ua2em de pro2ramao convertido para c9di2o de m/uina$ <or isso, em tese, um analisador deveria nos dar toda esta informao :escondida; no executvel$ Os desenvolvedores dos formatos de executveis 2eralmente liberam esta documentao por/ue todos os compiladores precisam 2erar executveis compat7veis e, por isso, t!m de con4ecer a especificao$ 5nto o primeiro passo para se construir um analisador + obter a documentao do formatoF %ormato &' 4ttpFLLdo,nload$microsoft$comLdo,nloadLMLcLHLMcHb21NO=G01O=4bae=Mfde= dHMMbacG1G4aLpecoffPvG$docx %ormato '(% 4ttpFLL,,,$mentebinaria$com$brLfilesLelf=spec$pdf ?a documentao do formato, constam todos os campos pr+=definidos /ue se espera encontrar num executvel$ as + claro /ue nem tudo + necessrio para se construir um bom analisador$ Bl2uns campos possuem 2rande utilidade prtica, en/uanto outros raramente so necessrios$ (abe a n9s filtrar o /ue + importante para o ob6etivo$ ). O analisador *m c9di2o /ue consi2a interpretar os campos /ue o formato define num executvel precisaF Eerificar se o binrio + de tal formato$ 'er os bDtes do binrio de acordo com a especificao$ 3mprimir os nomes do campo e seus respectivos valores na tela$ 1implesQ ?em tanto$ Ceralmente um analisador + um soft,are pe/ueno /ue roda rpido "por/ue 6 sabe o /ue vai ler%, mas o c9di2o=fonte + 2rande e pode vir a ser complexo$ <ara um exemplo prtico, ima2ine /ue o formato <5 defina o se2uinteF <ara ser um ar/uivo <5 vlido, os primeiros dois bDtes do ar/uivo binrio devem ser 0x4I e 0xHB$

?este caso, o analisador precisa fa-er tal verificaoF

int verify(char *filename) { FILE *fp = fopen(filename, "rb"); char bytes[ !; frea"(bytes, , #, fp);

if (bytes[$! == %&% '' bytes[#! == %(%) ret)rn #; ret)rn $; *


5 fim de papoR 1im, um mal,are no pode alterar estes bDtes, do contrrio o >indo,s no o executar, portanto, no ten4a medo em testar e encerrar o pro2ram caso no 4a6a as letras S no in7cio do ar/uivo, /ue so a representao em B1(33 dos bDtes 4I e HB, em 4exa$ 5xperimente alterar um desses bDtes de um executvel <5 e tente rod=lo para ver o /ue acontece$ Tumm$$$ ser /ue um executvel <5 com o primeiro bDte alterado passaria via e=mail pelo fire,all de sua empresaQ B2ora di2amos /ue a especificao do formato <5 tamb+m di2aF 1N bDtes K frente desta assinatura S encontra=se o checksum do ar/uivo, /ue tem um comprimento tamb+m de 2 bDtes$ Uastaria :andar; pelo ar/uivo para lerF

)nsi+ne" short chec,s)m; fsee,(fp, #-, .EE/0123); frea"('chec,s)m, , #, fp); printf("4"5n", chec,s)m);
<1$F 5m (, o tipo s4ort, /ue abrevia s4ort int, tem 2 bDtes na ar/uitetura 3ntel xGN$ 1e2uindo essa l92ica, podemos imprimir todos os campos de um binrio, bastando apenas se2uir a especificao do formato$ ?o entanto, 4 recursos de lin2ua2em /ue podem facilitar a vida$ Ee6a um trec4o interessante da biblioteca windows.h abaixoF

type"ef str)ct 0I&67E0FILE08E69E3 { :;39 &achine; :;39 <)mber;f.ections; 9:;39 =ime9ate.tamp; 9:;39 >ointer=o.ymbol=able; 9:;39 <)mber;f.ymbols; :;39 .i?e;f;ptional8ea"er; :;39 1haracteristics; * I&67E0FILE08E69E3, *>I&67E0FILE08E69E3;

?o caso do (, se definirmos um tipo >ORI e I>ORI com o tDpedef, obtemos um struct prontin4o para ser usado e com os nomes dos campos$ O mesmo existe para o formato 5'F$ V=% *. %a+endo mais 3mprimir informa.es brutas fa- parte, mas a 2raa de um analisador est em sua capacidade de fa-er mais /ue isso$ <or exemplo, tratar um timestamp ou realar o 5ntrD <oint "5<% de um binrio so t+cnicas simples e /ue vo a6udar muito /uem utili-ar o soft,are$ . Binrios com ,roteo *m bom analisador deve esperar um binrio /ue conten4a um pacAer, crDpter ou /ual/uer outro tipo de proteo$ ?este caso, + necessrio estudar e entender a rotina da proteo, fa-er en2en4aria reversa, e inserir rotinas no analD-er para detectar ou mesmo remover as prote.es dos executveis$ 3sso vai dar um trabal4o extra "e constante, por/ue novas prote.es no param de sur2ir, al+m de atuali-a.es das prote.es existentes% mas sua implementao depende do ob6etivo dese6ado$ B maioria dos analisadores somente recon4ece /ue 4 uma proteo "al2uns di-em /ual + ela, batendo a assinatura contra um banco de dados%, mas poucos a removem sem plu2ins adicionais$ -. ,ev 1oft,are livre "C<'v)% inicialmente desenvolvido para exibir o valor do campo :<roduct Eersion; de um executvel <5$

fernan"o@br)sselsABC pev Dc BEFinappEFrarGHGbrIeJe 1;FF hea"erA &achineA $J#Kc <)mber of sectionsA L 9ateEtime stampA # -M-GKKMN ($GE#LE $#$ at $-A MA$N 6&) .ymbol =able offsetA $ <)mber of symbolsA $ .i?e of optional hea"erA $Je$ 1haracteristicsA $J#$G
<2ina do pro6etoF 4ttpFLLsourcefor2e$netLpro6ectsLpev

8. "oncluso (on4ecer bem os executveis + obri2ao de /uem trabal4a ou pretende trabal4ar com anlise de mal,are ou forense computacional e nada mel4or /ue um estudo diri2ido, /ue force resultados para atin2ir este ob6etivo$ Iesenvolver uma aplicao /ue interprete um executvel :de cabo=a=rabo; + um 9timo comeo$ W

Вам также может понравиться