Protection Maison : Christal 5.0

By WiA Team

Aujourd'hui, on va faire l'étude d'une petite "protection maison" : Christal 5.0 ( http://christal1.cjb.net )
Un désassembleur ( IDA, W32Dasm,... ) et un éditeur hexadécimal ( Hiew, Hexworkshop, etc ) ou un String Viewer ( Showstring ) suffiront largement à l'étude.
Disponibilité : selon timing.

Christal a été développé, très certainement, en 1997 dans l'anonymat le plus total pour atteindre aujourd'hui la réputation qu'on lui connait.
Les premières versions de Christal sont apparues sporadiquement chez LittleBobJr et ont été testées avec succès dans 4 cas bien définis :
- La Main Rouge
- ATP Team
- Le Groupe de Travail
- La Christal Page

Certaines releases ont très certainement échappé à l'étude mais cela reste à confirmer.

La version actuelle, Christal 5.0, s'avére dotée d'un moteur de tâche polymorphique avancé, lui permettant d'évoluer avec aisance dans la Cryptographie et le développement / programmation en ASM.
En outre, son aptitude a utilisé le "Recursive Tunneling" force Christal 5.0 à se lancer dans toutes études poussées quelqu'elles soient, voir challenges type Reverse Engeenering Academy ( REA ).
Toutefois, pour ce dernier cas, un bug a été détecté par l'encryptage de la Signature "c.h.r.i.s.t.a.l" en "l.a.t.s.i.r.h.c".
Ce bug avait déjà été constaté auparavant.

Christal 5.0 est fourni avec une librairie conséquente, disposée sur 3 sites , permettant de palier à toute situation critique par l'utilisateur :
- http://foundme.cjb.net
- http://afrt.cjb.net
- http://christal1.cjb.net

Christal 5.0 s'avére peu gourmand en ressources système. Quelques crackmes suffisent largement à le maintenir en activité et opérationnel.

I \ L'Analyse

Avec Showstring, on constate que Christal 5.0 s'avère riche en renseignements :

0000004D  !This program cannot be run in Groupe mode.
00000178  .text
000001A1  .rdata
000001C9  .data
000001F1  .idata
00000219  .rsrc
00000241  .reloc
00000272  .tutors <-- ?
0000080F  .outils <-- ?

La présence de sections supplémentaires dénotent certainement un code supplémentaire aux programmes standards.

00006D1C  Standard Analysing 
00006D46  Debugging
00006D70  Unpacking
00006D9A  Anti-debugging  
00006DC4  DeProtectoring
00006DEE  VBOXing
00006E20  Cryptography Analysing
00006E4A  Keygenning
00006E86  VBA blasting
00006E9C  Reversing
00006EBE  ASM Programming
00006EDC Tutoring 
00006EF2  Guru-ing 
00006F16  Putting my WebSites en Bordeling 
00006F3C  Sorting connering contring Female Cracking
00006FFF Taking rouleau de patissering on the head

Ok, Christal 4.0 n'est pas à classer dans le basique.

Le passage sous IDA s'avére étonnant !

Le schéma de détournement d'activité est tout bonnement stupéfiant !
- Techniques d'anti-debugging avancées par saturation phonique stridente et prolongée. ( en verdatre )
- Fake jumps ( puis real ) et zigzagment progressif du traçage par accumulation alcoolique. ( en rose )
- Boites de dialogue d'avertissement accompagnées de rugissements incohérents pour bloquer le debugger et apeurer le cracker. ( en gris )

Christal 5.0 dispose de 3 entry-points compartimentés et bien séparés dans les sections les plus importantes ! ( en bleu clair, bleu marine et marron )

La suite de l'étude via IDA, nous améne à tomber dans les sections supplémentaires constatées avec Showstring.

