Cosa intendi per crack, patch e altri termini usati durante il download di un software da internet?

Sia la patch che il crack sono patch. Significa modifiche al software originale che avete in esecuzione. Una patch cambia il binario, ma ci sono anche patch a livello di codice sorgente, che è più il caso delle piattaforme open source come Linux.

Un crack è un tipo speciale di patch che rimuove alcune funzionalità del programma, come il numero di serie o la protezione dalla copia, alcune altre "funzioni" che limitano l'applicazione di quel software in un modo diverso da quello inteso dagli autori originali.

Un crack può rimuovere un requester o un adware, può rimuovere alcuni spyware o disattivare il contratto di licenza e far funzionare quel programma senza quella merda. Di solito un crack in realtà rimuove o spegne "caratteristiche" indesiderate che non sono di alcun beneficio per il prodotto ma una seccatura anche per il cliente pagante. Un crack spesso rimuove così tanta merda, che il programma crackato è migliore della versione originale non crackata.

Quindi, un "crack" implica che qualcosa è rotto. Ma io la vedo diversamente. Il software è stato consegnato rotto dal produttore e voi lo riparate per renderlo utilizzabile per le vostre esigenze.

Anche se questo è ora vietato dalla legge in Germania, personalmente penso che sia un grosso errore. Se hai comprato qualcosa, sei libero di cambiare quella roba quanto vuoi; è tua. Solo non potete diffonderla, copiarla o venderla. Questa sarebbe una violazione della licenza (non un furto!).

E naturalmente anche questo non è rubare, non uccidere, non violentare, non genocidio e non è pirateria del cazzo.

Così, io sto usando Linux. Sono un professionista del software. Ho tutti gli strumenti di reverse engineering, che sono disponibili per il mio mestiere, per il reverse engineering del mio software e del software dei clienti. E per il solo possesso sono ora punibile per legge nel mio paese. Sono un criminale.

Perché possiedo 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. Questa è una stronzata.

In realtà inviare a qualcuno un file patch non è contro la legge. Possedere Linux lo è. In Germania la parola ignoranza è scritta a caratteri cubitali: Ignoranz.

Ma, sì. Questo è come funziona una patch e cos'è un crack.

Spero di essere stato d'aiuto. Per favore venite a trovarmi, se questo mi porta in prigione.