hogyan törjünk fel egy programot

19
Hogyan törjünk fel egy programot ? avagy "Valahogy ezt is el kell kezdeni!" Készítette: Lukundoo [HPA] e-mail: [email protected] web: http://welcome.to/hpa Tartalom jegyzék: 1. Mi AZ a (crack) program feltörés? 2. MiÉRT tör fel az ember programot? 3. MiLYEN programot lehet feltörni? 4. MiKOR érdemes egy programot feltörni? 5. Mi KELL a feltöréshez? 6. HoL találhatók ezek a programok? 7. HoGYAN kezdjünk hozzá? 7. HoGYAN írjunk patch programot? 8. SZóMAGYARáZó, avagy angolul tudni kell! 9. BEVéGEZVE a NAGY Mű (KöszöNET meg ilyesmi.)!

Upload: ferenc-garbacz

Post on 11-Jun-2015

2.133 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: Hogyan törjünk fel egy programot

Hogyan törjünk fel egy programot ? avagy

"Valahogy ezt is el kell kezdeni!"

Készítette: Lukundoo [HPA] e-mail: [email protected] web: http://welcome.to/hpa Tartalom jegyzék: 1. Mi AZ a (crack) program feltörés? 2. MiÉRT tör fel az ember programot? 3. MiLYEN programot lehet feltörni? 4. MiKOR érdemes egy programot feltörni? 5. Mi KELL a feltöréshez? 6. HoL találhatók ezek a programok? 7. HoGYAN kezdjünk hozzá? 7. HoGYAN írjunk patch programot? 8. SZóMAGYARáZó, avagy angolul tudni kell! 9. BEVéGEZVE a NAGY Mű (KöszöNET meg ilyesmi.)! 1. Mi az a (crack) program feltörés? ------------------------------------ Program feltörés alatt azt értjük, hogy egy adott futtatható program bináris kódját úgy változtatjuk meg, hogy a program futtatható marad,

Page 2: Hogyan törjünk fel egy programot

csak néhány funkció amit nem lehetett elérni benne, a módosítás után elérhető lesz. 2. MiÉRT tör fel az ember programot? ------------------------------------ - unja a program hülye shareware ( *01) tiltásait, dialógusait, - érdekli a windows alatti assembly (ilyen NiNCS, vagy csak én nem tudok róla?!?!), - unatkozik, és szeretne valami olyat csinálni, amivel másoknak is jót tesz (Magyarul szórakozásból!). 3. MiLYEN programot lehet feltörni? ----------------------------------- Csak olyan programot, amiben benne van a letiltott funkció, de csak egy adott kód beírása, vagy adott file megléte esetén működik. 4. MiKOR érdemes egy programot feltörni? ---------------------------------------- Általában olyan programot érdemes feltörni, amihez még nincs crack (*02) program, vagy nincs még hozzá kulcsgenerátor (*3), vagy maga a regisztrációs kulcs (*04). 5. Mi KELL a feltöréshez? ------------------------- A legfontosabb program, ami minden cracker-nek (*05) meg kell hogy legyen a NuMega cég SoftIce, nevű DOS, Windows 3.11, Windows95, Windows95 /9X futó debugger (*06) programja. Nem hiányozhat még az URSoft WDasm32 nevű Windows 95 alatt futó dissasembler ( *07)

Page 3: Hogyan törjünk fel egy programot

