tRINC@DO cRACKING tUTORIAL 10

 

http://thccracking.tsx.org - tHC cRACKING pAGE
http://brcrackers.cjb.net - BrCrackers

 

Crackeando o Norton Utilities 3.0 Trial

 

1.Introdução:

O Norton Utilities é uma suite de programas para  proteção, manutenção e melhoramento do desempenho de seu computador (diga-se de passagem a melhor suite). A versão demonstração, que funciona por 30 dias tem os mesmos recursos da completa menos o Live Update! e o Rescue disk.

Você pode fazer o donwload procurando pelo arquivo nu3_trybuy.exe no ftpsearch ou ir até o site da Symantec e fazer o download. O arquivo tem 38,6 MB, mais vale a pena, pois os programas são bem úteis!

Lembre-se que se vc gostar do programa, compre a versão completa nas lojas ;)

2. Ferramentas:

W32Dasm 8.x

Ultra Edit-32 (www.ultraedit.com)

3. Curiosidades sobre a proteção:

Uma coisa interessante se vc olhar no diretório do Norton Utilities é que todos os arquivos executáveis dos programas (sd32.exe, ndd32.exe, etc.) tem o mesmo tamanho: 250.880 bytes; E que existe um arquivo *.dl_ para cada um deles!

Vamos tirar uma conclusão disso: O programa executável em si na verdade é a rotina de proteção, que depois chama o executável de verdade que está em *.dl_ . Como todos são do mesmo tamanho, concluimos que a proteção em si é a mesma pra todos, só alterando alguns parametros e por isso todos os programas iniciam com a mesma nag mostrando quantos dias faltam!

4. Crackeando:

A primeira coisa a fazer é disassemblar, no W32Dasm, uma cópia de qualquer um dos arquivos executáveis. Utilize o NORTON.EXE só pra bater com o tutorial.

Clique em "Strn Ref" e procure por algo que indique que o programa expirou. No caso vc encotrará:

"Your free trial period is over. "

Clique duas vezes nessa string e vc cairá no meio da função que chama a nag e verifica se está expirado. Será algo parecido com:

* Possible StringData Ref from Data Obj ->"Your free trial period is over. "
                                                                  ->"Please choose to buy the software "
                                                                    ->"or click on Exit to exit this "
                                                                    ->"application."

|
:004061D5 6804F54200               push 0042F504
:004061DA 6820A04300              push 0043A020
:004061DF E8ECAD0100           call 00420FD0
:004061E4 A1A0E14300              mov eax, dword ptr [0043E1A0]
:004061E9 83C408                       add esp, 00000008
:004061EC 83EC08                      sub esp, 00000008
:004061EF D9404C                      fld dword ptr [eax+4C]
:004061F2 DD1C24                      fstp qword ptr [esp]
:004061F5 50                                push eax
:004061F6 6820A04300               push 0043A020


O que temos a fazer agora é descobrir onde essa função foi chamada e evitar que ela seja executada. Para isso, de uma olhada no código acima até encontrar:

* Referenced by a CALL at Address:
|:00408BB2
|

Agora vc sabe o endereço de onde a função é chamada, portanto, clique em Goto -> Goto Code Location e digite 00408BB2.

Você verá o seguinte:

:00408B9C 686C044300              push 0043046C
:00408BA1 68A0834300              push 004383A0
:00408BA6 E805970100              call 004222B0
:00408BAB 83C408                      add esp, 00000008
:00408BAE 85C0                          test eax, eax
:00408BB0 7507                           jne 00408BB9                                    
* Se eax <> 0 salta a função
:00408BB2 E809D5FFFF             call 004060C0                                   
* Essa é a função da nag e da expiração
:00408BB7 EB05                          jmp 00408BBE

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00408B9A(C), :00408BB0(C)
|

* Possible Reference to String Resource ID=00001: "Turnkexe"
|
:00408BB9 B801000000              mov eax, 00000001

Agora vc já sabe, eh só trocar o jne 00408bb9 por jmp 00408bb9. Para isso utilize seu editor hexadecimal favorito, abra uma cópia arquivo NORTON.EXE, vá até o offset 00007FB0 (está escrito na barra de status do W32Dasm) e troque o valor 7507 por EB07. Salve e execute a cópia.

OOPS! Deu uma falha geral de proteção! Isso ocorreu porque alguma parte do programa tentou escrever ou ler algo num endereço de memória inválido. (Se vc estiver com o softice ligado para sair da falha digite R, depois exit e pressione ctrl+d).

Para descobrir onde ocorreu esse probema, vamos utilizar W32Dasm para disassemblar o arquivo cópia que vc acabou de modificar. Depois de disassemblado, vc terá que utilizar o W32Dasm como debuger. Para isso clique em: Debug -> Load Process -> Load

