¿Qué se entiende por crack, parche y otros términos utilizados al descargar un software de Internet?

Tanto el parche como el crack son parches. Significan cambios en el software original que se está ejecutando. Un parche cambia el binario, pero también hay parches a nivel de código fuente, que es más el caso en plataformas de código abierto como Linux.

Un crack es un tipo especial de parche que elimina alguna funcionalidad del programa, como el número de serie o la protección anticopia, algunas otras «funciones» que limitan la aplicación de ese software de una manera distinta a la que pretendía el autor o autores originales.

Un crack puede eliminar un requester o adware, puede eliminar algún spyware o desactivar el acuerdo de licencia y dejar que ese programa funcione sin esa mierda. Por lo general, un crack realmente elimina o desactiva «características» no deseadas que no son de ningún beneficio para el producto, sino una molestia incluso para el cliente que paga. Un crack a menudo elimina tanta basura, que el programa crackeado es mejor que la versión original sin crackear.

Así que un «crack» implica que algo está roto. Pero yo lo veo diferente. El software fue entregado roto por el fabricante y tú lo reparas para hacerlo utilizable para tus necesidades.

Aunque eso esté ahora prohibido por ley en Alemania, personalmente creo que es un gran error. Si has estado comprando algo, eres libre de cambiar alrededor de ese material todo lo que quieras; es tuyo. Sólo que no puedes difundirlo, copiarlo o venderlo. Eso sería una violación de la licencia (¡no un robo!).

Y, por supuesto, eso tampoco es robar, ni asesinar, ni violar, ni genocidio, ni puta piratería.

Entonces, yo estoy usando Linux. Soy un profesional del software. Tengo todas las herramientas de ingeniería inversa, que están disponibles para mi oficio, para hacer ingeniería inversa a mi propio software y al de los clientes. Y sólo por la posesión ya estoy castigado por la ley en mi país. Soy un criminal.

Porque poseo Linux. I am totally answering this with civilian disobedience.

Here how a crack works.

  1. #include  
  2. #include  
  3. #include  
  4. #include  
  5.  
  6. int main(){ 
  7. char *pass=getpass(«Password: «); 
  8. if(strcmp(pass, «secret»)){ 
  9. puts(«I don’t work for you.»); 
  10. exit(EXIT_FAILURE); 
  11. }else{ 
  12. puts(«Password correct!»); 
  13. return 0; 

We are compiling that little program and run it:

  1. > cc -O3 -mfma4 -o crack crack.c  
  2. > ./crack  
  3. Password:  
  4. I don’t work for you. 

The password to run this would be “secret”. I don’t know that password, because in the real program this is hidden or this is my key or something. So I go in there with Radare2, after I copied it to crack_org to keep the original. I open Radare with -A for getting some symbol names and -w to be able to overwrite:

  1. > cp crack crack_org 
  2. > r2 -A -w crack 
  3. [x] Analyze all flags starting with sym. and entry0 (aa)  
  4. [x] Analyze len bytes of instructions for references (aar)  
  5. [x] Analyze function calls (aac)  
  6. [ ] [*] Use -AA or aaaa to perform additional experimental analysis.  
  7. [x] Constructing a function name for fcn.* and sym.func.* functions (aan))  
  8. — vm is like a small cow in ascii  
  9. [0x00000640]> pdf@main ;*****HERE I VIEW THE SOURCE**** 
  10. ;– main:  
  11. ;– section_end..plt.got:  
  12. ;– section..text:  
  13. / (fcn) sym.main 80  
  14. | sym.main ();  
  15. | ; DATA XREF from 0x0000065d (entry0)  
  16. | 0x000005f0 488d3dfd0100. lea rdi, qword str.Password: ; 0x7f4 ; str.Password: ; «Password: » @ 
  17. 0x7f4 ; [13] va=0x000005f0 pa=0x000005f0 sz=498 vsz=498 rwx=–r-x .text  
  18. | 0x000005f7 4883ec08 sub rsp, 8  
  19. | 0x000005fb e8d8ffffff call sub.__cxa_finalize_216_5d8  
  20. | 0x00000600 488d3df80100. lea rdi, qword str.secret ; 0x7ff ; str.secret ; «secret» @ 0x7ff  
  21. | 0x00000607 4889c6 mov rsi, rax  
  22. | 0x0000060a b907000000 mov ecx, 7  
  23. | 0x0000060f f3a6 repe cmpsb byte [rsi], byte ptr [rdi] ; [0x2700000000:1]=255 ; 0  
  24. | ,=< 0x00000611 7513 jne 0x626 ;*******INTERESTING LINE******* 
  25. | | 0x00000613 488d3d020200. lea rdi, qword str.Password_correct_ ; 0x81c ; str.Password_correct_  
  26. ; «Password correct!» @ 0x81c  
  27. | | 0x0000061a e8b1ffffff call sub.__cxa_finalize_192_5d0  
  28. | | 0x0000061f 31c0 xor eax, eax  
  29. | | 0x00000621 4883c408 add rsp, 8  
  30. | | 0x00000625 c3 ret  
  31. | | ; JMP XREF from 0x00000611 (sym.main)  
  32. | `-> 0x00000626 488d3dd90100. lea rdi, qword str.I_don_t_work_for_you. ; 0x806 ; str.I_don_t_work_f 
  33. or_you. ; «I don’t work for you.» @ 0x806  
  34. | 0x0000062d e89effffff call sub.__cxa_finalize_192_5d0  
  35. | 0x00000632 bf01000000 mov edi, 1  
  36. | 0x00000637 e8a4ffffff call sub.__cxa_finalize_232_5e0  
  37. 0x0000063c 0f1f4000 nop dword [rax]  
  38. [0x00000640]> wa jmp 0x613@0x611 ;*********HERE I OVERWRITE THE COMMAND***** 
  39. Written 2 bytes (jmp 0x613) = wx eb00 

As you can see at byte 0x611 there’s the jump, we exchange that line by writing “jmp 0x613” to the address of byte 0x611. That’s it.

Write and exit with q

Test:

  1. > ./crack  
  2. Password:  
  3. Password correct! 

Wundervoll. Now the program runs without us knowing the password.

To give this to your friends, that have the crack binary only and are able to do that themselves, we simply use bsdiff and bspatch, that you should install for that.

  1. > bsdiff crack_org crack crack.patch 
  2.  
  3. > bspatch crack_org crack_patched crack.patch 
  4. > chmod +x crack_patched 
  5. > ./crack_patched  
  6. Password:  
  7. Password correct! 

Wundervoll. To see what we have done:

  1. > ls crack* -l  
  2. -rwxr-xr-x 1 hanno hanno 8504 Dez 17 12:27 crack*  
  3. -rw-r–r– 1 hanno hanno 264 Dez 3 17:39 crack.c  
  4. -rw-r–r– 1 hanno hanno 156 Dez 17 12:41 crack.patch  
  5. -rwxr-xr-x 1 hanno hanno 8504 Dez 17 12:22 crack_org*  
  6. -rwxr-xr-x 1 hanno hanno 8504 Dez 17 12:42 crack_patched 

That’s it. You just have now to send your friends the crack.patch file, which is really small. Done.

And now I’m a criminal in Germany. Esto es una mierda.

En realidad, enviar a alguien un archivo de parche no está en contra de la ley. Poseer Linux lo es. En Alemania la palabra ignorancia se escribe con una letra grande: Ignoranz.

Pero, sí. Así es como funciona un parche y lo que es un crack.

Espero haber podido ayudar. Por favor, visitadme, si esto me lleva a la cárcel.