D-Montez Moi a été dém…

Et voilà, mon dernier crackme n’a pas fait long feu, je m’en doutais un peu, j’aurai du plus le corser , mais bon, c’est agréable de faire des choses simples desfois. A quoi bon faire un crackme avec des milliers de lignes de code, comme je l’ai déjà vu, utilisant une lib de maths toute faite et balancer fièrement après “Allez y faites moi un keygen, héhé”, aucun intérêt.

La personne (andrewl.us sur crackmes.de) qui a résolu le keygenme a fait un petit tuto en html très agréble à lire, il a utilisé une lib de math pour faire le keygen mais ce n’est pas obligatoire, chacun sa méthode. Personnellement, je trouve la solution un peu compliqué, il y a beaucoup plus simple, il fallait notamment bien comprendre le fait que j’utilise des entiers 64 bits (uint64_t), au niveau assembleur, cela se traduit par le fait qu’un nombre est stocké non pas sur un registre mais 2, typiquement le couple EDX:EAX, EDX contenant la partie haute et EAX la partie basse.

Par exemple l’opération suivante:

uin64_t val;
val = (val&0x0FFFFFF00000)>>16

se traduit par :

00401889 AND EAX,FFF00000
0040188E AND EDX,0FFF
00401894 SHRD EAX,EDX,16
00401898 SHR EDX,16

Une fois qu’on a compris ce système, l’analyse du keygenme est presque immédiate et on constate que son code se traduit en quelques lignes de C seulement.

Donc voilà, régalez vous avec cette solution :

D-Montez Moi solution by andrewl.us (keygen + src + tut)

Filed under : Tutorial
By admin
On February 12, 2008
At 14:50
Comments : 0
 
 

D-Montez Moi

Non, je ne suis pas encore mort

Voilà un autre défi, le but est de faire un keygen.
La routine qui vous intéresse est plutôt courte, mais pas si évidente à appréhender au premier abord, essayez d’imaginer à quoi ça pourrait correspondre en terme de “code source”.

Il y a des petites surprises mais rien de bien méchant.
Ca tourne sans problèmes sous XP et vista (quel horreur )

D-Montez Moi KeygenMe (RAR)

Filed under : Reversing
By admin
On January 28, 2008
At 19:28
Comments :1
 
 

CryptoKeygenme#1 (TiGa) solution

Je vous propose une petite solution pour le dernier keygenme de TiGa, je ne savais pas qu’il était déjà paru sur crackmes.de depuis un mois, je l’ai seulement vu aujourd’hui sur FC.

Au programme, le readme nous annonce de la crypto avec un RSA 2048 + MD5 mais nous verrons que RSA n’est pas l’algorithme employé mais ça y ressemble fortement. De même avec MD5, une version modifiée est utilisée, la première constante classique 0×67452301 est remplacée par la valeur de l’heure courante du système. La clé est alors différente selon la tranche horaire dans laquelle on exécute le keygenme.

On peut résoudre le keygenme en utilisant des opérations modulaires simples, il faut notamment connaîte la notion d’inverse. Tout est expliqué dans le tuto, j’ai inclus le listing commenté de la routine qui vérifie le serial.

CryptoKeygenMe#1 by TiGa solution (keygen + src + sol)

Filed under : Tutorial
By admin
On September 15, 2007
At 22:54
Comments : 0
 
 

ESIGN Tools 1.0

Mon défi Waga invader a récemment été cassé par jB (python powered ) et 0×87k qui en a profité pour faire un magnifique tutorial que je ne peux m’empêcher de publier. L’algorithme du crackme reposait essentiellement sur le schéma de signature ESIGN, qui est presque méconnu. Vous pourrez trouver plus de détails sur cet algorithme dans le célèbre “Handbook of applied cryptography”.

