logo

Knowledge Is Power

 
 

- Reinit des nouveaux posts -

- Recherche -

Messages Privés - Derniers posts
S'enregistrer - Login - Liste des membres
Vous logger : Login Pass

Reverse Engineering >> [Niv 1 - Resolu] ** DEFI 1 ** par elooo Newtopic | Reply
1 | 2 | 3 | Page suivante
poster txt
testxyz07
Inscrit le 04-10-2002
Posté le 16-07-2004 21:00

Non.C'est juste une fille.




_________________________

profil | edit | quote
miamasse
Inscrit le 16-07-2004
Posté le 16-07-2004 21:13

Quote:

Le 16-07-2004 14:52, elooo a tapoté avec ces petits doigts pour écrire :
___________________________________________________
Euh je suis pas franchement du même avis, m'enfin un bon coup de lèche de temps en temps ça fait du bien, je vais pas cracher dessus :>
Tu sais que je t'aime bien miamasse ?
___________________________________________________

Je ne l'aurai pas dis comme ça mais l'important c'est que tu sois contente . Tu es meilleure que moi, au moins plus motivée, et puis tu m'as démasqué sous ma fausse barbe. Tiens une petite histoire : un 25 décembre je rentrais à pied depuis une gare qui se trouve à 5-6 km de chez moi. Après avoir pris un raccourcis qui passe près d'un cimetière en rase campagne et m'être gelé pendant le trajet, je tombe sur un couple qui se balladait près de chez moi. Les gens me regardent bizarrement. Comme j'avais un blouson rouge, un sac à dos et un bouc, puis que j'étais passablement énervé par le trajet (Sepultura pour tenir chaud aux oreilles), je les accoste avec "Quoi, vous n'avez jamais vu le Père Noël perdre les clés de son traineau ? Ca m'arrive souvent !".<endofmylife />

De retour au sujet. Ce crackme n'est qu'une suite d'opérations arithmétiques. Il vous faut trouver la valeur initiale pour savoir quoi rentrer comme serial. On ne peut pas en dire plus
profil | Website | MSN | edit | quote
tweakie
Inscrit le 01-02-2002
Posté le 16-07-2004 21:50

Quote:

j'en suis pas à prendre ma calculatrice mais plutot à essayer de suivre le cheminement du prog en asm....



A vrai dire, je ne suis pas certain que ce soit la meilleure methode. En fait, si tu arrives effectivement a comprendre "globalement" le programme, tu auras sans doute fait d'enormes progres. Toutefois, ca n'est (selon moi) pas la philosophie de ce genre de defis : il s'agit ici de se concentrer sur une la partie "interessante" du programme (celle qui s'occupe de decider si oui ou non le numero de serie propose' est valide) et de comprendre en detail le tout petit bout de code correspondant.

Le fait que tu ne comprenne pas le reste importe peu : avec ce premier challenge, tu te familiarisera un peu avec les operateurs arithmetiques, tandis que le suivant t'initiera a d'autres operations (chaines de caracteres, boucles, whatever)...et les deux te permettent d'apprendre a te servir des outils communement utilises pour la retroconception. Le tout, c'est d'y aller progressivement.

Donc plutot que de comprendre le fonctionnement de ce programme depuis la premiere instruction jusqu'a la derniere, je te conseille de te concentrer sur les quelques instructions qui te permettront de realiser le defi et de suivre le pseudo-protocole suivant :