.tutors:004020EB                 cmp     ANNEE, 1999
.tutors:004020F1                 je      short groupe_travail
.tutors:004020F6                 push    eax             ; Christal's Page
.tutors:004020F7                 push    hDlg            ; HTML
.tutors:004020FD                 call    ds:WriteFile
.tutors:00402103                 call    ds:WebSite
.tutors:00402105                 jmp     updater_news 
.tutors:00402107 
.tutors:00402107 groupe_travail:        
.tutors:00402107                 push    TJ_Phone        ; not defined 
.tutors:00402109                 call    ds:TEEJI
.tutors:0040211C                 push    PULSAR_ICQ      ; not defined
.tutors:0040211F                 call    ds:PULSAR
.tutors:004022A3                 push    EL_CARACOL_Phone ; not defined
.tutors:004022A5                 call    ds:EL_CARACOL

Ainsi nous retrouvons trace du développement précédent sur les versions 1.0 et 2.0 de Christal, aussi appelées versions "Groupe de travail".
La suite du désassemblage permet de mieux analyser la routine d'updatage de ses librairies.


.tutors:00402407 updater_news:
.tutors:00402407                 mov     eax, bordel_complet   
.tutors:0040240A                 cmp     organisation_site, eax
.tutors:00402411                 jl      creation_nouveau_site
.tutors:0040241C                 mov     eax, is_good_photo_in_playboy  ; boolean    
.tutors:0040241F                 test    eax, eax
.tutors:004024A3                 je      raw_update
.tutors:004024A5                 push    path_hidden_link
.tutors:004024A8                 call    UpdateMyPhotoPinup
.tutors:004024AA raw_update:
.tutors:004024AA                 push    name_file
.tutors:004024B0                 call    WriteNewsFile
.tutors:004024B8                 jmp     organisation_my_website                       

Christal 5.0 ( depuis la 3.0 sûrement ) dispose d'un système de mise à jour photographique "P.I.N.U.P" visant à dérouter le Cracker, qui essaierait de modifier sa page.
NB : La version 4.1
BETA dispose d'une fonction d'exportation de la mise à jour photographique au travers de la routine "release_my_cryptotool1.0_with_disabled_button".

La suite de l'étude de la section "Tutors" a du être abandonné sur la routine "organisation_my_website", le WiA ne disposant pas d'assez d'éléments dans les phénomènes liés à "la Théorie du Chaos", bien connu dans la Physique moderne ( WinGraph d'IDA en témoigne ) et de puissance de calcul pour poursuivre l'investigation.

Même le passage sous Softice s'avéra infructeux...


Le passage sur le code de la section Outils s'avére aussi instructif.

.outils:0040311A                 push    Roy         
.outils:0040311F                 push    Vom_Bonjour  
.outils:00403120                 push    Iczelion    
.outils:00403121                 call    ds:IRC
.outils:0040312F                 test    eax, eax
.outils:00403132                 jnz     programmation_ok
.outils:00403135                 push    W32ASM_MSGB
.outils:0040313F                 call    ds:Forum
.outils:00403145                 test    eax, eax
.outils:00403149                 jnz     programmation_ok
.outils:00403153                 push    CC_REF  ; "Passer de l'ASM au C en 20 leçons"
.outils:00403157                 call    ds:Reconversion

La suite du désassemblage nous montre un gros Bug dans la suite de la routine.

.outils:0040511F my_tool_finished:       
.outils:0040511F                 xor     eax, eax  
.outils:00405120                 test    eax, eax    
.outils:00405121                 jnz     ask_for_reference_on_protools <-- ICI !
.outils:0040512F                 mov     dword ptr [protools], eax

La valeur d'eax étant toujours à zéro, le saut ne sera jamais fait.
La version de Christal 5.1 releasée aujourd'hui ( 26/09/2002 ) ne contient plus ce bug depuis.

WiA ( mode Sympa ON)

NB: Naturellement cette étude n'est pas viable à 100 %, et l'auteur de Christal 5.0 peut encore surprendre par ses idées et ses développements.

Ce sera tout pour aujourd'hui, si vous n'avez pas tout compris ou si vous trouvez des erreurs, n'hésitez pas à nous envoyer un mail.