Il m’est venu alors l’idée de coder un petit tool à la sauce “RSATools” mais pour ESIGN, ça ne vous servira sûrement jamais mais ce n’était vraiment pas compliquer à coder, alors j’en ai profité. Qui sait, ça sera peut être utile? En tout cas, le développement de ce petit tool permet de mettre en évidence les faiblesses de ESIGN et m’a permis de comprendre pourquoi, je m’explique :

Rappelons d’abord comment vérifier la validité d’une signature:
- Soit la clef publique (N,K) où N = p*p*q (p et q premiers) et K>=4
- Soit S la signature pour un message M
- On calcule u = S^K mod N
- On hashe le message M : z = h(M) (h = fonction de hachage)
- On accepte la signature si z <= u <= z + ((2/3)*log2(N))

Il y a donc un problème si on utilise un hash d’une taille en bits inférieure à (2/3)*log2(N), à ce moment là n’importe quel message M pourrait correspondre à une signature donnée à cause de l’approximation faite sur u. Il est donc fortement déconseillé (ce serait même une catastrophe) d’utiliser la fonction SHA1 avec un modulus de 520 bits par exemple, il serait plus judicieux dans ce cas d’utiliser un SHA-512.

Et même si vous utilisez une taille de hash proche de la taille en bit du modulus, on peut falsifier la signature en bruteforçant un message m’ dont les premiers bits du hash sont égaux à ceux du hash réalisé sur le message M original.

Pour illustrer :
- Prenons N (129 bits) = 19094C92C1DDAE2E0E1FBAADC0DEF67FB = 7AFA49D6815* 7AFA49D6815* 6C7DF5E7153
- Prenons K = 29A
- Alors le taux d’erreur est 2^((2/3)*log2(N)) = 4000000000000000000000 (en hexa)
- Si on utilise MD5, les hashs ont une taille de 128 bits.
- On peut alors bruteforcer un message m’ dont les premiers bits du hash MD5 seront les mêmes que les premiers 43 bits du hash de M. (43 = 128 - log2(4000000000000000000000)+1)

Si on signe “waga” (md5 = 0c52bcf239340f9642ee665dc7c34370) avec X=4CBEB10DA6C (valeur secrète lors de la génération, cf help dans ESIGN Tools) on obtient la signature 60F0145E06C2C3165FC95B8D28DAD39A qui nous donne u = 0C52BCF23940845B7B50402098D82550, u vérifie alors bien l’approximation.

On peut alors trouver m’ par bruteforce en vérifiant que (u-4000000000000000000000) <= md5(m’) <= U, et ceci sans connaître la clef privée.

Les 128 bits qu’offre en terme de sécurité MD5 est alors réduit à une petite cinquantaine de bits.

Tout ça pour dire que le schéma ESIGN paraît vraiment peu fiable du fait de l’approximation grossière faite pour valider la signature. Peut être est ce pour cela que l’algorithme est peu utilisé?

Si vous trouvez des bugs, n’hésitez pas à me contacter.

Waga Invader solution by 0×87k

ESIGN Tools 1.0 beta test

ESIGN Tools source (C++,miracl lib)

Filed under : Crypto
By admin
On August 29, 2007
At 23:21
Comments : 0
 
 

Tuto pour Pulsar’s JC#1

Voici un tutorial pour le premier crackme de Pulsar destiné au junk code. Le code original est vraiment noyé dans du junk qui forme en tout plus de 4500 instructions assembleur, c’est l’horreur. Heureusement IDA est là pour nous aider .
Au travers de ce crackme, j’ai pu m’initier aux script IDC et je dois dire que c’est vraiment un outil très puissant, peut être un peu lent mais c’est vraiment pour lui trouver un défaut.

Le package contient :
- Un PDF détaillant ma méthode
- Le script IDC qui permet de déjunker entièrement le crackme
- Le code entier du crackme déjunké

Tutorial Pulsar’s JC#1 (PDF + script IDC)

Filed under : Tutorial
By admin
On August 20, 2007
At 22:57
Comments : 3
 
 

