Protection
  PEPACK v1.0  

Les Protections Renforcées

 Outils
  ProcDump Wdasm SoftIce  

http://www.xdsoft.com/explorer/

 Cible
  3D Exploration  

By Christal

FOR ADVANDCED USERS ONLY

Infections:
The current version does not contain any limitations and the registered version differs only by absence of the text: UNREGISTERED also outputs your name and email as the registered user.
3D Exploration is trialware and you must register the program to continue using it after 30 day trial period.
Boite d'enregistrement à 3 champs: Name, Email, Reg Number
Et surtout, il est compressé par PE-PACK v1.0 (C)Copyright 1998 by ANAKiN

 3D Exploration
Thanks for your interest in 3D Exploration.
Version 1.03
(dit le Jules)


C'était encore une de ces nuits dégeulasses , il tombait des hallebardes à pas mettre un Suisse du Vatican dehors, et il valait mieux savoir nager que marcher pour circuler dans cette ville pourrie.
J'avais rencard dans un clandé avec une voix. Ce genre de voix qui vous appelle au beau milieu de la nuit et qui vous fait courir à l'autre bout du monde sans plus d'hésitations qu'un chacal devant une charogne bien puante.

La fille était gironde. On pouvait pas dire mieux, une espèce de croisement entre Marilyne Monroe et Pamela Anderson à vous donner envie de vous réincarner en soutien pare-chocs…
J'avais du mal à me concentrer sur son problème, et le mien commençait à prendre des proportions embarrassantes dans mon pantalon.

Ce que j'avais pu retenir de ce que m'avait dit la poule, c'est qu'elle avait des soucis avec un Jules qui refusait de l'enregistrer, et elle n'avait plus que trente jours pour trouver une solution.
Marlowe renfonça ses yeux dans ses orbites, ramassa sa langue qui pendait sur la table, et lui posa deux trois questions. Le Jules qui lui posait un problème exigeait qu'on lui remplisse un formulaire avec un nom, une adresse mail, et un numéro d'enregistrement. En échange, il enlevait tous les "UNREGISTERED VERSION! Please register your personal copy." présent un peu partout, dans le bandeau d'écran, et levait la Time Limit.

Marlowe se frotta les mains, à défaut de pouvoir le faire sur les courbes de la blonde incendiaire. L'affaire se présentait facile, et il pensa qu'il lui faudrait pas plus de temps pour résoudre cet enigme, qu'un voleur à la tire pour vous secouer votre morlingue.

Tôt le lendemain matin, je suis allé voir le Jules et demanda à remplir un formulaire du même type que celui de ma cliente. Comme je pouvais décemment pas y mettre mon blaze, je décidais d'y graver le premier nom qui me passa par la tête. Dans le premier champ j'écrivis "Bave de Crapeaux", dans le second serpent@plumes, mais le troisième me posa un cas de conscience. Le bouton qui me permettrait de valider mon formulaire était grisé. Fallait improviser.
Au flan, je tentais de rentrer un code bidon en observant les réactions du julot. Au 12ème chiffre, je vis un éclair s'allumer dans le regard vitreux du gras-double strongominé, et le bouton s'activa. Mais rien à faire, on me balança un message d'erreur. Je rangeais mes cannes et décidais de trouver mieux.

Dans le bar d'à coté, je demanda au loufiat qui trônait derrière son comptoir, astiqué comme un miroir de bordel, de bien vouloir me donner la liste des String Datas References, mais même en montrant de façon ostentatoire mon Wdasm calibre 8.93, je n'obtins rien du tout.
L'affaire allait être plus compliquée que prévue. Le Jules semblait bénéficier de protections…

J'allais voir mon vieux pote ProcDump, inspecteur à la crime, pour lui soutirer l'information suivante:

