Bonjour,
J'ai désassemblé un petit exécutable destiné à crypter (de façon simple me semble-t-il...)des fichiers textes à l'aide d'ollydbg (à priori écrit en C).
Mes (maigres...) notions en assembleur m'ont permis de comprendre la structure générale du code mais je bloque sur la partie principale de celui-ci qui permet de crypter les caractères de ma chaine d'origine.
Pour info j'ai fait un test en lançant l'exécutable de cryptage sur la chaine "fontaine". La partie de code ci-dessous correspond au cryptage de la lettre "f".
Au début de cette partie du code le registre EAX contient 00000066 (ascii "f") et le registre edx 00000000. A la sortie de ce bout de code eax contient la valeur crypté de "f" soit 0000002B (ascii "+"). Ce que je ne comprend pas c'est comment le "f" est transformé en "+" (en tout cas en partie...).
ci-dessous le code avec ce que j'en ai compris en commentaire... si quelqu'un pouvait m'expliquer les parties que je n'ai pas commenté il serait bien aimable, merci d'avance...
Je ne comprend pas comment le registre edx passe de 00000000 à 0000004D...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 movsx eax,byte ptr ds:[edx] ;premiere lettre de "fontaine" placee dans eax mov ecx,dword ptr ds:[403158] ;l'adresse 403158 contient 00000000 je suppose donc que cela correspond a l'initialisation à 0 de ecx... mov edx,dword ptr ss:[ebp-8] ;apres cette instruction edx contient 00000000 and edx,dword ptr ds:[ecx*4+403140];la c'est plutot obscur... mov ecx,dword ptr ds:[403148] ; le contenu de l'adresse 403148 est place dans ecx (en l'occurence 0040301C) movsx edx,byte ptr ds:[ecx+edx] ; le contenu de l'adresse ecx+edx est place dans edx d'où edx = 4D xor eax,edx ; eax xor edx place dans eax soit 2B (ascii "+")
J'espère etre clair dans mes explication...
Merci de votre aide
Partager