Le patch et le crack sont tous deux des correctifs. Signifie des modifications apportées au logiciel original que vous avez en cours d'exécution. Un patch modifie le binaire, mais il existe aussi des patchs au niveau du code source, ce qui est plutôt le cas sur les plateformes open source comme Linux.
Un crack est une sorte spéciale de patch qui supprime certaines fonctionnalités du programme, comme le numéro de série ou la protection contre la copie, certaines autres "fonctions" qui limitent l'application de ce logiciel d'une autre manière que celle prévue par le ou les auteurs originaux.
Un crack peut supprimer un requêteur ou un adware, peut supprimer certains spyware ou désactiver le contrat de licence et laisser ce programme fonctionner sans cette merde. Habituellement, un crack supprime vraiment ou éteint les "fonctionnalités" indésirables qui ne sont d'aucun avantage pour le produit mais une nuisance même pour le client payant. Un crack supprime souvent tellement de conneries, que le programme craqué est meilleur que la version originale non craquée.
Donc, un "crack" implique que quelque chose est cassé. Mais je vois cela différemment. Le logiciel a été livré cassé par le fabricant et vous le réparez pour le rendre utilisable pour vos besoins.
Même si c'est maintenant interdit par la loi en Allemagne, je pense personnellement que c'est une grosse erreur. Si vous avez acheté quelque chose, vous êtes libre de modifier ce truc autant que vous le souhaitez, c'est le vôtre. Vous ne pouvez simplement pas le diffuser, le copier ou le vendre. Ce serait une violation de licence (et non un vol !).
Et bien sûr, ce n'est pas non plus un vol, un meurtre, un viol, un génocide et un putain de piratage.
So. J'utilise Linux ici. Je suis un professionnel du logiciel. J'ai tous les outils de rétro-ingénierie, qui sont disponibles pour mon métier, pour faire de la rétro-ingénierie de mes propres logiciels et des logiciels des clients. Et pour la seule possession, je suis maintenant punissable par la loi dans mon pays. Je suis un criminel.
Parce que je possède Linux. I am totally answering this with civilian disobedience.
Here how a crack works.
- #include
- #include
- #include
- #include
- int main(){
- char *pass=getpass("Password: ");
- if(strcmp(pass, "secret")){
- puts("I don't work for you.");
- exit(EXIT_FAILURE);
- }else{
- puts("Password correct!");
- }
- return 0;
- }
We are compiling that little program and run it:
- > cc -O3 -mfma4 -o crack crack.c
- > ./crack
- Password:
- 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:
- > cp crack crack_org
- > r2 -A -w crack
- [x] Analyze all flags starting with sym. and entry0 (aa)
- [x] Analyze len bytes of instructions for references (aar)
- [x] Analyze function calls (aac)
- [ ] [*] Use -AA or aaaa to perform additional experimental analysis.
- [x] Constructing a function name for fcn.* and sym.func.* functions (aan))
- -- vm is like a small cow in ascii
- [0x00000640]> pdf@main ;*****HERE I VIEW THE SOURCE****
- ;-- main:
- ;-- section_end..plt.got:
- ;-- section..text:
- / (fcn) sym.main 80
- | sym.main ();
- | ; DATA XREF from 0x0000065d (entry0)
- | 0x000005f0 488d3dfd0100. lea rdi, qword str.Password: ; 0x7f4 ; str.Password: ; "Password: " @
- 0x7f4 ; [13] va=0x000005f0 pa=0x000005f0 sz=498 vsz=498 rwx=--r-x .text
- | 0x000005f7 4883ec08 sub rsp, 8
- | 0x000005fb e8d8ffffff call sub.__cxa_finalize_216_5d8
- | 0x00000600 488d3df80100. lea rdi, qword str.secret ; 0x7ff ; str.secret ; "secret" @ 0x7ff
- | 0x00000607 4889c6 mov rsi, rax
- | 0x0000060a b907000000 mov ecx, 7
- | 0x0000060f f3a6 repe cmpsb byte [rsi], byte ptr [rdi] ; [0x2700000000:1]=255 ; 0
- | ,=< 0x00000611 7513 jne 0x626 ;*******INTERESTING LINE*******
- | | 0x00000613 488d3d020200. lea rdi, qword str.Password_correct_ ; 0x81c ; str.Password_correct_
- ; "Password correct!" @ 0x81c
- | | 0x0000061a e8b1ffffff call sub.__cxa_finalize_192_5d0
- | | 0x0000061f 31c0 xor eax, eax
- | | 0x00000621 4883c408 add rsp, 8
- | | 0x00000625 c3 ret
- | | ; JMP XREF from 0x00000611 (sym.main)
- | `-> 0x00000626 488d3dd90100. lea rdi, qword str.I_don_t_work_for_you. ; 0x806 ; str.I_don_t_work_f
- or_you. ; "I don't work for you." @ 0x806
- | 0x0000062d e89effffff call sub.__cxa_finalize_192_5d0
- | 0x00000632 bf01000000 mov edi, 1
- | 0x00000637 e8a4ffffff call sub.__cxa_finalize_232_5e0
- 0x0000063c 0f1f4000 nop dword [rax]
- [0x00000640]> wa jmp 0x613@0x611 ;*********HERE I OVERWRITE THE COMMAND*****
- 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:
- > ./crack
- Password:
- 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.
- > bsdiff crack_org crack crack.patch
- > bspatch crack_org crack_patched crack.patch
- > chmod +x crack_patched
- > ./crack_patched
- Password:
- Password correct!
Wundervoll. To see what we have done:
- > ls crack* -l
- -rwxr-xr-x 1 hanno hanno 8504 Dez 17 12:27 crack*
- -rw-r--r-- 1 hanno hanno 264 Dez 3 17:39 crack.c
- -rw-r--r-- 1 hanno hanno 156 Dez 17 12:41 crack.patch
- -rwxr-xr-x 1 hanno hanno 8504 Dez 17 12:22 crack_org*
- -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. C'est des conneries.
En fait, envoyer à quelqu'un un fichier patch n'est pas contraire à la loi. Posséder Linux l'est. En Allemagne, le mot ignorance est écrit en grosses lettres : Ignoranz.
Mais, oui. Voilà comment fonctionne un patch et ce qu'est un crack.
J'espère avoir pu vous aider. S'il vous plaît, rendez-moi visite, si cela me conduit en prison.