programja. Szintén jól jöhet Liu Tao Tao "TR for Win95" debugger programja. Ha a program be van tömörítve valamilyen .EXE tömörítővel (*08) vagy .EXE kódolóval (*09) akkor nagy segítség lehet a G-ROM és társai által fejlesztett ProcDump32 v1.3 univerzális .EXE kitömörítő. Jól jöhet a Windows9X rendszer alatt a következő két program: a Shetef Solution cég Win-eXpose-Registry nevű programja, ami a Windows rendszer Registry (*09) állomány módosítását, olvasását, hozzáférését naplózza, és a Yonath Dascalu nevéhez kötödő Win-eXpose-I/O nevű program, ami a Windows9X rendszer alatt történő mindennemü I/O müveletet (lemez írást, olvasást, nyomtatást, komunikációt) naplózza. Ha Visual Basic -ben irták a programot, akkor a DoDi's Dissasembler nevű programja kell, ami Visual Basic v3.0 .EXE állományokat tud visszafejteni Basic forráskóddá. A v4.0 VB -hez is van visszafejtő program, de az sajnos nem olyan jó és megbízható mint az előző! MS-DOS alatt csak egy debugger, kell pl: a Borland cég Turbo Debugger vagy a NuMega cég SoftIce v2.28 -as verziószámú DOS -os debuggere. És természetesen megtalálható DOS alatt is dissasembler ez a Sourcer nevű program. Található univerzális .EXE kitömörítő program is ennek pedig JVP a készítője és TEU a neve. Még meg kell említenem egy elmaradhatatlan segítőtársakat, a hexa szerkesztőket. Win9X alatt

Page 4: Hogyan törjünk fel egy programot

kíválóan alkalmazható a HexWorkshop nevű program, DOS alatt pedig ajánlott a HIEW nevű program használata. 6. HoL találhatók ezek a programok? ----------------------------------- SoftIce: http://www.numega.com WDasm32: http://www.ursoft.com TRW95: http://www.netease.com/~ayliutt Turbo Debugger: http://www.borland.com????? ProcDump32: http://www.suddendischarge.com Sourcer: http://??? TEU: http://members.xoom.com/teu WxR95: http://www.shetef.com WxI95: http://??? HexWorkShop: http://www.bpsoft.com HIEW: ftp://ftp.bke.hu/pub/mirrors/sac/utilprog/hievX.ZIP 7. HoGYAN kezdjünk hozzá? ------------------------- Az első példám egy jól ismert program, a QuickView Plus 4.0 - ás verziója. Ezt a programot felesleges debuggolni, mert egyszerübb a WDasm32 programot használva feltörni a programot. Elöször el kell indítani az ORDER32.EXE programot, ami a Quick View Plus program könyvtárában van. Rá kell kattintani a "Single User License" gombra, utána rá kell kattintani az "ACCEPT" -re, és el kell fogadni a

Page 5: Hogyan törjünk fel egy programot

telefonon keresztüli kódot ("UNLOCK BY PHONE"). Ezután megjelenik egy ablak, ahol be kell irni a kódot. Ide kell irni bármilyen kódot, ami eszedbe jut (Én mindig azt szoktam hogy: !HPA!). Megjelenik egy hiba- üzenet, miszerint a kód hibás. Ezt a kódot fel kell irni valahova, vagy meg kell jegyezni, mert még szükségünk lesz rá. Ezután rá kell kattintani a CANCEL gombra, és kilépni a programból. Miután kiléptünk a programból, csinálni kell két másolatot a programról (ORDER32.EXE). Pl.:ORDER32_.EXE, és ORDER32.EX2. Ezután három file -unk van. Az első lesz az eredeti, a második lesz az amit módosítunk, a harmadik pedig az, amit a WDasm32 -vel dolgozunk. El kell indítani a WDasm32.EXE-t, és a "Dissasembler" menüben levő "Open file to dissasemble" menüpont- ban be kell hívni az ORDER32.EX2 exe-t. Miután visszafejtette a kódot rá kell kattintani a " String Data Reference" gombra. Miután bejöttek a string referenciák, meg kell keresni az előzőekben említett hiba szöveget "You have entered an incorrect code. Please check your entry". Erre rá kell kattintani, és a megfelelő kódrészletre ugrik a program. Be kell zárni a SDR ablakot. Miután oda ugrott a program, akkor ha minden igaz, ezt fogjuk látni: * Possible reference to String Resource ID=00041: "You have entered.. :004049F8 6A29 push 00000029 :004049FA FF353CCE4000 push dword ptr [0040CE3C] Ezután meg kell keresni azt a pontot, ahol valamilyen ellenörzés van.

