Készítette: Lukundoo [HPA]
e-mail: Lukundoo@SoftHome.Net
web: http://welcome.to/hpa
Tartalom jegyzék:
1. HoGYAN kezdjünk hozzá?
2. KiTÖMÖRÍTÉS után.
3. AZ EGYSZERÛ Cracker és a profi Cracker közti különbség.
4. HoGYAN készítsünk kulcsgenerátort?
5. MÁRA ennyi!
1. HoGYAN kezdjünk hozzá?
Találtam egy programot az Intetneten, egy kicsike WAV, VOC lejátszó
programot, ami Sound Blaster hangkártyán játsza
le a file-okat. A program hangosan hirdeti, hogy shareware, tehát 30
nap után minden lejátszás elõtt kitesz egy ablakot,
ami kiírja, hogy ez a program regisztrálatlan. Ugyebár
ez egy nagyon idegesítõ dolog, ezért utána
kell nézni, hogy hogyan lehetne regisztrálni. A program könyvtárában
találtam egy másik programot, amivel a fõ programot
lehet regisztrálni. De ha elindítottam, akkor a következõket
írta ki:
Unable to register!
Hát ez ciki. Itt van a regisztráló program, és nem tudok vele mit kezdeni. Ilyenkor jön a segítségünkre az ExeScan nevû program. Ez a program megmondja, hogy milyen EXE tömörítõvel lett betömörítve a cél programunk. Ki is írta a következõket:
File: SMREG.EXE
Structure: MZ-EXE
Entry Point: 00000B0E
Compiler: Unknown
Searching for known packers ... OK!
> Name: LZEXE
> Ver: 0.90/1.00a
> Ofs: 00000B0E
Hát mostmár tudjuk, hogy mivel lett betömörítve. De ugyebár így betömörítve még nehéz lenne debug-olni, ezért elõtte ki kell tömöríteni. Ehhez jól jön az UNP nevû program. Elindítva, és paraméterként megadva a file nevét, a következõ üzenetet kaptam:
UNP 4.12 Executable file restore utility, written by Ben Castricum
processing file : SMREG.EXE
DOS file size : 3220
file-structure : executable (EXE)
EXE part sizes : header 32 bytes, image 3188 bytes, overlay 0 bytes
processed with : LZEXE V0.91 or V1.00a
action : decompressing...
done
new file size : 4048
writing to file : SMREG.EXE
processing file : SMREG.EXE
DOS file size : 4048
file-structure : executable (EXE)
EXE part sizes : header 240 bytes, image 3808 bytes, overlay 0 bytes
2. KiTÖMÖRÍTÉS után.
Bingo! Sikerült kitömöríteni a file-t. Most már
belenézhetünk a file-ba. Ahogy belenézünk, rögtön
feltûnik egy szó: REGISTER.LIC. Hoppá! Ez mi lehet? Ugy
tûnik, hogy ez egy file-név. Hozzunk létre egy ilyen file-t.
Miután létrehoztuk, indítsuk el megint a programot. És
lõn csoda, a program ezt írja ki:
Sound Machine v2.5 registration (c) 1996. by
Albert Florecke
Enter Your password:
Ez egy gyakori móka a programíróknál, hogy egy file létezése esetén lehet csak a programot regisztrálni (lásd Zsebi v1.0, SM v2.5, etc..). Írjunk be bármit. A program erre kilép a következõ hibaüzenettel:
Illegal password!
Hát ez így nem lesz jó. Sokáig kellene keresni a megfelelõ jelszót. De itt van a megoldás, a debugger program. Tehát hívjuk be a Turbo Debugger-t, vagy bármilyen más debugger programot. A File menü Open részével bejön egy ablak, ott meglátjuk a file-unk nevét kattintsunk rá, és betölti a programot. Ha minden jól megy, akkor kapunk egy ilyen képernyõt:
+-[x]-CPU 80486-------------------------------+-------1-[
][ ]-+
| cs:00F5 9A0000135A call 5A13:0000
| ax 0000 |c=0|
| cs:00FA 55 push
bp |
bx 0000 |z=0|
| cs:00FB 89E5 mov
bp,sp | cx
0000 |s=0|
| cs:00FD B80200 mov ax,0002
| dx 0000 |o=0|
| cs:0100 9ACD02135A call 5A13:02CD
| si 0000 |p=0|
| cs:0105 83EC02 sub sp,0002
| di 0000 |a=0|
| cs:0108 BF5602 mov di,0256
| bp 0000 |i=1|
| cs:010B 1E push
ds |
sp 4000 |d=0|
| cs:010C 57 push
di |
ds 59D2 | |
| cs:010D BF0000 mov di,0000
| es 59D2 | |
| cs:0110 0E push
cs |
ss 5B1D | |
| cs:0111 57 push
di |
cs 59E2 | |
| cs:0112 9A9D06135A call 5A13:069D
| ip 00F5 | |
+---------------------------------------------+ |
|
| ds:0000 CD 20 FF 9E 00 9A F0 FE xxxxxxxx | |
|
| ds:0008 1D F0 E4 01 B3 26 AE 01 xxxxxxxx +----------------+
| ds:0010 B3 26 80 02 0E 21 7C 12 xxxxxxxx | ss:4002
0000 |
| ds:0018 01 01 01 00 02 FF FF FF xxxxxxxx | ss:4000
0000 |
+---------------------------------------------+----------------+
Az F8 billentyûvel lehet a programot léptetni. Szépen elindulunk F8-al, és elérünk addig a pontig, ahol a program bekéri a jelszót:
+-[x]-CPU 80486-------------------------------+-------1-[
][ ]-+
| cs:018F 57 push
di | ax
0008 |c=0|
| cs:0190 BF5200 mov di,0052
| bx 02D6 |z=0|
| cs:0193 1E push
ds |
cx 00F7 |s=0|
| cs:0194 57 push
di |
dx 5ACB |o=0|
| cs:0195 B8FF00 mov ax,00FF
| si 0008 |p=0|
| cs:0198 50 push
ax |
di 0053 |a=0|
| cs:0199 9A3506145A call 5A14:0635
| bp 3FFE |i=1|
| cs:019E 9A9D05145A call 5A14:059D
| sp 3FF8 |d=0|
| cs:01A3 9A9102145A call 5A14:0291
| ds 5ACB | |
| cs:01A8 A05200 mov al,[0052]
| es 5ACB | |
| cs:01AB 8846FF mov [bp-01],al
| ss 5B1E | |
| cs:01AE B001 mov
al,01 | cs
59E3 | |
| cs:01B0 3A46FF cmp al,[bp-01]
| ip 019E | |
+---------------------------------------------+ |
|
|59D3:0000 CD 20 FF 9E 00 9A F0 FE xxxxxxxx | |
|
|59D3:0008 1D F0 E4 01 B4 26 AE 01 xxxxxxxx +------------+---+
|59D3:0010 B4 26 80 02 0F 21 7D 12 xxxxxxxx | ss:3FFA 5ACB
|
|59D3:0018 01 01 01 00 02 09 FF FF xxxxxxxx | ss:3FF8 02D6
|
+---------------------------------------------+----------------+
Ha most tovább lépkedünk, akkor eljutunk egy olyan pontig, hogy
+-[x]-CPU 80486-----------------------------------ds:0254
= 01+
| cs:01BA FE065402 inc byte
ptr [0254] |
| cs:01BE A05402 mov al,[0254]
|
| cs:01C1 30E4 xor
ah,ah |
| cs:01C3 8BF8 mov
di,ax |
| cs:01C5 8A855200 mov al,[di+0052]
|
| cs:01C9 30E4 xor
ah,ah |
| cs:01CB 8BD0 mov
dx,ax |
| cs:01CD A05302 mov al,[0253]
|
| cs:01D0 30E4 xor
ah,ah |
| cs:01D2 03C2 add
ax,dx |
| cs:01D4 A25302 mov [0253],al
|
| cs:01D7 A05402 mov al,[0254]
|
| cs:01DA 3A46FF cmp
al,[bp-01] |
| cs:01DD 75DB jne
01BA |
| cs:01DF 803E5302FE cmp byte
ptr [0253],FE |
+-------------------------------------------------------------+
Itt azt látjuk, hogy a "cs:01DD 75DB jne 01BA" utasítás addig tart, amennyi betût beütöttünk. Tehát ez lehet a szériaszám magja, ahol kiszámolja a szériaszámot. Mit is csinál ez a kis rész: a [0254]-ben tárolódik az aktuális pozíció, a "cs:01C5 8A855200 mov al,[di+0052]" utasítás al-be teszi az aktuális pozícióhoz tartozó betût, majd dx-be teszi az értéket. Ezután al-be tesz egy értéket ami feltehetõleg már egy létezõ érték "cs:01CD A05302 mov al,[0253]". Ezután ax-et és dx-et összeadja, és beleteszi az alsó byte-ját [0253]-ba. Ezután al-be beleteszi az aktuális poziciót, és ellenõrzi, hogy nincs-e még a sztring végén "cs:01DA 3A46FF cmp al,[bp-01]". Ha a nincs még a végén, akkor vissza ugrik 01BA-ra. Ha a végén van, akkor van egy ellenõrzés, ami [0253] értékét összehasonlítja hexa FE-vel. Ha egyenlõ a két érték, akkor ugrik, ha nem, akkor megy a hibaüzenetre.
+-[x]-CPU 80486-----------------------------------ds:0253
= 8-+
| cs:01DF 803E5302FE cmp byte
ptr [0253],FE |
| cs:01E4 7426 je
020C |
| cs:01E6 BFD603 mov di,03D6
|
| cs:01E9 1E push
ds |
| cs:01EA 57 push
di |
| cs:01EB BF7400 mov di,0074
|
| cs:01EE 0E push
cs |
| cs:01EF 57 push
di |
| cs:01F0 31C0 xor
ax,ax |
| cs:01F2 50 push
ax |
| cs:01F3 9A7006145A call 5A14:0670
|
| cs:01F8 9ADD05145A call 5A14:05DD
|
| cs:01FD 9A9102145A call 5A14:0291
|
| cs:0202 31C0 xor
ax,ax |
| cs:0204 9A1601145A call 5A14:0116
|
+-------------------------------------------------------------+
Az egyszerû cracker ilyenkor fogja, és a " je 020C " utasítást kicseréli " jmp 020C " utasításra. Ez így nagyszerû , és müködik is, mert ha kicseréltem, akkor ezt írja ki:
Thank You for support!
Please enter Your name:
3. AZ EGYSZERÛ Cracker és a profi
Cracker közti különbség.
Beírtam a nevemet, és csinált egy file-t, aminek SMACHINE.KEY
a neve. De miután futtattam a Sound Macine programot,
azt írta ki, hogy
Invalid key, continuing Shareware!
Hát ez ciki... Most mit tegyek, fel kell törnöm a Sound Machine-t is? Nem! Inkább ki kellene találni hogy milyen kódot fogad el a regisztráló program. Azt már tudjuk, hogy a végeredményt hasonlítja össze 00FEh-val. De hogy jutunk el a végeredményig? Ime a sematikus leírása Turbo Pascal-ban:
For i=1 to hossz(bekértregisztrációskód)
do
begin
érték:=éréték+másikérték;
end;
if érték=$FE then jóazeredmény else rosszazeredmény;
De mi lehet az a másik érték? Az az érték a karakter szám értéke. Íme ,most már tudjuk, hogy hogy mûködik az algoritmus:
For i=1 to hossz(bekértregisztrációskód)
do
begin
érték:=érték+Ord(bekértregisztrációskód[i]);
end;
if érték=$FE then jóazeredmény else rosszazeredmény;
Most már csak olyan karakter sorozatot kell találni, aminek az értéke 00FEh azaz 254. Pl.: "ak2" mert a=97, k=107, 2=50. 97 + 107 + 50=254. Bingo! Íme itt van egy olyan kód, amivel lehetne regisztrálni a programot. Ki is próbáltam, és mûködött. De mivan, hogyha valakinek nem tetszik ez a kód. Írni kell egy kulcs generáló programot. Én ezt úgy oldottam meg, hogy bekérek három számot, mert ugyebár a 9-es karakter értéke 57, 3x57 =171. 254 - 171 =83, Chr(83)=S, tehát ha három kilences add meg,akkor ki kell egészíteni még egy S betûvel, és kész van a saját széria száma, ugyanez az 1-es számmal: 1 értéke 49, 3x49=147, 254-147=107, Chr(107)=k, ha pedig három egyest üt be, akkor pedig egy k betûvel kell kiegészítenem, és kész a regisztrációs szám.
4. HoGYAN készítsünk kulcsgenerátort?
Kulcsgenerátort nem érdemes assembly-be megírni, mert túl
sok munka van vele egy olyan embernek, aki nem teljesen profi.
Érdemesebb valamilyen magasabb szintû nyelvhez nyúlni, például
Turbo Pascal, C++ , Basic?. Én elõnyben részesítem
a Pascal nyelvet az egyszerûsége miatt. Így hát
Pascalban írom meg a programot, itt látható az eredmény
Program KeygenForSoundMachine_v25;
Var S:String; (*Ebbe a változóba
kérjük be a számokat*)
B,i:Byte;
Code:Integer;
Begin
WriteLn('Sound Machine reg key generator by Lukundoo
[HPA]');
Write('þ enter Your famous 3 number:');
ReadLn(S); (*Bekérjük a számokat*)
Val(S,I,Code);
If Code<>0 Then (*Ellenõrizzük,
hogy csak számokból áll-e?*)
Begin
Writeln(' it''s
not a real number!');
Halt;
End;
If Length(S)<>3 Then (*Ellenõrizzük
a méretét, méret=3!*)
Begin
WriteLn(' only 3
character!');
Halt;
End;
B:=$0; (*B-t lenullázom*)
For I:=1 To 3 Do
Begin
B:=B+Ord(S[i]);
End;
WriteLn('Yor key is: ',S,Chr($FE-B));
(*Az eredmény = bekért számok
+ 00FEh-Számokkarakterértékeinek*)
(*összege!*)
End.
5. MÁRA ennyi!
Remélem eléggé egyértelmû volt
a leírás. Ha valakinek problémája lenne vele, akkor nyugodtan
írjon nekem e-mail-t, a cím felül van! Üdvözlet
Mindenkinek, aki segített engem, aki elolvasta ezt a doksit, és
csatlakozni kíván a csapathoz, és aki nem akar annak is.
Lukundoo [HPA]
1999. jan. 15.