Deux nouveaux keygenme

Voilà 2 nouveaux keygenme :

Waga-Invader
A la base, ce petit proggie est un jeu écrit entièrement en C++, un shoot’em’up complètement débile. Pour accèder à un niveau secret, vous devez fournir une clef valide, c’est en fait un crypto keygenme. Il s’agit d’une implantation d’un algorithme de signature peu médiatisé. La routine est extrêmement simple à appréhender et courte, la génération d’une signature valide n’est pas aussi évidente que cela.
Vous devez posséder une carte graphique correctement configurée pour OpenGL.

E-Tour-Dissez-Moi
C’est un tout petit keygen me écrit en C, modélisant un problème célèbre, un peu comme les petits casse-têtes de votre grand-père. La routine est démunie de toutes obfuscations et ne comporte aucune opération mathématique, même pas un ADD et un MUL . Je vous conseille de modéliser le problème sur papier dans un prermier temps.

Waga Invader crypto keygenme (OpenGL)


E-Tour-Dissez-Moi Keygenme

Filed under : Reversing
By admin
On August 15, 2007
At 17:59
Comments : 0
 
 

Code scandaleux

Et voilà les vacances se terminent, tout a une fin, hélas.

J’en ai donc profité pour finir ce que j’avais commencé avant de partir, c’est à dire le tutorial sur le dernier keygenme de haiklr, Scandal0us c0de. J’ai vraiment pris du plaisir à le résoudre, en plus il est écrit entièrement en assembleur, c’est donc une bonne chose pour l’analyse. Le keygenme attend de nous un peu logique et des maths. Ce qui fait le charme de ce keygenme ce sont les différentes possibilités de le résoudre.

Je vous propose donc ma solution.

Tutorial for Scandal0us C0de (haiklr)

Filed under : Tutorial
By admin
On July 29, 2007
At 22:32
Comments : 0
 
 

WagaTemplate party

Et pourquoi pas lancer une petite template party?

J’ai un peu de temps en ce moment alors je me suis mis à coder un petit template en pure GDI, où je manipule directement les DIBs. J’affiche alors les célèbres fractales Mandelbrot et Julia sous différentes vues avec possibilité de zoomer, changer de fractales,…
Ce n’est pas super optimisé niveau FPS quand on zoome, on peut faire mieux, actuellement c’est le FPU qui tourne à plein régime mais ça peut s’arranger avec les instructions SSE…

Sinon, je n’ai pas réussi à résiter, j’ai inclus un mini keygenme dans le template, c’est vraiment bidon mais nécessitera peut être quelques recherches rapides.

WagaTemplate (Rar archive with About src)

Filed under : Reversing
By admin
On June 25, 2007
At 22:46
Comments : 0
 
 

Tutorial for Crosys keygenme 2007

Voilà, je m’y suis enfin mis, voilà un petit tutorial sur le keygenme de Crosys. C’est un keygenme avec de la crypto simple, on y trouve Tiger Hash, 3WAY et une sorte de El-Gamal.

On peut envisager plusieurs solutions pour cette dernière partie, j’ai détaillé tout cela et j’explique aussi brièvement le principe du chiffrement et déchiffrement avec El-Gamal même si tout n’est pas utile pour résoudre le keygenme.

Tut crosys keygenme 2007 (ZIP archive)

Filed under : Tutorial
By admin
On June 14, 2007
At 20:23
Comments :1
 
 

Ouverture du blog

Salut à tous

Ce blog est l’occasion pour moi de diffuser certains de mes tuts en matière de reversing et tout ce qui gravite autour. Il y aura aussi bien sûr plein d’autres choses, jetez-y un oeil de temps en temps, RSS rox

Vous pouvez aussi jeter un oeil à mon petit repository…

Waga-repositorium

Filed under : Reversing
By admin
On June 8, 2007
At 18:05
Comments : 0