Page 6: Hogyan törjünk fel egy programot

Pl.: CMP compare összehasonlítás JNE jump if not equal ugrás ha nem egyenlő JE jump if equal ugrás ha egyenlő TEST teszt tesztelés Felfele kell menni és figyelni, hol látunk ilyen utasítás. Nem is messze az elöbbi ponttól meg is találjuk ezt: :004049CD 755A jne 00404A29 * Possible reference to String Resource ID=00032: "You must select... :004049CF 6A20 push 00000020 ... ... * Possible reference to String Resource ID=00040: "Unlock Error" Mostmár tudjuk hogy hol van az a pont, ahol ellenörzi a kódunkat, és ha rossz, akkor ugrik. Ezután már csak annyit kell tennünk, hogy az ugrást ki kell cserélni (gyengébbek kedvéért JNE-t JE -re). Ellenörizd, hogy a zöld csik a :004049CD 755A jne 00404A29 sztringen van e, hogyha ott van, akkor látni fogjuk, az offset - ét a kódnak alul körülbelüül így: @Offset 00003DCDh. Mostmár azt is tudjuk hogy hol kell módosítani az file -unkat. Be kell hívni egy jó HEXA szerkesztőt, pl.: HexWorkShop -ot. A HWS - ba behívjuk az ORDER32_.EXE nevű file-t, és az Edit menü Goto.. menüpontja segítségével odamegyünk az adott offszetre. Ott ezt fogjuk látni. 00003DCD 755A 6A20 FF15 .... .... Tudni kell hogy a JNE hexa kódja 75, a JE kódja 74, a JMP kódja EB. Most ki kell cserélnünk a 755A -t 745A -ra. Ez így jó is lenne, mert a program ha hibás adatot írunk be, akkor jónak fogja tekinteni, és

Page 7: Hogyan törjünk fel egy programot

elfogadja. De mi van, hogyha esetleg késöbb hozzájutunk egy jó kódhoz? Tehát nem feltételes ugrásra kell kicserélni, hanem feltétel nélkülire. Ezt úgy tehetjük meg, hogy a 755A -t EB5A -ra cseréljük. Ezután a File menü Save menüpontjára megyünk, és elmentjük a változtatásokat. Ezután a program mindig arra a pontra fog ugrani, ahol elfogadja a kódunkat, legyen az jó, vagy rossz kód. Ha most elindítjuk az ORDER32_.EXE állományt, és beütünk akármilyen kódot, akkor a program elfogadja és gratulál nekünk. Ime, feltörtünk egy programot kb. 5 perc alatt. Ezután már csak közzé kell tenni a nagy nyilvánosságnak, hogy mi csináltunk egy ilyen feltörést. De ezt hogyan csináljuk ? Ugyebár nem lehet azt mondani , hogy : " Emberek, a Quick View Plus v 4.0 programot úgy lehet feltörni, hogy megkeresed a 00003DCD offszet címet az ORDER32.EXE -be, és kicseréled azt a X byte Y byte -ra! ". Hát ez eléggé hülyén hangzik! Van ennél sokkal szebb megoldás is. Irni kell egy patch (*10) programot. Én általában assembly -be írom meg, de most az egyszerűség kedvéért Turbo Pascal nyelven készítjük el a patch programot ( Pár érv, ami miatt a Pascal nyelvre voksolok: Sok embernek megvan, egyszerű a file kezelés, gyorsan fordít, szeretem!). Természetesen egy jól megírt ASM program ezerszer jobb, de sok ember nem ért hozzá annyira, vagy lusta leülni , és assembly kódot pötyögni két napon keresztül !

Page 8: Hogyan törjünk fel egy programot

