segredos de um exe ( pe file)

Upload: infptavares

Post on 04-Jun-2018

221 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/13/2019 Segredos de um EXE ( PE File)

    1/13

    Os segredos de um .EXE, PE File (Portable Executable)

    Carssimos leitores, neste artigo segue um esclarecimento sobre a estrutura e o funcionamento deum ficheiro executvel (.exe). Estes tm a especial caraterstica de apenas rodar no sistemaoperativo proveniente daMicrosoft, desde o Windows 95at vers!o mais atual.

    " natural #ue todos os utili$adores do %indo&s ' tenham ouvido falar deste tipo de ficheiros, poisele contm o cdigo compilado do programa.or norma, os ficheiros executveis sofrem tambm a denomina*!o de PE Files, em portugussignifica +icheiro Executavel ortatil+. Esta denomina*!o oriunda dos primrdios do Windowsonde decidiram criar um formato binrio capa$ de rodar em #ual#uer outra vers!o do Windows.

    - grupo de ficheirosPE n!o restrito apenas a .exe (executveis), engloba por exemplo bibliotecasde linkagem(DLL), componentesActiveX(!X), entre outros tipos.

    e seguida, vamos dar uma maior aten*!o aos ficheirosEXE, pois alm de serem os mais+famosos+, s!o os #ue levam o formatoPEda forma mais abrangente possvel.

    Ferramentas de Trabalho para o Artigo

    /Ficheiro de Teste (teste.exe).

    ara o presente artigo foi criado um ficheiro executvel, da forma mais pura possvel. - seu cdigovem a seguir.

    Este foi compilado usando oDevC++.

  • 8/13/2019 Segredos de um EXE ( PE File)

    2/13

    / Winex0m editor 1exadcimal. Este serve para identificar as classes do ficheiro de teste.

    /!ordPE0ma aplica*!o para desmembrar executveis. " possvel explorar o formato dos ficheiros de uma

    forma fcil e simples.

    Estrtutura e Funcionamento

    0m ficheiroPEpossu uma estrutura um tanto complicada e complexa, mas ao mesmo tempoorgani$ada, o #ue facilita em muito a nossa vida.

    0m ficheiro composto pelas seguintes sec*2es3

    ". #abe$alhoDOS.%. #abe$alho Windows.

    &. Tabela de 'ec$es.. 'ec$*o ".+. 'ec$*o %.. 'ec$*o -.. .

    ".- cabe*alhoD"n!o tem utilidade prtica para o sistema operativo Windows, este apenas tem amiss!o de avisar o utili$ador #ue n!o pode ser visuali$ado4utili$ado em modo de texto.

    -bservando com aten*!o a imagem acima, possvel verificar #ue o seu conte5do ilegvel.

    %.or outro lado, ' o cabe*alho Windows de extrema import6ncia. 7este est!o embebidas todasas informa*2es bsicas e necessrias para #ue a aplica*!o 4 ficheiro funcione, como o nmero desec$es, tamanho de cada sec$*oe inicio das mesmas, onde iniciar a execu$*o do c/digo, entreoutras de$enas de configura*2es.

  • 8/13/2019 Segredos de um EXE ( PE File)

    3/13

    &... - ficheiro dividido em sec*2es, #ue variam de acordo com o compilador usado, e #ue podemser modificadas pelo utili$ador. Cada sec*!o responsvel por uma determinada caraterstica no

    PE. 8s informa*2es referentes a cada uma das sec*2es est!o arma$enadas na +9abela de :ec*2es+.

    Em seguida s!o apresentadas as sec*2es mais comuns (e oficiais) de um binrio para Win#$.

    a) 'ec$*o de c/digo 0 Code Section( .textou .code ).b) 'ec$*o de recursos 0Resource Section ( .rsrc).c) 'ec$*o de dados 0 1ata 'ection ( .data ).d) 'ec$*o de exporta$*o 0Export data section( .edata).e) 'ec$*o de importa$*o 0Import data section( .idata).2) 3n2orma$es de debug0Debug information( .debug).

    ;ais tarde ser visto o #ue comporta cada uma destas sec*2es.

    0ma das caratersticas sobre os ficheirosPE #ue estes s!o arma$enados em memria da mesmaforma #ue ficam no disco, mantendo a estrutura do ficheiro prticamente idntica nos dois casos.

  • 8/13/2019 Segredos de um EXE ( PE File)

    4/13

    or sua ve$ o conceito por trs da memria virtual #ue ao invs de deixar o soft&are controlar egerir diretamente a memria, o programa invoca o gestor do Windows& este consulta e analisa os

    pedidos da%AM. 9odo este processo dinami$a e aumenta a seguran*a geral do sistema.

    0ma das grandes vantagens a possibilidade de criar diversos blocos de endere*amento, #ueconsiste em restringir o acesso a determinado bloco da memria somente aplica*!o legtima

    (a#uela #ue o originou, isto , a aplica*!o #ue deu origem cria*!o do mesmo). 8travs desta formade acesso possvel evitar #ue um soft&are corrompa a memria usada por outra aplica*!o.

    An6lise t7cn ica doPE

    8#abe$alhoDOS

    - ficheiroPEcome*a com um cabe*alhoD"#ue ocupa os primeiros A> +,tes do ficheiro. 8fun*!o deste cabe*alho verificar se o executvel (.exe) ou n!o um ficheiro vlido, e se este podeser executdo via ;:/-: ou no sistema operativo %indo&s.

    8 5nica fun*!o #ue esta fun*!o fa$ exibir uma mensagem3

    +-is /rogram m0st +e r0n 0nder Microsoft Windows1

    Esta mensagem arma$enada logo aps o cabe*alhoD", numa rea chamada +D" "t0++. Estatem como fun*!o o arma$enamento dos dados #ue possam ser usados na execu*!o do ficheiro. "nesta rea #ue ficam tambm as instru*2es para imprimir o texto destacado acima.

    Em seguida, ser adicionada a estrutura oficial desse cabe*alho, #ue usada pelos programadores.

    B;8ED-:D1E8E= :9=0C9eDmagic %-= eDcblp %-= eDcp %-= eDcrlc %-= eDcparhdr %-= eDminalloc %-= eDmaxalloc %-= eDss %-= eDsp %-=

    eDcsum %-= eDip %-= eDcs %-= eDlfarlc %-= eDovno %-= eDres %-= > dup()eDoemid %-= eDoeminfo %-= eDresF %-= GH dup()eDlfane& %-= B;8ED-:D1E8E= E7:

  • 8/13/2019 Segredos de um EXE ( PE File)

    5/13

    " possvel entender #ue existem diversos itens com tamanhos W%D eDW%D, #ue se foremsomados +fecham+ os A> +,esiniciais do cabe*alho. os nomes anteriores destacam/se dois, osmais relevantes.

    ". emagic9 " um valor de F bItes (W%D) #ue identifica um executvel doD". 7eles fica

    arma$eada a sigla +M2+ (Mark 2+ikowsk,um dos ideali$adores do ;:/-:). Esta sigla imprescindvel a#uando a execu*!o de um ficheiro (.exe), caso o Windows Loadern!o a detete oficheiro deixa de ser reconhecido.

    %. e:32ane; 9 Esta arma$ena o offset(posi*!o) no ficheiro onde est locali$ado o cabe*alho W34.

    7a imagem acima s!o notrios os dados discutidos anteriormente. -s dois primeiros +,tes('D5A)comp2em o +emagic+, contendo a siga!"(valoresA"!33para 'De 5A). J no final do cabe*alho

    D"temos o +eIfanew+, #ue indica o local no 2icheiro onde come$a o cabe$alhoPE.

    -ota3 " favor tomar nota #ue no ficheiro os bItes est!o sempre na ordem inversa. Bsto ,

  • 8/13/2019 Segredos de um EXE ( PE File)

    6/13

    8 primeira dessas estruturas o cabe*alho4-.

    B;8ED79D1E8E=: :9=0C9:ignature %-= ile1eader B;8EDBKED1E8E= LM-ptional1eader B;8ED-9B-78KD1E8E=NF LM

    B;8ED79D1E8E=: E7:

    Como se pode perceber, ele composto por trs itens. - primeiro (Signature) possu a mesmafun*!o do +emagic+. Este apenas identifica o cabe*alho4-, e deve ser composto pela siglaPE&seguido por dois +,tesnulos, fechando os > +,tesdaDW%D.

    " possvel verificar na imagem acima os > +,tes#ue representam o cabe*alhoPE, nomedamente osF 5ltimos +,tes #ue est!o a nulo.

    Em seguida existe o +#i$e%eader+, ocupa os prximos FH bItes do cabe*alho4-, tendoinforma*2es sobre a estrutura fsica do ficheiro executvel. 8baixo apresentada a estrutura.

    B;8EDBKED1E8E= :9=0C9;achine %-=

    7umber-f:ections %-=

    9imeate:tamp %-= ointer9o:Imbol9able %-= 7umber-f:Imbols %-= :i$e-f-ptional1eader %-= Characteristics %-= B;8EDBKED1E8E= E7:

    esta estrutura, os dados mais importantes s!o3

    ". -umberO2'ections9 Bndica o n5mero de sec*2es do ficheiro.%. #haracteristics9 Bnforma se o ficheiro se trata de um .exe&.dllou .ocx.

    Ooltando ao cabe*alho4-, temos por 5ltimo a outra estrutura, apelidada de +/tional6eader+.8pesar do nome dela ser curioso, ela mesmo obrigatria. Esta estrutura possu um tamanho de FF>+,tes, sendo #ue os 5ltimos GFP s!o reservados para o directrio de dados.

    " a maior estrutura, contendo tambm o mair n5mero de valores. Em seguida apresentada.

  • 8/13/2019 Segredos de um EXE ( PE File)

    7/13

    B;8ED-9B-78KD1E8E=NF :9=0C9;agic %-= ;a'orKinQerOersion @R9E ;inorKinQerOersion @R9E :i$e-fCode %-= :i$e-fBnitiali$edata %-=

    :i$e-f0ninitiali$edata %-= 8ddress-fEntrIoint %-= @ase-fCode %-= @ase-fata %-= Bmage@ase %-= :ection8lignment %-= ile8lignment %-= ;a'or-perating:IstemOersion %-= ;inor-perating:IstemOersion %-= ;a'orBmageOersion %-= ;inorBmageOersion %-=

    ;a'or:ubsIstemOersion %-= ;inor:ubsIstemOersion %-= %inNFOersionOalue %-= :i$e-fBmage %-= :i$e-f1eaders %-= ChecQ:um %-= :ubsIstem %-= llCharacteristics %-= :i$e-f:tacQ=eserve %-= :i$e-f:tacQCommit %-= :i$e-f1eap=eserve %-= :i$e-f1eapCommit %-= Koaderlags %-=

    7umber-f=va8nd:i$es %-= atairectorI B;8ED898DB=EC9-=RB;8ED-9B-78KD1E8E=NF E7:

    8pesar do nome das variveis falarem #uase por si, vou explicar de uma forma mais detalhada asmais importantes, como fi$ anteriormente.

    ". AddressO2Entr>Point9Bndica o endere*o relativo (%7A 8 %elative 7irt0al Address) da primeira

    instru*!o a ser executada pelo ficheiro, assim #ue carregado na memria.%. 3mage?ase9" a posi*!o no espa*o relativo da memria (restrita aplica*!o) #ue o %indo&scarregar. 7a maior parte dos casos usado o 7A(7irt0al Address& endere*o relativo) >HHHHHh.

    &. 'ectionAligment9" o alinhamento de cada uma das sec*2es do executvel na memria. Comomencionado no nicio do artigo, normalmente usa/se >(), logo isto corresponde a >HSA +,tes. orsua ve$ o valor do "ectionAligment costuma ser GHHHh (GHHH em hexadcimal representa o valor>HSA no sistema dcimal).

    . FileAligment9:emelhante ao anterior, mas representa o alinhamento das sec*2es no ficheiro em

    disco, n!o na memria. or sua ve$, em disco n!o s!o arma$enadas em blocos de >() mas sim deTGF +,tes, o #ue daria um valor de FHHh em hexadcimal.

  • 8/13/2019 Segredos de um EXE ( PE File)

    8/13

    +. 'i4eO23mage99amanho total do ficheiroPEaps carregado na memria, incluindo os espa*osva$ios deixados pelo "ectionAligment.

    . 1ata1irector>3 Corresponde a GA estruturas do tipo3MAEDA-AD3%E!-%:. Estas contminforma*2es referentes s sec*2es dentro do executvel, como a tabela de3m/orts;Ex/orts, !ode,

    Data, etc.

    Em seguida uma imagem do Win6ex#ue ilusta o cabe$alho WI&(PE 6eader).

    Como se pode observar est!o divididas as partes do cabe*alho.@ermelho 9 'ignature.

    @Bosa9 File eader.@Preto 9 Optional eader.@Amarelo9 1ata 1irector>.

    odendo tornar este processo #uase automtico possvel fa$er a anlise deste tipo de cabe*alhosem programas especficos, como o caso doPeiD,'ordPEou at mesmo um de+0gger, como ocaso do O$$(Dbg.

    (Consultara o separador +-ools+ na pgina).

  • 8/13/2019 Segredos de um EXE ( PE File)

    9/13

    0sando oLordPE, como mencionado no inicio do artigo possvel obter todos o cabe*alho de umaforma automati$ada.

    ara finali$ar o cabe*alho Windows, precisamos falar sobre o3MAEDA-AD3%E!-%:. Comomencionado, ele comp2e os 5ltimos GFP bItes do E 1eader, sendo uma estrutura importantecontendo o endere*o (=O8) e o tamanho dos directrios do executvel.

    B;8ED898DB=EC9-=R :9=0C9Oirtual8ddress %-= B:i$e %-= B;8ED898DB=EC9-=R E7:

    " possvel verificar #ue se trata apenas de dois valoresDW%D (cada um com > +,tes, totali$andoP por estrutura). Esta estrutura usada pelos GA directrios de dados, se s!o apresentados emseguida.

    B;8EDB=EC9-=RDE79=RDEU-=9 e#u HB;8EDB=EC9-=RDE79=RDB;-=9 e#u GB;8EDB=EC9-=RDE79=RD=E:-0=CE e#u FB;8EDB=EC9-=RDE79=RDEUCE9B-7 e#u NB;8EDB=EC9-=RDE79=RD:EC0=B9R e#u >B;8EDB=EC9-=RDE79=RD@8:E=EK-C e#u T

    B;8EDB=EC9-=RDE79=RDE@0 e#u AB;8EDB=EC9-=RDE79=RDC-R=B19 e#u VB;8EDB=EC9-=RDE79=RDK-@8K9= e#u PB;8EDB=EC9-=RDE79=RD9K: e#u SB;8EDB=EC9-=RDE79=RDK-8DC-7B e#u GHB;8EDB=EC9-=RDE79=RD@-07DB;-=9 e#u GGB;8EDB=EC9-=RDE79=RDB89 e#u GF

    ara cada umas destas entradas existe uma estrutura do tipo3MAEDA-AD3%E!-%:. ExistemGA entradas de directrios, e cada uma delas possu P bItes, totali$ando os GFP +,tesfinais docabe*alho W34. er na imagem do Win%exa marca$*o a amarelo.

  • 8/13/2019 Segredos de um EXE ( PE File)

    10/13

    8Tabela de 'ec$es

    8 tabela de sec*2es funciona de forma muito semalhante ao3MAEDA-AD3%E!-%:. 7estatabela est!o contidas diversas informa*2es referentes a cada uma das sec*2es presente noexecutvel. 8 #uantidade de itens na tabela varia com o numro de sec*2es do executvel. Essainforma*!o poder ser vista no40m+erf"ectionsdo cabe*alho W34, neste caso +(ver na imagem

    doLordPE).

    B;8ED:EC9B-7D1E8E= :9=0C97ameG @R9E B;8ED:BWE-D:1-=9D78;E dup()union ;ischIsical8ddress %-= Oirtual:i$e %-= endsOirtual8ddress %-= :i$e-f=a&ata %-= ointer9o=a&ata %-= ointer9o=elocations %-= ointer9oKinenumbers %-=

    7umber-f=elocations %-= 7umber-fKinenumbers %-= Characteristics %-= B;8ED:EC9B-7D1E8E= E7:

    B;8ED:BWE-D:1-=9D78;E e#u P

    ". -ame"97ome da sec*!o, apenas serve para identifica*!o, n!o tem efeito real sobre o executvel.

    %. irtualAddress9%7Ado incio da sess!o. - valor a#ui contido somado com o valor3mage)asedo W34para obter o endere*o real da sec*!o.

    &. 'i4eO2Ba;1ata/ 9amanho da sec*!o em disco.

    . PointerToBa;1ata9 osica*!o da sec*!o dentro do ficheiro (n!o na memria). Este valorfornece diretamente a posi*!o da sec*!o dentro do ficheiro, podendo ser fcilmente encontrada numeditor hexadcimal.

    +. #haracteristics9:!o as caratersticas das sec*2es.

    8s estruturas oficiais de um ficheiro E s!o >3

    #O1E (.text) / Contm as instru*2es e o cdigo do programa.

    B1ATA(.rdata) / ados gerais (incluindo tabela de sec*2es).

    1ATA (.data) / Oariveis iniciali$adas.

    B'B#(.rsrc) /%eso0rces(textos e disposi*!o dos itens na 'anela).

  • 8/13/2019 Segredos de um EXE ( PE File)

    11/13

    Oerificando as sec*2es no KordE.

    8 'ec$es

    Como dito, oPEpode contem bastantes sec*2es. as referidas acima n!o temos a%"%!, por#ue o

    executvel n!o fa$ uso do ambiente grfico 0B ('anelas).

    ". 'ec$*o de c/digo (code)text)

    entro desta sec*!o fica arma$enado o cdigo compilado, contendo todas as instru*2es em binriopara o funcionamento do programa.

  • 8/13/2019 Segredos de um EXE ( PE File)

    12/13

    +. 'ec$*o de importa$*o (idata)

    Esta sec*!o tem o ob'ectivo de criar uma base de dados de todas as fun*2es usadas por umexecutvel.

    . 'ec$*o de 1ebug (debug)

    Esta sec*!o est presente normalmente nas compila*2es de ficheiros, na fase de desenvolvimento.orm, contm dados imensamente 5teis aos programadores.

    3n2orma$es teis9

    - sistema operativo %indo&s trabalha com endere*amento virtual de memria. Bsto #uer di$er #ueas aplica*2es n!o trabalham com endere*os absolutos baseados no ficheiro, mas sim na memria. "

    possvel ent!o citar trs formas de endere*amento3 Offset, ,eR,.

    ". O22set 0 Ba;O22set 9Bndica o posicionamento de algo dentro do ficheiro.

    or exemplo3Pointer-o%awDatana tabela de sec*2es trabalha com offsets, pois indica em #ual+,te(e n!o endere*o de memria) no ficheiro executvel se encontra determinada sec*!o.

    %. A 0 irtual Address

    Endere*o virtual absoluto na memria. " o endere*o criado para a memria alocada para a

    aplica*!o e n!o para toda a memria, digamos #ue o bloco disponibili$ado pelo sistema operativo.

    &. BA 0 Belatie irtual Address

    " o endere*o relativo contado a partir do incio do endere*amento de memra destinado aplica*!o.

    9endo estas diferencia*2es, possvel formar pe#uenas e#ua*2es para um maior esclarecimento.

    BA G A 8 3mage?ase

    A G BA H 3mage?ase

    Oamos analisar um exemplo. :upondo #ue uma aplica*!o #ual#uer possu um3mage)asecomvalor =====h.

    - ,relatioao incio do espa*o de memria destinado aplica*!o passa a ser =====h. :upondoagora #ue a aplica*!o inicia a execu*!o noR,"===h.

    ela formula acima, podemos descobrir #ue o 7Ano incio da execu*!o do programa est noendere*o ="===h(R,XImageaseY =====hX "===h).

  • 8/13/2019 Segredos de um EXE ( PE File)

    13/13

    Espero #ue este toturial tenha sido claro e ob'ectivo. " bastante importante a compreens!o destetipo de ficheiros E, pois sobre eles #ue iremos trabalhar no blog na sec*!o de Engenharia=eversa.

    0ma das vantagens de conhecer e dominar estes ficheiros s!o os sQills #ue se poder!o ad#uirir por

    forma a +personali$ar+ o seu conte5do, dando origem aos chamados crac*s.