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

---------------------------------------------------------------------------------------------____ _.-'111 `"`--._ ,00010. .01011, ''-.. ,10101010 `111000.. ____ ; /_..__..-------- ''' __.' / `-._ /""| _..

-''' ___ __ ___ ___ __ __ __' ___ . __ "`-----\ `\ | | | | __ | | |\/| |___ | | | |__] | |\ | |__| |__/ | | | | ;.-""--.. |___ |__| |__] |__| | | |___ |___ |__| |__] | | \| | | | \ | |__| | ,10. 101. `. ================================================ ======================== `;1010 `0110 : .1""-.|`-._ ; 010 _.-| +---+----' `--'\` | / / ...:::est:amicis:nuces:::... ~~~~~~~~~| / | |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~ \| / | `----`---' [ Aviso ] Este tutorial foi desenvolvido para fins educativos, o autor deste e o frum www.R E-B.net no se responsabilizam por mau uso deste material e, os direitos autorias so totais a o criador, deixando livre o frum Reverse Engineering Brazil de qualquer ato culposo sobre m u tilizao do contedo aqui apresentado. Caso deseje adquirir o software, entre em contato co m o fabricante e legalize sua cpia.

[ .NFO ] Nesse paper vamos trabalhar com uma forma de reversing bem interessante, vamos f azer um serial fishing no programa Driver Checker que est na verso 2.7.5.

Language: Portuguese Autor: unn4m3D_BR contato: unn4BR@gmail.com | unn4BR@hotmail.com Data: 09/11/11 - 23:47 Tipo: Paper

- ndice ============ 0x00 - O software

0x01 0x02 0x03 0x04 0x05

Instalao e Tools Anlise Debugando Pescando o Serial Agradecimentos

0x00 - O software Primeiramente vamos conhecer nosso alvo certo? Ok! O Driver Checker, um programa que em particular, utilizo bastante quando preciso achar um driver. As vezes encontro c omputadores que precisam de uma formatada bsica ou tirar algum vrus, que seja.. e preciso enco ntrar o driver n? O Driver Checker bem til para esse propsito, muito intuitivo, fcil e rpido. Ento, tenho certeza que iro gostar.

0x01 - Instalao e Tools Podemos baixar o Driver Checker - agora chamaremos de DC, ok? - no seguinte ende reo: - http://www.driverchecker.com/ Aps baixar, instalamos normalmente.. Para efetuar a anlise dele, vamos precisar ap enas de dois softwares com as seguintes finalidades: O primeiro ser um scan de cabealho PE, para verificar se o software est compactado, ou protegido, e em qual linguagem foi feito. Para isso vamos usar o PeID. - http://tuts4you.com/request.php?398 O segundo ser o nosso debugger (vamos utilizar o OllyDbg), que pode ser encontrad o em: - http://www.ollydbg.de/ Caso queiram utilizar uma outra verso, podem pegar na internet, eu estou utilizan do o OllyICE (modificado pelo Hacnho), e quem quiser, poder baix-lo aqui: - http://tuts4you.com/request.php?2375 Bom, agora com as tools em nossas mos, podemos cair dentro e realizar nosso rever sing. :)

0x02 - Anlise Vamos abrir o PeID e passar o scan no DC, logo, percebemos a seguinte informao: - Borland Delphi 6.0 - 7.0 [Overlay] timo! Sabemos que o DC foi feito em Delphi e est sem proteo alguma, para confirmar i sso vamos na setinha dupla [ -> ] (abaixo do Exit) Plugins > Kripto ANALyzer. Vai ab rir uma

janela com as informaes de criptografia encontradas no nosso target (alvo). Vemos as seguintes criptografias: ADLER32, BASE64, CRC32, MD5 e ZLIB com seus re spectivos endereos ao lado, no existe problema algum. Essas criptografias no nos atrapalharo n a nossa busca do serial.

0x03 - Debugando Agora que temos certeza de que no existe nenhum packer ou compactao no .exe do DC, vamos debugar e seguir na nossa meta.. Pescar um Serial vlido.. :D Abrimos no OllyDbg nosso programa, e ento vamos rodar. Para isso, pressione F9. Ele no deve dar qualquer erro, ento, aps executar, vamos em: Register, que est no lado superior direito. Logo ao abrir a tela de registro, temos um textbox com o cursor e abaixo um exemplo de serial, que seria algo do tipo: - 1234-1234-1234-1234 Ento, vamos digitar o seguinte serial para teste: - 1111-2222-3333-4444-5555-6666-7777-8888-9999 Porque esse serial? Porque conforme vamos debugando, saberemos em qual parte est amos, caso precise saber exatamente a posio de cada nmero, podemos ir mudando, mas, para comeo, utilizaremos esse mesmo. Pois uma boa sequncia para esse tipo de serial, e botei ele bem maior que o exemp lo, porque? Eu que quis mesmo, no teve um motivo pra isso .. :D Aps nosso clique no boto: Submit, temos a seguinte mensagem: - Invalid serial number! Please try again... Que triste.. ''/ ahiahaihiahaiha, ok, vamos nos aproveitar dessa mensagem e cheg ar no ponto de validao. Para isso, aps pausado pressione ALT + E, assim vamos em uma tela chamada: Executables modules, onde vemos os assemblies carregados por nosso targ et, procuramos o exetutvel do DC e com dois cliques na aba Path, vamos para o cdigo de ntro dele. Em seguinda clique com o boto direito na tela, Search for > All referenced text s trings.. CTRL + HOME para subir tudo e boto direito novamente, Search for text.. Esse procedimento nos permitir encontrar referncias de strings dentro do executvel, muito compiladores e os prprios programadores, deixam algumas referncias, que so muito utilizadas para o reversing. Ento, Digite: serial, pois uma parte da mensagem que recebemos. Desmarque: Case s ensitive, caso esteja marcado e marque: Entire scope e OK. A primeira parada nossa mensage m: - 004E571B | MOV ECX, DriverCh.004E5770 | ASCII "Invalid serial number! Please t ry again..."

Ponha um BreakPoint em todas as referncias dessas mensagens, pressione F2 em cima da mensagem, depois CTRL + L para procurar outras e, todas que voc achar, pressione F2. Depois disso, rode o programa e tente novamente efetuar o clicar no Submit, logo ver que o programa ir "brekar" (parar onde voc ps o BreakPoint) e com isso, podemos ver acima da mensagem de erro, a mensagem de: Congratulations, e mais acima um s alto JNZ. Ele o primeiro a ser visto, logo acima das mensagens. Explicao sobre o salto: - [ http://faydoc.tripod.com/cpu/jnz.htm ], o salto JNZ Significa que.. somente saltar, se o flag Z for igual a zero, como nosso serial e st errado, o flag ser zero e iremos saltar para a mensagem de erro.. E agora? Como mudar iss o? :D

0x04 - Pescando o Serial OBS .: Para pescar o serial sem perder tempo, vamos utilizar uma forma simples e muito fcil. Para entender o porque eu pular algumas coisas, e ir direto ao ponto, segue a ex plicao. Todo programa feito em Delphi tem essa estrutura que vocs podem ver no DC, cada l inguagem tem sua forma de "montar" o programa, meio obvio isso n? Pois bem, com essa forma de montar o programa, que ficamos acostumados a apenas olhar para o assembly e sabe r onde est, a validao, ou, onde devemos por um BreakPoint sempre ter a mesma "cara". Como eu j sei que acima desse JNZ sempre existir uma CALL, que o local onde a comp arao do serial feita, logo, ponho ali um BreakPoint com F2 e fao o mesmo processo de r odar novamente e clicar em Submit, pois isso ir gerar a mensagem de erro e antes disso , ir parar no meu BreakPoint, e ai que comea nossa anlise do cdigo. Paramos ento na CALL, e o que vemos? Um nmero que parte do meu serial no registrad or EAX, e outro que est em hexa no registrador EDX, logo, podemos supor que seja um valor comparado com nosso serial.. ento, vamos mudar e ver no que da .. :D EAX 0214E414 ASCII "66655" <-- AQUI UM PEDAO DO MEU SERIAL DIGITADO ECX 00000000 EDX 0156ECAC ASCII "4E314" <-- AQUI UMA PARTE DO SERIAL VERDADEIRO Como meu serial foi bem sugestivo, eu j sei onde mudar, e pelo que vemos, ele est

invertido, logo o que tenho que fazer : 1 - Achar a parte "66655" que na verdade "55666", pois est invertido (eu sei diss o pois l no comeo eu digitei o serial todo em ordem). 2 - Escrever no lugar do "55666" o valor de "413E4" que seria "4E314" invertido. 3 - Rodar o programa novamente e verificar se ele passa do salto JNZ sem pular. Meu serial modificado ficou da seguinte forma: - 1111-2222-3333-4444-5541-3E46-7777-8888-9999 Agora que alterei o meu serial antigo, empregando a nova alterao, verifico que com o BreakPoint na CALL, possvel ver claramente nos registradores a comparao abaix o: EAX ECX EDX EBX ESP EBP ESI EDI EIP C 0 P 1 A 0 Z 1 S 0 T 0 D 0 O 0 EFL ST0 ST1 ST2 ST3 ST4 ST5 ST6 ST7 0214E414 00000000 0156ECAC 00000000 0012FB94 0012FC10 00000000 0214AFCC 004F477C ES 0023 CS 001B SS 0023 DS 0023 FS 003B GS 0000 ASCII "4E314" <-- AQUI ASCII "4E314" <-- AQUI

DriverCh.004F477C 32bit 0(FFFFFFFF) 32bit 0(FFFFFFFF) 32bit 0(FFFFFFFF) 32bit 0(FFFFFFFF) <-- FLAG Z = 1 32bit 7FFDE000(FFF) NULL

LastErr ERROR_SUCCESS (00000000) 00000246 (NO,NB,E,BE,NS,PE,GE,LE) empty -0.7618686529160622080e+4731 empty -UNORM FDD8 7FFDE000 00120000 empty 1.0092781390466328576e+2415 empty -UNORM FBE0 01197A60 00090270 empty -UNORM 8098 00000030 890FC020 empty 9.9712719555298426880e-4933 empty -UNORM FAEC 00000000 B140FA0C empty -5.4919037670638080000e+4526 3 2 1 0 E S P U O Z D I FST 4000 Cond 1 0 0 0 Err 0 0 0 0 0 0 0 0 (EQ) FCW 1372 Prec NEAR,64 Mask 1 1 0 0 1 0 Com isso, nosso salto JNZ, encontra-se com o flag Z = 1, o que quer dizer que no pula.. Seguimos o fluxo e encontramos a mensagem.. - 004F4868=DriverCh.004F4868 (ASCII "Congratulations! This copy is registered su ccessfully.") Aqui uma 004F4728 serial 004F472D nvertido 004F4730 004F4733 parte do cdigo comentada para estudos.. |. E8 1308F1FF CALL DriverCh.00404F40 ; inverte uma parte do |. 8B45 AC |. 8D55 B0 |. E8 2089FBFF MOV LEA CALL EAX, [LOCAL.21] ; eax recebe o valor i

EDX, [LOCAL.20] DriverCh.004AD058 ; gera um hash

004F4738 |. 004F473B |. 004F4740 |. 004F4745 |. 004F474A |. 004F474D |. meu serial 004F4750 |. 004F4755 |. u serial 004F4758 |. 004F475B |. 004F4760 |. 004F4763 |. a comparado 004F4766 |. 004F476B |. a comparado 004F476E |. 004F4771 |. 004F4776 |. 004F4779 |. 004F477C |. ARA O SERIAL 004F4781 |.

8B45 B0 B9 05000000 BA 01000000 E8 9609F1FF 8D55 A8 8B45 DC E8 FF4BF1FF 8B45 A8 8D55 CC E8 6C4EF1FF 8D55 A4 8B45 EC E8 E94BF1FF 8B45 A4 8D55 C8 E8 564EF1FF 8B45 CC 8B55 C8 E8 4B08F1FF 75 3D

MOV MOV MOV CALL LEA MOV CALL MOV LEA CALL LEA MOV CALL MOV LEA CALL MOV MOV CALL JNZ

EAX, [LOCAL.20] ; eax com o hash ECX, 5 EDX, 1 DriverCh.004050E0 EDX, [LOCAL.22] EAX, [LOCAL.9] ; eax com um pedaco do DriverCh.00409354 EAX, [LOCAL.22] ; eax com pedaco do me EDX, [LOCAL.13] DriverCh.004095CC EDX, [LOCAL.23] EAX, [LOCAL.5] ; eax c/ valor que ser DriverCh.00409354 EAX, [LOCAL.23] ; eax c/ valor que ser EDX, [LOCAL.14] DriverCh.004095CC EAX, [LOCAL.13] EDX, [LOCAL.14] DriverCh.00404FCC

<- CALL QUE COMP

SHORT DriverCh.004F47C0 <- NOSSO SALTO

Aps esse trabalho todo, podemos ir em: About para verificar, e l obtemos a informao: - Version 2.7.5 - Serial Number: 1111-2222-3333-4444-5541-3E46-7777-8888-9999 E ento, temos nosso DC registrado lindamente .. ehehe Poderiamos at dar uma analisada melhor e gerar um keygen pra ele, porm no esse o propsito desse paper, ento, fica aqui a sugesto e a parte do cdigo comentanda. O pedao de rotina onde a comparao feita, exatamente este. Basta um pouco de pacincia para entender esses nmeros que so comparados e geram o serial para o DC.

0x05 - Agradecimentos Agradeo a oportunidade de est escrevendo esse paper sobre reversing.. aos teams: - BRC - CTB - RE-B - ARTeam - SnD - AT4RE Ao pessoal do CrackSLatinoS por tudo.. e em especial para minha princesa que me ajuda a crescer, entende esses meus mom entos nerds, est comigo sempre e a quem devo meu amor.. Mayara Rangel. Alguns, posso ter esquecido de agradecer, me perdoem.. Pois, igualmente vocs merecem meu agradecimento e gratido.

Um forte abrao e bjxx pra todos.. :D unn4m3D_BR - Reverse Engineering Brazil [ 2011 ] _____ .: :. (_________) __ | | .: :. | | (______) / / || / / || / / _ _ || | | (_) (_) \\010| | \\.0101010110. .0101011010101. .100101010101011. .^. .^. .^. .^. .^. .^. .^. ack_syn eremitah mentebinaria bugsec c00kies Von natur Ping unn4m3D_BR .^.

, .; _..--, ;': ' ',,,\ .^. ;_; '|_ ,' | .;;;;., ,': ,;::;:::.. ..;;;;;;;;.. :_,' .' '':::;._.;;::::''''':;::;/' . ':::::::;;' '::::: ':::' ; ,,,_/ ..' ,' ' ''' .^. /':::;

.^. .^. '. .;' .;:; ...;: .^.

.^.

..:::::;:..::::::::..

,'; ':::;;...;::;;;;' ';;. .^. ; ; ';;:;::::' '. ;' ''\ ' ' ;'. .^. .^. : : .^.

200.218.196.14/zine/ cogumelobinario.hashit.org mentebinaria.com.br/zine/ bugsec.com.br/zine/ c00kies.org/Zine/ 0fx66.com/files/zines/cogumelo-binario/call/ ping.eti.br/docs/01/05/ re-b.net/zines/cogumelo-binario/

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