Készítette: Lukundoo [HPA]
e-mail: Lukundoo@SoftHome.Net
web: http://welcome.to/hpa
Tartalomjegyzék:
1. Mi AZ a softice?
2. HoGYAN kezdjük el?
3. MiNDEN kezdet nehéz...
4. De NeM biztos, hogy ez így müködni fog!
5. De eZ MéG nem minden!
6. ZáRSZó vagy amit akartok.
1. Mi AZ a softice?
A Softice egy debugger program. A programnak van dos, window$, win95, win98,
winNT alatt futó változata is. Én most csak a Win95
/98 alatt futó változattal foglalkozom. A program még
a WIN.COM betöltõdése elõtt elindul, így már
a rendszer betöltésébe is bele tudunk avatkozni. A programot
fel kell installálni, és utána már indulhat is a
móka.
2. HoGYAN kezdjük el?
Miután felinstalláltuk, be kell állítani a videokártyánk
típusát. Ez nem mindig tökéletes, fõleg a 3.1
elõtti verzióknál. Tehát érdemes letölteni
az ujjabb verziót. Ha azzal se mûködik, akkor marad
az utolsó lehetõség, a felbontást le kell venni
640x480x16 színre. Ezzel a felbontással mindig elindul,
de nem élvezhetõ pl. egy grafikai program feltörése.
Ezután meg is kezdhetjük a mókát.
3. MiNDEN kezdet nehéz...
Egy sima feltörésnél, meg kell nézni, hogy hol
van az a pont, ahol szériaszámot kér a program. Ha
megvan, akkor be kell írni bármilyen nevet, adatot, és
szériaszámot. Mielõtt rákttintanánk az "OK"
gombra, CTRL+D-t kell nyomnunk, és tadam, bejön a SoftIce szöveges
ablaka. Itt lehet majd látni az aktuális regiszter állást,
keresni lehet a memóriában, rá lehet állítani
u. n. "breakpoint"-ot, megszakítási kiugrási
pontot, különbözõ eseményekre. Ezek az események
a win95/98 eseményei, pl. ablak megnyitása, szöveg beolvasása
egy dialogusból, és így tovább. Mivel
mi a regisztrálást szeretnénk kiütni, ezért
csak pár eseményt kell ismernünk. Ezek
névszerint a következõk:
GetWindowText Az
ablakból olvasás 16 bites progiknál
GetWindowTextA ugyanaz mint az elõzõ,
csak 32 bites progiknál
GetDlgItemIext Dialógusablakból való
olvasás 16 bitesnél
GetDlgItemIextA ugyanaz mint az elõzõk, csak
32 bitnél
HmemCpy memória
terület másolása (ez az egyik legjobb!)
A végén levõ "A" betû mindig azt jelenti, hogy 32 bites progiknál lehet használni, ha nincs, akkor pedig a 16 bites programoknál lehet csak használni... Nem nehéz! Érdemes használni a hmemcpy parancsot, mert 99%-ban mûködik. De még nem tudjuk, hogy hogyan lehet ráállítani erre az eseményre a breakpoint-ot? Ezt a:
BPX <esemény neve>
parancssal lehet megtenni. Tehát üssük be hogy BPX hmemcpy, és utána nyomjuk meg az F5 gombot. Visszatértünk az eredeti programhoz. Most már rányomhatunk az "OK" gombra, és a program megkezdi a szériaszám ellenõrzést. Ekkor rögtön megjelenik a SoftIce szöveges üzemmódú ablaka, és ott vagyunk a hmemcpy parancs helyén. Az alján az ablaknak megjelenik, hogy milyen program kódjában turkálunk. Mostmár tudjuk, hogy milyen programban vagyunk. De nekünk nem ez a program kell, ezért vissza kell lépkednünk az F12 gombbal, addig a pontig, amíg nem annak a programnak a nevét látjuk, amit fel szeretnénk törni. Ezt a folyamatot (F12 nyomogatását) amíg nem érünk el egy call utasításig. Ezutám már lépkedhetünk a kódban az F10 gombbal egészen addig a pontig, ahol valamilyen eldöntendõ ugrás van (pl. JNE, JE, JLE,TEST). Én mindig leszoktam tenni az ilyen helyekre egy úgynevezett megszakítási pontot. Ezt a egérrel rákattintva az adott sorra lehet megtenni. Majd folytatjuk az F10-es barangolást. Ha a jó ugrást találtuk meg, akkor meg fog jelenni egy üzenetablak, hogy a program nem lett regisztrálva, és hogy rossz a regisztrációs kód. Most már nincs sok dolgunk, mert ki kell listáznunk, hogy milyen megszakítási pontjaink vannak, ezt a BL parancssal lehet megtenni, majd kitöröljük a hmemcpy megszakítási pontot a BC <szám>-al, ahol a szám a hmemcpy elõtt álló szám. Mostmár közel állunk a megoldáshoz. Meg kell nyomni az F5 gombot, és folytatja a program a dolgát. Most újra hozzuk be a regisztrációs ablakot, és mostmár azokat az adatokat írjuk be, amire szeretnénk a programot regisztrálni, és utána nyomjunk meg az "OK" gombot. Most ha mindent jól csináltunk, akkor ott fog megállni a program, ahol a program eldönti, hogy jó, vagy rossz a kódunk. Mostmár nincs más hátra, csak az adott opkódot kell kicserélni másra. Ez általában abból áll hogy a megfelelõ utasítást kicseréljük az ellenkezõjére. Pl.:
JE <--> JNE
JMP <--> NOP
JZ <--> JNZ
De ezt hogyan kell? A kód kicserélése az "A" betüt leütve, és utána bejön az offszetcím, és oda kell beírni. Pl.:
0028:15445323 7506 JNZ 15445368
ez az eredeti kódmódosítás elõtt 0028:15445323 és utána
0028:15445323 7406 JZ 15445368
ez a módosított kód
Mostmár a megfeleõ helyre fog ugrani a programunk, miután az F10 billenyût megnyomjuk. És máris arra a részre ugrottunk, ahol a program elfogadja a regisztrációs számunkat. Ennél egyszerûbb megoldás ha rákattintunk az EIP után lévõ számra, és átírjuk arra, ami a JNZ utasítás után áll. Ezután már a program azt írja ki, hogy gratulálunk, Ön regisztrált felhasználója a programnak.... :)
4. De NeM biztos, hogy ez így
müködni fog!
Sajnos a legtöbb program nem csak egy helyen ellenõrzi a kódot,
hanem több ponton is! Ezen a ponton két lehetõség
adódik, amit ki lehet próbálni:
a.) Meg kell nézni azt a call utasítást,ami után az ugrás következett, és a call utasításon belül kell megkeresni azt a pontot, ahol a ténylegesen ellenõrzi a beírt kódot. Ha ezt megtaláljuk, akkor ugyanúgy mint az elõbb, ki kell cserélni az ugrást, és ezután a program mindenhol, ahol ellenõrzi a kódot, helyesen fog ugrani.
b.) A másik megoldás az, hogy a call utasításba belemegyünk az F8 billentyü lenyomásával , és rögtön az elsõ utasításra rá kell kattintani, és kijelöljük megszakítási pontnak. Ezután már csak végig kell próbálgatni az összes funkciót (Open, Save, Print, etc...), és ahol elõjön a SoftIce ablaka, ott tovább kell lépkedni, és meg fogjuk találni ugyanúgy mint az elõbb, a call utasításból kilépve, azt a JNZ utasítást, ami a regisztrálatlan részre ugrik. Ugyanúgy mint elõbb itt is ki kell cserélni a JNZ utasítást JZ-re. Ezt mindenhol, ahol elõjön, ki kell cserélni. Ezután már a program biztosan fel lesz törve.
5. De eZ MéG nem minden!
Miután kiléptünk a programból, és újra
elindítottuk, már megint regisztrálatlankénk fog indulni.
Hát akkor nem volt semmi értelme annak, hogy feltörtük
a programot? Dehogy... Mindig fel kell írni a hexadecimális
kódját az utasításnak, mielött, és miután
módosítottuk. például az elöbb példából
kiindulva:
0028:15445323 7506 JNZ 15445368 ez az eredeti
kód
0028:15445323 7406 JZ 15445368 ez a módosított kód
Mielõtt módosítottuk, a hexa kódja 7506 volt, miután módosítottuk, a hexa kódja 7406 lett. De ezt hogy kell elõhozni a SoftIce-ból, hogy mutassa az utasítás hexadecimális kódját? Be kell gépelni a SoftIce ablakba, hogy CODE ON. Ezután már ott lesz. De ez a hexa kód még kevés lesz, mert ha erre rákeresünk a file-ban, akkor kb. 200 ilyet találunk. Tehát érdemes az elõtte, és az utána következõ utasítás hexa kódját is felírni. Ezután már csak az a dolgunk, hogy készítünk egy másolatot az eredeti file-ról, és egy hexa editorba, például a HexWorkShop-ba, be kell hívni az eredeti file-t, rá kell keresni arra a hexa sztringre, amit felírtunk, és kicserélni arra ami már módosítva lett. Ezután már a program véglegesen is fel lett törve!!!!
6. ZáRSZó vagy amit akartok.
Remélem minden érthetõ volt a mai "tananyagban",
és mindenkit arra ösztönöz, hogy programokat törjön
fel. Ha valaki elég késztetést érez arra, hogy programokat
törjön fel, az vegye fel a kapcsolatot velem, és felvesszük
"trial member"-nek a HPA csapatába.
Lukundoo [HPA]
1999. jan. 21.