[Résolu]Quelque petite question...

Tout sur les langages de programmation.

[Résolu]Quelque petite question...

Messagepar Cirdo » 31 Août 2014, 14:41

Salut à tous,


Je viens vous poser quelques questions (de débutant confirmé) qui m'aideront beaucoup :

- Il y a une pile par programme (donc plusieurs pile dans le système) ? Ou une pile pour tout le système ?
- Qu'est-ce ? Ça sert à quoi ? C'est utile à comprendre ? qword [ds:0x10004a420]


Et je crois que c'est tout...
Dernière édition par Cirdo le 29 Décembre 2014, 17:31, édité 1 fois.
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Martinooooo » 01 Septembre 2014, 00:46

1) La stack est une pile, c'est à dire une succession de DWORD (en 32bits) / QWORD (64bits) [cf plus bas] qui s'empilent et se dépilent. Ca peut se faire à n'importe quelle adresse, il peut y en avoir à plusieurs endroits (d'où le registre ESP = Extended Stack Pointer qui sert à définir le haut de la stack); même si généralement une seule est utilisée à un endroit particulier.
Les programmes ne partagent pas directement leur mémoire, ce qui fait que les stacks sont uniques à leurs programmes.

2) Cela sert à passer des variables entre les différentes instructions sans passer par les registres (le nombre de registres est limité et ils sont très utilisés, ce n'est pas facile d'y conserver des valeurs). C'est par exemple dans la stack que sont stockées toutes les variables locales des fonctions, les adresses de retour après les call... Très très important !

Le QWORD est un ensemble de 8 bytes, DWORD = 4, WORD = 2.
Le QWORD est l'unité de base (comprendre "la taille d'un pointeur" = "la taille d'une adresse en mémoire") en x64 - 64 bits, le DWORD en x86 - 32bits [d'où les limitations du 32 bits à 0xFFFFFFFF bytes maximum en mémoire par programme, l'adressage étant impossible au-delà en utilisant des DWORD)

mov rax, qword ptr ds:[0x10004a420] va mettre le qword à l'adresse 0x10004a420 dans rax

Content de voir que certains viennent ici autrement que pour demander des cracks; bon apprentissage ;)
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Quelque petite question...

Messagepar Cirdo » 01 Septembre 2014, 12:09

Code: Tout sélectionner
 mov        dword [ss:ebp+var_4], ddi
Cette instruction donnerai

On met à l'adresse ebp+4 le contenu du registre ddi ?

Martinooooo a écrit: Ca peut se faire à n'importe quelle adresse


Donc on peut mettre où l'on veut dans le programme des informations dans la pile ?

Il y a des adresse dans les registres ?
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar etherlord » 01 Septembre 2014, 13:24

Bon courage Martinooooo, tu va avoir du boulot là... :P

@Cirdo
mov dword [ss:ebp+var_4], ddi
Cette instruction donnerai

On met à l'adresse ebp+4 le contenu du registre ddi ?



dans "dword [ss:ebp+var_4]", il y a var_4. C'est un label générique posé par le désassembleur (IDA au hasard ?)

Assumer que var_4 cela correspond à ebp+4, c'est dangereux.


etherlord
etherlord
Triumvirat
Triumvirat
 
Messages: 2490
Inscription: 22 Mars 2004, 16:12

Re: Quelque petite question...

Messagepar Cirdo » 01 Septembre 2014, 18:32

etherlord a écrit:Bon courage Martinooooo, tu va avoir du boulot là... :P


dans "dword [ss:ebp+var_4]", il y a var_4. C'est un label générique posé par le désassembleur (IDA au hasard ?)

Assumer que var_4 cela correspond à ebp+4, c'est dangereux.


etherlord

Je pense... ;)
Qu'est-ce qu'un label générique ?
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Martinooooo » 01 Septembre 2014, 18:48

mov dword [ss:ebp+var_4], edi
va mettre le contenu d'edi dans [ebp+var_4] (ici ss indique que c'est une zone "stack" donc de la pile; et var_4 est une analyse d'ollydbg expliquant que ce dword est une variable locale de la fonction).
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Quelque petite question...

Messagepar Cirdo » 03 Septembre 2014, 15:55

Martinooooo a écrit:mov dword [ss:ebp+var_4], edi


Donc en gros var_4 est une variable dans la pile créée par le désassembler pour mieux comprendre le code.

Si j'ai bien compris (ce qui n'est pas sûr),
Code: Tout sélectionner
mov        dword [ss:ebi+var_4],edi
est different de
Code: Tout sélectionner
mov        dword [ss:ebp+var_4],edi
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Bango » 03 Septembre 2014, 16:31

Cirdo a écrit:Si j'ai bien compris (ce qui n'est pas sûr),
Code: Tout sélectionner
mov        dword [ss:ebi+var_4],edi
est different de
Code: Tout sélectionner
mov        dword [ss:ebp+var_4],edi

