Készítette: Lukundoo [HPA]
e-mail: Lukundoo@SoftHome.Net
web: http://welcome.to/hpa
Tartalom jegyzék:
1. MiRöL LESZ ma szó?
2. Mi KELL hozzá?
3. HoGYAN kezdjünk hozzá?
3. KéSZíTSÜNK patch programot!
4. Mi KÖVETKEZIK ezután?
5. KöSZöNeT!
1. MiRöL LESZ ma szó?
A mai menü, a HexWorkShop v2.54 program, amivel hexadecimálisan
lehet szerkeszteni bármilyen file-t. A programban különbözõ
funkciók le vannak tiltva addig, amíg nem regisztrálják.Ekkor
jövünk mi CRACKEREK!
2. Mi KELL hozzá?
Kell hozzá a Hex WorkShop v2.54-es program, a WDasm32 nevü progi,
és a Mnemonix nevü program, és egy Turbo Pascal
fordító program is.
3. HoGYAN kezdjünk hozzá?
Elindítva a programot elsõre, megjeleni egy képernyõ,
ami értesíti a tisztelt felhasználót, hogy a program
bizony regisztrálatlan, és jó lenne, valamit tenni
ellene ( REGISZTRÁLNI KELLENE!!! ). És ezután mindig
ott lesz egy menüpont, aminek az a neve hogy: "Demonstration
Version". Ez így elég ciki, mit gondolnak a haverok, etc,
etc........ Ilyenkor jön jól a WDasm32 nevü program. Indítsuk
el a HWS-ot, és kattintsunk rá a "Demonstration Version"
nevü menüre. Bejön egy ablak, ahol közli velünk hogy
hányas verziójú a program, ki készítette,
és természetesen egy ablak a regisztrációnak!
Rögtön írjunk be valami hülyeséget a regisztrációs
ablakba, majd nyomjuk meg az OK gombot. Hoppá! Kiírta, hogy: "You
have entered an invalid number!". Hát ez bizony
ciki! (Ha valakinek nem ezt írta ki,akkor az piszok szerencsés,
vagy van szériaszáma a HWS-hoz ! ). Ezt a szöveget
meg kell jegyeznünk magunknak, mert a késöbbiek
során még hasznát vesszük. Indítsuk el
a WDasm32-t és hívjuk be a Hworks32.exe-t. Ezután rá
kell keresni arra a string-re, amit már elõbb megjegyeztünk
magunknak. Meg is van, látjuk, hogy egy dialógusablakban található
a szöveg: Name: DialogID_0075,# of
Controls=003,Caption:"Registration Unsuccessful",ClassName:""
001-ControlID:FFFF,Control Class:"STATIC" Control Text:"You have
entered an invalid registration number." Ezután
rákattintunk a Refs menü Dialog References pontjára, és
rögtön megjelenik egy ablak, ahol a dialógus ablak referenciák
vannak. Itt kellene nekünk megkeresni azt, hogy "Dialog:
DialogID_0075". Ha ez megvan, akkor rá kell kattintani. Oda
ugrik, ahol ezt a dialógus ablakot felhasználja a program.
Sajnos ilyen kettõ is van, tehát nehezebb dolgunk lesz.
Elõször ugorjunk az elsõre.
:00409D7D 6A00 push
00000000
:00409D7F 6A00 push
00000000
* Possible Reference to String Resource ID=00001:
"Hex Workshop Version 2.54"
|
:00409D81 6A01 push
00000001
* Possible Reference to Dialog: DialogID_0075
|
:00409D83 6A75 push
00000075
Megvan ez elsõ! Most meg kell keresni, hogy hol van valamilyen ellenörzés, vagy ugrás a kódban. Ahogy megyünk felfele, találunk valami érdekeset, egy ugrást erre a kódra:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:00409C99(C)
Ha ez megvan, akkor rögtön oda kell menni a ":00409C99" helyre, és megnézni, hogy milyen ugrás van ott:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:00409C89(U)
|
:00409C95 837DEC00 cmp
dword ptr [ebp-14], 00000000
:00409C99 0F8479000000 je
00409D18
:00409C9F 8B8DFCFEFFFF mov
ecx, dword ptr [ebp+FFFFFEFC]
:00409CA5 83C15C add
ecx, 0000005C
Nahát, milyen érdekes dologra bukkantunk, egy ugrásra, ami akkor történik, hogyha az "EBP-14"-re mutató pointer értéke 0-val lesz egyenlõ. Álljunk rá a zöld csíkkal erre az utasításra, és alul a státuszvonalon megmutatja, hogy milyen offszet-en van ez az utasítás. Rögtön fel kell írni ezt a számot ":00009099". Most menjünk rá megint a dialógusablak referenciára, és csináljuk meg újra ugyanezt a progcedurát, de most ha megtalálta az elsõ "DialogID_0075"-ra való hivatkozást, akkor kattintsunk rá mégegyszer. Erre tovább ugrik a következõ hivatkozásra.
* Possible Reference to String Resource ID=00001:
"Hex Workshop Version 2.54"
|
:0042639B 6A01 push
00000001
* Possible Reference to Dialog: DialogID_0075
|
:0042639D 6A75 push
00000075
Ime még egy hely, ahol ezt a dialógus ablakot használják. Mi ugyebár nem tudjuk, hogy melyik az igazi, ezért midkettõt le kell ellenõrizni. Ugyanúgy, mint elõbb, itt is meg kell nézni, hogy van e valamilyen ellenõrzés, vagy ugrás ez elõtt. Ha elindulunk felfele, akkor találunk is egyet:
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004262B3(C)
|
:00426332 E869C4FDFF call
004027A0
:00426337 89850CFFFFFF mov
dword ptr [ebp+FFFFFF0C], eax
:0042633D 8B850CFFFFFF mov
eax, dword ptr [ebp+FFFFFF0C]
Most már tudjuk, hogy mit kell tenni, oda kell menni a "004262B3" -ra, és megnézni, hogy mi van ott.
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:004262A3(U)
|
:004262AF 837DEC00 cmp
dword ptr [ebp-14], 00000000
:004262B3 0F8479000000 je
00426332
:004262B9 8B8DFCFEFFFF mov
ecx, dword ptr [ebp+FFFFFEFC]
3. KéSZíTSÜNK patch
programot!
Milyen érdekes, de majdnem szószerint ugyan arra a kódra
találtunk rá, mint az elõbb. Megint menjünk rá
a zöld csikkal a "JE" utasításra, és megjelenik
alul megint, hogy milyen offszeten van ez a kód. Ezt is
fel kell írni ":000256B3", mert ebbõl csinálunk
patch progit. (Gyakran itt hibáznak a kezdõk, mert nem a státuszsorban
levõ számot írják le, hanem ami az utasítás
mellett van. Az rossz! ) Miután ezzel megvagyunk, ellenõrizni
kell, hogy van-e még hivatkozás erre az ablakra a programban.
Ezt úgy tehetjük meg, hogy a Dialog References-ben rákattintunk
párszor a "Dialog: DialogID_0075"-re, és ha csak ugyanarra a
két helyre ugrik, akkor nincs több hivatkozás.
Mostmár tudjuk azt a két helyet, ahol a kód ellenõrzése
van. Most már csak azt kellene tudni, hogy hogyan kéne módosítani
úgy, hogy a kódot elfogadja a program. a JE ugrást kell kicserélni
JNE-re! Ezután már bármit beírhatunk kódnak,
a program el fogja fogadni. De itt van a probléma, honnan
tudjam én, hogy mi a "JNE" kód hexadecimális
értéke. Ilyenkor jól jön egy kis program,
aminek a neve Mnemonix. Ebben a programban az összes opkódnak
a hexa értéke benne van. Ha elindítjuk és odamegyünk
a "JE" -hez, akkor láthatjuk, hogy a kódja 0F84,
míg a "JNE" kódja 0F85. És innen már
semmi nehézségünk nincs. Csak a megfelelõ helyre kell
odamennünk, és kicserélni a "JE"-t "JNE"-re.
Hogyan is csináljuk ezt? Tudjuk, hogy hol helyezkedik el a két
JE kód, és azt is tudjuk, hogy mi a JNE kód hexa kódja.
Ezek a 00009099 és a 000256B3 offszete helyezkednek el. Írni
kell egy programot, ami megkeresi ezeket a helyeket, és kicseréli
a JE-ket JNE-re. Lássunk hozzá. Én Turbo Pascal nyelvben
írom meg a progit, ha valaki türelmes, akkor megírhatja C++,
assembly, vagy Basic nyelven is. Íme a forráskód:
Program PatchForHexWorkShop_v254;
Const Where:Array[1..2] Of LongInt=($00009099,$000256B3);
Var F:File;
Code,I:Word;
Begin
WriteLn('Hex WorkShop v2.54 regpatch by Lukundoo
[HPA]');
If ParamCount>0 Then
Begin
If ((Pos('U',ParamStr(1))>0)
Or (Pos('u',ParamStr(1))>0)) Then
Begin (*Vissza tudjuk
állítani*)
WriteLn('þ
unpatching the file...');
Code:=$0f84;
(*Csak ezt cseréljük ki*)
End;
End
Else
Begin
WriteLn('þ patching
the file...');
Code:=$0f85;
End;
Assign(F,'HWORKS32.EXE');
{$I-}
ReSet(F,1);
{$I+}
If IOResult<>0 Then
Begin
WriteLn('þ error
opening the file HWORKS32.EXE');
Halt;
End;
If FileSize(F)<>678912 Then
Begin
WriteLn('þ the file
size doesn''t match!');
Close(F);
Halt;
End;
WriteLn('þ searching invalid bytes... ;p');
For i:=1 To 2 Do
Begin
Seek(F,0);
Seek(F,Where[I]);
BlockWrite(F,Code,SizeOf(Code));
End;
Close(F);
WriteLn('þ done!');
End.
4. Mi KÖVETKEZIK ezután?
Miután lefordítottuk a programot, be kell másolni
a HWS könyvtárába, és el kell indítani. Miután
elindítottuk, és kiírta hogy "þ done!",
akkor a célegyenesbe jutottunk! Indítsuk most el a HWS-ot, és
klikk a "Demonstration Version" menüre, bejön az ablak,
és kéri a széria-számot (Nem Xénialázt!!
). Irjunk be bármilyen hülyeséget, mert
bármilyen rossz szériaszámnak jónak kell lennie!
Én azt írtam be hogy: !HPARuLEZ!. Kattintsunk most a Register gombra,
és lássunk csodát, elõjön egy ablak, ami arra
kér minket, hogy adjunk meg még pár fontos dolgot magunkról
(Név, cégnév). Miután ezt beírtuk, Megköszöni,
hogy megvásároltuk a programt, és csodák-csodája
generál nekünk egy regisztrációs file-t, ami
már a jó adatokkal van ellátva! Nincs semmi dolgunk ezután,
mint letöltögetni az újabb verziókat, és ezt
a file-t bemásolni a könyvtárába a Hex WorkShop-nak!
Ezután már csak annyit kell tennünk, hogy elindítjuk
újra a patch programunkat az "U" paraméterrel,
és visszaállítja az eredeti formájába
a programot.
5. KöSZöNeT!
Köszönetet szeretnék mondani mindazoknak, akik segítették
a munkámat, és javaslatokkal láttak el. :)
Lukundoo [HPA]
1998. jan. 17.