Bevezetés a crack világába.
Köszönet: ByteBurn -nek

 

Bevezetés:

Mi is az a crackelés?

A crackelés ahogy én azt mondani szeretem egyfajta művészi megnyilvánulás. Bárki simán kezelheti. De nem mindenki tudja a legjobbat kihozni belőle. Ha meg szeretnéd tanulni, akkor rájössz, hogy eleinte nem is olyan könnyű megérteni, de ha már szereztél egy kis tapasztalatot és tudást, akkor rájössz, hogy ez valójában csodálatos. Ha már komolyabban tudsz crackelni, akkor már te nem csak egyszerűen egy cracker vagy. Te már több vagy mint egy cracker. A crackelés művészetével több információt szerzel a PC-d működéséről és a programokról amiket futtatsz rajta és arról, hogy hogyan is működnek. Megtudhatod, hogyan működik egy program és azt is hogyan manipuláld úgy hogy az neked hasznos lehessen. És ez még nem jelenti azt, hogy ez illegális. Na persze nem is 100% -ig legális, de ez még hasznos lehet az életedben. Többet fogsz majd megérteni az Assembly nyelvből, meg fogod érteni egy program függvényeit és más alkalmazásokat, talán még programozó is lehet belőled? Ki tudja. De először is meg kell tanulnod lépésről lépésre. Segítséget nyújtok az útmutatásaimmal és remélem meg fogod érteni, ahogy elmagyarázom neked.

 

Első lépés:

Mire is van szükségünk a crackeléshez? Kell e ismernem az assembly kódot vagy mást? Nem. Én ezt a szöveget azoknak a kezdőknek írtam, akik nem értenek az ASM kódhoz és nem értik az alkalmazások illetve függvények működését sem. Néhány éve én is így kezdtem. És sok időmet elvette az, hogy olyan szintre jussak, mint amilyenen most vagyok. Szerintem van még egy csomó útmutató amelyek még ennél is jobbak és nem akarom ócsárolni azokat. De a legtöbb közülük gyorsan megírt nehezen megérthető, amelyekkel a kezdők nem tudnak csinálni semmit. Valahogy nehezen értettem meg, hogy valójában mit is akarnak tulajdonképpen. Például mi az a nop utasítás vagy mit jelent a je,eax,jump parancsok. Amit mondani akarnak az az, hogy a jump ha egyenlő akkor ide ugrik, és ezt be kell helyettesítenünk egy jump ha nem egyenlő utasítással. Ezek a dolgok miatt néha aggódni szoktam azon, hogy valójában mit is akarok én megtanulni. Úgy döntöttem inkább feladom és hagyom a francba az egész crackerkedést. De amikor később is megpróbálom ugyanazt akkor is csak tanulok belőle. Igen valamikor úgy gondolod, hogy a fenébe hogy-hogy nem működik! De ne add fel. Mindenki így kezdte és túl is jutott rajta, hidd el nem te vagy az első és nem is te leszel az utolsó. Mindig újra és újra neki kell rugaszkodnod. És amikor végre egyszer sikerül, akkor nagyon büszke leszel magadra.

 

Amire szükségünk van:

Először amire szükségünk van az a W32Dasm8.9 (egy Windows-os visszafordító) és a HIEW (ez egy jó Hexa Editor, szerintem eleinte ez lesz neked a legjobb). Ennyi. Majd a késôbbi szükséged lesz (lehet) Soft-Ice-ra, de először is mint kezdő cracker csak a fenti két software-re van szükséged.

 

Kezdésnek egy kis ismerkedés:

Csak hogy tudd nem olyan egyszerű kezelni az asm-kódot és szerintem nem ismered túlzottan. Ezért elmagyarázom neked a legáltalánosabb parancsokat. Többek között nem árt ha tudjuk, hogy az asm-kódban mindig két szám felel meg egy bytenak. Például a 75564345 = 4byte. A 75 egy byte, az 56 egy byte, a 43 is egy byte és a 45 is egy byte. Akkor most van 4 byteunk, ami egy utasítást szimbolizál. Ha meg szeretnénk változtatni, akkor már tudjuk, hogy két számot mindig két másikkal kell behelyettesítenünk. Például a 75