Aparecerá a janela de debug do W32dasm. Clique em "Auto Step Over" ou pressione F6. Com isso o programa será executado passo a passo, executando as calls como um só passo.

De repente o W32Dasm irá parar com a seguinte mensagem: "The thread tried to read from or write to a virtual address for which does not have appropriate access".

Alem da mensagem ele irá parar bem em cima do erro ocorrido na janela onde aparece o código. Analizando o código onde ocorreu o erro, teremos o seguinte:

:00405129 E8A2BD0100                  call 00420ED0
:0040512E 0FAFC7                           imul eax, edi                                         
* Multiplica EAX por EDI
:00405131 0FAFC6                           imul eax, esi                                          
* Multiplica EAX por ESI
:00405134 83C404                            add esp, 00000004
:00405137 85C0                                test eax, eax
:00405139 C70064000000                mov dword ptr [eax], 00000064
            * O Erro ocorreu aqui! Por que ao tentar mover o valor para eax, o endereço era inválido.

Analizando a rotina call 00420ED0 com o softice, descobri que ela retorna o endereço certo de eax e retorna edi e esi  = 0 se o arquivo executável for alterado ou edi e esi = 1 se o arquivo estiver como o original. Com isso na hora que eax é multiplicado por edi e depois por esi ele fica com endereço igual a 0 e na hora que tenta-se mover o valor 64 pra eax ele dá o erro de proteção.

Não tenho como descrever o processo utilizado na call 00420ED0 por ser muito extenso, mais posso dizer que envolve um CRC do arquivo que está sendo executado com um arquivo *pop.exe que está no diretorio do norton utilities. De um "dir *pop*" no diretório e vc verá que existe um arquivo pra cada executável. Ele faz o CRC dos arquivos e retorna edi e esi = 0 se ele estiver incorreto (executável alterado).

Para evitar que o problema aconteça, troque:

imul eax, edi   por  3 nop
e
imul eax, esi   por  3 nop

Para isso entre novamente no seu editor hexadecimal, abra a cópia, vá até o offset 0000452E e troque 0FAFC70FAFC6 por 909090909090.

Com isso, vc trocará a multiplicação por nada, ou seja, eax estará intacto e com o endereço correto!

Ok executando novamente o programa, ele dará outro erro de proteção geral, agora em outro endereço. A função é exatamente a mesma descrita acima:

:00405XXX E8A2BD0100                  call 00420ED0
:00405XXX 0FAFC7                           imul eax, edi                                         
* Multiplica EAX por EDI
:00405XXX 0FAFC6                           imul eax, esi                                          
* Multiplica EAX por ESI
:00405XXX 83C404                            add esp, 00000004
:00405XXX 85C0                                test eax, eax
:00405XXX C70064000000                mov dword ptr [eax], 00000064
            * O Erro ocorreu aqui! Por que ao tentar mover o valor para eax, o endereço era inválido.

Bom se vc quiser mudar tudo na mão seguindo o processo de debuging no W32Dasm e anotando o endereço do erro, talvez no ano que vem vc tenha crackeado o programa (são 72 checagens!), caso contrário, utilize o Ultra Edit 32.

A possibilidade das instruções imul eax, edi , imul eax, esi e add esp, 0000004 aparecerem em outra parte do programa que não seja a checagem é quase nenhuma. Portanto, abra o arquivo no Ultra Edit, clique no botão Replace Text e preencha:

Find What:       0FAFC70FAFC683C404

Replace With: 90909090909083C404

Clique em Replace All. Aparecerá uma msg dizendo que 71 itens foram trocados. Clique OK.

Salve o programa, execute e você verá que ele será executado com sucesso! Delete o NORTON.EXE (salve uma backup se quiser) e renomeie o arquivo crackeado para NORTON.EXE.

5. Crackeando os outros programas:

Para crackear os outros programas vc não precisa repetir tudo dinovo. Siga os segintes passos:

Essa operação deve ser repetida com os seguites arquivos:

Ndd32.exe
Sd32.exe
si32.exe
Ue32.exe
Norton.exe
Regtrk.exe
Windoc.exe
Nregedit.exe
Ncompare.exe
Optwiz.exe
Além de cgmain.exe no diretório do Crashguard.

Qualquer dúvida é só mandar um e-mail para trincado@rock-br.com.br ou me contactar pelo UIN 4240719

6. Considerações Finais:

Como podemos ver, apesar de fácil de quebrar, essa é uma boa proteção, que impede que e código seja alterado.

Gostaria de agradecer o HaWK, Pensador, ethAn, DrByte, Bzz, Net Walker! e todos os amigos que consegui escrevendo tutoriais. Valeu galera!

tRINC@DO -BRCrackers 16/04/1999