Onde conseguir o programa:
Pré-Requisitos:
- Conhecimentos basicos de Assembly
Ferramentas Necessárias:
- W32Dasm 8.9
- Hiew 5.84 ou superior
Blá-Blá-Blá Inicial
Este tutorial serve com fins apenas educativos. Se vc gostou do programa, COMPRE o ORIGINAL! Vale a Pena!
COMEÇANDO...
Resolvi escrever este tutorial, para
mostrar as fragilidades da "trava" deste programa.
Bom, primeiramente executamos o Protect98
normalmente, e digitamos um nome , e dados nos respectivos campos. Então
entramos com a senha: 123456-000000-123456
Bem, mas porque esta senha? Porque
como experiência anterior sabemos que a senha do Protect98 é
composta de 3 grupos de 6 digitos, separados por "-", sendo que o grupo
do meio, se compõe com a data limite para a execução
do programa e os outros são o checksum, e o Nº da licença.
Se digitarmos o grupo do meio como uma sequência de 0s (Zeros)
o programa não irá expirar mais, ficando assim "registrado".
Qual a mensagem que aparece, quando pressionamos <enter>?
Dados incorretos.
Digite os dados de registro
exatamente como recebeu.
Ok. GUARDE esta mensagem de erro.
Agora vamos executar o W32DASM, antes disso convem tirar um backup do arquivo do Protect98, no caso PROTECT.EXE, renomearei para PROTECT.BKP
Dentro do WDASM, selecionamos:
Disassembler
+---------------Open File to Disassemble
Escolhemos então o arquivo PROTECT.EXE
O W32DASM vai desassemblar o programa.
Agora selecionamos o seguinte:
Refs
+-----------String Data References
Lembra-se da mensagem de erro? Ok, vamos procurar a mensagem de erro na lista e damos um duplo clique na mensagem de erro. Isto irá nos levar diretamente para a rotina que é "referenciada" por esta mensagem. O código que chama esta mensagem é o seguinte:
:0040BAC6 52
push edx
:0040BAC7 E884020000
call 0040BD50
; <---- Checagem do Nº de série
:0040BACC 83C40C
add esp, 0000000C
:0040BACF 85C0
test eax, eax
; Está correto? EAX = 1???
:0040BAD1 7513
jne 0040BAE6
; Sim está, entao vá para 0040BAE6.
* Possible Reference to String Resource ID=59190: "Dados
incorretos.
|
:0040BAD3 6836E70000
push 0000E736
; Não, não está... Mostre msg de erro, etc...
:0040BAD8 8D4C2408
lea ecx, dword ptr [esp+08]
:0040BADC E869670100
call 0042224A
A rotina 40BD50 é a rotina de
checagem do Nº de série, que funciona da seguinte forma:
O Retorno se dá em EAX, ou
seja se EAX = 1, o checksum do Nº de série está correto,
caso EAX=0, então o Nº de série não está
correto.
Vamos lá para a rotina 40BD50
ver como ela funciona e forçá-la para ela SEMPRE retornar
EAX=1, porque se houver uma checagem no meio do programa para esta rotina
ela sempre vai retornar com EAX=1 (Nº de serie Ok)
A rotina é chamada por 3 enderecos! (O que significa que 3 lugares dentro do Protect98 devem checar se o Nº de série está Ok).
* Referenced by a CALL at Addresses: <-
3 lugares chamam esta rotina!
|:0040BAC7 , :0040BCE2 , :0040BFA8
|
:0040BD50 53
push ebx
:0040BD51 8B5C2408
mov ebx, dword ptr [esp+08]
:0040BD55 56
push esi
:0040BD56 8B742414
mov esi, dword ptr [esp+14]
:0040BD5A 57
push edi
:0040BD5B 8B7C2414
mov edi, dword ptr [esp+14]
:0040BD5F 6A01
push 00000001
:0040BD61 56
push esi
:0040BD62 57
push edi
:0040BD63 53
push ebx
:0040BD64 E827000000
call 0040BD90
:0040BD69 83C410
add esp, 00000010
:0040BD6C 85C0
test eax, eax
; Registro Ok? Se sim EAX=0
:0040BD6E 7514
jne 0040BD84
Neste endereco 40BD6E, tem um salto condicional:
jne 0040BD84
Se o Registro EAX=1, o Nº. de
registro do Programa está ok, então ao inves de JNE, vamos
mudá-lo para JE (Pule se EAX = 0).
Para isto olhamos qual é o
offset do programa, na barra inferior do W32DASM:
O offset eh 0000B16Eh <- Guarde este endereco
:0040BD70 50
push eax
:0040BD71 56
push esi
:0040BD72 57
push edi
:0040BD73 53
push ebx
:0040BD74 E817000000 call 0040BD90
:0040BD79 83C410
add esp, 00000010
:0040BD7C 85C0
test eax, eax
; No. de Registro Ok?
:0040BD7E 7504
jne 0040BD84
; Se EAX=1 Registro Ok
:0040BD80 5F
pop edi
:0040BD81 5E
pop esi
:0040BD82 5B
pop ebx
:0040BD83 C3
ret
* Referenced by a (U)nconditional or (C)onditional Jump
at Addresses:
:0040BD6E(C), :0040BD7E(C)
:0040BD84 5F
pop edi
:0040BD85 5E
pop esi
:0040BD86 B801000000 mov eax,
00000001
; Registro Ok!!!
:0040BD8B 5B
pop ebx
:0040BD8C C3
ret
A mesma coisa acontece, no endereco 40BD7E, tem um salto condicional:
jne 0040BD84
Se o Registro EAX=1. Nº de registro
do Programa ok, então ao inves de JNE, vamos mudá-lo para
JE (Pule se EAX = 0)
Para isto olhamos qual eh o offset
do programa, na barra inferior do W32DASM:
O offset eh 0000B17Eh <- Guarde este endereco
Fechamos o W32DASM, agora vamos entrar no programa chamado HIEW, da seguinte forma:
HIEW PROTECT.EXE
Pressionamos F4 e escolhemos DECODE, para ele desassemblar.
Pressiona-se F5 e digitamos o endereco
B16E ele vai saltar para este endereco.
Pressiona-se F3 e mudamos o byte 75
(jne) para 74 (je)
Agora com a seta, vamos logo abaixo
para o endereco
B17E e mudamos tambem o byte 75(jne) para 74 (je).
Pressiona-se F9 para gravar.
Nome: HaWK (ou outra coisa)
Dados: HaWK (ou outra coisa)
Registro: 123456-000000-123456
CONCLUSÃO
Esta é apenas UMA das muitas
formas de se destravar um programa.
É claro que esta é para
iniciantes. Existem programas que só dão para destravar juntamente
com um programa chamado SOFTICE. Que é um debugger On-the-Fly. Ou
seja você está rodando um programa, pressiona-se CTRL+D, e
bum! Entra o SOFTICE, aí então é só alegria...
Mas fica para um próximo tutorial, já que o SI é um
pouco complicado de se mexer.
Um conselho, aprenda primeiro a destravar
com o WDASM, tem UM MONTE de programa que dá!