oui, c'est différent et ebi n'existe pas en tant que registre ;) même si la longueur est doublée en x64, je ne crois pas qu'il y ait des registres supplémentaires. mais avec esi ou autre à la place de ebi, c'est différent.

En gros :
mov 'dansMApoche', 10€+ variable
est différent de :
mov 'dansTApoche', 10€+ variable

ET
mov 'dansMApoche', 10€+ variable de 20€
est différent de :
mov 'dansMApoche', 10€+ variable de 45 €

C'est le même principe :)
\ô/
Avatar de l’utilisateur
Bango
Modérateur
Modérateur
 
Messages: 1537
Inscription: 23 Juillet 2007, 15:33
Localisation: Gotham city

Re: Quelque petite question...

Messagepar Cirdo » 03 Septembre 2014, 18:29

Un grand merci à tous, vous m'avez beaucoup aidé :wink:
Mais j'ai encore quelques questions :
Pourquoi parfois quand on parle de xor, on parle de cryptage ?
Est-ce que le programme peut modifier une valeur inscrit en clair dans le désassembler ? Par example : J'ai à la ligne 0x1234
Code: Tout sélectionner
 add 0x456, eax
Je débbug et la la valeur se transform comme par magie en
Code: Tout sélectionner
 add 0x328, eax



Merci encore pour c'est réponse si gentiment apporté :)
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Martinooooo » 03 Septembre 2014, 21:50

xor est une opération mathématique qui est effectivement souvent utilisée pour du cryptage simple (note: A XOR B = B XOR A = C / C XOR B = B XOR C = A / C XOR A = A XOR C = B).
Le code exécutable peut être effectivement modifié en plein milieu (ou au début pour les packers), mais sur un add au milieu de nulle part ça m'étonnerait plutôt (il faut que la section exécutée ait le flag write aussi).
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Quelque petite question...

Messagepar Cirdo » 21 Septembre 2014, 11:27

Je comprends que faut par fois faire un brute force quand on parle de cryptage.

Merci encore pour les réponses ;)
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Cirdo » 22 Septembre 2014, 19:47

J'ai une autre question qui concerne programmation/crack.

La plupart des logiciel fait en Objective-c (mac) qui ont une protection clé/serial, ont des fonctions sub_<des chiffres> qui est une fonction faite en c (Fonction objective-c : [NomFonction], c : nomFonction), est-ce que ça vous dit quelque chose ?
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Martinooooo » 22 Septembre 2014, 20:45

Pour macosx, je te conseille de passer par IDA Pro >6.1 (il me semble que toutes les versions après la 6.2/6.3 ont ça; donc la version 6.5 leakée).
La structure des appels est un peu particulière pour les passages entre obj-c et cocoa (ça fait longtemps que j'y ai pas touché, mais c'est du style "push le nom d'une fonction + call une fonction générique macosx", ce qui fait qu'on doit chercher la fonction qui a le nom correspondant) et IDA Pro permet de reconstruire un peu le tout.

Sinon tu peux aussi tenter l'analyse/debug avec Hopper Disassembler qui est aussi très bien fait pour le disasm/analyse/debug macosx (et qui a même un prix abordable, comparé à IDA où le piratage est massif).

NOTE: ne pas oublier que les binaires macosx sont en format mach-o, ce qui leur permet d'avoir souvent au moins à la fois une partie code x86 et à la fois une partie x64 ==> si tu veux patcher, tu dois patcher les deux si tu veux pouvoir distribuer le patch sur tous les systèmes.
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Re: Quelque petite question...

Messagepar Cirdo » 23 Septembre 2014, 17:17

J'ai IDA PRO version lite et hopper version gratuite (c'est bien le pseudos code ?), et j'utilise comme debugger lldb de apple en ligne de commande et c'est la galère. Je essayerai de faire les cracks pour moi, car un grand sage un jour m'a dit "Cracke que pour toi, sinon ça entrainera la jalousie des autres qui l'alerteront" (Je sais c'est mal dit).
Pour les fonctions sub, tu a une idée ?
Avatar de l’utilisateur
Cirdo
Débutant
Débutant
 
Messages: 26
Inscription: 30 Juin 2014, 19:29

Re: Quelque petite question...

Messagepar Martinooooo » 23 Septembre 2014, 18:58

J'ai pas vraiment compris ta question alors :mrgreen:
Acme::Don't
Acme::Bleach
Acme::Pony
Lingua::Romana::Perligata
The Lingua::Romana::Perligata makes it makes it possible to write Perl programs in Latin. (If you have to ask "Why?", then the answer probably won't make any sense to you either.)
Avatar de l’utilisateur
Martinooooo
Maître des ténèbres
Maître des ténèbres
 
Messages: 577
Inscription: 19 Août 2008, 08:20
Localisation: DR8, le + utile DRx

Suivante

Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités