Hogyan használjuk a SoftIce-t?
avagy
"Egy debugger, amit a cracker-eknek írtak!"

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.