(ez hexadecimálisan a jne utasításnak felel meg, a jne azt jelenti, hogy ugrás, ha nem egyenlő) megváltoztathatjuk 74-re (ez hexadecimálisan je utasításnak felel meg, a je azt jelenti, hogy ugrás ha egyenlő). Ez az esetek többségében elég szokott lenni ahhoz, hogy feltörjünk egy játékot vagy regisztráljunk egy programot, hogy ne írja ki "sajnálom hibás jelszó" vagy valami mást (nehogy azt hidd, hogy ez olyan egyszerű). Mert ha megváltoztatjuk a 75 értékét (ugrás ha nem egyenlő [ez azt jelenti, hogy az alkalmazás például azt ellenőrzi, hogy van e cd a meghajtóban vagy azt a jelszót ütötted e be amelyiket a program elfogad és ha mindez nem megfelelő, vagyis nincs cd a meghajtóban, rossz jelszót adtál meg, akkor a program a "BadBoy"-hoz ugrik és megkapod a hibaüzenetet] egyébként a "BadBoy" [rosszfiú] a cracker nyelvben azt a rossz fickót jelenti, aki a hibaüzenetet hívta) megváltoztatjuk 74-re (ugrás ha egyenlő, vagyis a program azt hiszi, hogy van cd a meghajtóban vagy hogy helyes jelszavat ütöttünk be és ilyenkor a "GoodBoy"-hoz ugrik. A GoodBoy [jófiú] az aki szabad utat ad nekünk). Manipulálnod kell a programot azért, hogy az azt higgye, hogy van cd a meghajtóban vagy a jelszód helyes és akkor a program tovább fut. Nem árt ha tudod, az exe fentről lefelé halad. Ez azt jelenti, hogy a parancsok amelyek a hibaüzeneteket hívják még a hibaüzenetek előtt vannak. Csak arra akarok kilyukadni, hogy ha megtalálod a hibaüzenetet (a továbbiakban elmagyarázom, hogy hogyan csináld) akkor mindig is előtte kell keresni a hívását. Úgy, ahogy te is csinálod. Ha egy könyvet vagy egy szöveget olvasol, az első soron kezded és lefelé haladva olvasol. A program is ezt teszi. Az asm-kód első sorától az utolsóig halad, ha minden rendben megy. Ha a 9. sorban egy hibát talál, akkor leugrik a "BadBoy"-hoz. Vissza már nem ugorhat, mert fönt már mindent ellenőrzött és nem lehetnek szövődések sem. Vagyis ha megtaláltad a hibát csak nézz fel (elé) és meg fogod találni a parancsot, amelyik a hibaüzenetet hívta. Ok akkor most jöhet némi ismerkedés a számokkal és a visszafordítással (egyenlőre csak a legszükségesebb dolgokat ecsetelem):

je (hexadecimálisan 74) = Ugrás, ha egyenlô

jne (hexadecimálisan 75) = Ugrás, ha nem egyenlô

nop (hexadecimálisan 90) = Nincs utasítás

call (nincs állandó hexadecimális megfelelője) = meghív egy utasítást

jmp (nincs állandó hexadecimális megfelelője) = ugrás egy sorra/utasításhoz

Ez az öt alaputasítás, amikre elsőként szükségünk van. A többit majd akkor mesélem el, ha már több tapasztalatot szereztél az asm-kódról. Ok most nézzük meg, hogy valójában mit is csinálnak ezek az utasítások egy asm-kódban.

Je (ugrás ha egyenlő) ha az ellenőrzés igaz akkor a megadott művelethez ugrik.

Például:

Egy játéknak szüksége van egy cd-re az induláshoz. Akkor az "ugrás, ha egyenlő", je parancs ellenőrzi, hogy van e cd a meghajtóban. Ha van akkor az utána lévő kijelölt parancsra ugrik és onnan folytatódik. Ez az egyenlő művelet. A cd-t megtalálta (egyenlő) és folytatódik az asm-kód (ugrás ha egyenlő).

Jne (ugrás ha nem egyenlô) egy parancsra ugrik (legtöbbször ilyen esetekben a BadBoy-hoz ugrik, vagyis a hibaüzenetre, amit a képernyőn megkapsz) ha nem találja amit ellenőriz.

Például:

A játéknak kell egy cd a futáshoz. Vagyis az "ugrás, ha nem egyenlő", jne parancs ellenőrzi, hogy van e cd a meghajtóban. Ha nincs, akkor a "BadBoy"-hoz ugrik és megkapod a hibaüzenetet, mint például "Cannot find CD in drive. Please insert CD and click OK." Ez az "ugrás, ha nem egyenlő" művelet. Az ellenőrzés nem sikerült (mert nem találta a CD-t a meghajtóban) és a "BadBoy"-hoz ugrott és a "BadBoy" befejezte a töltési eljárást és megjelenítette a hibaüzenetet a képernyőn.

Nop (nincs utasítás) a nop művelet kitörli az aktuális műveletet, mint például CD vagy jelszó ellenőrzést.

Például:

A játéknak kell a cd az induláshoz. Ugyanúgy, mint ez előtt, csak elhelyezed a nop utasítást. Kicserélheted a jne/je/call/jmp utasításokat a nop-al. Ekkor a nop nem létezővé teszi a jne/je/call/jmp utasításokat, ez azt jelenti, hogy nem lesz ellenőrizve, ha van cd a meghajtóban és a kód megy tovább. A játék fut.

Call (meghív egy műveletet) a call utasítás ahogy a neve is mondja meghív egy utasítást. Ez az utasítás lehet egy hibaüzenet, egy "kérem, regisztráljon" ablak...Ezeket a nop-al tudod helyettesíteni.

Például:

Már nem is tudom mit írjak.

Jmp (ugrás egy sorra/utasításhoz) a jmp utasítás hasonló a call-hoz (nem ugyanaz, de majdnem) csak nem utasításokat hív, hanem azokhoz ugrik.

Például:

A jmp egy olyan sorra/utasításhoz ugrik, amely aztán egy hibaüzenetre ugrik vagy egy BadBoy-hoz...A jmp-t is a nop-al tudod hatástalanítani.

Egyenlőre ennyit kell tudnotok az asm parancsokról. Ebben a szövegben csak ezeket a parancsokat fogjuk felhasználni. Ennyi kezdetben elég is arra, hogy egyszerűbb védelmeket fel lehessen törni (mindegy, hogy cd vagy jelszó).

 

A védelmi sémákról:

Több fajta védelem is van, amit meg kell ismerned és azt is, hogyan iktasd ki azokat. Van a "hagyományos" cd védelem (egy játék keresi a cd-t, ha nincs akkor nem indítja el a játékot) jelszavas védelmek (be kell ütnöd egy helyes jelszavat [legtöbbször próbaverziókban találkozhatsz velük] ha nem helyes, akkor nem regisztrálhatod a programot, idő határok (leginkább próbaverziókban fordulnak elő. Van némi időd arra, hogy kipróbáld a programot, körülbelül három heted, és ha letelt ez az idő a program már nem indul el hanem be kell ütnöd egy jelszavat, hogy használhasd), legtöbbször kérned kell egy regisztráló programot a készítőtől (enélkül a program nem működik, ezt a fajta védelmet igen nehéz megtalálni). Ezek a leghasználatosabb védelmi sémák, amelyekkel találkozhatsz pályafutásod során.

A legegyszerűbb feltörhető védelmek számunkra a windows hibaüzenetek (legalábbis szerintem). Ez egy windows üzenet ablak, amit a képernyőn láthatsz valamilyen szöveggel benne amely arra utal, hogy nincs cd vagy rossz jelszó. Ilyen védelmet találhatsz az EA programokban is mint például a NFS, Fifa, NHL....Ezeket nagyon egyszerű feltörni, mert az egyedüli dolgod az, hogy eltüntesd az ablakot (legtöbbször a nop utasítás elég vagy a je-t jne-re változtatod vagy fordítva). Ezt a fajta védelmet találhatod a jelszóval védett programoknál is. Ha rossz jelszavat ütsz be akkor kapsz egy windows hibaüzenet ablakot amelyben egy szöveg olvasható "invalid password" vagy valami ilyesmi. Aztán vannak még játék közbeni hibaüzenetek, amelyeket nehezebb feltörni. Ez azért van, mert a W32Dasm csak a windows hibaüzeneteit mutatja meg és nem a játék saját üzeneteit. Az ijesfajta védelmekhez a Soft-Ice-ra van szükségünk (a későbbi szövegfileokból megtudhatod majd, hogyan kell használni a Soft-Ice-ot - HPA tutorial). Például ilyen védelemmel ellátott játékok a Commandos, Grand Theft Auto és a Descent Freespace. És persze az időhatáros védelmeket is lehet mutatni windows hibaüzenetként

és program közben is. Ilyen védelem van például a Paint Shop Pro-ban is. Ebben a cikkben elmagyarázom neked, hogyan szedd ki a windows hibaüzeneteket a W32Dasm 8.9-es verziójával és a Hiew-el. Feltörjük a WinRAR-t és a WinRAR95-öt (talán egy játékot is, például az Anno1602-öt vagy valami mást,

ez attól függ, hogy milyen hosszú lesz a cikk és hogy mennyi időm lesz rá).

A feltörés megkezdése:

Akkor kezdjük is el a legfontosabbal, a feltöréssel. Elmagyarázom, hogyan is használd a W32Dasm89 és a Hiew alaputasításait. A WinRAR95.exe-t törjük fel (a próbaverzióból egy teljes, regisztrált példányt csinálunk). Először is indítsuk el a programot. Bent vagyunk. Mit látunk? Először is az ablak tetején látunk egy "WinRAR (unregistered version)" feliratot. Ez nekünk nagyon is jó, mert az "unregistered version" státusz a "WinRAR" után azt mutatja, hogy regisztrálatlan és azt is, hogy nem jelenik meg, ha regisztrálva van. Most kattintsunk az "Options"-ra, aztán meg a "Register"-re. Most látsz egy windows dobozt (az a fajta, amelyikre azt mondtam, hogy könnyű feltörni). A szövegdobozokba névként írd be, hogy "Test" és számként meg "12345" és kattints az ok-ra. Hallasz egy hangot és egy újabb windows doboz bukkan elő, amely azt mondja "Registration failed". Csupán ennyit akartunk tudni. Lépj ki a WinRAR95-bôl és nyiss egy MS-Dos ablakot.

Most pedig Norton Commanderben (windows commandert is használhatsz) készíts a WinRAR95.exe-ről két másolatot. Az egyik legyen WinRAR95.w32 (a W32Dasm89-nek) a másik meg legyen WinRAR95.exx (egy biztonsági másolat arra az esetre, ha rossz bájtokat változtatsz meg). Most elmondom, hogy miért készítjük a másolatokat. Nagyon egyszerű. Hogyha visszafordítasz egy exe-t W32Dasm89-ben , mint például a WinRAR95-öt akkor egyidejűleg ugyanazt az exe-t nem tudod kezelni a Hiew-ban. Csinálsz mégegy másolatot WinRAR95.w32 néven (mindegy, hogy mi a neve, de azért jó tudni, hogy ez most a W32Dasm89-nek van meghagyva). Ez az a másolat, amelyiket a W32Dasm89-el visszafordítasz és bármikor elindíthatod az eredeti exe-t vagy megváltoztathatod a byteokat Hiew-ban. A második másolat a WinRAR95.exx csak egy biztonsági másolat. Ha rossz bájtokat változtatsz meg a Hiew-ban vagy valami másért nem akar futni, akkor még mindig ott az eredeti, amit aztán visszamásolhatsz az exe helyére és próbálkozhatsz újra (ne felejtsd el ez mindig "próbálkozz és hibázz" technika). Ok ha megvan mindkét másolat indítsd el a W32Dasm89-et. Most pedig kattints fölül az első gombra (vagy kattints a Disassembler menüre, azon belül meg az "Open file to disassemble"-re). Egy ablak jelenik meg, ahol kiválaszthatod, hogy melyik fájlt akarod megnyitni. Lépj be WinRAR könyvtárába és kattints a WinRAR95.w32-re. A W32Dasm89 megkezdte a visszafordítási eljárást (ha kevés a memóriád vagy lassú a merevlemezed, akkor eltart egy darabig). Bármikor megszakíthatod az eljárást az ablak közepén lévô "Cancel Disassembly" gombbal. Ha az exe-t visszafordította, akkor nem látsz semmi "értelmes" szöveget, csak hülye jeleket. Ne aggódj, meg lehet változtatni a betűtípust. Kattints a "Disassemler" menüre, aztán a "Font"-ra és még a "Select Font"-ra. Most megválaszthatod a betűtípust amit a W32Dasm89-nél használni akarsz. Szerintem a legcélszerűbb az Arial. Változtasd meg a betűtípust. Most már az új betűtípussal van megjelenítve az asm-kód. Kattints még egyszer a "Disassembler/Font"-menüre és a "Save default Font"-ra (ha nem teszed meg, akkor legközelebb is meg kell változtatnod a betűtípust). Most már látod az asm-kódot. Nem hiszem, hogy sokat mond neked, hiszen nem ismered a parancsokat. Most kattints a "Strn Ref" (String Data Reference) gombra, amely a "Print" gomb mellett van. Egy ablak jelenik meg, amelyben láthatod az összes hibaüzenetet, amelyek az exe-ben találhatók. Emlékszel mit írt ki a WinRAR, ha rossz jelszavat adtál meg? Azt írta, hogy "Registration Failed".

Keresd meg a listában. Megvan? Dupla kattintás rá. A W32Dasm az asm-kódba oda pozícionál, ahol a program ezt a hibaüzenetet adja amikor a rossz jelszót adod meg neki. Ha jól csinálod, akkor valami ilyesmit kell látnod a

képernyőn:

:00413A8F 6A6A push 0000006A

:00413A91 E863640000 call 00419EF9

:00413A96 59 pop ecx

:00413A97 50 push eax

:00413A98 FF7508 push [ebp+08]

* R e f e r e n c e T o : U S E R 3 2 . M e s s a g e B o x A , O r d :

0 0 0 0 h |

:00413A9B E8120B0100 Call 004245B2

:00413AA0 33C0 xor eax, eax

:00413AA2 A358674200 mov dword ptr [00425758], eax

:00413AA7 A338564200 mov dword ptr [00425638], eax

:00413AAC A34C564200 mov dword ptr [0042564C], eax

:00413AB1 EB56 jmp 00413B09

* Referenced by a (U)nconditional or (C)onditional Jump at Adress:

<----------Ez kell nekünk |:00413A82(C) |

* P o s s i b l e S t r i n g D a t a R e f f r o m D a t a O b j - > "

Wi n R A R "

:00413AB3 68D86A4200 push 00426AD8

:00413AB8 FF359C644200 push dword ptr [0042649C]

* R e f e r e n c e T o : U S E R 3 2 . S e t Wi n d o wT e x t A , O r

d : 0 0 0 0 h

:00413ABE E86B0A0100 Call 0042452E

* P o s s i b l e R e f e r e n c e t o S t r i n g R e s o u r c e I D

= 0 0 0 4 8 : " n o r m a l "

:00413AC3 6A30 push 00000030

* P o s s i b l e R e f e r e n c e t o D i a l o g : A R C I N F O D L

G , C O N T R O L _ I D : 0 0 6 C , " "

Ez az az asm-kód, amit látsz, ha duplán a "Registration Failed"-re klikkelsz. Most már emlékszel, mit mondtam néhány sorral ezelôtt. Az asm fentrôl fut lefelé. Ez azt jelenti, hogy az a jne/je amit meg kell változtatnunk, valahol feljebb található. De honnan tudjuk, hogy hol? Megtehetnénk azt is, hogy mindent, amit látunk megváltoztatunk (próba és hiba) vagy használjuk a "Goto CD Loc" (Goto code location) gombot az ablak tetején. Rákattintunk és egy kis ablak jelenik meg. A jobb alsó részében van egy szöveg doboz "Code Offset (Hex)". Akkor nézzük csak az asm kódot. Az egyik sorba ezt a szöveget olvashatjuk: "* Referenced by a (U)nconditional or (C)onditional Jump At Adress:" és a következő sorban meg ott van egy cím amire szükségünk van "|:00413A82 (C)". Ez az a szám, amit be kell ütnünk az ablakba, vagyis 00413A82. Ennél a címnél megtaláljuk az ugrást, amely a hibaüzenethez visz minket, ahányszor csak rossz jelszavat ütünk be.

Kattintsunk az OK gombra. Most is csak vagy valahol az asm-kódban. A sorjelzô azon a soron van, amelyik minket mindig a hibaüzenethez küld. Egy jne (ugrás ha nem egyenlô) utasítás. A sorjelző zöldre váltott (csak az

ugrásoknál és a hívásoknál csinálja ezt). Most nézz az ablak aljára. Van ott egy sor, ami így néz ki:

Line:34985 Pg 467 of 998 Code Data @:00413A82 @Offset00013082h in

File:Winrar95.w32

Az egyedüli dolog, amire emlékeznünk kell az az @Offset mögötti szám. A szám a 00013082 (ha a sorjelző a jne-n van). Írd le magadnak (nem szükséges leírni a 000-t, elég ha a 13082 megvan). Ok, indítsd el a HIEW-ot

(nem kell bezárnod a W32Dasm-et). Mindegy, hogy a H.exe-t vagy a H95.exe-t indítod el. A HIEW-ban (mint a Norton Commanderben) tudsz lépkedni a könyvtárakban. Menj a WinRAR könyvtárba és kattints a WinRAR95.exe-re. Hmm nem tudod mi ez, ugye? Kattints az F4-re (a select mode ablak) és válaszd a

"decode"-ot. A kép megváltozik. Most már látod az összes jne/je/eax.. parancsot, kattints az F5-re. A bal felső sarokban most már be tudod ütni az @Offset számot (pár másodperccel ezelőtt leírtad). Mindegy, hogy beírod-e a 000-t is vagy csak a 13082-t. Írd be a 13082-t. A jne utasításnál vagy. Kattints az F3-ra (edit). Most már megváltoztathatod az értéket. Változtasd meg 75(jne)-ről 74(je)-re és kattints az F9 (update)-re. Kattints az F10-re.

Hát akkor most megváltoztattad a jne értékét. Kipróbálhatod, hogy működik-e. Indítsd el a WinRAR95.exe-t. A program elindult. Most csináld azt, amit már egyszer csináltál. Menj a regisztráláshoz és üss be egy nevet, meg jelszavat.

Kattints az ok-ra. Mi történt? Nincs többé hibaüzenet? Egy ablak jelenik meg és közli veled, hogy a regisztrálás megtörtént. A WinRAR meletti üzenet (Unregistered Version) ki lett ütve és a program regisztrálva van. Ok. Ez volt az egyik megoldás.

De van egy másik is. Az Unregistered státuszt másképp is ki tudjuk szedni. Indítsd el a még fel nem tört WinRAR95-öt és nézd meg ismét jól az üzenetet amely az (unregistered version). Ismét töltsd be a WinRAR95.w32-t a W32Dasm-el. Kattints a String Data Reference gombra. Keresd az "(unregistered version)"-t (pontosan (unregistered version)-nak kell lennie, mert kettő van belőle!). Na megtaláltad? Dupla kattintás rá. Most pedig ott vagy, ahol a program ezt a szöveget meg szokta jeleníteni. Mint ahogy az előzőnél is, ugyanazt kell csinálnod. Látod a "* Referenced by a (U)nconditional or (C)onditional Jump At Adress:" sort? Kattints a

"Goto code location" gombra és üsd be a számot, vagyis a 00418AAA-t és kattints az OK-ra. Azon a ponton vagy, ahol az asm-kód a szöveg kiírásához ugrik ha nincs regisztrálva. Ez is egy jne (ugrás ha nem egyenlő)

utasítás. Írd le az @Offset számot, ami 000180AA (elhagyhatod a 000-t). Menj a HIEW-ba nyisd meg a WinRAR95.exe-t, kattints az F4-re (decode), aztán az F5-re (goto), üsd be a 180AA-t aztán enter. A jne utasításnál vagy. Változtasd meg a jne-t je-re (75-öt 74-re), mentsd el és lépj ki a

HIEW-bôl. Emlékeztetőül annyi, hogy nem tudod úgy manipulálni az exe-t, hogy az közben windows alatt meg van nyitva vagy kapsz egy "error only read mode" hibaüzenetet. Most, hogy megváltoztattad az értékeket, kipróbálhatod, hogy működik e. Indítsd el a WinRAR95.exe-t és láthatod, hogy

az üzenet már nem létezik. Eltávolítottuk. Most, hogy nincs már semmilyen szöveg a WinRAR melett beüthetsz bármilyen nevet és jelszót. Ugyanezt kell a sima WinRAR-nál is csinálni. Ahányszor csak ezzel a fajta védelemmel állsz szemben ezt a módszert kell használnod. Megváltoztatod a jne/je-t je/jne-re. Vagy pedig nop-ot irsz a helyére.

 

Emlékezz az alapokra:

Mindig emlékezz az alapokra. Ha fel akarsz törni egy játékot vagy egy alkalmazást indítsd el és nézd milyen hibaüzenetet ír ki. Ha az egy windows hibaüzenetablak akkor a W32Dasm-el is feltörheted. Ha viszont

a program saját beépített hibaüzenete, akkor jobban teszed, ha a soft-ice -ot használod. Jegyezd meg a hibaüzenetet és csinálj másolatokat a start.exe-ről (ami indítja a progit). Egyet *.exx néven (ha valamit rosszul csináltál, vagyis a program hibás vagy nem indul, akkor visszaállíthatod az eredeti *.exx fileal) és egyet *.w32 néven (ezt a filet nyitod meg a W32Dasm-el). Ezek után fordítsd vissza a w32 kiterjesztésű filet a W32Dasm-el.

Ha visszafordítottad, akkor kattints a String Data References gombra és keresd meg a hibaüzenetet (azt is megteheted, hogy a search-re kattintva beütöd a keresendő hibaüzenetet például sorry vagy unable...) amit a program kiírt neked. Ha megtaláltad dupla kattintás rá. A Goto code location ablakban üsd be a"*Referenced by a (U)ncoditional or (C)onditional Jump At Adress:" utáni számot. Amikor a megfelelő parancsnál vagy írd le

az @Offset számát (az elejéről elhagyhatod a 0-kat). A HIEW-ban nyisd meg az exe-t. Kattints az F4-re aztán decode. Kattints az F5-re és írd be az @Offset számot (mindegy, hogy az elején beírod e a 0-kat vagy sem). Ha

ott vagy, ahol a jne/je/jmp/call utasítás is, akkor változtasd a jne-t je-re vagy a je-t jne-re vagy pedig a jmp/call utasítások helyére nop-ot írsz (a je/jne helyére is lehet nop-ot írni, de először próbáld meg csak az értéket változtatni). Mentsd el és lépj ki a HIEW-ból. Indítsd el a programot és nézd meg, hogy működik e. Ha nem működik, próbáld meg a nop-al vagy változtassál meg más értéket. Ha nem találod a Referenced by a

(U)nconditional or (C)onditional Jump At Adress: szöveget, akkor menj fel néhány sort és keresd a call/jmp/jne/je utasításokat.

 

Hogy használjuk a nop-ot:

Most elmagyarázom, hogyan is használd a nop műveletet. A nop="Nincs utasítás". Ha találsz egy call/jne/je/jmp utasítást a helyére nop-ot lehet írni. A következőket kell tudni a nop-ról: két szám számít egy byte-nak, ez azt jelenti, hogy ha van egy olyan sorunk, hogy E8992344 akkor ez már 4 byte, amit meg kell változtatni. E8 egy byte, a 99 is egy byte, a 23 is egy byte és a 44 is egy byte. Nop-al helyettesítve 90909090. Ne ess pánikba, ha HIEW-ban beütöd az elsô 90-et és egy sorral lejebb ugrik, még üsd be háromszor a 90-et és ments. A 7456 (je)-t és a 7589 (jne)-t is ki lehet cserélni 9090-re. Nem számít, hogy most jne/je/jmp/call utasítás. Valamikor a je/jne utasításokat F5848976 alakban is fogod látni (nem biztos, hogy erre szükséged lesz, de meg szeretném magyarázni, hogy mit tegyél ilyen hosszú je/jne utasításoknál) ilyenkor csak a 84-et változtathatod meg (a 84

olyan, mint a 74=je) 85-re és fordítva is (85-öt 84-re). Ez azt jelenti, hogy nem kell nop-al helyettesítened. Legtöbbször call ill. jmp utasítások helyett kell nop-ot használnod.

 

Befejezésül:

Itt a vége a cikkemnek. Biztosan kihagytam olyan dolgokat, amelyeket le akartam írni de majd a legközelebbiben leírom (talán).

ByteBurn üdvözletei: Mues_Lee,NetLeaDer,ByteFaker,insEOK'98,_Anubis_, LordRaiden,scamp,KingR-TLF,Anne,Linda,Laurie, az összes cracker csapatnak, az összes crackernek és az összes újoncnak, akik jó crackerek akarnak lenni. ÉS A DHR CSAPATNAK!

A cikk ByteBurn cikke alapján lett készítve.

skYro