.
.
No more lamerz :
Support us !
|
Derviche
Tourneur
Par
Lise_Grim & Olivier
Ou "l'art et la
manière d'avoir une bonne migraine :)"
|
>
+Intermédiaires <
|
Le 19 Juin 2003
|
by the Dr. rED
mEAT
|
HardCoded s/n inhumain :)
|
W32
CODE REVERSING
|
R E S i S T A N C E
I S F U T i L E 2 k 3
|
.
P
A R E
N T A
L
|
A
D V I S O R
Y
|
D O C T O R
A T W O R K
|
|
.
|
http://www.RIF.fr.fm
|
¸,¿o©º°¨¨°º©o¿,¸Fiat
Lux !¸,¿o©º°¨¨°º©o¿,¸
|
.
|
Salut les jeunes !
Je reviens apres une *longue*
période d'absence :( Ben oui : Exams/Chaleur/Motocross Madness/etc
:)
Ca fait la troisième
fois que j'essaye de cracker ce prog... En vain ! Mais là je viens
de découvrir IceDump, j'avoue que ça
me sauve un peu la vie. Etant un fervent défenseur du dead listing
je suis plutôt mal barré avec ce crackme *BORDELIQUE*
! C'est à croire que Lise_Grim et Olivier
travaillent chez Borland (vous savez, ceux
qui ont "écrit" Delphi :). Héhé
! Nan je sait bien que c'etait volontaire . Enfin... j'espere :)
Ne vous fiez pas aux apparences,
c'est vrai que 'Lise_Grim et Olivier' ça faut plus animateurs de
colonie de vacance que crackers, mais ce crackme est HARDCORE
:)
Il vous faudra pas mal
d'experience dans l'asm et le cracking, doublé d'une bonne logique
pour pouvoir comprendre certains listings trouvés au fur et à
mesure de nos recherches. Si vous avez débutés dans le cracking
avant-hier (a moins que vous ne soyez Magicalbubble :) : Laissez-tomber
!
En fait le but de ce crackme
c'est de remplacer le "CRACKED by personne :)"
par "CRACKED by ton_blaze :)". Et qu'est-ce
qu'on nous dit dans le hello.txt ?
Pour la décompression,
pas besoin d'explications !
C'est packé avec
upx 1.24.
Les tools nécessaires
sont :
-
SoftIce
(indispensable)
-
IceDump
(pas moins)
-
LordPE
(pour le Break'n'Enter)
-
IDA
(optionnel pour une fois)
-
HIEW
(pour fixer des p'tits trucs)
-
MASM32
(pour coder des petits algo et pour le generator)
-
MASM32
template (et c'est moi que j'l'ai fait :)
-
ISK
2003 (idem :)
-
Du courage, de la patience
-
BEAUCOUP de temps libre (48h
non-stop pour résoudre le crackme + écrire le tut)
-
Des cigarette (plein !)
-
Des mp3's (pour vous tenir
compagnie)
-
Du thé vert au lotus
+ sucres roux (plein aussi !)
-
Au moins 8 cerveaux de rechange
-
Une corde, un 6e étage
et/ou un seche-cheveux dans une baignoire (en cas d'echec :)
Sur ce... Direction la suite
!
Déjà ça
serrait pas mal d'unpacker le fichier parceque, à moins que vous
voulez faire un HardPatching de 15Ko, il vous faut un exe valide sur le
disque.
On peut faire un dump
à la main, mais aussi un dump avec les imports à l'aide de
la commande d'IceDump, /pedump. Mais bon...
Les imports ne nous servirons pas, c'est juste pour montrer à ceux
qui ne savent pas utililser IceDump ce qu'ils ont manqué !
Il faut pour cela trouver
l'OEP du prog, je vous déconseille
PEiD pour ça car il pète un
peu les plombs. Le mieux c'est de le trouver à la main simplement
en désassemblant :
|
|
|
|
UPX1:004494C2
popa
UPX1:004494C3
jmp near ptr dword_401000
UPX1:004494C3 start
endp |
|
|
|
|
Et voilà ! On à
déjà l'OEP du prog... Pas trop fatigué ? On continu.
En fait le truc avec IceDump c'est de nous positionner en 401000,
avec un beau programme décompressé et de dumper directement
sur le disque à l'aide de la commande /pedump. Voyons la syntaxe
de la commande /pedump :
/PEDUMP
<imagebase> <EIP> <filename>
Le membre <imagebase>
corresspond... Ben à l'ImageBase (00400000)
Le membre <EIP>
correspond à la RVA de l'eip actuel (1000)
Et <filename>
c'est le chemin du fichier de sortie.
Donc ce qu'on fait c'est
qu'on charge le prog avec le Break'n'Enter
de LordPE. Donc on fait un bpint 3 sous SoftIce
ensuite on clique sur OK. Après ça
on fait un eb eip 60 (LordPE nous le dit dans
la fenetre de SI). Après, un petit bpm 00401000
x. On fait F5 pour y aller, un petit
bc * pour nettoyer les breakpoints ensuite
on tape :
/pedump
00400000 1000 c:\out.exe
Et voilà on quitte
et on à un bel exe dumpé avec les Imports ! J'espere que
pour l'instant ça vous saoule pas, car moi j'ai horreur de rediger
des tuts comme ça... Ca ressemble plus à une recette de cuisine
qu'a un tut de cracking :(
Pouah ! Mais c'est vraiment
du code poubelle ! C'est bien pour ce genre de situation que j'ai crée
ISK 2003 :)
Si vous avez des problèmes
avec ce prog vous pouvez me mailer !
Donc on supprime les shit
1, 2 et 3.
Attention on ne vire pas la shit 4 (qui est
celle qui à la plus haute fréquence :( car le prog se base
sur celle-ci pour son execution. Avec un petit check et un gros crash :)
On pourrait très bien voir quels codes sont nécessaires à
l'execution du prog, et le fixer en conséquent, mais je suis vraiment
trop feinéant :) Et vous verrez que ça nous pertube pas trop
pour la suite.
Ayant IceDump chargé,
je ne suis pas victime des anti-softice, mais bon... On va quand même
le kicker :
|
|
|
|
UPX0:00401040
push offset DialogFunc
UPX0:00401045
push large dword ptr fs:0
UPX0:0040104C
mov large fs:0, esp
UPX0:00401053
mov ebp, 'BCHK'
UPX0:00401058
mov ax, 4
UPX0:0040105C
int 3
; Trap to Debugger
UPX0:0040105D
pop large dword ptr fs:0
UPX0:00401064
add esp, 4 |
|
|
|
|
Donc on noppe l'int 3,
ainsi il n'y a pas d'execption ! Et voilà !
En fait, en voyant la
tête du bordel, on va plutot poser un bpx API_Qui_Affiche_Du_Texte
plutot que de chercher en dead listing. Voici les API possibles :
-
SendDlgItemMessageA
-
SendMessageA
-
SetDlgItemTextA
-
SetWindowTextA
En fait l'idée c'est
de poser un bpx sur une de ces fonction et de regarder ensuite les paramètre
(posés sur la pile) pour trouver où on affiche le fameux
message "CRACKED by ...".
On va pas se compliquer
la vie, on va commencer par un bpx SetDlgItemTextA,
c'est la plus courante. *Pouf!* SoftIce apparait
juste après le splash (à mes souhaits :). Et on tombe en
plein dans l'API SetDlgItemTextA. Ne faites
pas F12, ça sert à rien ! Ensuite
on fait un dd esp pour voir les valeurs des
paramètres. On a un truc comme ça :
|
|
|
|
EAX=00000018 EBX=004017CE ECX=00000000 EDX=00401B0A ESI=004017E6 |
EDI=00401548 EBP=0067FB90 ESP=0067FB80 EIP=BFF5171D o d I s z a P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=5BCF GS=0000 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
--------------------------------------------------dword-------------PROT---(1)-- |
0187:0067FB80 00401592 000002F4 000003EC 00401548 ..@.........H.@. ^ |
0187:0067FB90 0067FBB0 BFF7363B 000002F4 00000110 ..g.;6.......... ^ |
0187:0067FBA0 00000D00 00000000 8BE05BC7 00000187 .........[...... |
0187:0067FBB0 0067FBC4 BFF94407 65B78C06 000065B7 ..g..D.....e.e.. |
0187:0067FBC0 00000000 BFF719B8 00008C00 0067FF68 ............h.g. |
0187:0067FBD0 BFF7186D 8BE05BC7 00000000 65B78BE0 m....[.........e |
0187:0067FBE0 00000000 00000246 00038C3E 00033CAA ....F...>....<.. |
0187:0067FBF0 000016BF 016F2737 65B70000 65B78C06 ....7'o....e...e |
0187:0067FC00 3E778C44 000416DF 00000000 143A0000 D.w>..........:. v |
0187:0067FC10 00000040 0D000000 01100000 02F40000 @............... v |
-----USER32!SetDlgItemInt+001F-------------------------------------------PROT32- |
017f:bff5171a c21000 ret 0010 ^ |
USER32!SetDlgItemTextA ^ |
017f:bff5171d b1a2 mov cl,a2 |
017f:bff5171f 55 push ebp |
017f:bff51720 8bec mov ebp,esp |
017f:bff51722 51 push ecx |
017f:bff51723 83ec3c sub esp,3c |
017f:bff51726 66ff7508 push word ptr [ebp+08] |
017f:bff5172a ff750c push dword ptr [ebp+0c] |
017f:bff5172d e85e690000 call KERNEL32!SMapLS_IP_EBP_16 |
017f:bff51732 50 push eax |
017f:bff51733 ff15d612f5bf call [bff512d6] |
017f:bff51739 98 cwde |
017f:bff5173a e8b7690000 call KERNEL32!SUnMapLS_IP_EBP_16 |
017f:bff5173f c9 leave |
017f:bff51740 c20c00 ret 000c |
USER32!GetDlgItemTextA |
017f:bff51743 b1a1 mov cl,a1 |
017f:bff51745 55 push ebp |
017f:bff51746 8bec mov ebp,esp |
017f:bff51748 51 push ecx |
017f:bff51749 83ec3c sub esp,3c |
017f:bff5174c 66ff7508 push word ptr [ebp+08] v |
017f:bff51750 ff750c push dword ptr [ebp+0c] < > v |
------------------------------------USER32!.text+071A--------------------------- |
Break due to BPX USER32!SetDlgItemTextA (ET=3.15 seconds) |
:dd esp |
:/screendump c:\out.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Ben quoi... Vous aimez
pas mon SoftIce en bleu et blanc ?! Donc on à une pile qui ressemble
à ça :
00401592
00000998 000003EC 00401548
\______/ \______/
\______/ \______/
|
| |
|
|
| |
+---[ lpString ]
|
| |
|
| +-------------[ nIDDlgItem
]
|
|
|
+-----------------------[ hDlg ]
|
+---------------------------------[
Adresse de retour ]
Selon le prototype de
l'API suivant :
BOOL SetDlgItemText(
HWND hDlg,
// handle of dialog box
int nIDDlgItem,
// identifier of control
LPCTSTR
lpString // text to set
);
Et si on fait un d
00401548, qu'est-ce qu'on voit ? Non mais j'te l'demande ?!
|
|
|
|
EAX=00000018 EBX=004017CE ECX=00000000 EDX=00401B0A ESI=004017E6 |
EDI=00401548 EBP=0067FB90 ESP=0067FB80 EIP=BFF5171D o d I s z a P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=3DDF GS=0000 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+0548---------------------------dword-------------PROT---(1)-- |
0187:00401548 43415243 2044454B 70207962 6F737265 CRACKED by perso ^ |
0187:00401558 20656E6E 0000293A E8580040 0000006B nne :)..@.X.k... ^ |
0187:00401568 000008BA E801EB00 03EB6160 574520CD ........`a... EW |
0187:00401578 0003EC68 E801EB00 EB0875FF C281E801 h........u...... |
0187:00401588 00401B02 850F02EB 0D8DD2FF 004017C9 ..@...........@. |
0187:00401598 8DE801EB 4017C015 8DCA2B00 4017C035 .......@.+..5..@ |
0187:004015A8 CD03EB00 3D8D4520 0040160A F3E801EB .... E.=..@..... |
0187:004015B8 EBC3B0A4 37A2E801 EB004018 FEE8DF01 .......7.@...... |
0187:004015C8 EB000001 00E8E801 58000000 8DE801EB ...........X.... v |
0187:004015D8 4017E60D CD03EB00 1D8D4520 004017CE ...@.... E....@. v |
-----USER32!SetDlgItemInt+001F-------------------------------------------PROT32- |
017f:bff5171a c21000 ret 0010 ^ |
USER32!SetDlgItemTextA ^ |
017f:bff5171d b1a2 mov cl,a2 |
017f:bff5171f 55 push ebp |
017f:bff51720 8bec mov ebp,esp |
017f:bff51722 51 push ecx |
017f:bff51723 83ec3c sub esp,3c |
017f:bff51726 66ff7508 push word ptr [ebp+08] |
017f:bff5172a ff750c push dword ptr [ebp+0c] |
017f:bff5172d e85e690000 call KERNEL32!SMapLS_IP_EBP_16 |
017f:bff51732 50 push eax |
017f:bff51733 ff15d612f5bf call [bff512d6] |
017f:bff51739 98 cwde |
017f:bff5173a e8b7690000 call KERNEL32!SUnMapLS_IP_EBP_16 |
017f:bff5173f c9 leave |
017f:bff51740 c20c00 ret 000c |
USER32!GetDlgItemTextA |
017f:bff51743 b1a1 mov cl,a1 |
017f:bff51745 55 push ebp |
017f:bff51746 8bec mov ebp,esp |
017f:bff51748 51 push ecx |
017f:bff51749 83ec3c sub esp,3c |
017f:bff5174c 66ff7508 push word ptr [ebp+08] v |
017f:bff51750 ff750c push dword ptr [ebp+0c] < > v |
------------------------------------USER32!.text+071A--------------------------- |
:dd esp |
:/screendump c:\shot1.html |
:/screendump c:\shot2.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Bingo ! On le tiens !
Maintenant qu'on à l'adresse, on va touver la source de l'adresse.
En effet, il se peut que l'adresse soit cryptée puisqu'on ne trouve
rien à cette adresse en dead listing.
Donc on lance le crackme
et on fait un bpm 00401548 rw. Hop ! Un truc interessant ici :
|
|
|
|
UPX0:004015D7
lea ecx, ds:4017E6h
UPX0:004015E2
lea ebx, ds:4017CEh
UPX0:004015E8
sub ecx, ebx ; ecx
= 18h
UPX0:004015F3
lea esi, ds:4017CEh
UPX0:004015FC
lea edi, ds:401548h
UPX0:00401602
repe movsb |
|
|
|
|
|
|
|
|
EAX=00000018 EBX=004017CE ECX=00000018 EDX=004017C9 ESI=004017CE |
EDI=0067FB98 EBP=0067FB90 ESP=0067FB90 EIP=004015F9 o d I s z A P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=2197 GS=0000 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+07CE---------------------------byte--------------PROT---(0)-- |
0187:004017CE 43 52 41 43 4B 45 44 20-62 79 20 70 65 72 73 6F CRACKED by perso^ |
0187:004017DE 6E 6E 65 20 3A 29 00 00-4F 6C 69 76 69 65 72 2C nne :)..Olivier,^ |
0187:004017EE 20 6A 65 20 74 27 20 61-69 6D 65 20 3A 29 00 58 je t' aime :).X |
0187:004017FE B9 16 00 00 00 FE 89 CD-17 40 00 C0 89 CD 17 40 .........@.....@ |
0187:0040180E 00 03 FE 89 E5 17 40 00-C0 89 E5 17 40 00 05 E2 ......@.....@... |
0187:0040181E E4 A0 DE 17 40 00 A2 70-15 40 00 B9 06 00 00 00 ....@..p.@...... |
0187:0040182E 80 81 DD 17 40 00 0E E2-F7 68 43 15 40 00 C3 55 ....@....hC.@..U |
0187:0040183E 8B EC 8B 45 0C 83 F8 10-75 17 B9 0C 00 00 00 6A ...E....u......j |
0187:0040184E 00 FF 75 08 81 C1 BC 1A-40 00 FF D1 E9 98 01 00 ..u.....@.......v |
0187:0040185E 00 3D 01 02 00 00 75 28-8B 45 14 EB 01 E8 BA 20 .=....u(.E..... v |
-------------------------------------------------------------------------PROT32- |
017f:004015d5 01e8 add eax,ebp ^ |
017f:004015d7 8d0de6174000 lea ecx,[004017e6] ^ |
017f:004015dd eb03 jmp 004015e2 |
017f:004015df cd20 int 20 VXDJmp CE1D,0D45 |
017f:004015e5 17 pop ss |
017f:004015e6 40 inc eax |
017f:004015e7 002b add [ebx],ch |
017f:004015e9 cb retf |
017f:004015ea eb02 jmp 004015ee |
017f:004015ec 0f858bc1eb01 jnz 022bd77d |
017f:004015f2 e88d35ce17 call 180e4b84 |
017f:004015f7 40 inc eax |
017f:004015f8 00eb add bl,ch |
017f:004015f9 eb01 jmp 004015fc (JUMP v) |
017f:004015fb e88d3d4815 call 1588538d |
017f:00401600 40 inc eax |
017f:00401601 00f3 add bl,dh |
017f:00401603 a4 movsb |
017f:00401604 eb02 jmp 00401608 |
017f:00401606 0f852bf8e959 jnz 5a2a0e37 |
017f:0040160c ffff invalid |
017f:0040160e ff90909090eb call [eax+eb909090] |
017f:00401614 71b9 jno 004015cf |
017f:00401616 0400 add al,00 v |
017f:00401618 0000 add [eax],al < > v |
------------------------------------DERVICHE!UPX0+05D5-------------------------- |
Screen dumper set to mode 2 |
:/screendump c:\shot3.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Voici ce que l'on a en
4017CEh. Donc, comme ça correspond
à rien en dead listing, on va ensuite placer un bpm
4017CE rw... Et ça recommence !
Sauf que là on
à enfin trouvé le décryptage du message ! C'est en
00401809. On a tout ce qu'il nous faut !
|
|
|
|
EAX=004017CE EBX=00401B16 ECX=00000016 EDX=004017C9 ESI=00008C06 |
EDI=0067FB98 EBP=0067FB90 ESP=0067FB90 EIP=00401809 o d I S z a P C |
CS=017F DS=0187 SS=0187 ES=0187 FS=116F GS=0000 ds:004017E3=D8 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----OUT!UPX0+07E3--------------------------------byte--------------PROT---(0)-- |
0187:004017E3 D8 00 00 EA 8E 2E CF 2E-AD 4F 86 05 4E AD 05 8F .........O..N...^ |
0187:004017F3 E5 05 2D 2E AE AD 05 48-26 00 58 B9 16 00 00 00 ..-....H&.X.....^ |
0187:00401803 FE 89 CD 17 40 00 C0 89-CD 17 40 00 03 FE 89 E5 ....@.....@..... |
0187:00401813 17 40 00 C0 89 E5 17 40-00 05 E2 E4 A0 DE 17 40 .@.....@.......@ |
0187:00401823 00 A2 70 15 40 00 B9 06-00 00 00 80 81 DD 17 40 ..p.@..........@ |
0187:00401833 00 0E E2 F7 68 43 15 40-00 C3 55 8B EC 8B 45 0C ....hC.@..U...E. |
0187:00401843 83 F8 10 75 17 B9 0C 00-00 00 6A 00 FF 75 08 81 ...u......j..u.. |
0187:00401853 C1 BC 1A 40 00 FF D1 E9-98 01 00 00 3D 01 02 00 ...@........=... |
0187:00401863 00 75 28 8B 45 14 EB 01-E8 BA 20 00 00 00 50 6A .u(.E..... ...Pjv |
0187:00401873 02 68 A1 00 00 00 FF 75-08 90 90 90 90 90 81 C2 .h.....u........v |
-------------------------------------------------------------------------PROT32- |
017f:004017fd 58 pop eax ^ |
017f:004017fe b916000000 mov ecx,00000016 ^ |
017f:00401803 fe89cd174000 dec byte ptr [ecx+004017cd] |
017f:00401809 c089cd17400003 ror byte ptr [ecx+004017cd],03 |
017f:00401810 fe89e5174000 dec byte ptr [ecx+004017e5] |
017f:00401816 c089e517400005 ror byte ptr [ecx+004017e5],05 |
017f:0040181d e2e4 loop 00401803 |
017f:0040181f a0de174000 mov al,[004017de] |
017f:00401824 a270154000 mov [00401570],al |
017f:00401829 b906000000 mov ecx,00000006 |
017f:0040182e 8081dd1740000e add byte ptr [ecx+004017dd],0e |
017f:00401835 e2f7 loop 0040182e |
017f:00401837 6843154000 push 00401543 |
017f:0040183c c3 ret |
017f:0040183d 55 push ebp |
017f:0040183e 8bec mov ebp,esp |
017f:00401840 8b450c mov eax,[ebp+0c] |
017f:00401843 83f810 cmp eax,10 |
017f:00401846 7517 jnz 0040185f |
017f:00401848 b90c000000 mov ecx,0000000c |
017f:0040184d 6a00 push 00 |
017f:0040184f ff7508 push dword ptr [ebp+08] |
017f:00401852 81c1bc1a4000 add ecx,USER32!DialogBoxParamA |
017f:00401858 ffd1 call ecx v |
017f:0040185a e998010000 jmp 004019f7 < > v |
------------------------------------OUT!UPX0+07FD------------------------------- |
00000016 0000000022 " " |
:/screendump c:\enfin.html |
|
Invalid command Out |
|
|
|
|
|
|
Bon suite à ça
on à tout ce qu'on veut. A savoir une string cryptée et un
moyen de la décrypter (donc un moyen d'en crypter d'autre aussi).
Cette routine se décompose
en deux parties, mais pour nous seulement la première nous interesse
:
|
|
|
|
017f:004017fe
b916000000 mov
ecx,00000016
017f:00401803
fe89cd174000 dec
byte ptr [ecx+004017cd]
017f:00401809
c089cd17400003 ror
byte ptr [ecx+004017cd],03
; CRACKED by personne :)
017f:00401810
fe89e5174000 dec
byte ptr [ecx+004017e5]
017f:00401816
c089e517400005 ror
byte ptr [ecx+004017e5],05
; Olivier, je t' aime :)
017f:0040181d
e2e4
loop 00401803 |
|
|
|
|
A moins que vous désirez,
vous aussi, déclarer votre flamme dans ce prog, vous n'avez pas
à toucher à la seconde partie :)
Note
: C'est dans le prog original, c'est pas moi qu'ai écrit
ça, hein ?! Nan, j'dit ça parceque les rumeurs à deux
francs à mon sujet j'en ai ras-le-cul !
Cela dit quand on trace,
on trouve une phrase dans ce gout là :
CRACKED by perso,,W
Donc une petite boucle
à été ajoutée à la fin pour fixer les
chars érronés :
|
|
|
|
017f:00401829
b906000000 mov
ecx,00000006
017f:0040182e
8081dd1740000e add
byte ptr [ecx+004017dd],0e
017f:00401835
e2f7
loop 0040182e |
|
|
|
|
Retrouvons donc notre
string en 004017CD+1 = 004017CE :
UPX0:004017CE
db 10h ; C = 43
UPX0:004017CF
db 32h ; R = 52
UPX0:004017D0
db 50h ; A = 41
UPX0:004017D1
db 10h ; C = 43
UPX0:004017D2
db 11h ; K = 4B
UPX0:004017D3
db 0D0h ; E = 45
UPX0:004017D4
db 0F0h ; D = 44
UPX0:004017D5
db 6Ch ; = 20
UPX0:004017D6
db 34h ; b = 62
UPX0:004017D7
db 57h ; y = 79
UPX0:004017D8
db 6Ch ; = 20
UPX0:004017D9
db 76h ; p = 70
UPX0:004017DA
db 0D4h ; e = 65
UPX0:004017DB
db 36h ; r = 72
UPX0:004017DC
db 16h ; s = 73
UPX0:004017DD
db 95h ; o = 6F
UPX0:004017DE
db 74h ; n = 6E
UPX0:004017DF
db 74h ; n = 6E
UPX0:004017E0
db 92h ; e = 65
UPX0:004017E1
db 2Ah ; = 20
UPX0:004017E2
db 0EDh ; : = 3A
UPX0:004017E3
db 0Bh ; ) = 29
Sauf qu'on voit dans le
'screenshot' suivant (avant decryptage) :
|
|
|
|
EAX=004017CE EBX=00401B16 ECX=00000016 EDX=004017C9 ESI=00008C06 |
EDI=0067FB98 EBP=0067FB90 ESP=0067FB90 EIP=00401803 o d I S z a P C |
CS=017F DS=0187 SS=0187 ES=0187 FS=1907 GS=0000 ds:004017E3=D9 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+07B3---------------------------byte--------------PROT---(0)-- |
0187:004017B3 00 00 EB 09 B8 00 00 00-00 C9 C2 10 00 B8 01 00 ................^ |
0187:004017C3 00 00 C9 C2 10 00 E8 2F-00 00 00 1B 93 0B 1B 5B ......./.......[^ |
0187:004017D3 2B 23 02 14 CC 02 84 2C-94 9C 7C 04 04 BB 91 62 +#.....,..|....b |
0187:004017E3 D9 00 00 EA 8E 2E CF 2E-AD 4F 86 05 4E AD 05 8F .........O..N... |
0187:004017F3 E5 05 2D 2E AE AD 05 48-26 00 58 B9 16 00 00 00 ..-....H&.X..... |
0187:00401803 FE 89 CD 17 40 00 C0 89-CD 17 40 00 03 FE 89 E5 ....@.....@..... |
0187:00401813 17 40 00 C0 89 E5 17 40-00 05 E2 E4 A0 DE 17 40 .@.....@.......@ |
0187:00401823 00 A2 70 15 40 00 B9 06-00 00 00 80 81 DD 17 40 ..p.@..........@ |
0187:00401833 00 0E E2 F7 68 43 15 40-00 C3 55 8B EC 8B 45 0C ....hC.@..U...E.v |
0187:00401843 83 F8 10 75 17 B9 0C 00-00 00 6A 00 FF 75 08 81 ...u......j..u..v |
-------------------------------------------------------------------------PROT32- |
017f:00401803 fe89cd174000 dec byte ptr [ecx+004017cd] ^ |
017f:00401809 c089cd17400003 ror byte ptr [ecx+004017cd],03 ^ |
017f:00401810 fe89e5174000 dec byte ptr [ecx+004017e5] |
017f:00401816 c089e517400005 ror byte ptr [ecx+004017e5],05 |
017f:0040181d e2e4 loop 00401803 |
017f:0040181f a0de174000 mov al,[004017de] |
017f:00401824 a270154000 mov [00401570],al |
017f:00401829 b906000000 mov ecx,00000006 |
017f:0040182e 8081dd1740000e add byte ptr [ecx+004017dd],0e |
017f:00401835 e2f7 loop 0040182e |
017f:00401837 6843154000 push 00401543 |
017f:0040183c c3 ret |
017f:0040183d 55 push ebp |
017f:0040183e 8bec mov ebp,esp |
017f:00401840 8b450c mov eax,[ebp+0c] |
017f:00401843 83f810 cmp eax,10 |
017f:00401846 7517 jnz 0040185f |
017f:00401848 b90c000000 mov ecx,0000000c |
017f:0040184d 6a00 push 00 |
017f:0040184f ff7508 push dword ptr [ebp+08] |
017f:00401852 81c1bc1a4000 add ecx,USER32!DialogBoxParamA |
017f:00401858 ffd1 call ecx |
017f:0040185a e998010000 jmp 004019f7 |
017f:0040185f 3d01020000 cmp eax,00000201 v |
017f:00401864 7528 jnz 0040188e < > v |
------------------------------------DERVICHE!UPX0+0803-------------------------- |
Screen dumper set to mode 2 |
:/screendump c:\cry.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Et oui, les valeurs sont
plutôt :
** ** ** ** ** **
1B 93 0B 1B 5B 2B 23 02 14
CC 02 84 2C 94 9C 7C 04 04 BB 91 62 D9
** ** ** ** ** **
C
R A C K E D b
y p e r s o n
n e : )
Je ne sait pas par quelle
opération du saint-esprit la chaine et comme ça, et puis
sincerement : Ca fait deux jours que je suis sur le crackme, mon cerveau
est fuck'd'up :) Mais on va le savoir tout de suite, car c'est important
(indispensable même) pour fixer la string sur le disque.
On voit que les valeurs
avec un '**' doivent être fixées
avec un 'add 0E' après décryptage
pour obtenir les chars en clair.
|
|
|
|
EAX=00000960 EBX=00401B16 ECX=00000006 EDX=004017C9 ESI=00008C06 |
EDI=0067FB98 EBP=0067FB90 ESP=0067FB8C EIP=00401A29 o d I s z a P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=4B6F GS=0000 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+07CE---------------------------byte--------------PROT---(0)-- |
0187:004017CE 1B 93 0B 1B 5B 2B 23 02-14 CC 02 84 2C 94 9C 7C ....[+#.....,..|^ |
0187:004017DE 04 04 BB 91 62 D9 00 00-EA 8E 2E CF 2E AD 4F 86 ....b.........O.^ |
0187:004017EE 05 4E AD 05 8F E5 05 2D-2E AE AD 05 48 26 00 58 .N.....-....H&.X |
0187:004017FE B9 16 00 00 00 FE 89 CD-17 40 00 C0 89 CD 17 40 .........@.....@ |
0187:0040180E 00 03 FE 89 E5 17 40 00-C0 89 E5 17 40 00 05 E2 ......@.....@... |
0187:0040181E E4 A0 DE 17 40 00 A2 70-15 40 00 B9 06 00 00 00 ....@..p.@...... |
0187:0040182E 80 81 DD 17 40 00 0E E2-F7 68 43 15 40 00 C3 55 ....@....hC.@..U |
0187:0040183E 8B EC 8B 45 0C 83 F8 10-75 17 B9 0C 00 00 00 6A ...E....u......j |
0187:0040184E 00 FF 75 08 81 C1 BC 1A-40 00 FF D1 E9 98 01 00 ..u.....@.......v |
0187:0040185E 00 3D 01 02 00 00 75 28-8B 45 14 EB 01 E8 BA 20 .=....u(.E..... v |
-------------------------------------------------------------------------PROT32- |
017f:00401a0e 002b add [ebx],ch ^ |
017f:00401a10 caa100 retf 00a1 ^ |
017f:00401a13 304000 xor [eax+00],al |
017f:00401a16 3081c8174000 xor [ecx+004017c8],al |
017f:00401a1c c081c817400006 rol byte ptr [ecx+004017c8],06 |
017f:00401a23 fe89c8174000 dec byte ptr [ecx+004017c8] |
017f:00401a29 e2eb loop 00401a16 |
017f:00401a2b c3 ret |
017f:00401a2c 90 nop |
017f:00401a2d cc int 3 |
017f:00401a2e 90 nop |
017f:00401a2f 90 nop |
017f:00401a30 eb01 jmp 00401a33 |
017f:00401a32 e8e8330000 call 00404e1f |
017f:00401a37 006689 add [esi-77],ah |
017f:00401a3a 257f104000 and eax,0040107f |
017f:00401a3f 90 nop |
017f:00401a40 90 nop |
017f:00401a41 90 nop |
017f:00401a42 90 nop |
017f:00401a43 90 nop |
017f:00401a44 e80e000000 call 00401a57 |
017f:00401a49 33c2 xor eax,edx |
017f:00401a4b eb01 jmp 00401a4e v |
017f:00401a4d e885db7505 call 05b5f5d7 < > v |
------------------------------------DERVICHE!UPX0+0A0E-------------------------- |
MSR LastBranchToIp=00401A16 |
:/screendump c:\cry2.html |
|
Invalid command Derviche |
|
|
|
|
|
|
C'est bon ! On a fini,
mais je vais quand même expliquer toutes les charcutures(*)
que subit le serial. A savoir comment passer de 10h
(sur le disque) à 43h (le
'C' affiché).
(*)
Brevet déposé, cherchez pas :)
10h -> 1Bh -> 43h
| |
| +-> ROUTINE 2
|
+-> ROUTINE 1
ROUTINE 1 :
-----------
xor x, 60
rol x, 6
dec x
ROUTINE 2 :
-----------
dec x
ror x, 3
add x, 0E
; pour les 6 derniers chars
Donc on a le pseudo-algo
suivant :
xor x, 60
rol x, 6
dec x
dec x
ror x, 3
add x, 0E
; pour les 6 derniers chars
Selon les regles fondamentales
du reversing, on a ça :
sub x, 0E
; pour les 6 derniers chars
rol x, 3
inc x
inc x
ror x, 6
xor x, 60
On inverse les instructions
(sauf le xor qui est auto-reversible) ainsi que le flux d'instruction (ce
qui est en bas va en haut etc...).
Donc on écrit
un chtiot prog qui automatise la tache...
Héhéhé
vous pensez avoir fini ? Hé ben non, il y a encore quelques sécurités...
Ceux qui veulent se suicider peuvent le faire maintenant... *PAN!*
C'est bon ?!
En fait quand on injecte
une string bien comme if faut... Ca crashe ! Windows nous dit à
l'aide d'une belle fenêtre d'exception que l'erreur se trouve en
00401570. En fait on voit que l'on tombe en
plein dans du code pas beau. J'ai donc fait un ew
eip 9090 pour nopper les deux octets indésirables. Et ça
marche ! Le problème c'est que (comme vous pouviez vous en douter)
le code sur le disque n'est pas le même : Les deux octets subissent
des transformations.
On fait un bpm
00401570 rw et on voit les tranformations subies par l'octet !
|
|
|
|
017f:0040181f
a0de174000 mov
al,[004017de]
017f:00401824
a270154000 mov
[00401570],al |
|
|
|
|
Voilà c'est là
! On voit (en débugguant) que al vaut la valeur du char à
la position du premier 'n' de 'personne'.
Donc si on rentre une string comme "ZZZZZZZZZZZZZZZZnZZZZZ"
ça marche ! Evidement on ne peut pas contraindre l'utilisateur à
mettre un 'n' dans son blaze. Arghhh ! Pourquoi
tant de 'n' ? <-
J'suis encore plus drôle que Philipe Bouvard :)
Voilà pourquoi
:
|
|
|
|
EAX=00000018 EBX=004017CE ECX=00000000 EDX=00000008 ESI=004017E6 |
EDI=00401548 EBP=0067FB90 ESP=0067FB90 EIP=00401570 o d I s z A P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=4B27 GS=0000 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+0570---------------------------byte--------------PROT---(0)-- |
017F:00401570 60 61 EB 03 CD 20 45 57-68 EC 03 00 00 EB 01 E8 `a... EWh.......^ |
017F:00401580 FF 75 08 EB 01 E8 81 C2-02 1B 40 00 90 90 90 90 .u........@.....^ |
017F:00401590 FF D2 8D 0D C9 17 40 00-EB 01 E8 8D 15 C0 17 40 ......@........@ |
017F:004015A0 00 2B CA 8D 35 C0 17 40-00 90 90 90 90 90 8D 3D .+..5..@.......= |
017F:004015B0 0A 16 40 00 EB 01 E8 F3-A4 B0 C3 EB 01 E8 A2 37 ..@............7 |
017F:004015C0 18 40 00 90 90 90 E8 FE-01 00 00 EB 01 E8 E8 00 .@.............. |
017F:004015D0 00 00 00 58 EB 01 E8 8D-0D E6 17 40 00 90 90 90 ...X.......@.... |
017F:004015E0 90 90 8D 1D CE 17 40 00-2B CB 90 90 90 90 8B C1 ......@.+....... |
017F:004015F0 EB 01 E8 8D 35 CE 17 40-00 EB 01 E8 8D 3D 48 15 ....5..@.....=H.v |
017F:00401600 40 00 F3 A4 90 90 90 90-2B F8 E9 59 FF FF FF 90 @.......+..Y....v |
-------------------------------------------------------------------------PROT32- |
017f:00401570 60 pushad ^ |
017f:00401571 61 popad ^ |
017f:00401572 eb03 jmp 00401577 |
017f:00401574 cd20 int 20 VXDCall EC68,5745 |
017f:0040157a 0300 add eax,[eax] |
017f:0040157c 00eb add bl,ch |
017f:0040157e 01e8 add eax,ebp |
017f:00401580 ff7508 push dword ptr [ebp+08] |
017f:00401583 eb01 jmp 00401586 |
017f:00401585 e881c2021b call 1b42d80b |
017f:0040158a 40 inc eax |
017f:0040158b 0090909090ff add [eax+ff909090],dl |
017f:00401591 d28d0dc91740 ror byte ptr [ebp+4017c90d],cl |
017f:00401597 00eb add bl,ch |
017f:00401599 01e8 add eax,ebp |
017f:0040159b 8d15c0174000 lea edx,[004017c0] |
017f:004015a1 2bca sub ecx,edx |
017f:004015a3 8d35c0174000 lea esi,[004017c0] |
017f:004015a9 90 nop |
017f:004015aa 90 nop |
017f:004015ab 90 nop |
017f:004015ac 90 nop |
017f:004015ad 90 nop |
017f:004015ae 8d3d0a164000 lea edi,[0040160a] v |
017f:004015b4 eb01 jmp 004015b7 < > v |
------------------------------------DERVICHE!UPX0+0570-------------------------- |
MSR LastBranchToIp=00401570 |
:/screendump c:\benvoila.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Sûr que, si on a
un popad sans pushad, le prog il va faire la gueule.
Que peut-on faire ? Nopper
le 'mov [00401570], al' et ensuite fixer le
'pushad' sur le disque ? Ouais ! Bonne idée
tiens ! Inutile de vous préciser que cette ligne ne figure pas dans
l'exe sur le disque. Voyons comment elle est transformée :
GoGoGadgetO bpm
00401824 rw :
|
|
|
|
EAX=00000960 EBX=00401B16 ECX=0000005C EDX=004017C9 ESI=00008C06 |
EDI=0067FB98 EBP=0067FB90 ESP=0067FB8C EIP=00401A1C o d I S z a P c |
CS=017F DS=0187 SS=0187 ES=0187 FS=4637 GS=0000 ds:00401824=8E |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0+0824---------------------------byte--------------PROT---(0)-- |
0187:00401824 8E 70 15 40 00 B9 06 00-00 00 80 81 DD 17 40 00 .p.@..........@.^ |
0187:00401834 0E E2 F7 68 43 15 40 00-C3 55 8B EC 8B 45 0C 83 ...hC.@..U...E..^ |
0187:00401844 F8 10 75 17 B9 0C 00 00-00 6A 00 FF 75 08 81 C1 ..u......j..u... |
0187:00401854 BC 1A 40 00 FF D1 E9 98-01 00 00 3D 01 02 00 00 ..@........=.... |
0187:00401864 75 28 8B 45 14 EB 01 E8-BA 20 00 00 00 50 6A 02 u(.E..... ...Pj. |
0187:00401874 68 A1 00 00 00 FF 75 08-90 90 90 90 90 81 C2 CC h.....u......... |
0187:00401884 1A 40 00 FF D2 E9 69 01-00 00 3D 38 01 00 00 75 .@....i...=8...u |
0187:00401894 41 BA 26 00 00 00 68 FF-FF FF 00 FF 75 10 81 C2 A.&...h.....u... |
0187:004018A4 84 1A 40 00 FF D2 B9 2D-00 00 00 EB 01 E8 6A 01 ..@....-......j.v |
0187:004018B4 FF 75 10 81 C1 77 1A 40-00 FF D1 B8 0C 00 00 00 .u...w.@........v |
-------------------------------------------------------------------------PROT32- |
017f:00401a0e 002b add [ebx],ch ^ |
017f:00401a10 caa100 retf 00a1 ^ |
017f:00401a13 304000 xor [eax+00],al |
017f:00401a16 3081c8174000 xor [ecx+004017c8],al |
017f:00401a1c c081c817400006 rol byte ptr [ecx+004017c8],06 |
017f:00401a23 fe89c8174000 dec byte ptr [ecx+004017c8] |
017f:00401a29 e2eb loop 00401a16 |
017f:00401a2b c3 ret |
017f:00401a2c 90 nop |
017f:00401a2d cc int 3 |
017f:00401a2e 90 nop |
017f:00401a2f 90 nop |
017f:00401a30 eb01 jmp 00401a33 |
017f:00401a32 e8e8330000 call 00404e1f |
017f:00401a37 006689 add [esi-77],ah |
017f:00401a3a 257f104000 and eax,0040107f |
017f:00401a3f 90 nop |
017f:00401a40 90 nop |
017f:00401a41 90 nop |
017f:00401a42 90 nop |
017f:00401a43 90 nop |
017f:00401a44 e80e000000 call 00401a57 |
017f:00401a49 33c2 xor eax,edx |
017f:00401a4b eb01 jmp 00401a4e v |
017f:00401a4d e885db7505 call 05b5f5d7 < > v |
------------------------------------DERVICHE!UPX0+0A0E-------------------------- |
MSR LastBranchToIp=00401A16 |
:/screendump c:\decbug.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Donc pour :
017f:00401824 a270154000
mov [00401570],al
Ca fait :
((EEA5386564
xor 60) rol 6) - 1 = A270154000
^
^
|
|
+-
Octets sur le disque
+- mov [00401570], al
Donc pour trouver la valeur
d'un nop il faut faire :
((90
+ 1) ror 6) xor 60 = 26
Et voilà maintenant
que l'on a la valeur du nop, on noppe toute l'instruction en 00401824
(5 nops) mettez des 26 pas des 90, hein ?!
Maintenant passons à
la deuxième tache, à savoir, fixer le pushad
en 00401570. Voici comment c'est décrypté
:
|
|
|
|
EAX=00401008 EBX=00000000 ECX=00000036 EDX=0040153B ESI=81B37A84 |
EDI=00000000 EBP=0067FF78 ESP=0067FE14 EIP=00401A80 O d I s z a p c |
CS=017F DS=0187 SS=0187 ES=0187 FS=3B3F GS=0000 ds:00401570=94 |
-------------------------------------------------------------------------------- |
ST0 0 ST4 0 |
ST1 0 ST5 0 |
ST2 0 ST6 0 |
ST3 0 ST7 0 |
-----DERVICHE!UPX0--------------------------------byte--------------PROT---(0)-- |
017F:00401000 60 33 C9 E8 2C 00 00 00-63 77 73 5F 63 6C 61 73 `3..,...cws_clas^ |
017F:00401010 73 00 2E 2E 2E 4C 6F 61-64 69 6E 67 00 52 41 4E s....Loading.RAN^ |
017F:00401020 47 45 00 52 47 4E 00 08-E8 C3 00 00 00 A1 23 10 GE.RGN........#. |
017F:00401030 40 00 33 CA 58 E8 F6 09-00 00 53 E8 FD 07 00 00 @.3.X.....S..... |
017F:00401040 68 3A 14 40 00 64 FF 35-00 00 00 00 64 89 25 00 h:.@.d.5....d.%. |
017F:00401050 00 00 00 BD 4B 48 43 42-66 B8 04 00 90 64 8F 05 ....KHCBf....d.. |
017F:00401060 00 00 00 00 83 C4 04 6A-00 68 3A 14 40 00 6A 00 .......j.h:.@.j. |
017F:00401070 6A 65 FF 35 14 30 40 00-E8 3F 0A 00 00 61 E9 00 je.5.0@..?...a.. |
017F:00401080 00 00 00 61 6A 00 90 90-90 E8 AC 0A 00 00 A3 14 ...aj...........v |
017F:00401090 30 40 00 BB 10 00 00 00-6A 0A 6A 00 90 90 90 6A 0@......j.j....jv |
-------------------------------------------------------------------------PROT32- |
017f:00401a6b 8d0d86154000 lea ecx,[00401586] ^ |
017f:00401a71 8d153b154000 lea edx,[0040153b] ^ |
017f:00401a77 2bca sub ecx,edx |
017f:00401a79 c0813a15400002 rol byte ptr [ecx+0040153a],02 |
017f:00401a80 80b13a15400005 xor byte ptr [ecx+0040153a],05 |
017f:00401a87 fe893a154000 dec byte ptr [ecx+0040153a] |
017f:00401a8d e2ea loop 00401a79 |
017f:00401a8f c3 ret |
017f:00401a90 cc int 3 |
017f:00401a91 cc int 3 |
017f:00401a92 ff2510204000 jmp [GDI32!CreatePatternBrush] |
017f:00401a98 ff2500204000 jmp [GDI32!ExtCreateRegion] |
017f:00401a9e ff2504204000 jmp [GDI32!GetStockObject] |
017f:00401aa4 ff2508204000 jmp [GDI32!SetBkMode] |
017f:00401aaa ff250c204000 jmp [GDI32!SetTextColor] |
017f:00401ab0 ff2578204000 jmp [USER32!CreateWindowExA] |
017f:00401ab6 ff257c204000 jmp [USER32!DefWindowProcA] |
017f:00401abc ff256c204000 jmp [USER32!DialogBoxParamA] |
017f:00401ac2 ff2574204000 jmp [USER32!DispatchMessageA] |
017f:00401ac8 ff2570204000 jmp [USER32!EndDialog] |
017f:00401ace ff254c204000 jmp [USER32!GetMessageA] |
017f:00401ad4 ff2544204000 jmp [USER32!GetSystemMetrics] |
017f:00401ada ff2550204000 jmp [USER32!LoadBitmapA] |
017f:00401ae0 ff2540204000 jmp [USER32!LoadCursorA] v |
017f:00401ae6 ff2538204000 jmp [USER32!LoadIconA] < > v |
------------------------------------DERVICHE!UPX0+0A6B-------------------------- |
:u eip-15 |
:/screendump c:\pushad.html |
|
Invalid command Derviche |
|
|
|
|
|
|
Donc pour obtenir un 60
(pushad) il faut faire :
((60
+ 1) xor 5) ror 2 = 19
On place ensuite cette
valeur en 00401570. Et voilà bug fixed
! TARGET TOTALLY CRACKED ! Regardez le source
du programme, je me suis surpassé je trouve :) Attention ! Ce n'est
pas un patcheur, c'est un générateur : Pas besoin de donner
un exe au prog, il s'en charge tout seul.
Pfiou ! Voilà...
Et dire que je cherchais deseperement des bons crackmes en Pologne ou autre
alors qu'il y en avait un tres bon dans nos verts paturages :) Il est plutot
'rara avis' cependant :( <-
Pages roses en cas d'incompréhension :)
Je suis pas sûr
non-plus que ce crackme respecte vraiment les droit de l'Homme, parceque
là j'ai une hémoragie cérebrale. Mais bon, ma mère
m'a filé deux cachtons, sa devrai aller mieux d'ici peu... Si il
y a quelqu'un qui, à tout hasard, s'interesse à ma santé
ici :)
C'est vrai que j'ai pas
mal morflé, si j'aurais tout détaillé ce que j'ai
fait ce tut aurait été plus long que le Millenium
de tHE ANALYST :) Mais comme j'ai lu dans
un livre (Clairette et le Chateau des vacances - à partir de 6 ans
:) : Un vrai guerrier dédaigne ses plaies... Snif, c'est beau, hein
ouais ?! Ca faisait pas mal de temps que j'ai pas touché à
un *VRAI* hardcoded serial avec des ror's
et tout le bordel, donc j'ai perdu beaucoup de temps sur des trucs tout
con.
Je suis vraiment content
d'avoir (enfin) résolu ce crackme ! En plus je ne croit pas avoir
vu la solution de ce crackme...
Le RIF vous apporte,
donc, l'exclusivité, hahaha :) <-
J'espere que je suis bien le premier sinon j'aurai l'air fin :)
Il y a des dixaines de
méthodes différentes et plus facile (dont l'une serrait de s'appeller 'personne' :) de fixer la string à
votre convenance, mais je trouve la mienne bien parce qu'on fait le tour
du programme, et pour faire un tut c'est mieux.
N'oubliez pas : Un crackme
et toujours simple et évident... Une fois qu'on l'a résolu.
Evidement si le listing
aurait été clair, le truc aurait été torché
en deux secondes, et vu que je ne suis pas un live approach's man, j'ai
pas mal dansé :p
Si il y a un truc qui
vous échappe, dites-le moi. Je suis toujours pret à aider
quelqu'un qui me mail, et je ne vous jetterai pas au cachot non-plus (voir
délire de tONiARd et RocketSpawn :(
Ensuite, la suite :
All my greetz/thanx/respectz
goes to :
(Aujourd'hui tout le monde
il est '+' c'est moi qu'j'ai décidé :)
-
+$KORBUT
(24 Heures avec le RIF Council, 'faut que +HoMER te file son caméscope
:)
-
+DOUG
DC-10 (Ah ouais, au fait, je voulais te dire *COUIC*... Biiiiiiiiiip
:)
-
Tous nos membres du +RIF
(Vive nous, tiens :)
-
+Moi
(Vive moi, tiens aussi :)
-
+y0da
(Même si il ne lira jamais ce tut :)
-
+Cloud_Strife
(La prochaine fois, inverse pas les tapis... Morbac :)
-
++creekboom
(Il a un '++' car c'est déjà un '+' à la base :)
-
+Lise_Grim
et +Olivier (Que j'aime aussi :)
-
Ma +grosse
(Que j'aime encore + :) <-
Vous trouvez pas ça poétique ?!
-
+Vous
(c'est grace aux compliments que j'ai le courage de cracker des trucs comme
ça)
Et enfin une grosse dédicasse
à deux gros lamerz :
(Les '-' awards sont distribués)
-
-tONiARd
(le chef de la bande)
-
-RocketSpawn
(son sous-fifre)
-
Les -paranomythos
qui croient qui leur vie c'est un film cain-ri.
Et tous les -ennemis
du RIF
Bisous
!
the
Dr. rED mEAT (on
peut porter un casquette, user d'un langage ordurier et être cracker
:)
And
remember : RESiSTANCE IS FUTiLE
!
.
Mail the Dr.
rED mEAT
Visit our website RIF
2k3
|
|
Remember me ? "Throw
ya gunz in the air !"
Remember me ?! "Slam
! Slam !"
Remember me ?!?! "Nigga
'Bacdafucup' !"
Remember me ??!?!! "Chka-chka-Onyx
!"
|
No
warez ; Free tools ; High quality tutorials ; |
RESiSTANCE IS FUTiLE 2k3
|
©
2003 the Dr. rED mEAT
|
|
|
¸,¿o©º°¨¨°º©o¿,¸
And
remember : RESiSTANCE IS FUTiLE ¸,¿o©º°¨¨°º©o¿,¸
|