CODE       00043000  00001000   0001E800   00000400   C0000040
DATA       00008000  00044000   00002200   0001EC00   C0000040
.tls       00001000  0004C000   00000000   00020E00   C0000040
.rdata     0004D000  00000200   00020E00   00020E00   C0000040
.INIT      00002000  0004E000   00000A00   00021000   C0000040
.idata     00001000  00050000   00000400   00021A00   C0000040
.edata     00001000  00051000   00000400   00021E00   C0000040
.reloc     00003000  00052000   00000E00   00022200   C0000040
.rsrc      0004D000  00055000   00012E00   00023000   C0000040
PEPACK!    00003000  000A2000   00001200   00035E00   C0000040

D'un coup d'œil, je visais le PEPACK!. Une p'tite frappe tout juste bonne à détrousser les vieilles, derrière une poubelle. Une vielle connaissance aussi, le genre qui vous compresse un Jules pour cacher la misère…

Histoire de savoir à qui j'avais affaire exactement, je fis un détour par le bureau de HexWorkShop, qui me donna le pédigré exact de PEPACK:

.. -=. PE-PACK v1.0
-.- (C) Copyright 19
98 by ANAKiN .=- ...

Discrètement, j'échangea les C000040 par des E0000020, et retourna voir le bistroquet. Cette fois ci en lui enfonçant mon Wdasm dans le groin, j'obtins un peu plus d'informations. C'est fou comme on respire mieux quand on a les naseaux grand ouvert…

/******************** Program Entry Point ********
:0041F74A 7400                    je 0041F74C
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041F74A(C)
|
:0041F74C E9AF280800              jmp 004A2000
:0041F751 00000000000000000000    BYTE 10 DUP(0)
:0041F75B 00000000000000000000    BYTE 10 DUP(0)
:0041F765 00000000000000000000    BYTE 10 DUP(0)
:0041F76F 00000000000000000000    BYTE 10 DUP(0)

Mais toujours pas de Strings Data, et des codes pas très engageants…
Pour avoir déjà connu une situation comme celle ci je savais qu'un Dump du Jules en mémoire ne me permettrait pas de faire tourner le soft ni vu ni connu, mais que j'obtiendrais la liste convoitée.

Pour commencer, il fallait retrouver la trace que laissait toujours derrière lui PEPACK. En fouillant dans un vieux script de ProcDump, je remis la main dessus: 61 FF E0.
Il restait plus qu'à chercher un peu avec un hexéditeur, poser un CC (int 03) à la place du 61 (Popad), et de planquer en attendant de prendre la p'tite gouape la main dans l'sac.

Equipé d'un BPINT 03 et de mon SoftIce calibre 4.1, j'ai attendu patiemment. Pas longtemps:

017F:004A225F  8B8557050000        MOV       EAX,[EBP+00000557]
017F:004A2265  03858B050000        ADD       EAX,[EBP+0000058B]
017F:004A226B  8944211C            MOV       [ESP+1C],EAX
017F:004A226F  61                  POPAD                         > à remettre à la place du CC
017F:004A2270  FFE0                JMP       EAX
017F:004A2272  8D85CE050000        LEA       EAX,[EBP+000005CE]
017F:004A2278  50                  PUSH      EAX

Ce genre de petite frappe se déballonne en moins de temps qu'il n'en faut pour qu'une pro vous fasse une gâterie sous une porte cochère, le pantalon sur les chevilles…
En deux temps trois mouvements, j'avais remplacé le jmp EAX par un jmp EIP, et envoyé PEPACK tourner sur lui-même comme une girouette par une nuit de tempête.
Au passage je lui avait soutiré une info, dans EAX j'avais trouvé l'adresse de la porte d'entrée du julot: 00401000, un classique!

Pendant que PEPACK jouait au chien qui se mord la queue, je me suis précipité chez ProcDump. En entrant dans son bureau, j'ai repéré le Jules par la fenêtre des tâches, et demandé un DUMP FULL, avec l'option Rebuilt new Import, puis j'ai sauvé le nouvel exécutable. Le gras du bide pris encore du poids est passa de 224 à 631 ko. PEPACK ne m'étant plus d'aucune utilité pour le moment, je l'ai envoyé au pays de Morphée en faisant un Kill Task brutal.

A partir de ma copie décompressée du Jules, j'ai pu entrer dans son antre sans l'ombre d'un problème, et obtenir enfin la liste des String Data references. L'une d'elles retint immédiatement mon attention:

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:OO426C5A(U), :O0426C89(U), :OO426CA3(C)
|
:O0426CAD 803DOB59440000          cmp byte ptr [OO4459OB], OO   > Flag Utilisateur?
:00426CB4 7511                    jne OO426CC7

* Possible StringData Ref from Data Obj ->" - UNREGISTERED"
|
:O0426CB6 688C664400              push 0044668C
:O0426CBB 8D8DFCFEFFFF            lea ecx, [ebp+FFFFFEFC]
:00426CCl 51                      push ecx
:OO426CC2 E87BCD0100              cal1 00443A42

Et là, ca a fait tilt dans ma cafetière. Du premier coup j'avais sous les mirettes tout ce qui ressemblait à un beau drapeau Utilisateur.
Histoire de piéger le Jules, j'ai posé un Break on Memory (BPM) sur 0044590B, et je me suis remis en planque avec mon SoftIce:

:OO42EF99 52                      push edx
:0042EF9A 8D8D4OFFFFFF            lea ecx, [ebp+FFFFFF4O]
:0042EFAO 51                      push ecx                 >  notre code
:O042EFA1 E87D5COOOO              call 00434C23            >  vérif du code
:0042EFA6 83C408                  add esp, 00000008
:O042EFA9 A20B594400              mov [OO44590B], al       >  0 ou 1 en fonction du statut
:OO42EFAE 25FFOOOOOO              and eax, 000000FF
:O042EFB3 EB02                    jmp 0042EFB7

Encore mieux!
Un couple de secondes plus tard, j'avais coincé l'un des portes flingue du Julot
Le code bidon que j'avais fourgué au Jules, étant dans la poche d'ECX. Clair que le call suivant était celui dans lequel il fallait faire une descente, et trouver ce qui pouvait bien se maquer dans AL!

En descendant les marches qui menaient au Call, j'avais enlevé mes pompes, et ces en F10 que je continuais ma recherche.

017F:00434C95  50                  PUSH      EAX
017F:00434C96  E84DED0000          CALL      004439E8
017F:00434C9B  83C40C              ADD       ESP,0C
017F:00434C9E  8B5508              MOV       EDX,[EBP+08] > adresse de notre code dans EDX
017F:00434CA1  8A0A                MOV       CL,[EDX]     > 1er caract du code dans cl
017F:00434CA3  3A4DF8              CMP       CL,[EBP-08]  > compare avec contenu de ebp-8 (0)
017F:00434CA6  7512                JNZ       00434CBA     > modif possible
017F:00434CA8  8B4508              MOV       EAX,[EBP+08] > notre code dans EAX
017F:00434CAB  8A5001              MOV       DL,[EAX+01]  > 2eme caractère du code
017F:00434CAE  3A55F9              CMP       DL,[EBP-07]  > compare avec 8
017F:00434CB1  7507                JNZ       00434CBA     > c'est ok ?
017F:00434CB3  B801000000          MOV       EAX,00000001 > Eax=1 Glop!
017F:00434CB8  EB02                JMP       00434CBC     > évite le Xor
017F:00434CBA  33C0                XOR       EAX, EAX     > Eax=0  Pas Glop!
Etc...
017F:00434CC2  C3                  RET

D'un seul coup, je tombe sur le paletot de deux minables en train de faire joujou avec mon code bidon.
En leur agitant mon SoftIce sous le nez, y se sont mis à table plus vite que la vérole saute sur le bas clergé. [EBP-08] avait juste à comparer le premier caractère de mon code, et [EBP-07] le second. En secouant un peu les deux gigolpinces, il crachèrent le morceau. Si le code que j'avais entré, calculé à partir de mon nom et de mon mail, avait commencé par 08 suivi de 10 chiffres bidon, j'aurais pu obtenir le "protection passed", et un beau diplôme à la clé:

félicitations
Version 1.03 Jul 16 1999
Copyright (c) 1999 X Dimension Software
This program is licensed to:
Bave de Crapeaux Email:serpent@plumes

Je l'aurais rangé avec les autres dans mon tiroir HKEY_LOCAL_MACHINE/Software/ X Dimension/3D Exploration/Register

Mais c'est pas pour moi que je bossais, mais pour les yeux d'une blonde. J'avais plusieurs solutions, Eax étant toujours égale à 2 en arrivant sur le Xor Eax, Eax, je pouvais faire:

017F:00434CBA 48 DEC EAX
017F:00434CBB 90 NOP

Pour obtenir un AL égale à 1, ou encore de détourner l'aiguillage en 00434CA6 par un 750B JNZ 00434CB3, de nopper les deux branchements, de faire un jmp 00434CB3 en 00434CBA …
Dans ces cas là, faut faire comme on l'sent!

Il restait à convaincre le Jules de se faire modifier sans qu'il s'en rende compte.
Comme ca faisant un bout que je voulais essayer un truc d'un copain, j'ai décidé de me créer une planque dans la dernière section du Jules, au bout de mon pote PEPACK.

Pour ça, j'avais qu'à insérer 0x1000 bytes a la fin du fichier, en utilisant HexWorkShop, et placer mon curseur à la queue de tout ça. En cliquant avec le bouton droit de ma souris, j'ai sélectionné "Insérer". J'ai mis un 1000, en cochant Hexa, et j'ai fais OK pour rajouter du code.

Après ça, je suis repassé chez ProcDump, pour cliquer sur PE Editor et sélectionner le nom du Jules modifié. Un Clic sur Section, puis un Right-click sur PEPACK et j'ai pu modifier les PSize et VSize à 2000. J'avais maintenant toute la place nécessaire pour y faire les noubas que je voulais sans que les voisins débarquent…

Restait juste deux-trois bricoles à régler:

004A225F  8B8557050000        MOV       EAX,[EBP+00000557]
004A2265  03858B050000        ADD       EAX,[EBP+0000058B]
004A226B  E9070D0000          JMP       004A2F77             > vers l'@ du patch
004A2270  FFE0                JMP       EAX
004A2272  8D85CE050000        LEA       EAX,[EBP+000005CE]
004A2278  50                  PUSH      EAX

D'abord détourner l'attention, en envoyant PEPACK vers mon nid d'amour, avant qu'il aille chez le Jules

Patch

004A2F75  0000                ADD       [EAX],AL              > place dispo
004A2F77  66C705BA4C43004890  MOV       WORD PTR [00434CBA],9048 > modif
004A2F80  8944241E            MOV       [ESP+1E],EAX          > octets écrasés
004A2F84  90                  NOP
004A2F85  FFE0                JMP       EAX                   > passe le relais au Soft
004A2F87  0000                ADD       [EAX],AL              > place dispo

Et ensuite, balancer ma petite modif, replanter le décor en commençant par réécrire les orpions que j'avais écrasés, et envoyer le tout au Jules.

En trainant dans les bars à la recherche de mon égérie, j'ai fini par tomber dessus.
Y a des moments ou la vie peut être bath. Elle m'a sauté au cou, en m'annonçant que son Jules la considérait comme

This program is licensed to:
Bave de Crapeaux Email:serpent@plume

Et que toutes les limitations étaient levées.
Je vous raconte pas comment j'en ai profité pour me balader sur le terrain…

Philippe Marlowe

Bonne Journée

Christal