Caríss Caríssimo imoss leitor leitores, es, o presen presente te tutoria tutoriall é uma exten extensão são do anteri anterior or pub public licad adoo na secção secção de " Engenharia Reversa" deste deste blog , pode ser consultado no seguinte link : http://infptavares.blogspot.pt/!#//tutorial$$crac http://infptavares.blog spot.pt/!#//tutorial$$crac%ar$um$executa %ar$um$executavel.html vel.html &anhou o título de extensão por'ue, em termos de complexidade e similaridade, é bastante pr(ximo ao anterior. Questão : "Então mas o porquê deste tutorial? "
)este blog e no mundo mundo da eng engenh enhari ariaa reversa, reversa, é muito muito comum comum o uso de dois disassamblers / debuggers de c(digo, nomeadamente o IDA Pro e o Ollydbg .
* principal diferença entre estes dois softwares é o grau de complexidade 'ue um possuí em relação ao outr outro. o. + IDA Pro é um software bastante completo, mas apresenta um grau de dificuldade bastante superir ao OllyDbg . *'uando a criação de artigos e tutoriais de engenharia reversa, é dada a preferncia ao Olly por ser um software de an-lise não tão detalhada, mas pelo contrário, mais simplista . + tutorial anterior foi construído tomando como base o software de debugging OllyDbg . uerendo Pro, foi ideliado o seguinte tutorial. mostrar aos leitores as potncialidades do IDA Pro Cenári Cená rio: o: 0 disponibiliadada uma aplicação 1. exe2, 'ue é ramificada de duas formas. 3e o utiliador ao inici-$la introduir a password correta, correta, uma mensagem de sucesso é apresentada, caso contr-rio, sucessivas mensagens mensagens de tratamentos de erros e proteção são mostradas na 4anela. -Ferramentas de Trabalho Trabalho -Aplicaão !crac"-me#e$e% : 5sta é a aplicação de trabalho. 0 necess-rio faer download da da
respetiva. IDA Pro : 5sta ferramenta é um debugger 'ue 'ue ser- necess-rio para interpretar o execut-vel e - IDA efet efetua uarr alte altera raç6 ç6es es no c(di c(digo go assembly do mesm mesmo. o. 0 uma uma ferra ferrame ment ntaa bast bastan ante te comp comple leta ta de disassembling e e debugging .
-C&di'o-(onte da aplicaão ) e$ecutá*el
Como mencionado no artigo anterior 1 link 2, 2, por forma a motivar e deixar claras as instruç6es assembly aprese apresenta ntadas das,, o c(d c(digo igo$fo $fonte nte da aplic aplicaçã açãoo é dispo disponib nibili iliado ado.. Com isso, isso, existe existe a possibilidade de comparação entre c(digo$fonte e instruç6es assembly. Convém Convém lembra lembrarr 'ue 'ue,, o artigo sobre " +ntroduão ao Assembly" disponível no blog é imprescindível para este e os restantes r estantes tutoriais do tema. 1+ link para para o tutorial é o seguinte: http://infptavares.blogspot.pt/!#//introduca http://infptavares.blogs pot.pt/!#//introducao$ao$assembl7 o$ao$assembl7.html .html .) + c(digo$fonte relativo 8 aplicação em estudo é apresentado em seguida.
Como é possível perceber, o c(digo$fonte apresentado é evidente. 5le é muito parecido ao tutorial anterior, como 4- referido algumas vees. )este são capturados os valores introduidos na consola 1linha 1linha de comandos comandos22 pelo utiliador utiliador.. 5xistem 5xistem duas combinaç6e combinaç6ess possíveis possíveis,, a correta e a não correta. Password Errada.2 # :9 crac"-me#e$e teste 1 Password Password Correta.2 # :9 crac"-me#e$e ../ 1 Password
e seguida é exibida uma imagem 'ue retrata estes casos.
* password corr corret etaa é 1337 . ; part partida ida,, o utili utilia ado dorr não não sabe sabe a password correta para obter a mensag mensagem em de sucess sucessoo " Password Correta! Parabens!". 5xis 5xiste te a nece necess ssid idad adee de !ra!kar a aplicação. 5m seguida, são devidamente comentados e efetuados todos os passos necess-rios para obtenção da password correta. correta.
0asso: Carre'ar o e$ecutá*el !aplicaão% !apl icaão% no +1A 0ro# 0ro#
*p(s o drag and drop do execut-vel, ele é carregado em mem(ria e no debugger .
0asso: 1isassembled Code
5m seguida, procurar no IDA Pro o separador IDA ViewA 1por defeito este é selecionado2, e em seguida, maximiar a 4anela, como apresenta a imagem abaixo.
0 possível faer d rag and drop do fluxo apresentado, por forma a navegar no diagrama. Caso o execut-vel possua muitos blocos, é possível faer uma mini navegação através do raph overview, posicionado no canto inferior direito, como como mostra a imagem acima. =ma das vantagens evidentes deste software em relação ao OllyDbg é é sem d>vida a estruturação do execut-vel por blocos num fluxo, pois torna evidente os saltos 1 #$%P& 2 entre blocos. 5ste software é bastante bastante user friendly, visto 'ue se houver a necessidade de a4ustar o fluxograme 8 4anela, basta utiliar as ferramentas de a4uda. * imagem abaixo, ilustra o uso do Fit Window, por forma a centar o fluxograma.
0 poss possív ível el obse observ rvar ar na segu seguin inte te imag imagem em 'ue 'ue exis existe tem m ? bloc blocos os de c(di c(digo go dist distin into tos, s, fora foram m assinalados com ? labels diferentes, nomeadamente de A-E . 5stas labels tm uma correspondencia no c(digo. 3er- visto mais abaixo.
)ão existe a necessidade necessidade de perceber todas as instruç6es, visto 'ue apenas duas delas são importantes, nomeadamente as duas >ltimas. cmp 5ebp6ar'738 , 9 short loc7;.C loc7;.C
Como visto nos artigos anteriores anteriores de engenhari engenhariaa reversa, a instrução instrução !mp 1comparar2 fa uma comparação entre duas vari-veis. )este caso, é verificado se o valor de entrada no parametro arg é igual a . 5m seguida é feito um salto para outro bloco do fluxograma dependendo do valor da lag . 0asso.: C&di'o-Fonte
@oltando a observar o c(digo$fonte do execut execut-ve -vell é possív possível el perce perceber ber onde onde estas instruç6es assemlby encaixam no c(digo.
ual'uer operação de (ump salta para um offset dependendo dependendo do tipo de instrução e do valor das flags. )e )est stee caso 9 short loc7;.C loc7;.C fa um salto para o loc7; loc7;.C .C## 5ste offset estrepresentado a laran4a e corresponde ao bloco da direita na seguinte imagem.
Aaendo uma an-lise pormenoriada, o bloco da es'uerda é o bloco mau, e o da direita o bloco bom. Bsto é, caso o parametro arg se4a diferente de , o programa ir- cair sempre no bloco da es'uerda, e autom-ticamente o programa é terminado. Caso arg"#$ então o fluxo do programa é enviado para o bloco da direita.+ processo é o mesmo, neste é feita uma comparação com o valor de entrada, se for igual a " ../". ependo da flag é é realiado r ealiado um determinado (ump. 5ste processo é exatamente igual 8 an-lise feita no tutorial anterior.
+s casos de interesse estão marcados a laran4a. 0 possível analisar # instruç6es muito importantes. mo* 5esp6>h6*ar7;8 5esp6>h6*a r7;8 , o((set a../ @../@ test ea$ , ea$ 9n short loc7;3.3 loc7;3.3
Bnicialmente é colocado o valor " ../" numa vari-vel, através da instrução mo&. ais abaixo, é feita a comparação através da instrução test . * instrução 'n( fa fa o salto se a comparação não (or introduiada pelo utiliador (or di(erente de ../ então não ero, o 'ue 'uer dier 'ue a password introduiada B atin'ido o bloco dese9ado
0 f-cil perceber 'ue a password com com privilégios é ../. *ntes de faer o teste via linha de comandos, é feita a comparação de cada bloco de c(digo com o c(digo$fonte do execut-vel.
@erificando a comparação entre o c(digo assembly do exec>tavel e o pr(prio c(digo$fonte, é f-cil de perceber toda a correspondncia. 0asso; : Crac"
)este ponto, apenas apenas falta verificar se se a password com com acesso previligiado é mesmo ../.
)ão houve enganos. enganos. )os pr(ximos artigos artigos de engenharia engenharia reversa serão abordados outros pormenores e técnicas técnicas do tema. Doa ContinuaçãoE @isite: in(pta*ares#blo'spot#pt