Aprenda a criar um Crack
Existem muitas formas de fazer crack para aplicativos por isso melhor isso ficar bem claro eihm !
Utilitários :
- Win32Dasm
- Hackers View
Pegue estes programas aqui:
Alvo :
- Cracking Challange v 1.0 - Teste "Very Very Easy" ( conjunto de utilidades para creckar )
Download no link acima também, é só extrair e esta tudo lá.
OBS : Este aplicativo cracking Challanger foi feito especialmente para testar o cracker ele
tem vários módulos o que vou explicar é o "very very easy" , mas pra fixar bem voces devem
fazer todos , como eu tambem fiz!!
INICIANDO O CRACKER:
Suponhamos que já tens tudo o que é preciso para começar. Em 1º lugar deves pôr o
programa CRACK.EXE no diretorio do HIEW e já vais saber porquê.
Um bom cracker deve conhecer sempre muito bem o funcionamento do seu alvo, e por isso,
vamos abrir o CRACK.EXE. Carregas na parte onde diz "Very Very Easy". O que vês ? Uma caixa
de texto para por a password e um botão. Tenta escrever uma password qualquer e pressiona
o botão. É óbvio que falhaste. mas não precisas chorar. Reparaste na mensagem que apareceu
na caixa de diálogo: "Sorry not the right one - try again" (ou parecido) ? Guarde esta
mensagem . Feche o programa e agora abre o WIN32DASM. Fazes um "Open file to diassemble"
ao programa CRACK.EXE e espera. Só aparecem coisas esquesitas no programa não é ? Eu
sabia... No menu "Diassembler", vai em "Font... | Select Font" e escolhes uma normal ( Arial
por exemplo). Agora está melhor não está ? Suponhamos que não sabes nada de ASM, então o
que vês no programa não te diz nada, mas não desesperes porque isso não te interessa. Va no
menu "Refs" e em "String data References". Já apertaste ? Então agora procura aquele texto da tal caixa de diálogo que apareceu quando tú erraste "Sorry not the right one - try again"
procuras na letra "S". Aperte duas vezes nele e fecha a caixa de diálogo. É suposto veres isto :
...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043B04D(C)
|
* Possible StringData Ref from Code Obj ->"Sorry, not the right one - try "
->"again !"
|
:0043B05B B8F0B04300 mov eax, 0043B0F0
:0043B060 E84788FFFF call 004338AC
:0043B065 8B8358020000 mov eax, dword ptr [ebx+00000258]
:0043B06B 8B10 mov edx, dword ptr [eax]
:0043B06D FF5278 call [edx+78]
...
Como podes ver, é nesta parte do código que o programa trata de mostrar a mensagem que
nós não queremos. Mas aqui, pouca coisa nos interessa, a parte que mais nos interessa é :
...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043B04D(C)
...
É nesta parte em que vemos o que "causa" o aparecer desta caixa de diálogo. Mas para
perceberem melhor, em ASM a parte mais interessate e importante para os crackers são os
Jumps que como o nome indica são saltos que o programa dá no código conforme certas
situações (se for igual a, se for diferente de...) tipo um GOTO e um IF juntos. Aqui mostra-nos
que existe um salto que depende de uma condição e que vai ter exactamente onde nós não
queremos que ele vá.
Pegue o endereço do JUMP que no nosso caso é: 43B04D , aperte no menu
"GOTO" e em "GOTO CODE LOCATION" irá abrir uma caixa de dialogo , selecione o campo de
texto digite 43B04D e click em localizar , aperte duas vvezes na seta para cima e irá aparecer
isto:
...
* Possible StringData Ref from Code Obj ->"button"
|
:0043B043 BA9CB04300 mov edx, 0043B09C
:0043B048 E8F789FCFF call 00403A44 <- Compara a pass com a correcta
:0043B04D 750C jne 0043B05B <- Se pass errada vai te embora ó cracker[
* Possible StringData Ref from Code Obj ->"Right on ! ... told you ... too "
->"easy ... Try the next one !"
|
:0043B04F B8ACB04300 mov eax, 0043B0AC
:0043B054 E85388FFFF call 004338AC
:0043B059 EB15 jmp 0043B070
...
Antes de tudo Jne = "Se não for igual vai para " e Je = "Se for Igual vai
para ".
Analisemos agora esta parte do código. No endereço 0043B04D vemos que depois de uma
comparação chamada na linha anterior (pela instrução CALL) ele salta no caso de
desigualdade. Não precisamos saber o tipo de comparação, apenas temos de tirar a lógica da
coisa. Se o resultado não for igual ele vai para a mensagem errada, então só se for igual é que
ele vai para a mensagem correcta.
Já sabes o que fazer ? Pois é, é fácil. Basta substituír jne 0043B05B por je 0043B05B. Mas para
fazer isso temos de usar o HIEW. Antes de lá ires, vê o offset que deve tar na barra de status
do Win32dasm e escreve-o num papel. Eu ajudo-te. É o 3A44D.
Agora fecha o Win32Dasm, abre uma linha de commandos do MS-DOS ,escreve cd
e já nesta directoria escreve hiew crack.exe (o CRACK.EXE deve estar
na mesma direcoria do HIEW, caso contrário terás de escrever hiew
c:\/crack.exe). Dentro do HIEW carrega em F4 e depois em F3.
Deves ver algo como isto :
...
00000000: 4D dec ebp
00000001: 5A pop edx
00000002: 50 push eax
00000003: 0002 add [edx],al
00000005: 0000 add [eax],al
00000007: 000400 add [eax][eax],al 0000000A: 0F00FF ??? di
0000000D: FF00 inc d,[eax]
0000000F: 00B800000000 add [eax][000000000],bh
00000015: 0000 add [eax],al
00000017: 004000 add [eax][00000],al
...
Não te enerves. Carrega no F5 (GOTO) e escreve o Offset. Irá aparecer o seguinte :
...
0003A43B: E894FEFDFF call 00001A2D4 ---------- (1)
0003A440: 8B45FC mov eax,[ebp][-0004]
0003A443: BA9CB04300 mov edx,00043B09C
0003A448: E8F789FCFF call 000002E44 ---------- (2) <- Chama a comparação
0003A44D: 750C jne 00003A45B ---------- (3) <- Se for errado, vai-te embora bad boy
0003A44F: B8ACB04300 mov eax,00043B0AC
0003A454: E85388FFFF call 000032CAC ---------- (4)
0003A459: EB15 jmps 00003A470 ---------- (5)
...
Agora carrega em F3 (EDIT), substitui o 75 (cod HEX para jne) por 74 (cod HEX para je) e
carrega em F9 (ACTUALIZAR). Faz F10 e arranca o CRACK.EXE e tenta introduzir uma pass
qualquer. Que tal ? Deu !!!!! Conseguiste crackear o teu 1º programa. Parabéns !!!.
Se quizeres fazer um patch para creckar este programa, aqui está o código em PASCAL :
--------------------------------------------<>------------------------------------------
program Cracking;
uses Crt;
Const A: Array[1..1] of Record
A : Longint;
B : Byte;
End =
((A:$3A44D;B:$74));
Var Ch:Char; I:Byte;
F:File;
FN:file of byte;
Size:longint;
Begin
Writeln('Patch para o Cracking Challange v1.0 - VVE');
writeln('By Znet - XpT'99');
Assign(F,'CRACK.EXE');
Reset(F,1);
If IOResult <> 0 then
begin
writeln('Ficheiro não encontrado');
halt(1);
end;
For I:=1 to 1 do
Begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
End;
Writeln('Patch colocada com sucesso !');
End.
--------------------------------------------<>------------------------------------------
OBS: Bem malta, é isso aí não é tão complicado crackear um
aplicativo mas é um processo que requer muita paciência .
Existem muitas formas de fazer crack para aplicativos por isso melhor isso ficar bem claro eihm !
DICA: Basta achar o JUMPING que está fazendo a checagem do
serial e transformar a JNE que está negando o serial em uma
JE que irá afirmar qualquer serial que vc por lá . Para isto
basta substituir os 5 pelos 4 que tive
Existem muitas formas de fazer crack para aplicativos por isso melhor isso ficar bem claro eihm !
Utilitários :
- Win32Dasm
- Hackers View
Pegue estes programas aqui:
Alvo :
- Cracking Challange v 1.0 - Teste "Very Very Easy" ( conjunto de utilidades para creckar )
Download no link acima também, é só extrair e esta tudo lá.
OBS : Este aplicativo cracking Challanger foi feito especialmente para testar o cracker ele
tem vários módulos o que vou explicar é o "very very easy" , mas pra fixar bem voces devem
fazer todos , como eu tambem fiz!!
INICIANDO O CRACKER:
Suponhamos que já tens tudo o que é preciso para começar. Em 1º lugar deves pôr o
programa CRACK.EXE no diretorio do HIEW e já vais saber porquê.
Um bom cracker deve conhecer sempre muito bem o funcionamento do seu alvo, e por isso,
vamos abrir o CRACK.EXE. Carregas na parte onde diz "Very Very Easy". O que vês ? Uma caixa
de texto para por a password e um botão. Tenta escrever uma password qualquer e pressiona
o botão. É óbvio que falhaste. mas não precisas chorar. Reparaste na mensagem que apareceu
na caixa de diálogo: "Sorry not the right one - try again" (ou parecido) ? Guarde esta
mensagem . Feche o programa e agora abre o WIN32DASM. Fazes um "Open file to diassemble"
ao programa CRACK.EXE e espera. Só aparecem coisas esquesitas no programa não é ? Eu
sabia... No menu "Diassembler", vai em "Font... | Select Font" e escolhes uma normal ( Arial
por exemplo). Agora está melhor não está ? Suponhamos que não sabes nada de ASM, então o
que vês no programa não te diz nada, mas não desesperes porque isso não te interessa. Va no
menu "Refs" e em "String data References". Já apertaste ? Então agora procura aquele texto da tal caixa de diálogo que apareceu quando tú erraste "Sorry not the right one - try again"
procuras na letra "S". Aperte duas vezes nele e fecha a caixa de diálogo. É suposto veres isto :
...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043B04D(C)
|
* Possible StringData Ref from Code Obj ->"Sorry, not the right one - try "
->"again !"
|
:0043B05B B8F0B04300 mov eax, 0043B0F0
:0043B060 E84788FFFF call 004338AC
:0043B065 8B8358020000 mov eax, dword ptr [ebx+00000258]
:0043B06B 8B10 mov edx, dword ptr [eax]
:0043B06D FF5278 call [edx+78]
...
Como podes ver, é nesta parte do código que o programa trata de mostrar a mensagem que
nós não queremos. Mas aqui, pouca coisa nos interessa, a parte que mais nos interessa é :
...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043B04D(C)
...
É nesta parte em que vemos o que "causa" o aparecer desta caixa de diálogo. Mas para
perceberem melhor, em ASM a parte mais interessate e importante para os crackers são os
Jumps que como o nome indica são saltos que o programa dá no código conforme certas
situações (se for igual a, se for diferente de...) tipo um GOTO e um IF juntos. Aqui mostra-nos
que existe um salto que depende de uma condição e que vai ter exactamente onde nós não
queremos que ele vá.
Pegue o endereço do JUMP que no nosso caso é: 43B04D , aperte no menu
"GOTO" e em "GOTO CODE LOCATION" irá abrir uma caixa de dialogo , selecione o campo de
texto digite 43B04D e click em localizar , aperte duas vvezes na seta para cima e irá aparecer
isto:
...
* Possible StringData Ref from Code Obj ->"button"
|
:0043B043 BA9CB04300 mov edx, 0043B09C
:0043B048 E8F789FCFF call 00403A44 <- Compara a pass com a correcta
:0043B04D 750C jne 0043B05B <- Se pass errada vai te embora ó cracker[
* Possible StringData Ref from Code Obj ->"Right on ! ... told you ... too "
->"easy ... Try the next one !"
|
:0043B04F B8ACB04300 mov eax, 0043B0AC
:0043B054 E85388FFFF call 004338AC
:0043B059 EB15 jmp 0043B070
...
Antes de tudo Jne = "Se não for igual vai para " e Je = "Se for Igual vai
para ".
Analisemos agora esta parte do código. No endereço 0043B04D vemos que depois de uma
comparação chamada na linha anterior (pela instrução CALL) ele salta no caso de
desigualdade. Não precisamos saber o tipo de comparação, apenas temos de tirar a lógica da
coisa. Se o resultado não for igual ele vai para a mensagem errada, então só se for igual é que
ele vai para a mensagem correcta.
Já sabes o que fazer ? Pois é, é fácil. Basta substituír jne 0043B05B por je 0043B05B. Mas para
fazer isso temos de usar o HIEW. Antes de lá ires, vê o offset que deve tar na barra de status
do Win32dasm e escreve-o num papel. Eu ajudo-te. É o 3A44D.
Agora fecha o Win32Dasm, abre uma linha de commandos do MS-DOS ,escreve cd
e já nesta directoria escreve hiew crack.exe (o CRACK.EXE deve estar
na mesma direcoria do HIEW, caso contrário terás de escrever hiew
c:\/crack.exe). Dentro do HIEW carrega em F4 e depois em F3.
Deves ver algo como isto :
...
00000000: 4D dec ebp
00000001: 5A pop edx
00000002: 50 push eax
00000003: 0002 add [edx],al
00000005: 0000 add [eax],al
00000007: 000400 add [eax][eax],al 0000000A: 0F00FF ??? di
0000000D: FF00 inc d,[eax]
0000000F: 00B800000000 add [eax][000000000],bh
00000015: 0000 add [eax],al
00000017: 004000 add [eax][00000],al
...
Não te enerves. Carrega no F5 (GOTO) e escreve o Offset. Irá aparecer o seguinte :
...
0003A43B: E894FEFDFF call 00001A2D4 ---------- (1)
0003A440: 8B45FC mov eax,[ebp][-0004]
0003A443: BA9CB04300 mov edx,00043B09C
0003A448: E8F789FCFF call 000002E44 ---------- (2) <- Chama a comparação
0003A44D: 750C jne 00003A45B ---------- (3) <- Se for errado, vai-te embora bad boy
0003A44F: B8ACB04300 mov eax,00043B0AC
0003A454: E85388FFFF call 000032CAC ---------- (4)
0003A459: EB15 jmps 00003A470 ---------- (5)
...
Agora carrega em F3 (EDIT), substitui o 75 (cod HEX para jne) por 74 (cod HEX para je) e
carrega em F9 (ACTUALIZAR). Faz F10 e arranca o CRACK.EXE e tenta introduzir uma pass
qualquer. Que tal ? Deu !!!!! Conseguiste crackear o teu 1º programa. Parabéns !!!.
Se quizeres fazer um patch para creckar este programa, aqui está o código em PASCAL :
--------------------------------------------<>------------------------------------------
program Cracking;
uses Crt;
Const A: Array[1..1] of Record
A : Longint;
B : Byte;
End =
((A:$3A44D;B:$74));
Var Ch:Char; I:Byte;
F:File;
FN:file of byte;
Size:longint;
Begin
Writeln('Patch para o Cracking Challange v1.0 - VVE');
writeln('By Znet - XpT'99');
Assign(F,'CRACK.EXE');
Reset(F,1);
If IOResult <> 0 then
begin
writeln('Ficheiro não encontrado');
halt(1);
end;
For I:=1 to 1 do
Begin
Seek(F,A[I].A);
Ch:=Char(A[I].B);
Blockwrite(F,Ch,1);
End;
Writeln('Patch colocada com sucesso !');
End.
--------------------------------------------<>------------------------------------------
OBS: Bem malta, é isso aí não é tão complicado crackear um
aplicativo mas é um processo que requer muita paciência .
Existem muitas formas de fazer crack para aplicativos por isso melhor isso ficar bem claro eihm !
DICA: Basta achar o JUMPING que está fazendo a checagem do
serial e transformar a JNE que está negando o serial em uma
JE que irá afirmar qualquer serial que vc por lá . Para isto
basta substituir os 5 pelos 4 que tive
0 comentários:
Postar um comentário
ORA VIVA, OLHA TEU COMENTARIO VALE MAIS DO QUE OURO PARA MIM, PRECISO DELE PARA MELHORAR A DISPONIBILIDADE DO BLOG.