7. HoGYAN írjunk patch programot? --------------------------------- Ime a Turbo Pascal forráskód: Program QuickViewPlus_patch; Var F:File; B:Byte; Begin WriteLn('QuickView Plus v4.0 crackpatch by Lukundoo [HPA]'); Assign(F,'ORDER32.EXE'); (*Megnyitjuk a file-t.*) {$i-} ReSet(F,1); (*Itt nyitjuk meg... :)*) {$i+} If IOResult<>0 Then (*Ha nem sikerült megnyitni...*) Begin WriteLn('_ the file ORDER32.EXE not found!'); Halt; (*...akkor kilépünk!*) End; WriteLn('_ searching invalid bytes... ;P'); Seek(F,$3DCD); (*Odaugrunk a file-ban a 3DCD offszetre...*) B:=$EB; (*B értéke az JMP utasítás lesz*) BlockWrite(F,B,SizeOf(B)); (*...és beleírjuk az EB hexa kódot!*) Close(F); (*Bezárjuk a file-t!*)

Page 9: Hogyan törjünk fel egy programot

WriteLn('_ done!'); End. Ezt a forráskódot lefordítva kapunk egy kb. 3200 byte -os kódot, amit betömörítve kb. 2000 byte -ra össze lehet zsugorítani. Ez egy elég kellemes méret, de ezt még lehet fokozni! Mivel sok időm volt, így az assembly kódot is idebiggyesztem: .8086 .model tiny assume cs:code,ds:code,es:code segment code org 100h start: ; itt indul a program mov dx,offset intro mov ah,9 int 21h ; kiiratjuk a kezdő szöveget mov ax,3d02h mov dx,offset fileName ; megnyitjuk a file-t int 21h mov handle,ax cmp ax,02h je filedontexist ; ha nem sikerült megnyitni akkor... write: ; módosítjuk a file-t mov bx,handle

Page 10: Hogyan törjünk fel egy programot

mov cx,0000h mov dx,3DCDh ; odamegyünk a file-ban a 3DCD offszetre mov ax,4200h int 21h mov cx,patchl mov dx,offset patchb ; és beleírjuk a EB hexa kódot mov ah,40h mov cx,01h int 21h mov dx,offset cracked mov ah,9 int 21h ; kiirjuk a záró szöveget exit: ; ...kilépünk mov ah,3eh ; de elötte bezárjuk a file-t int 21h mov ax,4c00h ; és itt lépünk ki int 21h filedontexist: mov dx,offset notfound ; ...kiirjuk a szöveget és... mov ah,9 int 21h

Page 11: Hogyan törjünk fel egy programot

jmp short exit patchl equ 6 ; kell egy kis memóriát lecsippenteni handle dw ? ; file kezelő (WORD típusú) intro db "QuickView Plus v4.0 crackpatch by Lukundoo [HPA]$" filename db "ORDER32.EXE",0 ; a file neve notfound db 0dh,0ah,"_ the file ORDER32.EXE not found!$" cracked db 0dh,0ah,"_ done!$" patchb db 0EBh,0 ; hexa EB amit beleírunk a file-ba ends code ; lezárjuk a kódszegmens-t end start ; befejezzük a progit Ha ezt lefordítjuk TASM.EXE /m50 PATCH.ASM majd , TLINK /t PATCH.OBJ, akkor szembeötlő lesz a különbség az előző programmal szemben, mert ez a program lefordítva csupán 187 byte hosszú, amit már nem érdemes betömöríteni, mert nagyobbb lesz mint az eredeti. A különbség a Pascal és az Assembly program között csupán 3000 byte. Tehát levonva a konklúziót érdemes patch programokat assembly nyelven megirni. Ezekben a programokban nincs file ellenörzés! Illik beleirni egy CRC vagy valamilyen hasonló ellenörzést, de ha mást nem, akkor legalább egy file méret ellenörzést, hogy egy ujjabb verzió esetén ne csináljon a patch programunk galibát. Ugyanis egy másik programban már biztos, hogy nem ugyan ott lesz az a kicserélendő byte, ahol most van. Pascal nyelvben elég könnyű file -hossz ellenörzést végezni:

Page 12: Hogyan törjünk fel egy programot

FS:=FileSize(F); If FS<>Eredeti Then WriteLn('_ filesize does not match!'); Assemblyben már egy kicsit nehezebb: filelength proc near mov ah,42h ; file méretének lekérdezése mov al,02h mov bx,[FileHandle] ; file kezelő BX -be xor cx,cx ; CX -et nullázuk xor dx,dx ; DX-et is int 21h mov word ptr [filelengthlow],ax ; fll-ba a file méret alsó byte-ja mov word ptr [filelengthhigh],dx ; flh-ba pedig a felső byte-ja mov ax,word ptr [bp+si] ; ax-be a nyitott file mérete cmp word ptr [filelengthhigh],ax ; flh-t összehasonlítjuk AX-el jne hiba ; ha nem jó akkor ugrunk a hibaüzenetre add si,2 mov ax,word ptr [bp+si] cmp word ptr [filelengthlow],ax ; fll-t hasonlítjuk most össze jne hiba ; nem jó, ugrunk add si,2 ret ; vége a procedurának wrongsize db "_ filesize does not match!",13d,10d,"$" hiba:

Page 13: Hogyan törjünk fel egy programot

mov ah,9 mov dx,offset wrongsize ; kiirjuk a hibaüzenetet int 21h jmp exit ; ugrunk a kilépésre Hát ennyit még illett volna odabigyeszteni. 8. SZóMAGYARáZó, avagy angolul tudni kell! ------------------------------------------ (*01) Shareware: Olyan program, amit a szerzö elérhetővé tesz mások számára, kipróbálás céljára, majd egy adott idő után ( általában 30 nap után) a programot (*11) regisztrálni kell, vagy le kell törölni a gép háttértárolójárol. Általában ezek a programok az indulásukkor, vagy valamilyen fontosabb művelet elvégzése elött figyelmeztetik a felhasználót arra, hogy a program shareware. Gyakran a program csak akkor válik teljes értékűvé, hogyha a program készítőjétől megvásárolják a regisztrációs - kódot, - kulcsot, - file -t. Gyakran kihagynak fontosabb funkciókat a programból , amit csak a teljesértékűvé válás után tud a felhasználó elérni. (*02) crack: Azaz törés, feltörés. Ezt a szót használjuk, hogyha egy programmal úgy módosítunk egy másik programot, hogy az teljesértékűvé válik , nem lesz benne semilyen shareware limitáció, korlátozás. (*03) kulcsgenerátor: olyan rövid program , ami egy adott program regisztrációs kulcsát (*04), jelszavát tudja generálni megadott névből, számból, vagy egyéb adatból. Ez a visszafordított folyamata

Page 14: Hogyan törjünk fel egy programot

annak , ahogy a program ellenörzi a regisztrációs kulcsot, szériaszámot. (*04) regisztrációs kulcs: olyan szám vagy / és betűsorozat, amit a program készítője generál adott értékekből, pl.: Név, Cím, E-mail. Ez a kód egyénspecifikus, nagyon ritka, hogy két embernek ugyanaz legyen a kódja. (*05) Cracker: Azaz törő, feltörő. Olyan ember vagy csoport, aki(k) programokat visszafejt(enek), módosít(anak), majd azt a programot,ami módosítja az eredeti programot, ingyenesen a köznek felajánlja. :) (*06) debugger: Azaz bogártalanító. :). Olyan program,amivel egy kész programot lehet futtatni, miközben a program assembly forráskódját lehet látni, módosítani futásidőben , memóriaterületet lehet megtekinteni, a regiszterek lehet módosítani. Általában a program eredeti forráskódját is be lehet hívni, és lépésenként futtatni, majd a fellépő hibát javítani. (*07) disassembler: Azaz visszafejtő. Olyan program, ami egy bináris állományt lefordít assembler kódra. Szántszándékkal irtam bináris -at , ugyanis ezek programok elvileg bármit vissza tudnak fejteni assembly forráskóddá. Kezdve a programoktól, a digitális hangokon keresztül a M$ -Word dokumentumokig. Mindig olyan assembly kódot generálnak, ami lefordítva ugyan azt a bináris állományt állítja elő. (*08) EXE tömörítés: olyan eljárás amely során a futtatható programot betömörítik, de tömörítés után is futtatható marad. Ezt úgy oldják meg, hogy a futtatható program elejére vagy végére betesznek egy olyan kis ( általában assembly -be irt ) programot, ami a program