0a/ Trouver les chaines de caractere correspondant au bon/aux mauvais serials (Voir le dans le message d'elooo les explications pour "all referenced text strings) puis
0b/ Trouver l'endroit ou se fait la decision d'afficher l'un ou l'autre des deux messages.

1/Noter le critere de decision.

2a/ Remonter de quelques instructions pour trouver et les operations mathematiques effectuees sur le serial entre' par l'utilisateur et/ou
2b/ Mettre un breakpoint au debut du bloc d'instructions dans lequel est l'endroit trouve' en 0 et tracer l'execution apres avoir rentre' un serial au pif (ou du style 0000) histoire de voir ce qui se passe.

3/Comprendre les operations mathematiques evoquees ci-dessus (quelle est l'operation, quel est le registre affecte') et les noter quelque-part (dans l'ordre, hein).

4/En deduire les operations inverses...et un serial valide.

Il n'y a pour cela qu'une 10aine d'instructions assembleur a comprendre
profil | Website | edit | quote
kyfran
Inscrit le 13-07-2004
Posté le 17-07-2004 00:17

Quoi??? Elooo a répondu à ma demande d'aide alors que c'est son anniv. !!!!!On travaille pas un jour comme ça!

Si c'est vrai ....suis confus....
Dans le doute...je souhaite un joyeux anniversaire à Elooo!Champaaaaaaaaaaggggnnnneeeeeee!!!!

Merci pour la "grosse aide"...
profil | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 17-07-2004 04:58

Euh non, c'était pas mon anniversaire... ou alors je suis la dernière au courant
Merci quand même kyfran

Le message de Tweakie ci-dessus est très interessant pour ceux qui peinent toujours sur ce défi

(Merci miamasse )
_________________________

profil | mail | Website | edit | quote
kyfran
Inscrit le 13-07-2004
Posté le 17-07-2004 17:34

pourquoi certaines ligne du crackme, une fois ouvert avec Windasm et ollydbg, ne s'écrivent pas de la même façon d'une interface à l'autre?
exemple

WinDasm :
:004010002 E8AB010000 Call 004011B2

ollydbg :
00401002 |. E8 AB010000 CALL JMP.&kernel32.GetModuleHandleA> ; \GetModuleHandleA


ça me perturbe ça moi...bon ok je suis qqu'un de perturber à la base mais depuis que je me suis mis à étudier ce défi, mon cerveau fond...

merci d'avance...
profil | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 17-07-2004 19:31

Ben je trouve que ça reste sensiblement identique :

--> IDA :
.text:00401000 push 0 ; lpModuleName
.text:00401002 call GetModuleHandleA
.text:00401007 mov hInstance, eax

--> WINDASM :
:00401000 6A00 push 00000000
* Reference To: kernel32.GetModuleHandleA, Ord:0109h |
:00401002 E8AB010000 Call 004011B2
:00401007 A350304000 mov dword ptr [00403050], eax

--> OLLYDBG :
00401000 >/$ 6A 00 PUSH 0 ; /pModule = NULL
00401002 |. E8 AB010000 CALL ; \GetModuleHandleA
00401007 |. A3 50304000 MOV DWORD PTR DS:[403050],EAX

Les mêmes informations sont là pour le debuggeur et les 2 desassembleurs (IDA donne un peu plus d'info parce que c'est un désassembleur "intelligent" : il analyse le code, avec notamment des méthodes comme FLIRT (Fast Library Identification and Recognition Technology -> reconnait des appels de fonction sur des librairies standard de certains compilteurs) et PIT( Parameter Identification and Tracking -> permet de suivre et d'identifier les paramètres d'une fonction aux travers de la pile et fait la différence entre du code et des déclarations de variables).

Autrement ce sont juste des différences de syntaxe.

Vraisemblablement tu utilises windasm. Donc si on regarde ce que donne windasm, il nous dit
* Reference To: kernel32.GetModuleHandleA, Ord:0109h
et juste en dessous tu as un Call 004011B2.
004011B2 représente l'appel de l'adresse GetModuleHandleA.
En effet, si on va voir en 004011B2, on voit :
004011B2 $- FF25 00204000 JMP DWORD PTR DS:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA

(ou sous windasm :
* Reference To: kernel32.GetModuleHandleA, Ord:0109h
|:004011B2 FF2500204000 Jmp dword ptr [00402000]
)

Bref c'est du pareil au même

kyfran, de toutes façons, cette partie du code, tu t'en fous
As-tu été voir ce que donne les Data String References ?
Lis le message de tweakie ci-dessus, il a rédigé une démarche qui devrait te permettre d'étudier que le "nécessaire".

Je ne demande pas de comprendre tout ce que j'ai codé pour que ce crackme s'execute, uniquement d'étudier le passage où il vérifie le serial (le tout est déjà de trouver ce fameux passage)
_________________________

profil | mail | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 19-07-2004 11:59

Demain une voire plusieurs solutions pour ce défi seront mises en ligne.
Si quelqu'un veut se charger de la rédaction, je serais vraiment heureuse. Par contre je vous demanderais de me l'envoyer avant, soit en privé, soit sur mon mail ( elooo[@]no-log.org ) avant mardi 22h s'il vous plaît.
C'est histoire de relire et éventuellemént de faire quelques rajouts si je vois que vous êtes passés un peu vite sur certaines notions.
Si à 22H je n'ai rien reçu je m'en chargerai et posterai ça avant minuit :>
Merci
_________________________

profil | mail | Website | edit | quote
miamasse
Inscrit le 16-07-2004
Posté le 19-07-2004 12:53

Elooo, veux-tu que j'en fasse une ? De toute façon je n'attend pas ta réponse
----
Pour les autres, n'hésitez pas à poser des questions sur le forum même si ces questions vous semblent stupides : il y aurait toujours des gens qui se poseront les mêmes questions ; des questions simples pour certains sont complexes pour d'autres.

Un d'entre vous m'a contacté en privé pour que je l'aide en privé mais ce système n'est pas profitable au plus grand nombre. Ainsi je l'ai invité à poser ses questions sur le forum pour que tout le monde puisse en profiter. Elooo et moi répondrons à vos questions tant qu'il ne s'agit pas de la solution compléte du défi en cours, d'autres de passage le feront sûrement.

Le cracking/reverse n'est pas compliqué. Il faut seulement connaitre quelques instructions assembleur et trouver les bonnes sources d'informations. Vous débutez et ne savez pas quoi chercher et où le chercher, c'est normal. J'espère que la solution du défi #1 vous donnera l'impulsion qu'il vous manque.

Pour la solution du défi #2, je serai d'avis à attendre quelques jours de plus avant de la diffuser.
profil | Website | MSN | edit | quote
kyfran
Inscrit le 13-07-2004
Posté le 19-07-2004 13:09

j'ai fait comme pas mal de débutant (je pense) je me suis tapé les tutos sur deamoncrack. Ils ont l'air de dire que les serials apparisse en clair dans le debugger avec leur crackme alors qu'avec les crackme elooox rien n'arrive en clair :

API NODOC Arg00 = Local_Function(Arg01,Arg02,Arg03,Arg04,Arg05,Arg06,Arg07,Arg08)
API Address=004010E3, API Return Address=004010E8
Arg01 = 00403000 ->(LPDWORD)36323733 or (LPSTR)"3726"
Arg02 = 0040303b ->(LPDWORD)703d6b60 or (LPSTR)"`k=p(`w6jRan``PNVM$+QjQ<%,grai"
Arg03 = 0012fb5c ->(LPDWORD)0012fbc8 or (LPSTR)"Èû¤"
Arg04 = 77d13a50 ->(LPDWORD)04247c81 or (LPSTR)"¤|$¤Í«ºÜ¤…%a¤"
Arg05 = 00140332 ->(LPDWORD)03300014 or (LPSTR)"¤"
Arg06 = 00000111
Arg07 = 000003e9
Arg08 = 00150334 ->(LPDWORD)03300014 or (LPSTR)""





ICI :
l'Arg01 devrait correspondre au serial que j'ai tapé ("0000" en decimal) or il m'a remplacvé ça par "3726"????



Je sens bien la réponse du genre :
"ce serait trop facile... "

profil | Website | edit | quote
amistadman
Inscrit le 07-02-2004
Posté le 19-07-2004 13:16

"Pour la solution du défi #2, je serai d'avis à attendre quelques jours de plus avant de la diffuser. "
Oui entierement d'accord. Déjà j'trouve c'est tot pour le 1 alors le 2, sa serait effectivement bien d'attendre un peu plus merci.

_________________________
je passe tellement de mon temps à ne rien faire que je n'ai plus le temps de travailler.
profil | Website | edit | quote
Kaine
Inscrit le 19-07-2004
Posté le 19-07-2004 13:40

Salut tout le monde !
Sympa les petits défis elooo.

kyfran : Le serial n'apparaitra pas en clair cette fois. Il faut simplement comprendre le calcul qui est effectué dessus.

Prenons un exemple tres tres simple pour te montrer le principe :

Supposons que le bon serial d'un crackme soit 1234.
Tu peux verifier sa validité de cette manière :
Tu ajoutes par ex 2 au serial entré et tu vérifies si le resultat est égal à 1236. A ce niveau là, tu ne verras jamais le serial en clair. Il suffit de comprendre quels calculs sont effectués sur le serial et inverser la machine ! Dans notre (bete ) exemple, il suffit de prendre 1236 et de soustraire 2 pour trouver notre serial.

J'espere que tu comprends le principe.

A+
profil | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 19-07-2004 14:10

Arg01 = 00403000 ->(LPDWORD)36323733 or (LPSTR)"3726"
Arg02 = 0040303b ->(LPDWORD)703d6b60 or (LPSTR)"`k=p(`w6jRan``PNVM$+QjQ<%,grai"


Ca c'est le défi 2 kyfran
Et si 3726 corespondait à ton serial modifié par la routine présente dans mon crackme_DEFI2

Et si ce crackme faisait quelque chose du genre :
Si ( Modif(serial_entré) == String ) alors serial_entré = serial_attendu
A ton avis, Arg02, ça correspond à quoi ?
(Vas voir dans le topic DEFI 2, miamasse a donné un indice pour ce défi )

Sinon, ok miamasse, j'attends ta solution donc Merci beaucoup !!!
Pour le défi 2, je patiente encore un peu alors

_________________________


[ Ce Message a été édité par: elooo le 2004-07-19 15:08 ]
profil | mail | Website | edit | quote
Chalknow
Inscrit le 14-07-2004
Posté le 19-07-2004 16:42

Apparemment elooo ce que tu as tapé a engendré un petit bug sur le forum
Arg01 = 00403000 ->(LPDWORD)36323733 or (LPSTR)"3726"
Arg02 = 0040303b ->(LPDWORD)703d6b60 or (LPSTR)"`k=p(`w6jRan``PNVM$+QjQ<%,grai"

[ Ce Message a été édité par: Chalknow le 2004-07-19 15:05 ]
profil | Website | edit | quote
sirius_black
Inscrit le 05-07-2003
Avatar
Posté le 19-07-2004 16:50

plop ?
il est marrant celui-là

_________________________
d4 n3wS

[ Ce Message a été édité par: sirius_black le 2004-07-19 14:51 ]
profil | mail | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 19-07-2004 16:51

Oue sous IE ça foire méchamment apparemment C'est le < dans la string de l'arg02 qui foirer on dirait
Vais voir si je peux arranger mon post pour qu'il soit "compatible" IE

----- edit -----
J'ai désactivé le html dans mon message

_________________________


[ Ce Message a été édité par: elooo le 2004-07-19 14:59 ]
profil | mail | Website | edit | quote
bibo
Inscrit le 17-01-2004
Posté le 19-07-2004 19:07

Salut à tous,

N'étant pas un pro du crack, j'aurai besoin d'un petit coup de pouce pour le challenge nº1. En fait, j'ai utilisé REC sour Linux, et Ollidbg pour désassembler le prog. eloo1.exe.

J'ai trouvé la valeur à mettre dans eax pour faire afficher la fenêtre "C'est good", mais je sais pas comment trouver le serial à entrer de la fonction de conversion (à l'adresse 0x0040114C).

REC m'a donné pour cette fonction:

Conversion(A8){
/* unknown */ void A8; Serial à entrer
esi=A8;
ecx=0;
edx=0;
eax=*esi&255;
esi=esi+1;
if (al ==2){
al=*esi;
edx= !L00000000;
esi=esi+1;
}
while (al !=0){
al=al-48;
ecx=eax+(ecx+ecx*4)*2;
al=*esi;
esi=esi+1;
}
return (ecx+edx^dx);
}

En fait je connais la valeur de ecx+edx^edx, j'ai bien saisi comment marche cette subroutine, mais je bloque sur la boucle while (al !=0) pour trouver la chaîne A8.

Si qq peut m'aider

A+

Bibo
profil | Website | edit | quote
elooo
Inscrit le 19-05-2003
Avatar
Posté le 19-07-2004 19:17

Allez un indice :
Compare ta valeur dans eax juste à la sortie de cette fonction qui te pose problème, et le serial que tu entres. Sii tu es un peu rusé tu dois pouvoir "deviner" ce que fait ce call sans même devoir t'attarder sur son code . (Un conseil : entre une nombre de maxi 8 chiffres, tu pourras comparer beaucoup plus facilement )
_________________________

profil | mail | Website | edit | quote
amistadman
Inscrit le 07-02-2004
Posté le 19-07-2004 19:25

"j'ai utilisé REC sour Linux [...] REC m'a donné pour cette fonction: [...code...]"

y'a des programmes qui te transforment ce qui se passe en ligne de code comme sa ?!!
Sa existe sous windows ?


P.S : est-ce bien nécessaire ce genre de prog au fait ? ou au contraire, c'est déconseillé, du moins le temps de "se balader" dans la lecture et la compréhension de l'assembleur ?
_________________________
je passe tellement de mon temps à ne rien faire que je n'ai plus le temps de travailler.
profil | Website | edit | quote
miamasse
Inscrit le 16-07-2004
Posté le 20-07-2004 00:31

c'est un peu comme les traducteurs online : ça peut donner une idée du code mais on peut aussi passer plus de temps à essayer comprendre le charabia que ça donne.

Le code d'elooo est assez simple à comprendre car il est assez "littéral". De petites embrouilles au niveau des LEA avec les (EAX + ECX*4 + ECX*2), qui équivaut à EAX + ECX*10, mais rien de très méchant.

Les compilateurs optimisent un minimum les instructions et ne donnent pas toujours la même séquence pour la même opération ce qui rend plus difficile la décompilation.

Je vais essayer de réecrire le crackme d'elooo avec des instructions différentes pour que vous puissiez comparer (bon fait très chaud ce soir, ça ne m'arrange pas ).

[ Ce Message a été édité par: miamasse le 2004-07-19 22:36 ]
profil | Website | MSN | edit | quote
Newtopic | Reply 1 | 2 | 3 | Page suivante

Online : 27 Guests


Retour Index NewFFR Repository : http://taz.newffr.com
Cagades à Stick : http://alcane.newffr.com
Forum HTML et Archive -> ici
ForumFR Sql/Xml (2006/04) (SF pas à jour du tout...) - Alive since 2001 Newffr.com
Pour toute plainte ou problème -> Contacter Borax, Hyatus, Tweakie ou Stick par message privé (ou Gueulez sur le forum :) )
Retour haut de page