Page 15: Hogyan törjünk fel egy programot

indításakor lefut és kitömöríti a rendes programot a memóriába, majd a regisztereket úgy állítja be, mintha az eredeti program futna, majd utána átadja a vezérlést az eredeti programnak. Miután az eredeti program lefutott, kitörli magát a memóriából (Ez nem mindig csinálják meg a EXE tömörítő program írói!). Legismertebb EXE tömörítők: LZEXE, aPACK, UCEXE, PKLITE, UPX, PE -PACK, NeoLite, Petite. Természetesen léteznek COM program tömörítők is, a működési elvük hasonló az előzőekben leírtakhoz, csak a COM tömörítőknek nem kell foglalkozni a kód relokálásával. Ismertebb .COM tömörítők: 624, COMPACK, TinyProg. (*09) EXE kódolás: az eljárás hasonló az EXE tömörítéshez, csak itt nem tömörítik a programot, hanem valamilyen bonyolult eljárással elkódolják úgy, hogy a program futtatható marad. Nagyon gyakran az ilyen kódoló programokban megtalálható az úgynevezett antidebug (*11) ,és antitracer (*12) kódok is. Legismertebb EXE kódoló programok: GA, PROTEXE , EXECRYPT, HackStop, PE-Prot , PE-Crypt, PE-Guard. Természetesen léteznek COM kódolók is, ime néhány: COMCrypt, XcomOR, Mess, BinLock, Protect EXE/COM, iLUCRYPT. (*10) patch program: Azaz foltozó program. Ez egy kicsi pár száz byte hosszú programocska (általában, de már láttam 800 kb -os patch progit is!), amit a cracker ir, és módosítja azokat a byte-okat a feltörendő file -ban, ami miatt a program shareware -ként működik. Gyakran lekódolják ezeket a programokat valamilyen COM kódolóval, hogy senki- se tudja átirni a saját nevére. Mostanában látni patch generáló

Page 16: Hogyan törjünk fel egy programot

programokat is, aminek meg kell adni az eredeti és a tört file nevét, a program összehasonlítja őket, és készít egy COM állomány, ami már rögtön indítható is. Sőt,lehet olyan programot is találni, ami pascal , assembly, basic, vagy c++ forráskódot generál, és csak le kell fordítani és kész van a saját crack program. Ilyen pl.: DIFF v1.4, HPA_MCRK.EXE (Saját fejlesztés! Ha valakit érdekel, akkor írjon egy levelet nekem és elküldöm.). (*11) antidebug kód: Azaz debug ellenes kód. Olyan kód, ami ha valaki debuggolni akarja a programot, akkor észleli, és vagy valamilyen hibaüzenettel leáll, vagy lefagyasztja a számítógépet. Sok ilyen kód forog közkézen, a legismertebb a Christoph Gabler által készített INSIDER.FAQ, valamint Ralph Roth által készített ANTIDBG.FAQ (Ebben nem vagyok teljesen biztos, hogy ez a neve!). (*12) antitracer kód: ugyan az, mint az antidebug kód, csak tracer -eléskor jön elő. 9. BEVéGEZVE a NAGY Mű (KöszöNET meg ilyesmi.)! ----------------------------------------------- Szeretnék köszönetet mondani azoknak az embereknek, akik ebben a doksiban névszerint szerepelnek, vagy csak programjaik szerepelnek: Molnár László (Az UPX program fejlesztője.) Markus F.X.J. Oberhumer (Szintén az UPX program fejlesztője.) Riz la+ és Stone (A ProcDump fejlesztői) Joergen Ibsen (Az aPACK fejlesztője) Az egész HPA csapatnak, akik olyan lusták mint a bűn!

Page 17: Hogyan törjünk fel egy programot

És mindenki másnak, aki felismerte a programja nevét ebben a doksiban. Lukundoo [HPA]