Az ollydbg program használata. Kiválasztjuk az OllyDbg legérdekesebb bővítményeit

NAK NEK Hogyan indítsunk el egy hibakereső munkamenetet

A legegyszerűbb módja az OllyDbg elindítása, válassza a Fájl -> Megnyitás lehetőséget, és válassza ki a hibakeresni kívánt programot. Ha ez a program parancssori paramétereket igényel, írja be azokat a párbeszédpanel alján található mezőbe, vagy válassza ki a korábbi munkamenetekben használt paramétersorok egyikét.

Az OllyDbg képes elvégezni az önálló DLL-ek hibakeresését. Ebben az esetben az OllyDbg egy kis alkalmazást hoz létre és futtat, amely betölti a könyvtárat, és kérésére meghívja az exportált függvényeket.
Ha szeretné újraindítani az utoljára hibakereső programot, egyszerűen nyomja meg a Ctrl+F2 billentyűkombinációt (ez a gyorsbillentyű a program újraindításához), és az OllyDbg ugyanazokkal a paraméterekkel indítja el. Alternatív megoldásként válassza a Fájl menüt, majd a programot az előzményekből. A Windows Intézőből egy végrehajtható fájlt vagy DLL-t is húzhat, és az ikonját az OllyDbg-re húzhatja.

Természetesen az OllyDbg indításakor a parancssorban megadhatjuk a hibakeresés alatt álló program nevét és paramétereit. Létrehozhat például egy OllyDbg-re mutató asztali parancsikont, válassza a Tulajdonságok lehetőséget, lépjen a Program parancsikonra, és adja hozzá a program nevét a parancssorhoz. Minden alkalommal, amikor duplán kattint erre a parancsikonra, az OllyDbg automatikusan elindítja a programot. Kérjük, vegye figyelembe, hogy a DLL-ek nem támogatják a parancssort.

Az OllyDbg-t egy futó folyamathoz csatolhatja. Válassza a Fájl -> Csatolás lehetőséget, és válasszon ki egy folyamatot a listából. Vegye figyelembe azonban, hogy az OllyDbg bezárása után ez a folyamat is kilép. Soha ne próbáljon rendszerfolyamathoz csatlakozni; ez az operációs rendszer összeomlásához vezethet. (Az igazság kedvéért, a legtöbb esetben az operációs rendszer nem engedi, hogy érzékeny folyamatokhoz kapcsolódjon).

Az OllyDbg „just-in-time” JIT hibakeresőként működhet. Ehhez regisztráció szükséges a rendszerleíró adatbázisban. Válassza az Options -> Just-in-time hibakeresés lehetőséget, majd a megjelenő párbeszédpanelen válassza az "OllyDbg just-in-time debugger létrehozása" lehetőséget. Mostantól, amikor egy alkalmazás összeomlik, a rendszer megkérdezi, hogy szeretné-e hibakeresni az alkalmazást. Ezután az operációs rendszer elindítja az OllyDbg-t, amely közvetlenül azon a ponton áll le, ahol a hiba bekövetkezett. Vagy ha úgy döntött, hogy megerősítés nélkül csatlakozik, az OllyDbg minden kérdés nélkül elindul. Az előző „just-in-time” hibakereső visszaállításához kattintson a megfelelő gombra az említett párbeszédablakban, és kész.

Van egy másik lehetőség az OllyDbg hozzáadására a Windows Intéző futtatható fájljaihoz társított helyi menühöz. (Ez az ötlet JochenGersterhez tartozik). Az OllyDbg főmenüjében válassza az „Opciók|Hozzáadás az Intézőhöz” lehetőséget, majd kattintson az „OllyDbg hozzáadása a Windows Intéző menüjéhez”. Ezután jobb gombbal kattintson a futtatható fájlra vagy a DLL-re, és válassza az OllyDbg lehetőséget a menüből. Ez az opció 4 kulcsot hoz létre a rendszerleíró adatbázisban:

HKEY_CLASSES_ROOT\exefile\shell\Open with OllyDbg
HKEY_CLASSES_ROOT\exefile\shell\Open with OllyDbg\command
HKEY_CLASSES_ROOT\dllfile\shell\Open with OllyDbg
HKEY_CLASSES_ROOT\dllfile\shell\Open with OllyDbg\command

Az OllyDbg képes hibakeresni a konzolalkalmazásokat (szöveg alapú).

Az OllyDbg nem tudja hibakeresni a .NET-alkalmazásokat. A .NET-programok pszeudokódból állnak, amelyet a Windows menet közben értelmez vagy natív 86-os parancsokká állít össze.

Ne feledje, hogy ha Windows NT, 2000 vagy XP rendszert használ, valószínűleg rendszergazdai jogokkal kell rendelkeznie a programok hibakereséséhez.

Töréspontok (ellenőrző pontok)

Az OllyDbg többféle töréspontot támogat:

- Rendszeres töréspont, a megállítani kívánt parancs első bájtja egy speciális INT3 (Debugger Trap) paranccsal lesz helyettesítve. Ezt a töréspontot úgy állíthatja be, hogy a Disassembler panelen kiválasztja a kívánt parancsot, és megnyomja az F2 billentyűt, vagy a helyi menüből. Ha másodszor is megnyomja az F2-t, a töréspont törlődik. Vegye figyelembe, hogy a program leáll, mielőtt végrehajtaná a parancsot a beállított törésponttal. A beállítható INT3 töréspontok száma korlátlan. Amikor bezárja a hibakereső programot vagy a hibakeresőt, az OllyDbg automatikusan lemezre menti a töréspontokat. Soha ne próbáljon ilyen típusú töréspontot beállítani adatokon vagy parancsok közepén! Az OllyDbg figyelmezteti Önt, ha egy kódszakaszon kívül próbál töréspontot beállítani. Ezt a figyelmeztetést a Biztonsági beállításoknál kapcsolhatja ki. Egyes esetekben a hibakereső beillesztheti saját ideiglenes INT3 töréspontjait.

- Feltételes töréspont(Shift+F2) - egy szokásos INT3 töréspont hozzá tartozó feltétellel. Amikor a hibakereső találkozik ezzel a törésponttal, kiértékeli a feltételt, és ha az eredmény nem nulla, vagy a feltétel érvénytelen, leállítja a program hibakeresését. A helytelen feltételes töréspont okozta túlcsordulás valószínűsége azonban nagyon magas (főleg az operációs rendszer késleltetése miatt). A Windows NT alatt működő PII 450-en az OllyDbg másodpercenként akár 2500 hamis feltételes töréspontot dolgoz fel. A feltételes töréspont fontos esete a Windows-üzeneteknél való megállás (például a WM_PAINT). Erre a célra használhatja az MSG pszeudováltozót a paraméterek megfelelő értelmezésével együtt. Ha az ablak aktív, tekintse meg az alábbi üzenettörési pontot.

- Feltételes töréspont felvétellel(Shift+F4) - feltételes töréspont, amely képes egy ismert függvény egyes kifejezéseinek vagy paramétereinek értékét regisztrálni minden alkalommal, amikor a töréspont aktiválódik, vagy ha egy beállított feltétel teljesül. Például beállíthat egy írási töréspontot bizonyos ablakeljárásoknál, hogy naplózza az eljárás összes hívását (CALL), vagy csak a fogadott WM_COMMAND üzenetek azonosítóit, vagy beállíthatja a CreateFile hívásra, és rögzítheti a csak olvasható fájlok nevét, stb. A naplózási töréspont ugyanolyan gyors, mint a feltételes töréspont, és minden bizonnyal sokkal könnyebb átnézni néhány száz üzenetet egy naplóablakban, mint néhány százszor megnyomni az F9 billentyűt. Így az állapotának megfelelőbb értelmezést választhat.

Beállíthat egy számlálót – egy olyan számlálót, amely minden leállítási feltétel teljesülésekor csökken. Ha a csökkentés előtti passzok száma nem nulla, az OllyDbg folytatja a végrehajtást. Vegyünk egy ciklust, amely 100-szor (tizedes) fut. Tegyük a töréspontot középre, és állítsuk be az értéket 99-re (tizedes). Az OllyDbg az utolsó iterációnál megszakad.

Ezenkívül a feltételes naplózási töréspont lehetővé teszi egy vagy több parancs kiadását a bővítményeknek. Ez lehet például egy kérés a parancssori beépülő modulhoz, hogy módosítsa a regiszter tartalmát és folytassa.

- Töréspont üzenetek- ugyanaz, mint a töréspont írási feltétellel, azzal a különbséggel, hogy az OllyDbg automatikusan létrehoz egy feltételt, amely lehetővé teszi, hogy megszakítson bizonyos üzeneteket (például WM_PAINT) az ablakeljárás belépési pontján. Windows dobozba telepítheti.

- Nyomkövetési töréspont(Nyomkövetési töréspont) – az egyes megadott parancsokon beállított INT3 töréspontok kritikus esete. Ha találati nyomkövetést végez, a töréspont eltávolításra kerül, és a cím átadottként lesz megjelölve a parancs elérése után. Ha futási nyomkövetést használ, az OllyDbg bejegyzést ad a nyomkövetési naplóhoz, és a töréspont aktív marad .

- Memória töréspontja. Az OllyDbg memóriánként csak egy töréspont beállítását teszi lehetővé. A CPU ablak Disassembler vagy Dump paneljén kiválaszthat egy memóriarészt, és a helyi menü segítségével állíthat be egy töréspontot a memóriában. Az előző memóriatöréspont, ha volt, automatikusan törlődik. Két lehetőség közül választhat: megszakítás memóriaeléréskor (olvasás, írás vagy végrehajtás a memóriában), vagy megszakítás csak íráskor. A töréspont beállításához az OllyDbg módosítja a lefoglalást tartalmazó memóriablokkok attribútumait. A 80x86-kompatibilis processzorokon a memória elosztása és védelme 4096 bájtos blokkokban történik. Ha csak egyetlen bájtot is kiválaszt, az OllyDbg-nek a teljes blokkot védenie kell. Ez sok téves riasztáshoz vezethet hatalmas túlcsordulás mellett. Óvatosan használja ezt a típusú töréspontot. Egyes rendszerfunkciók (különösen Windows 95/98 alatt) a program hibakeresése lefagyását okozzák, ahelyett, hogy hibakeresési eseményt generálnának a védett memória elérésekor.

- Hardveres töréspont(csak Windows ME, NT, 2000 vagy XP alatt érhető el). A 80x86-kompatibilis processzorok 4 hardveres töréspont beállítását teszik lehetővé. A memóriatöréspontokkal ellentétben a hardveres töréspontok nem lassítják a végrehajtási sebességet, hanem legfeljebb 4 bájtot takarnak le. Az OllyDbg hardveres töréspontokat használhat az INT3 helyett a kód végrehajtásakor vagy beolvasásakor.

- Egyszeri memória-hozzáférési megszakítás(Single-shot break on memory access) (csak Windows NT, 2000 és XP alatt érhető el). Beállíthatja a Memória ablakban egy teljes memóriablokkon a helyi menüből vagy az F2 megnyomásával. Ez a töréspont különösen akkor hasznos, ha hívást szeretne fogadni vagy visszatérni valamelyik modulhoz. A leállítást követően a töréspont eltávolításra kerül.

- A normál nyomkövetés leállítása(Nyomkövetés futtatásának szüneteltetése) (Ctrl+T) – olyan feltételek beállítása, amelyeket a futási nyomkövetési folyamat minden egyes lépésében ellenőriz a rendszer. Leállíthatja a futási nyomkövetést, ha az EIP egy másik tartományba lép vagy elhagyja, vagy ha egy feltétel igaz, vagy ha egy parancs megfelel a megadott minták egyikének, vagy ha egy parancs gyanús, vagy meghatározott számú parancs követése után . Kérjük, vegye figyelembe, hogy ez az opció jelentősen (akár 20-ra) lelassíthatja a futási nyomvonal sebességét.

Az OllyDbg bizonyos hibakeresési eseményeknél is leállíthatja a program végrehajtását, mint például egy DLL betöltése vagy eltávolítása, egy szál indítása vagy leállítása, vagy amikor a program hibakeresési karakterláncot küld.

Lerak

A Dump ablak a memória vagy egy fájl tartalmát jeleníti meg. Több konkrét formátum közül választhat: bájt, szöveg, egész, float, cím, szétszerelés vagy PE fejléc.

Minden dump ablak támogatja a biztonsági mentési, keresési és szerkesztési funkciókat. A CPU ablak Dump ablakterülete lehetővé teszi jelölések meghatározását, töréspontok beállítását a memóriában, adathivatkozások keresését a végrehajtó kódban, valamint a kiválasztott memória megnyitott képét egy végrehajtható fájlban (.exe vagy .dll). A Dump menü csak az elérhető parancsok relatív készletét jeleníti meg.

Ha rendelkezésre áll biztonsági másolat, kattintson a panelen a Cím/Biztonsági mentés lehetőségre, hogy a megjelenítési módot a biztonsági mentés és a normál nézet között váltson. A panel többi gombja lehetővé teszi a dump módok megváltoztatását.

A Disassembler ablakhoz hasonlóan a Dump a meglátogatott memóriahelyek hosszú történetét tárolja. Az előzmények között a "+" vagy a "-" gomb megnyomásával lépkedhet.

Az adatok görgetéséhez tartsa lenyomva a Ctrl billentyűt, és nyomja meg a fel/le nyilakat.

Modulok

A Futó modulok ablak (billentyűparancs: Alt+E) felsorolja a hibakeresési folyamat által jelenleg betöltött összes modult. Ez az ablak hasznos információkat is megjelenít, mint például a modul mérete, a bejegyzés címe, a modul verziója vagy a végrehajtható elérési út. Egyes információkat, mint például a decimális modulméret, a belépési pont szimbolikus neve stb., általában elrejti a rendszer. Az adatok megtekintéséhez növelje meg a megfelelő oszlopok szélességét. A helyi menü a következő lehetőségeket támogatja:

Aktualizálás – újraellenőrzi a modulokat, és eltávolítja a kiemeléseket az új modulokból. Legtöbbször az OllyDbg gondoskodik magáról.

Memória megtekintése – Megnyitja a Memória ablakot, és a megjelenített modulhoz tartozó első memóriablokkhoz görget.

Kód megtekintése a CPU-ban - megnyitja a modul végrehajtható kódját a Disassemblerben.

Belépés követése – Követi egy modul belépési pontját a Disassemblerben

Adatok kiíratása a CPU-ban – megnyitja a moduladatok szakaszt a CPU Dump-ban.

Nézet nevek (Ctrl+N) – Megjelenít egy táblázatot, amely tartalmazza az aktuális modulban meghatározott vagy használt összes nevet (export, import, könyvtár, felhasználó által meghatározott).

Jelölje meg rendszer DLL-ként
Megjelölés nem rendszer DLL-ként – A kiválasztott modult rendszerként vagy nem rendszerként jelöli meg. Ha egy modult rendszerként jelöl meg, akkor kizárja a nyomkövetésből, jelentősen meggyorsítva a végrehajtását. Alapértelmezés szerint a rendszermodulok olyan modulok, amelyek állandóan a rendszerkönyvtárban találhatók (általában c:\windows\system Windows 95/98 rendszeren, c:\winnt\system32 NT/2000/XP rendszeren).

Az .udd fájl frissítése most – a modultól függő összes adatot fájlba írja .udd. Az .udd fájlok mentik a töréspontokat, jelöléseket, megjegyzéseket, megfigyelőket, elemzéseket és így tovább a hibakeresési munkamenetek között. Az OllyDbg automatikusan létrehoz egy .udd fájlt a modul betöltésekor.

Futtatható fájl megtekintése – Megjeleníti a végrehajtható fájl kiíratását.

Összes erőforrás megtekintése – Megjeleníti a modulban meghatározott összes erőforrás listáját rövid információkkal együtt. Az OllyDbg nem támogatja az erőforrásokat külön objektumként; csak annyit tehet, hogy kiírja az erőforrást, és bináris formában szerkeszti.

Erőforrás-karakterláncok megtekintése – Megjeleníti a karakterlánc-erőforrások és azonosítóik listáját.

Futtatási nyomkövetési profil megtekintése – Kiszámítja a modul profilját. Lásd még Futtatás nyomkövetés.

Összes modul elemzése – lehetővé teszi az összes modul egyidejű elemzését. Az elemzés hasznos információkat nyer ki a betöltött kódból; A hibakeresés általában gyorsabb és sokkal megbízhatóbb a kód elemzése után.
Egy sorra duplán kattintva a Disassembler panelen a modulban futó kódhoz jutunk.

Memóriakártya

A Memóriatérkép ablak megjeleníti a hibakereső program által használt összes memóriablokkot. Nincsenek szabványos eszközök ennek a feladatnak a végrehajtására, így előfordulhat, hogy az OllyDbg több elosztott memóriát egyesít egy nagy memóriablokkban. A legtöbb esetben azonban nincs szükség pontos felbontásra. Ha egy alkalmazás által a GlobalAlloc(), LocalAlloc() stb. hívásával kért memóriablokkok listáját szeretné lekérni, használja a Heap listát.

Ha a memóriablokk valamelyik végrehajtható modul része, az OllyDbg megmondja, hogy a blokk milyen típusú adatokat tartalmaz: kódot, adatokat, erőforrásokat stb.

Van néhány különbség a Windows 95/98 és a Windows NT/2000 között. Windows 95/98 alatt az OllyDbg nem tudja megjeleníteni a megjelenített fájlok nevét. Ezenkívül a Windows 95/98 korlátozza a memóriaelérés megengedett típusait: olvasás és írás. Vegye figyelembe azt is, hogy a Windows NT/2000 sokkal szélesebb körű képességekkel rendelkezik, beleértve a végrehajtási hozzáférést, a másolást íráskor és a biztonsági jelzőt. Az OllyDbg figyelmen kívül hagyja a másolás írásra attribútumot.

Ha az OllyDbg felismeri, hogy a program egy új memóriablokkot foglalt le vagy egy meglévő memóriablokkot újrafoglalt, akkor az OllyDbg kiemeli a megfelelő bejegyzést a memóriatérkép ablakában. Az összes kiemelés visszaállításához válassza az Aktualizálás lehetőséget a helyi menüből.

A Memória ablakot az Alt+M megnyomásával hívhatja elő.

A következő helyi menüelemek érhetők el:

Aktualizálás – Frissíti a lefoglalt memórialistát és megszünteti az új memóriablokkokat.

View in Disassembler – Megnyit egy memóriablokkot a Disassemblerben. Ez az opció csak akkor érhető el, ha a memóriablokk futtatható kódot vagy valamilyen modul önkibontóját tartalmazza.

Dump to CPU – Megjeleníti a memóriablokk tartalmát a CPU Dump ablak területén.

Dump – egy memóriablokk tartalmát egy külön ablakba írja ki. Ha a memóriablokk típusa ismert, az OllyDbg automatikusan kiválasztja a dump formátumot.

Összes erőforrás megtekintése – Ha a blokk erőforrásadatokat tartalmaz, az összes erőforrás és a kapcsolódó adatok listája. Az OllyDbg nem támogatja az erőforrásokat külön objektumként; csak annyit tehet az erőforrásokkal, hogy kiírja és bináris formátumban szerkeszti.

Erőforrás-karakterláncok megtekintése – Ha a blokk erőforrásadatokat tartalmaz, akkor Ollie felsorolja az összes erőforrás-karakterláncot az azonosítókkal együtt.

Keresés – Lehetővé teszi az összes memóriablokk közötti keresést, a lefoglalttól kezdve, mielőtt bináris karakterlánccal találkozna. Ha a karakterlánc megtalálható, az OllyDbg megjeleníti a talált memóriablokk kiíratását. A memóriatérkép és a kiíratási ablak ugyanazt a keresési mintát használja, így azonnal folytathatja a keresést a megjelenő dump következő előfordulásáig. A dump ablakot az Esc lenyomásával zárhatja be.

Áttörés beállítása (F2; csak Windows NT/2000 alatt érhető el) – egy teljes memóriablokkot véd. Egy töréspont után az OllyDbg leállítja a program hibakeresését, és eltávolítja a töréspontot. Ez a töréspont különösen akkor hasznos, ha hívást szeretne fogadni vagy visszatérni valamelyik modulhoz.

Hozzáférés-megszakítás eltávolítása (F2) – Eltávolítja a telepített hozzáférés-megszakítást a memóriablokkból.

Memóriatöréspont beállítása hozzáféréskor(Memória-elérési töréspont beállítása) – töréspontot állít be a memóriaelérésnél a teljes memóriablokkon. A program minden alkalommal megszakad, amikor a hibakeresés alatt álló program hozzáfér ehhez a memóriablokkhoz. Az OllyDbg memóriánként csak egy töréspontot támogat. Windows 95/98 alatt a hibakereső program lefagyhat, amikor a rendszerrutinok hozzáférnek a töréspontot tartalmazó memóriablokkokhoz. Használja utolsó lehetőségként.

Memóriatöréspont beállítása írásnál(Set breakpoint to write to memory) – töréspontot állít be a teljes memóriablokkon. A program minden alkalommal megszakad, amikor ebbe a memóriablokkba ír. Windows 95/98 alatt a hibakereső program lefagyhat, amikor a rendszerrutinok hozzáférnek a töréspontot tartalmazó memóriablokkokhoz. Használja utolsó lehetőségként.

SFX memóriatöréspont eltávolítása – leállítja a keresést a csomagolt program (SFX) tényleges belépési pontján. Ez a keresés egy speciális típusú memóriatöréspontot használ.

Hozzáférés beállítása- beállítja a kívánt memóriavédelmi attribútumot a teljes memóriablokkra.
Lehetséges opciók:

Nincs hozzáférés
Csak olvasható
Ír olvas
Végrehajtás
Végrehajtás / olvasás

Teljes hozzáférés

Másolja a vágólapra

Egész sor – a kijelölt bejegyzést a vágólapra másolja többsoros szövegként, magyarázatokkal. Egy oszlop másolásból való kizárásához csökkentse a szélességét a minimálisra (az oszlop többi része szürkévé válik).

Teljes táblázat – többsoros szövegként a teljes memóriakártyát a vágólapra másolja. Ennek a szövegnek az első sora tartalmazza az ablak címét („MemoryMap”), a második sor az oszlopfejléceket, az összes következő sor pedig a memória adatrekordjait tartalmazza. A másolat megtartja az oszlopok szélességét. Egy oszlop másolásból való kizárásához csökkentse a szélességét a minimálisra (az oszlop többi része szürkévé válik).

Megfigyelők és ellenőrök

Az Observer ablak több kifejezést tartalmaz. Értékeiket a második oszlopban jeleníti meg. Az OllyDbg a kifejezéseket a fő modul .udd fájljába menti, így a következő hibakereséskor elérhetők lesznek.

Az ellenőr egy önálló ablak, amely megjelenítheti egy változó tartalmát, egy 1- vagy 2-dimenziós tömböt, vagy akár egy struktúratömb kiválasztott elemeit. A kifejezés alapvetően ugyanaz, mint az Observer, de két paramétert tartalmazhat: %A és %B. Az Inspector telepítésekor korlátokat határozhat meg ezekhez a paraméterekhez. Az OllyDbg ezután kiszámítja a %A és %B összes lehetséges kombinációját egy kifejezésbe, 0-tól a határértékig (nem beleértve), és az eredményeket táblázatban jeleníti meg. A %B (oszlopok száma) korlátja nem haladhatja meg a 16-ot.

Hívási lista

A Call Stack ablak (Alt+K) megkísérli nyomon követni a hívások sorrendjét a kiválasztott szál veremében, és megjeleníti azt a meghívott függvények ismert vagy javasolt paramétereivel együtt. Ez a feladat egyszerű, ha a hívott függvények szabványos veremkereteket hoznak létre (PUSH EBP; MOV EBP, ESP). A modern optimalizáló fordítók nem vesződnek a veremkockákkal, ezért az OllyDbg különféle trükköket alkalmaz. Például az OllyDbg megpróbálja követni a kódot a következő visszatérésig, és kiszámítja a push, pop vagy ESP változtatásokat. Ha ez nem segít, az OllyDbg veszélyesebb és időigényesebb megközelítést alkalmaz: az OllyDbg átvizsgálja a veremet, megpróbálja megtalálni az összes lehetséges visszatérési címet, és teszteli azokat a címeket, ahol a függvényt a megfelelő utasítás hívta, beleértve az elemzett parancsokat is. Vannak más, meglehetősen kétes heurisztikák is. A veremben való böngészés nagyon lassú lehet. Az OllyDbg csak akkor állítja elő, ha a Call Stack ablak nyitva van.

A Call Stack ablak 5 oszlopot tartalmaz: Cím, Verem, Eljárás, Hívás innen, Keret.

A Cím oszlop a veremben lévő címet tartalmazza, a Stack pedig a megfelelő visszatérési cím vagy paraméter értékét jeleníti meg.

Eljárás (vagy Eljárás / argumentumok) - megjeleníti, ahol a Call Stack ablak elhelyezi a hívott függvény címét a veremben. Bizonyos esetekben az OllyDbg nem biztos abban, hogy ez a cím helyes-e, és hozzáadja a következő jelölők egyikét:

A megtalált belépési pont nem megbízható

Lehet, hogy az OllyDbg nem talált megbízható belépési pontot, a talált címet ellenőrizni kell heurisztika segítségével

Tartalmazza az OllyDbg-t, nem találja a belépési pontot, és csak azt tudja, hogy ez az eljárás tartalmazza a megjelenítési címet

Ha rákattint egy gombra a panelen, vagy kiválasztja a menü „Argumentumok elrejtése/megjelenítése” parancsát, be- vagy kikapcsolhatja a függvényparamétereket.

A Called from az ezen eljárás által meghívott parancs címe.
Az utolsó oszlop, a Frame alapértelmezés szerint rejtett, és megjeleníti a keretmutató (EBP regiszter) értékét, ha ismert.

Megbízhatóbb és sokkal gyorsabb a verem átvizsgálása, ha minden hívott függvényt elemeznek.

Hívásfa

A hívásfa (CALL) (a Disassemblerben a Ctrl+K billentyű) az elemzés eredményeit felhasználva elkészíti az adott eljárás által közvetlenül vagy közvetve meghívott függvények listáját, valamint az adott függvény összes ismert hívásának listáját. Mellékhatás – felismeri, hogy a kiválasztott eljárás kifejezetten rekurzív-e. A "kifejezetten" azt jelenti, hogy nem tudja nyomon követni az ismeretlen címmel rendelkező kéréseket, például a CALL EAX-et. Ha az eljárás ismeretlen hívásokat indít, a Call Tree "Ismeretlen célpont(ok)" jelzőket ad hozzá.

Néhány meghívott függvény a következő szavak valamelyikével van kommentálva:

Leaf Más funkciókat nem hív meg
Pure Nem hív meg semmilyen funkciót, nincs mellékhatása
RETN Egyetlen RETN parancsból áll
Sys funkció a rendszer DLL-ben. Definíció szerint a rendszer-DLL olyan DLL, amely állandóan a rendszerkönyvtárban található

A Hívásfán való navigáláshoz kattintson duplán a címre a Hívás címe oszlopban vagy a Hívások/Hívások közvetlenül oszlopban. A "Call Tree" ablak elmenti a műveletek előzményeit (a "-" és "+" billentyűket).

Ha a hibakereső program több modulból áll, azt javaslom, hogy elemezze ezeket a modulokat. A Call Tree nem próbálja meg kezelni a rendszerfunkciókat.

Önkicsomagoló (SFX) fájlok

Az SFX fájl egy kicsomagolóból és egy becsomagolt eredeti programból áll. A tömörített fájlok vizsgálatakor általában ki kell hagyni a csomagolót, és meg kell állni a program belépési pontjánál (az "igazi bejegyzésnél"). Az OllyDbg számos olyan funkciót tartalmaz, amelyek megkönnyítik ezt a feladatot.

Általában a kicsomagoló olyan címekre kerül betöltésre, amelyek kívül esnek az eredeti programrészen. Ebben az esetben az OllyDbg a fájlt SFX-ként ismeri fel.

Ha az SFX opció valós bemeneti nyomkövetést igényel, az OllyDbg memóriatöréspontot állít be a teljes kódszakaszon. Általában üres vagy tömörített adatokat tartalmaz. Amikor egy program olyan parancsot próbál végrehajtani egy védett területen belül, amely nem RET vagy JMP, az OllyDbg jelenti a valódi bemenetet. Így működik a bájtonkénti kibontás.

Ez a módszer nagyon lassú. Van egy másik, gyorsabb módszer. Minden alkalommal, amikor kivétel történik az adatok olvasása közben, az OllyDbg ebből a 4K memóriablokkból olvas, és letiltja az előző olvasási ablakot. Minden adatírási kivételnél engedélyezi az írást ebbe a blokkba, és tiltja az írást az előzőhöz. Amikor egy program parancsokat hajt végre egy nem védett területen, az OllyDbg jelenti a valódi bemenetet. Ha azonban a valós bemenet egy olvasási vagy írási ablakon belül van, a helye helytelenül kerül jelentésre.

A bejelentkezési címet manuálisan javíthatja. Válassza ki az új belépési címet, és a Disassembler ablak helyi menüjében válassza a Breakpoint-> Set real SFX bejegyzést itt. Ha a megfelelő SFX opció engedélyezve van, az OllyDbg legközelebb gyorsan és megbízhatóan kihagyja a kicsomagolót.

A hibakereső programon az F7 (belépéssel lépés) vagy az F8 (lépés megkerüléssel) megnyomásával lépkedhet. A fő különbség ezen módszerek között az, hogy ha az aktuális parancs valamilyen függvény HÍVÁSA, akkor az F7 belép a függvénybe, és megáll az első parancsnál, míg az F8 azonnal megpróbálja végrehajtani a függvényt. Ha kihagyunk egy függvényt, a függvényen belüli töréspont vagy hibakeresési esemény szünetelteti a főprogram végrehajtását, de az eljáráshívás utáni ideiglenes töréspont aktív marad, és előbb-utóbb elérjük.

Ha a hibakeresés alatt álló program leáll egy kivétel hatására, akkor ezt a kivételt átadhatja a hibakeresés alatt álló programmal telepített kezelőnek. Csak nyomja meg a Shift billentyűt az előrelépési parancsokkal együtt.

Az F7 vagy F8 több százszori megnyomása helyett használhat animációt (Ctrl+F7 vagy Ctrl+F8). Ebben az esetben az OllyDbg automatikusan megismétli az F7 vagy F8 billentyűt az előző lépés befejezése és az összes ablak módosítása után. A folyamat leáll, ha:

  • Lenyomja az Esc billentyűt, vagy lefuttat bármilyen más előrelépési parancsot, vagy
  • Az OllyDbg egy korábban beállított töréspontnak felel meg, ill
  • A hibakeresés alatt álló program kivételt dob.

A „+” és „-” billentyűk használatával visszatekerheti a végrehajtási előzményeket.

Vegye figyelembe, hogy az OllyDbg a legtöbb ablakot megrajzolja, amikor a végrehajtás szünetel. Ha az animáció nagyon lassúnak tűnik, próbálja meg bezárni vagy legalább minimalizálni az összes nem használt ablakot.

A programvégrehajtás visszakövetésének egy másik, gyorsabb módja a Nyomkövetés futtatása. Ebben az esetben az OllyDbg végrehajtási naplót hoz létre, és közli, hogy mikor és hányszor hajtották végre ezt a parancsot.

Lépésről lépésre nyomon követés

A lépésről lépésre történő nyomkövetés lehetővé teszi, hogy megjegyezze, hogy a kód mely részei kerültek végrehajtásra és melyek nem. Az OllyDbg-ben megvalósított módszer meglehetősen egyszerű. A megadott területen belül minden csapatnál beállít egy INT3 töréspontot. Amikor egy töréspontot végrehajtanak, az OllyDbg eltávolítja azt, és átadottként jelöli meg a parancsot. Mivel minden nyomkövetési töréspont csak egyszer kerül végrehajtásra, ez a módszer nagyon gyors.

A növekményes nyomkövetés használatakor ügyelni kell arra, hogy ne állítsunk be töréspontot az adatokon, mert ez az alkalmazás hibát okoz. Emiatt elemeznie kell a kódot a megfelelő menüopciók engedélyezéséhez. Azt javaslom, hogy válassza a szigorú vagy heurisztikus eljárásfelismerést. A fuzzy opció túl hibatűrő, és gyakran nem létező eljárásokat talál.

Amikor beállít egy nyomkövetési töréspontot, még egy modulon belüli egyetlen parancsnál is, az OllyDbg a kódszakasz kétszeresének megfelelő nyomkövetési puffert állít be.

Vegye figyelembe, hogy a lépéskövetési adatok törlésekor a kényszerített nyomkövetést is törli.

Közvetlen nyomon követés

A továbbított nyomkövetés a programvégrehajtás visszafordításának módja, amely bizonyos esetekben szükséges. Az egyszerű profilalkotáshoz közvetlen nyomkövetést is használhat. Az OllyDbg alapvetően lépésről lépésre hajtja végre a hibakeresés alatt álló programot, mint egy animációt, de nem változtat ablakokat, és - ami a legfontosabb - nyomkövetési pufferben tárolja a címeket, a regiszter tartalmát, az üzeneteket és az ismert operandusokat. Ha a hibakereső kód önmódosító, megtarthatja az eredeti parancsokat. Indítsa el az előremenő nyomkövetést a Ctrl+F11 (bemeneti nyomkövetés) vagy a Ctrl+F12 (bypass nyomkövetés) billentyűkombinációval. Nyomkövetés leállítása – F12 vagy Esc billentyűk.

Megadhat egy feltételkészletet, amelyet a rendszer a továbbított nyomkövetés végrehajtásának minden lépésében ellenőriz (gyorsbillentyű: Ctrl+T). A nyomkövetés leáll, ha feltétellel találkozik. A feltételek a következőket tartalmazzák:

Természetesen a közvetlen nyomkövetés sok memóriát igényel, átlagosan 16-35 bájt utasításonként módtól függően, és nagyon lassú. A Windows NT operációs rendszert futtató 500 MHz-es processzorokon ez a folyamat másodpercenként akár 5000 utasítást is képes nyomon követni. Windows 95 alatt lassabb: mindössze 2200 parancs másodpercenként. De sok esetben, például amikor egy program egy nem létező címre ugrik, csak így lehet megoldást találni a problémára. A kvázi lineáris utasítássorozatokat (a sorozat végén egyetlen kimenettel) kizárhatja az előre követési folyamatból. Amikor az OllyDbg kizárt sorozattal találkozik, az OllyDbg ideiglenes töréspontot állít be a parancson, amely közvetlenül a kizárt blokkot követi, és azonnal végrehajtja azt. Természetesen a külső kódhoz való bármilyen visszatérés vagy ugrás lehetetlenné teszi a megfelelő áttekintést, így az OllyDbg ellenőrzi a kódnak azt a részét, amelyet ki szeretne zárni, és nehéz esetekben megerősítést kér.

A legtöbb esetben nincs szükség a rendszer API-kódjának nyomon követésére. Az „Always trace over system DLLs” (Mindig nyomon követés a rendszer-DLL-eken) opció lehetővé teszi a nyomkövetést funkcionális API-k megadása nélkül a nyomkövetés és a bejegyzéssel történő animáció során. Az OllyDbg feltételezi, hogy a modul rendszer, ha állandóan a rendszermappában található. A Modulok ablakban bármely könyvtárat megjelölhet rendszerként vagy nem rendszerként.

A végrehajtás felgyorsítása érdekében a közvetlen nyomkövetési eljárást a kiválasztott parancsokra vagy kódrészekre korlátozhatja úgy, hogy töréspontokat állít be a program nyomkövetésének és futtatásának elindításához. Ezt hívom "kényszeres futás nyomának". Alapvetően az útválasztási töréspontok nem eltávolítható lépés-nyomkövetési töréspontok. Ha töröl egy lépésnyomot, törli az előremenő nyomkövetést is.

A szakasz elején említett nyomkövetési parancsok automatikusan megnyitják a nyomkövetési puffert. Méretét (legfeljebb 64 MB) a Beállításokban adhatja meg. Ez a puffer kör alakú, és ha megtelik, a rendszer felülírja a legrégebbi bejegyzéseket.

A futási nyomkövetési puffer megnyitásához vagy törléséhez válassza a Hibakeresés -> Futtatási nyomkövetés megnyitása vagy törlése lehetőséget az OllyDbg főmenüjében. A nyomkövetési puffer megnyitása után az OllyDbg minden végrehajtási szünetet naplóz, még azokat is, amelyeket nem közvetlen nyomkövetés okoz. Például átléphet a programon az F7 vagy az F8 billentyű lenyomásával, majd visszaléphet a kódon a plusz és mínusz billentyűkkel. Vegye figyelembe, hogy ezek a kulcsok a nyomkövetési puffer bezárásakor tekintik meg az előzményeket. Ha egy programot nyomon követ, az ablak Regiszterek és Információ területei szürkére válnak, ezzel is hangsúlyozva, hogy az általuk megjelenített regiszteradatok nem valós adatok. A nyomkövetési puffer nem tárolja a verem tetejét vagy a regiszterek által használt memóriatartalmat. A regiszterek, az információk és a verem a tényleges memóriaállapotot használják a regiszterek értelmezésére a nyomkövetési pufferből.

Az OllyDbg meg tudja számolni, hogy az egyes parancsok hányszor jelennek meg a továbbítási nyomkövetési pufferben. A Disassembler ablakban válassza a „Nézet -> Profiladatok” lehetőséget. Ez a parancs lecseréli a Megjegyzések oszlopot a Profil oszlopra. Vagy, ha megjelenik egy panel, kattintson rá többször, amíg meg nem jelenik a Profiladatok. Vegye figyelembe, hogy a megjelenített számláló dinamikus, és nem számolja a nyomkövetési pufferből eltávolított régi parancsokat. A teljes modul profiladatait is megtekintheti néhány kattintással rendezve egy külön Profil ablakban

A Disassembler ablakában található „Runtrace -> Add bejegyzések az összes eljáráshoz” speciális paranccsal ellenőrizheti, hogy az egyes felismert eljárásokat milyen gyakran hívják meg. Egy másik parancs, a Runtrace -> Add ágak az eljárásban, az eljáráson belüli összes felismert elágazási célt nyomon követésre kényszeríti. Ebben az esetben a profil lehetővé teszi, hogy megtalálja a leggyakrabban végrehajtott átmeneteket, és optimalizálja azokat a sebesség növelése érdekében.

A Disassembler ablakának helyi menüjének „Search for -> Last record in run trace” opciója megkeresi, hogy a megjelölt parancs mikor került végrehajtásra, és hogy egyáltalán végrehajtották-e utoljára.
Az élő nyomkövetési ablak megjeleníti a nyomkövetési puffer tartalmát. Minden parancshoz vannak bizonyos regisztertartalmak, amelyeket a parancs megváltoztatott (pontosabban a forrás bejegyzése és a frissített bejegyzés között változott). Ha duplán kattint egy parancsra, egy felugró ablak kiválasztja a parancsra vonatkozó összes hivatkozást a nyomkövetési pufferben, és gyorsan megtekintheti azokat a plusz vagy mínusz billentyűk lenyomásával. Ha a "Trace -> Synchronize CPUandRuntrace" opció be van jelölve, a Disassembler a továbbító nyomkövetési ablakba lép.

Ne feledje, hogy ha töröl egy lépésnyomot, akkor egy kényszerített továbbító nyomkövetést is töröl.

Sandbox

új játékos 2016. január 7-én 13:36-kor

Az OllyDebug-gal való munka alapjai, az archiváló „gyógyításának” példájával

  • Szerelő

Ma megmutatom, hogyan használhatod az „Olkát” egy híres archiváló „meggyógyítására”. Ehhez szükségünk van: OllyDBG, „CommandBar” plugin.

Telepítjük az archiválót, 40 nap múlva látjuk a képet:


Az első dolog, ami eszünkbe jut, az a licencellenőrzés vagy a program használati időtartamának ellenőrzése. Vegyük az egyszerűbb utat – keressünk egy WinAPI-függvényt, amely megkapja az aktuális GetLocalTime-ot. A helyi menüben válassza ki

Keresés -> Név (címke) az aktuális modulban.


Idővel kapcsolatos függvényeket keresünk, na, ez van, majdnem kihagytuk.

Most be kell állítania egy töréspontot ehhez a funkcióhoz. A CommandBar beépülő modul ablakában írja be

és most, amikor meghívjuk ezt a függvényt, a hibakeresőnk megáll a szükséges helyen.

Elkezdjük a hibakeresést, nyomja meg az F9 billentyűt. A töréspontunk sikeresen lefutott és a GetLocalTime függvény elején találtuk magunkat, ebből a függvényből jutjunk el a kilépési ponthoz (Ctr+F9), tegyünk egy lépést (F7). Itt azt látjuk, hogy az idő beérkezése után a 004B8C00 címen lévő függvény hívódik, javaslom, hogy menjen be, és nézze meg, mi lehet ott érdekes, használjuk a lépést a bejegyzéssel (F7).

Kedvező jeleket látunk.

A programot az F8-on keresztül követjük, mielőtt a 004B8C26 címen ellenőriznénk, figyeljük meg a TEST AL,AL-t.

Hadd emlékeztesselek arra, hogy az AL az EAX alsó regisztere, most üres. A TEST AL,AL parancs ellenőrzi, hogy az AL regiszter egyenlő-e nullával, ha egyenlő, akkor a ZF jelző bekapcsol A következő parancs JE SHORT 004B8C44, a 004B8C44 címre küldi, ha a ZF jelző be van kapcsolva. Nos, javaslom az átmenet ellenőrzésének eltávolítását. Nyomja meg a szóköz billentyűt, írja be a nop parancsot, majd nyomja meg többször az Assemble gombot, amíg ez a két parancs el nem kopik.

Elkezdjük a hibakeresést (F9), és látjuk, hogy ismét megálltunk a töréspontunkon, távolítsuk el (F2) és folytassuk újra a hibakeresést (F9). Most látjuk, hogy semmi sem akadályoz a munkában, és a regisztrációs mezőben van egy felirat, hogy a program regisztrálva van.

Címkék: Reverse engineering, Assembler, OllyDebug

Ez a cikk nem kommentálható, mivel a szerzője még nem teljes jogú tagja a közösségnek. A szerzővel csak azután léphet kapcsolatba, miután megkapta

Ennek a „Bevezetés a krakkolás alapjairól az OllyDbg használatával” című kiadvány célja, hogy a crackelés művészetét most kezdődőknek alapismereteket adjon, és ezzel egyidejűleg ezt úgy tegyék, hogy ez a tudás lehetővé tegye számukra a későbbi olvasáshoz. és megértse a fejlettebb oktatóanyagokat, mint például a , amely megtalálható a „CracksLatinos új kurzusában”, amely természetesen továbbra is nyitott az új kiegészítésekre és kiegészítésekre.

A kurzus ötlete abból a tényből született, hogy a CracksLations New Course-jában sok oktatóanyag túl nehéz volt a kezdők számára, és azok, akik nem érték el a kívánt szintet, csalódottak voltak, és sok esetben megtagadták a folytatást. Ezért ennek a „Bevezetésnek...” célja nem az „Új kurzus...” kiváló oktatóanyagainak megismétlése, amelyek száma már meghaladta az 500-at, hanem az, hogy megalapozza azokat, akik ezt a tanfolyamot elvégzik. bonyolultabb oktatóanyagokat is tud majd olvasni. Ez, mint minden a mi mesterségünkben, jelentős erőfeszítést igényel, és a fő cél ennek a mennyiségnek a csökkentése, alapvető ismereteket biztosítva és lehetővé téve a bonyolultabb anyagok további megértését.

Miért OLLYDBG?

A Soft-Ice és az OllyDbg örökös konfrontációjáról itt nem fogunk beszélni, szerintem még a Soft-Ice fanatikusok is elismerik, hogy az OllyDbg-vel könnyebb kezdeni, hiszen rengeteg információ van róla és könnyebben tanulmányozható. Az "OllyDbg" névre keresztelt ajtón keresztül kell belépnünk a repedés világába, és csak ezután válthat át bármilyen más debuggerre, akinek szüksége van rá, hiszen csak a felhasználási módjuk változik, de a lényeg ugyanaz marad.

Elölről kezdeni

Először fel kell vérteznie magát azzal az eszközzel, amelyet elsősorban használni fogunk, amelyhez kattintson és töltse le.

Mivel a nulláról indulunk, először ki kell csomagolnunk a letöltött archívumot egy könnyen elérhető mappába a merevlemezen. Jó ötlet lenne létrehozni egy mappát a C:/ meghajtón. Bár minden más helyen működik, feltételezem, hogy a C:/ meghajtó van kiválasztva.

A fájl kicsomagolása után lépjen a létrehozott mappába, és nézze meg:

Tartalmazza az OLLYDBG.exe futtatható fájlt, amelyet le kell futtatnunk, és amelyhez a kényelem kedvéért parancsikont készítettem az asztalomon.

Rendben, minden készen áll az indulásra. Kattintson az OllyDbg-re:

Azt az üzenetet látjuk, hogy a könyvtárban található DLL régebbi, mint az azonos rendszer DLL-je, és ha az „Igen”-t választjuk, akkor a régi DLL törlődik a mappából, és a rendszert használja. Bár nem sok különbséget látok a kettő között, mégis inkább a disztribúcióhoz tartozót részesítem előnyben, ezért mindig a "Nem"-re kattintok.

Ez egy tiszta OllyDbg, és az első program, amelyet csak azért nyitunk meg, hogy megismerjük az OllyDbg-t, a CrueHead híres CrackMe lesz, amelyet ehhez az oktatóanyaghoz csatolunk.

Egy fájl megnyitásához az OllyDbg-ben lépjen a Fájl -> Megnyitás menüpontra, vagy kattintson az ikonra:

Megnyílik egy ablak, amelyben megtalálhatja a kívánt fájlt, jelen esetben ez a CrueHead crackme.

A fent említett crackme megnyílik, és jelenleg nem számít, hogy teljesen homályos, hogy mit is jelent a számunkra megnyíló nézet – egyelőre csak az OllyDbg különböző részein és funkcióin, illetve néhány beállításon megyünk végig, hogy amikor a következő oktatóanyagokban azt mondja, hogy „menj a DUMP-hoz”, akkor legalább tudtad, hol van ez a lehetőség.

Itt megnézzük az OllyDbg főablakának négy részét:

1) Szétszerelt kód

Listázásnak is nevezik. Itt Ollie megmutatja annak a programnak a szétszedett kódját, amelyet debugolni fogunk; Alapértelmezés szerint az Ollie úgy van beállítva, hogy elemezze a programot a megnyitásakor. Ezt a Beállítások -> HIBAKERESÉSI OPCIÓK menüpontban lehet módosítani.

Vagyis, ha be van jelölve a „FŐ MODUL AUTOMATIKUS INDÍTÁSÁNAK ELEMZÉSE” jelölőnégyzet, az OllyDbg elemzi a programot, és további információkat jelenít meg róla.

Ezzel kezdődik a CrueHead elemzett crack listája, és ha elemzés nélkül nyitjuk meg, láthatjuk a különbséget.

Az elemző ablak sok információt tartalmaz, ami annak ellenére, hogy még nem teljesen világos számunkra, nagyon érdekesnek tűnik. Ugyanakkor jó tudni, hogy bármikor eltávolíthatja, ha az elemzés nem túl pontos, vagy hiba csúszott benne.

Az OllyDbg gyakran hibásan jeleníti meg a program egyes részeit, mert tévesen adatként értelmezi a végrehajtható kódot, majd valami ilyesmit jelenít meg:

Ebben az esetben manuálisan eltávolíthatja az elemzést, ha a jobb gombbal a listára kattint, és kiválasztja az „ANALISIS -> REMOVE ANALYSIS FROM MODULE” menüpontot.

És akkor a lista megfelelően jelenik meg.

Egy másik lehetőség, amellyel megkönnyítheti a dolgokat, és amelyet én személy szerint nem igazán szeretek (de az ízlések eltérőek), az ugrás és hívás kiemelése – kattintson a jobb gombbal a listára, és válassza a „MEGJELENÉS -> KIEMELKEDÉS -> UGRÁSOK ÉS HÍVÁSOK” lehetőséget.

A következőket kapod:

Itt azt látjuk, hogy a hívások azúrkék, az átmenetek pedig sárgával vannak kiemelve.

A felsorolás már olvashatóbb, de egyelőre fogalmunk sincs, hogy ez mit jelent, de jó, ha készen áll az eszköz a későbbi használatra.

2) Regiszterek

A második fontos ablak a regisztrációs ablak.

Emlékezzünk vissza, hogy a regisztrációs ablak az OllyDbg jobb oldalán található, és jelentős mennyiségű információ jelenik meg ott.

Sokkal több információ van, amit nem látunk, de a megjelenítési módot három állapotba állíthatja („FPU REGISZTRÁCIÓK MEGTEKINTÉSE” ​​– FPU-regiszterek megjelenítése, „3D MOST REGISZTRÁCIÓK MEGTEKINTÉSE” ​​– „3D MOST” regiszterek megjelenítése és „HIBAREGISZTEREK MEGTEKINTÉSE” ” – hibakeresési regiszterek megjelenítése). Alapértelmezés szerint az elsők jelennek meg.

3) Verem vagy halom

Most térjünk át a „verem vagy kupac”-ra. Itt nincs túl sok konfigurációs lehetőség, kivéve az ESP és EBP regiszterekkel kapcsolatos információk megjelenítésének lehetőségét.

Alapértelmezés szerint az ESP-vel kapcsolatos információk megjelenítési módja (és ez a leghasznosabb is), de átváltható az EBP-vel kapcsolatos információk megjelenítési módra, amelyhez jobb egérgombbal kell kattintani ebben az ablakban, és ki kell választani a „ GO TO EBP” , és a „GO TO ESP” elem további használatával visszatérünk az előző módba.

A verem funkcionalitását a későbbi fejezetekben fogom részletesebben elmagyarázni, de most csak arra térünk ki, hogy mi változtatható meg konfigurációval.

4) Lerakás

A kiíratási ablaknak számos megjelenítési módja van, amelyek megváltoztathatók, ha a jobb gombbal kattint a kiíratási ablakban, és kiválasztja a kívántat. Az alapértelmezett mód a 8 bájtos Hex/ASCII.

Szintén az alapértelmezett mód a leggyakrabban használt, de ugyanakkor lehetőségünk van a szétszedett kód (DISASSEMBLE), szöveg (SZÖVEG) és egyéb formátumok (SHORT, LONG, FLOAT) megjelenítésére is.

És végül a SPECIAL -> PE HEADER opció, ami, ahogy a következő fejezetekben látni fogjuk, nagyon hasznos lehet.

Most már ismerjük az OllyDbg főablakának főbb részeit, de vannak olyan ablakok is, amelyek közvetlenül nem érhetők el, de akár a menüből, akár a vezérlőpult gombjairól hívhatók meg.

Nézzük meg mindegyiket.

Az L gomb vagy a VIEW->LOG megmutatja, hogy az OllyDbg mit ír a naplóablakba. Beállítható különféle típusú információk megjelenítésére, és alapértelmezés szerint a naplóablak tárolja az összes indítási információt, valamint a TÖRÉSPONTOK FELTÉTELES NAPLÓKRA vonatkozó információkat. Utóbbival sokkal később találkozunk, de most nézzük a futási folyamattal kapcsolatos információkat (esetünkben ez a CrueHead crack), és az általa betöltött könyvtárakat.

Ebben az ablakban az egyik legfontosabb lehetőség a naplózás egy fájlba arra az esetre, ha szöveges fájlba szeretnénk adatokat menteni. Az opció aktiválásához kattintson a jobb gombbal, és válassza a "NAPLÓLÁS FÁJLBA" lehetőséget.

Az E gomb vagy a VIEW->EXECUTABLES gomb a program által használt modulok listáját jeleníti meg: exe, dll, ocx és mások.

Itt is a jobb egérgombbal sok olyan lehetőség jelenik meg, amelyeket most nem fogunk megnézni, de amelyeket már az OllyDbg főablakának böngészésekor láthattunk.

Az M vagy a VIEW->MEMORY gomb megjeleníti a programunk által elfoglalt memóriát. Itt láthatjuk az alkalmazás szakaszait, a folyamat által használt könyvtárakat, a veremet és a rendszer által elfoglalt különféle szakaszokat, és gyakran a programok a végrehajtás során a memória új szakaszait foglalják el.

A jobb egérgombbal kattintva egy SEARCH-t végezhetünk a memóriában, hogy különféle karakterláncokat találjunk (szöveg, hexadecimális, unicode), lehetőség van a szakaszokban lévő töréspontok kiemelésére, valamint az utóbbiak hozzáférési jogainak megváltoztatására ( válassza a HOZZÁFÉRÉS BEÁLLÍTÁSA).

A T vagy a VIEW->THREADS gomb megjeleníti a program szálainak (szálainak) listáját.

Bár most nem tudjuk, mi ez, és csak a következő fejezetekben fogjuk megtudni, nem lesz felesleges megismerkedni az egyes ablakokkal. Később megtanuljuk használni őket.

A W vagy a VIEW->WINDOWS gomb megjeleníti a program ablakait, de mivel még nem fut, az ablakok listája üres marad.

A H gomb vagy a VIEW->HANDLES fogantyúkat jelenít meg, később elmagyarázom, mit csinálnak.

A C vagy a VIEW->CPU gombbal visszatérünk az OllyDbg főablakához.

A / vagy a VIEW->PATCHES gomb megjeleníti az alkalmazott javítások listáját, ha a program megváltozott. Mivel még nem történt módosítás, az ablak egyelőre üres marad.

A K gomb vagy a VIEW->CALL STACK megjeleníti a „hívásveremet”, azon hívások listáját, amelyekkel a program leállásáig találkoztunk.

A B gomb vagy a VIEW->BREAKPOINTS gomb megjeleníti a programban található normál töréspontok listáját. Nincsenek hardveres töréspontok vagy memóriatöréspontok, csak szokásosak.

Az R gomb vagy a NÉZET->REFERENCIÁK gomb megjeleníti a linkek ablakát, amelyet az Ollie-ban végzett hivatkozások keresése eredményeként kaptunk.

A „…” vagy a VIEW->RUN TRACE gomb megjeleníti a RUN TRACE parancs eredményét. Itt kiválaszthatjuk a LOG TO FILE opciót is, hogy a nyomkövetési eredményeket szöveges fájlba mentsük.

A panelt a legfontosabb gombokkal borítottuk be, hogy megismerkedjen az általuk nyújtott lehetőségekkel, amikor a következő fejezetekben elkezdünk elmélyülni bennük.

Az OllyDbg konfigurálása JIT-re (JUST IN TIME DEBUGGER)

Természetesen nem fogjuk folyamatosan használni a JIT-et, hanem csak speciális esetekben, hiszen ha hiba történik bármelyik futó programnál a gépünkön, akkor egyáltalán nem kell Ollie-t használni (alapértelmezés szerint a dr.watson az JIT-ként használják).

Az OllyDbg JIT hibakeresővé tételéhez lépjen az OPCIÓK-> JUST IN TIME HIBAKERESÉS menüpontra.

És nyomja meg egymás után a MAKE OLLYDBG JUST IN TIME DEBUGGER és a DONE gombot

A funkció eltávolításához kattintson a RESTORE JUST IN TIME DEBUGGER-re és ugyanott a DONE gombra.

Beépülő modulok csatlakoztatása az OllyDbg-ben

Az OllyDbg lehetővé teszi olyan bővítmények csatlakoztatását, amelyek hasznosak lehetnek egy adott probléma megoldásához. Egyelőre a COMMAND BAR beépülő modul csatlakoztatására szorítkozunk, hogy megtanuljuk, hogyan kell ezt megtenni.

Ezután csomagolja ki a bővítményt, és nézze meg a mappa tartalmát, ahol ezt megtette:

Először is létre kell hoznia egy mappát a bővítmények számára. Létrehozom C:/-ben, és PLUGINS-nak hívom.

Természetesen a beépülő modulok bárhol elhelyezkedhetnek, de én szeretek mindent C-ben tárolni. Mindenesetre most be kell állítanunk az OllyDbg-t úgy, hogy ezt a mappát ismerje fel az összes plugin helyeként.

Ehhez lépjen az OPCIÓK->MEGJELENÉS menüpontra.

És a megnyíló ablakban nyissa meg a KÖNYVTÁROK lapot.

Látjuk, hogy a beépülő modulok elérési útja az a könyvtár, ahol maga az OllyDbg.exe található, és oda is elhelyezhetnénk a beépülő modulokat, de szeretem külön tartani őket, majd a PLAGIN PATH-> BROWSE gombra kattintva megtaláljuk az általunk létrehozott mappát. .

Válassza ki a PLUGINS mappát, és mentse a változtatásokat.

Vagyis újra kell indítani az Ollie-t, hogy felismerje az új mappát a bővítményekkel, de először át kell másolnia az utoljára letöltött bővítményt.

Másolja az archívum teljes tartalmát a PLUGINS mappába.

Most a „Command Bar” beépülő modul összes fájlja a PLUGINS mappában található, és a többit is abba kell helyezni (gyakran nem az archívumban lévő összes fájlt másolhatja, hanem csak a dll-t).

Most zárja be az OllyDbg-t, ha még mindig zárva volt, és indítsa újra. Azt látjuk, hogy a PLUGINS menüben megjelent a Parancssor és annak lehetőségei.

Az OllyDbg alján látjuk a telepített Parancssort.

Ez egy szövegmező a parancsok bevitelére, amelyek sok esetben hasznosak lehetnek számunkra, és később látni fogjuk a használatukat, de egyelőre fontos megtanulni a bővítmények csatlakoztatását.

A PLUGIN eltávolításához egyszerűen törölje a megfelelő dll-t a PLUGINS mappából, és indítsa újra az OllyDbg-t, és a bővítmény eltűnik. Mindazonáltal célszerű mindig bekapcsolva tartani a Parancssort.

Nyissuk meg újra a CrueHead cracket az OllyDbg-ben.

Az OllyDbg leghasznosabb kulcsai a következők:

F7: Egy kódsort hajt végre (ha CALL-on vagyunk, akkor menjünk be a hívott kódszakaszba)

F8: Egy sor kódot hajt végre (ha CALL-on vagyunk, egyszerűen végrehajtja a hívást anélkül, hogy bemenne, és a HÍVÁS után a következő sorra lép).

A kézi nyomkövetés két típusa nagyon különbözik egymástól, és a későbbiekben megvizsgáljuk, hogy melyiket milyen esetekben érdemes használni.

F2: Normál töréspontot állít be a megjelölt vonalon. A töréspont eltávolításához nyomja meg ismét az F2 billentyűt.

Például:

A telepítési pontot a 40101A pozícióba szeretnénk beállítani, ezért ezt a vonalat jelöljük meg az egérrel.

Egy egérkattintással megjelölődik és szürkévé válik, mint a képen. Ezután nyomja meg az F2 billentyűt.

Látjuk, hogy az első oszlopban a megfelelő pozíció pirosra vált, ami azt jelzi, hogy itt töréspont van. Az F2 ismételt megnyomásával eltávolíthatja.

F9: Lefuttat egy programot, amely addig fut, amíg el nem ér egy töréspontot, kivételt nem dob, vagy egyszerűen valamilyen okból leáll. Amikor a program fut, az OllyDbg jobb alsó sarkában a RUNNING szó jelenik meg.

A CrueHead crackme elindításával a következőket fogjuk látni:

A program futtatásának ideiglenes leállításához nyomja meg az F12 vagy a DEBUG->PAUSE billentyűt.

Látjuk, hogy az OllyDbg a PAUSED szót jeleníti meg. A program futtatását az F9 vagy a DEBUG->RUN megnyomásával folytathatja.

A hibakeresés alatt álló program bezárásához válassza a DEBUG->CLOSE menüpontot.

Ez egy gyors áttekintés az OllyDbg-ről, és a következő fejezetekben továbbra is részletesebben megvizsgáljuk számos lehetőségét és képességét. A lényeg az, hogy töltse le a programot, konfigurálja, nézze meg újra mindazt, amiről ebben az oktatóanyagban volt szó, csatlakoztassa a plugint, indítsa el és állítsa le a CrueHead cracket, próbáljon meg töréspontokat beállítani, hogy a következő fejezetben mindez ne történjen meg. problémákat okoz.habozás és kétség.


Ez a cikk csak tájékoztató jellegű. A DAXA projektcsapat semmilyen felelősséget nem vállal.


"Cracking lecke OllyDbg-vel"
Szerintem sokakat érdekel, hogy a programok hogyan törnek? Ebben a cikkben egy egyszerű példát adok a regisztráció megkerülésére, megpróbálok mindent nagyon egyszerűen elmagyarázni, hogy mindenki megértse. Célszerű legalább hozzávetőleges elképzeléssel rendelkezni arról, hogy mi az assembler, de ha nem rendelkezik ezzel a tudással, ne aggódjon, szerintem ezek után a tapasztalatok után biztosan megtanulja az assembler alapjait.

Az összes szükséges szoftver letöltése után telepítse bárhová. Minden program nem igényel telepítést. Először is elindítjuk az OllyDbg hibakeresőnket, az első indításkor meg fogja kérni az UDD és a beépülő modulok elérési útját, segítsünk a Beállítások->Megjelenés->Könyvtárak menüpontban, és regisztráljuk mindkét elérési utat (csak adja meg a mappát, ahol OllyDbg található). Ne ijedjen meg a sok ablak, csak 3 kell a működéshez.

1.CPU
2. Töréspontok
3. Foltok

Javaslom az összes többi ablak bezárását, hogy ne zavarjanak minket. Most elmagyarázom a feladatunkat, vagy rá kell kényszerítenünk a programra, hogy elfogadjon bármilyen kulcsot, vagy egyáltalán ne jelenjen meg regisztrációs üzenet, és örökre elfelejtsük :). Szóval kezdjük, megpróbálok mindent lépésről lépésre leírni.

1. Nyissa meg programunkat a hibakeresőben. Ehhez nyissa meg a Fájl->Megnyitás menüt és válassza ki tesztprogramunkat. Betöltés után ezt a képet fogjuk látni a CPU ablakában.

Ez a programunk összeállítási kódja.
Most hadd magyarázzam el egy kicsit néhány sort:
PUSH EBP ; Egy másik funkció kezdete
CALL TestP.00405С60; Függvény hívása
Nekünk ez egyelőre elég lesz.
2. Most meg kell találnunk egy funkciót, amely megjelenít egy ablakot, amely a kulcs megadását kéri. Ehhez lépésről lépésre hajtsa végre a programot az F8 billentyű lenyomásával, amíg meg nem jelenik egy bevitelt kérő ablak. Több kattintás után megjelenik egy beviteli ablak.

Most már tudjuk, hogy valahol ebben a függvényben (TestP.004523B8) megjelenik az ablakunk. Az ablakot megjelenítő függvény aljára kell jutnunk, ehhez be kell mennünk ebbe a függvénybe. Most a CALL TestP.004523B8 sor elé kell tennünk egy töréspontot, ehhez válasszuk ki az előtte lévő sort és nyomjuk meg az F2 billentyűt és nézzük meg, hogy ez a sor felkerült a Breakpoints ablakba.

Ezután kattintson erre a gombra, hogy újra letöltse programunkat. Most el kell érnünk a töréspontot, ehhez kattintsunk a programunk végrehajtásához, és látjuk, hogy a végrehajtás leállt a töréspontunkon. A funkcióba való belépéshez nyomja meg az F7 billentyűt. Szerintem érted a különbséget az F8 és az F7 között, az első függvények bevitele nélkül követi nyomon a programot, a második függvények bevitelével. Ezt a képet látjuk.

Addig kell folytatnunk, amíg nem találunk egy ablakot megjelenítő függvényt, amely az OK gomb megnyomását feldolgozza, és megállapítja, hogy helyesen adtuk-e meg a kulcsot vagy sem. Folytassuk, nyomjuk is az F8 billentyűt, amíg meg nem jelenik az ablak.

Ismét töréspontot állítottunk elé.

Megnyomjuk és újra, azt látjuk, hogy a végrehajtás leállt az első töréspontunkon, de mennünk kell a másodikra, ehhez ismét megnyomjuk, a végrehajtás eléri a második töréspontot. Az F7 billentyűvel bemegyünk a funkcióba, a következőket látjuk.

Ismét beállítunk egy töréspontot, és visszatérünk ide, menjünk be a függvénybe, azt hiszem, már érted, hogyan történik ez. A függvény beírása után a következőket látjuk.

Folytatjuk a keresést az F8 megnyomásával. Amikor megnyomjuk az F8-at, azt látjuk, hogy API-funkciók kezdenek megjelenni,

Tehát már közel vagyunk. Nyomja meg lassan, és figyelje, mikor jelenik meg az ablak. Ez történt, a program nyomon követése közben a tálcán megjelent az ablakunk,

Ezen a vonalon jelent meg,

De ha rákattintunk az egérrel, az ablak nem jelenik meg, vagyis ott tartunk, ahol szükségünk van rá, ez a függvény rajzolja meg az ablakot, és valahol itt be van pipálva a beírt kulcs. Továbbra is nyomon követjük a programot (F8!), és ezt látjuk ezen a helyen

Valami állandóan ismétlődő ciklus, már fáj az ujjunk, ha lenyomjuk az F8-at, de egyszerűen nem ér véget, ehhez a ciklus utáni első sorban állítunk be egy töréspontot (MOV DWORD PTR SS:,EAX)

És megnyomjuk a gombot, és azt látjuk, hogy az ablak teljesen kirajzolódott, bemenetre vár tőlünk, a program itt, a hurokban megállt. Ezután írja be bármelyik kulcsot, és kattintson az OK gombra.

Az ablak bezárult, és visszatértünk a hibakereső ablakhoz, a végrehajtás leállt a töréspontunkon. Most meg kell találnunk egy olyan funkciót, amely egy ablakot jelenít meg, amely jelzi, hogy a kulcsot hibásan írták be. Ehhez nyomjuk le (F8) a programunkat, amíg meg nem jelenik egy értesítő ablak.

Itt kitaláljuk, mi az. Az első sor, ami felkelti a szemét, hogy ez a mi helyes kulcsunk, de ne számítson arra, hogy más programokban is ilyen könnyen megtalálja, a kulcsok általában nem csak a memóriában rejlenek, így a mi feladatunk az lesz, hogy a program bármilyen kulcsot elfogad! Most elemezzük a kódot, mielőtt meghívnánk a függvényt (CALL TestP.00427294), amely egy hibaértesítést tartalmazó ablakot jelenít meg. Először is nézzük meg a regiszterek ablakát, amely az ablakban található

És azt látjuk, hogy az EAX regiszter tartalmazza a memóriába beírt kulcs címét és ennek megfelelően azt, amit beírtunk (én 23-at írtam be). Itt minden egy kicsit bonyolultabb, és legalább egy kicsit ismernie kell az alapvető assembler operátorokat. Azt gondoljuk, hogy a programnak össze kell hasonlítania a kulcsunkat egy másikkal, vagy más módon ellenőriznie kell a helyességét, de ehhez meg kell hívnia egy függvényt, amely mindezt elvégzi. Tehát megközelítőleg a következő szerkezetet keressük

MOV EAX, ...  //beírja sorunk címét az EAX-be
...................
HÍVÁS...          //egy függvény meghívása, amely ellenőrzi a funkciónk helyességét
JNZ(vagy JE) ...// feltételes ugrás (olvass róluk!)

Kicsit a feltételes ugrásról, ezzel az operátorral egy adott kódsorra lehet lépni, a cím az operátor után jelenik meg. Ez azt jelenti, hogy a függvény meghívása után, ha ennek az operátornak a hívása után a kulcsot helyesen adtuk meg, akkor arra a sorra kerül, amely után a programunk elindul. Ha nem, akkor az utána lévő kód végrehajtásra kerül. Szóval keresünk, ez a kód azonnal megakad a szemünk

MOV EAX,DWORD PTR SS:
MOV EDX,TestP.00453BA4
HÍVÁS TesztP.00404258
JE RÖVID tesztP.00453B4A

Most hajtsa végre újra ezt a kódrészletet lépésről lépésre, és látni fogja, hogy ez az operátor
JE SHORT TestP.00453B4A kimarad és nem dob minket sehova, vagyis ez a mi funkciónk ellenőrizte a kódunkat és kiderült, hogy hibás, ezért a JE operátor nem dobott minket sehova. Elmagyarázom neked, hogy ez az operátor hogyan ellenőrzi a helyességet, mindent „mereven” csinálunk végig :). Ez azt jelenti, hogy ha beírják a kódot, akkor ez az operátor elküld minket a 00453B4A címre és minden rendben lesz :). Ezt az operátort egy feltétlen ugrással (JMP) cseréljük le, amely mindenesetre átirányít minket erre a címre. Nézd meg, hol található ez a cím (kékkel kiemelt vonal).

Azt látjuk, hogy a funkció hívása, amely egy értesítést jelenít meg arról, hogy a gomb nem megfelelő, kimarad.
Egy sor cseréjéhez jelölje ki, és nyomja meg a Szóköz gombot, és cserélje ki
ezen.
Ezt a vonalat látjuk JE SHORT TestP.00453B4C kicserélték az ablakban Foltok sor hozzáadva.

Most ellenőrizzük, hogy működik-e. Nyomja meg a gombot, a Töréspontok ablakban kattintson a jobb gombbal, és válassza a menüből a Minden letiltása menüpontot. Ezután a Patches ablakban kattintson jobb gombbal a sorunkra, és válassza a menü Apply Patch parancsát. Ezt követően nyomja meg a gombot, megjelenik egy kulcsot kérő ablak, írjon be egy tetszőleges kulcsot, nyomja meg az ok gombot és programunk regisztrálva van. Ez az adott program mindig kérni fogja a kulcsot, mivel ez csak egy teszt, és egy valódi program rögzíti magának, hogy helyesen adta meg a kulcsot.

Jegyzet! Itt azonnal megtaláltuk a szükséges kódrészletet, de nem lesz mindig minden ilyen egyszerű. Néha meg kell próbálnia az összes ilyen típusú szerkezetet.

3. Az utolsó lépés a patch beágyazása a programba, ehhez szükségünk van egy Hex szerkesztőre. Tehát megnyitjuk és kiválasztjuk a programunkat, megnyílik a hexadecimális számjegyek felhője. Meg kell találnunk a JE SHORT TestP.00453B4A karakterláncot hexadecimális formában, és meg kell jelölnünk a miénkkel. Gondolom észrevetted, hogy a CPU(OllyDbg) ablakban minden sorral szemben a hexadecimális alakja van írva. Annak érdekében, hogy pontosan megtaláljuk ezt a sort, így keresünk, ne csak írja be a keresést 74 2B, és vegye ki az előző kódsort, és keressen így E8 3B 07 FB FF 74 2B

Az exe fájlban a kód láncban megy, ezért vesszük az előző sort. Miért csináljuk ezt? Csak egy ilyen kis sor, mint a 74 2B, többször is megismételhető, ezért az előző sort választjuk, hogy pontosan megtaláljuk azt, amire szükségünk van. Ezután megnézzük, hogyan néz ki a módosított JMP SHORT TestP.00453B4A karakterláncunk hexadecimális kódban, úgy néz ki, mint ez az EB 2B, ezért a talált karakterláncot lecseréljük a miénkre, ehhez nyomjuk meg a gombot és cseréljük ki a karakterláncokat így

Mentse el a változtatásokat, és zárja be a szerkesztőt. Ez minden, ez a program bármilyen kulcsot elfogad, amire szükség volt. Azt javaslom, próbáljon meg meggyőződni arról, hogy a program egyáltalán nem kéri a kulcs megadását.

FONTOS!! A programok kezelésének megkezdése előtt ellenőriznie kell, hogy a *.exe fájl be van-e csomagolva. Ehhez szüksége lesz a PEiD segédprogramra. Hogy mindez hogyan történik, az egy külön cikk témája, azt javaslom, hogy találja ki magának.

Sziasztok. Ma az OllyDebuggert fogom leírni. Az OllyDebugger (a továbbiakban Olly) egy nagyszerű hibakereső (3-as kör). Ennek a hibakeresőnek a népszerűsége ugrásszerűen növekszik :). Kezdők számára ez a hibakereső a megfelelő, a használatát nagyon jól ismerő szakemberek számára pedig nélkülözhetetlen eszköz. Ez a cikk mindent leír, amit az Ollyban tehetek.

1. Mi az Olly Debugger

A hivatkozásból átvéve: Az Olly egy 32 bites assembler szintű hibakereső, intuitív felülettel. Különösen hasznos, ha a forráskód nem érhető el, vagy ha problémákat tapasztal a fordítójával.

Támogatott processzorok. Az Olly támogatja az összes 80x86, Pentium, MMX, 3DNow! fájlt, beleértve az Athlon bővítményeket, az SSE parancsokat és a kapcsolódó adatformátumokat.

Adatformátumok. A dump ablakok az összes általános formátumban jelenítik meg az adatokat: hexadecimális, ASCII, Unicode, 16 és 32 bites előjeles/előjel nélküli/hexadecimális egész számok, szétszedők (MASM, IDEAL vagy HLA).

Dob. Megadhat egy végrehajtható fájlt a parancssorban, kiválaszthat egy menüből, áthúzhat egy fájlt az Olly-ba, újraindíthatja az utoljára hibakereső programot, vagy csatolhat egy már futó folyamathoz. Nincs szükség telepítésre, az Olly-t floppy lemezről is futtathatja!

DLL-ek hibakeresése. Az Olly segítségével hibakeresést végezhet az önálló dinamikus hivatkozási könyvtárakban (DLL). Az Olly automatikusan elindít egy kis végrehajtható fájlt, amely betölti a könyvtárat, és lehetővé teszi az exportált függvények meghívását.

Elemzés. Az analizátor az Olly egyik legjelentősebb része. Felismeri a kódba ágyazott eljárásokat, ciklusokat, táblázatokat, konstansokat és karakterláncokat, trükkös konstrukciókat, API-függvénykéréseket, függvényparaméter-számokat, import szakaszokat stb. Az elemzés sokkal olvashatóbbá teszi a dupla kódot, könnyebbé teszi a hibakeresést, és csökkenti az összeomlások valószínűségét. Az elemző nem fordító-orientált, és egyformán jól működik minden Windows programmal.

Objektum szkenner. Az Olly átvizsgálja az objektumfájlokat vagy -könyvtárakat (OMF ÉS COFF formátumok), kódot bont ki belőlük, szegmentálja őket, és megkeresi őket a hibakeresés alatt álló programban.

Teljes Unicode támogatás. Szinte az összes ASCII-karakterlánchoz elérhető művelet elérhető Unicode-karakterláncokhoz is, és fordítva.

2. Gyorsbillentyűk

A „gyorsbillentyűkkel” szeretném elindítani a történetet, mert... Ezek nélkül sok időt kell töltenie a menüben való mászással, és a hibakereső azonnal elveszíti kényelmét. Kezdjük a vezérlőpulttal:

Az első gomb a fájl megnyitása (F3 vízszintes billentyű)
A második gomb a fájl újraindítása (vízszintes Ctrl+F2)
A harmadik gomb a fájl bezárása (vízszintes Alt+F2 billentyű)
A negyedik gomb a program elindítására szolgál (F9 vízszintes gomb)
Az ötödik gomb az indítás szüneteltetése (F12 vízszintes billentyű)
A hatodik gomb a szubrutinokba való belépéssel történő nyomkövetés (F7 vízszintes billentyű)
A hetedik gomb a szubrutinok megadása nélkül történő nyomkövetés (vízszintes F8 billentyű)
A nyolcadik gomb az automatikus nyomkövetés elindítása alprogramok megadásával (vízszintes Ctrl+F11 billentyű)
A kilencedik gomb az automatikus nyomkövetés elindítása szubrutinok megadása nélkül (vízszintes billentyű Ctrl+F12)
A tizedik gomb a program végrehajtása az alprogramból való kilépés előtt (vízszintes Ctrl+F9)
Tizenegyedik gomb – lépjen a címre (vízszintes billentyű Ctrl+G)

A vezérlőpulton lévő összes többi gombról később lesz szó.

Szükséges parancsok:
Ctrl+A – elemzi a kódot
Ctrl+C – adatok másolása
Ctrl+F7 – engedélyezze azt a módot, ahol a kód úgy fut le, mintha megnyomta volna, és nem engedte volna fel az F7 gombot
Ctrl+F8 – engedélyezze azt a módot, ahol a kód úgy fut le, mintha megnyomta volna, és nem engedte volna fel az F8 gombot
Shift+F8 – a programkövetés folytatása kivétel esetén is
Shift+F9 – a program futásának folytatása kivétel esetén is
Ctrl+T – az automatikus nyomkövető beállításai
Ctrl+F11 – Automatikus nyomkövetés indítása szubrutinok megadásával
Ctrl+F12 – Automatikus nyomkövetés indítása szubrutinok megadása nélkül
F2 – Tegyen egy töréspontot a kiválasztott vonalra

3. Beépülő modulok

Valószínűleg kezdett felháborodni, hogy miért beszélek mindenről, de nem magáról a hibakeresőről. Válaszul azt mondom: "Meglátom, hogyan fogod hibakeresni a programot, legalábbis a CommandBar beépülő modul nélkül." Igen, igaz, hogy bővítmények nélkül sokkal nehezebb hibakeresni egy programot. Most adok egy listát a telepített bővítményekről, és közben elmagyarázom, mi is az:

1. IsDebuggerPresent – ​​Elrejti a hibakeresőt az IsDebuggerPresent funkció segítségével.
2. Hibakereső elrejtése – Elrejti a hibakeresőt az IsDebuggerPresent funkcióval történő észlelés elől.
3. Olly Script – lehetővé teszi a hibakeresést segítő szkriptek írását. Nem használom ezt a bővítményt, mert... Szerintem nem szükséges automatizálni a hibakeresést.
4. Olly Dump – lehetővé teszi a hibakeresés alatt álló folyamat kiíratását, és azonnal visszaállítja az importálást. Szuper plugin. mindenkinek tanácsolom.
5. Command Bar – lehetővé teszi, hogy csodákat művelj. A hibakeresőben megjelenik egy sor, ahol nagyon okos parancsokat adhat meg. IMHO e plugin nélkül a hibakeresés nem lehetséges :). A bizonyítványt lefordítottam a plágiáról, és az 1. sz. mellé adom.

4. Első ismeretség

Mint mondtam, a hibakeresővel nagyon könnyű dolgozni. Íme a főablak szabványos nézete a hibakereséshez betöltött programmal:

Mondtam, hogy standard ablak, hazudtam, színeket váltottam :). Most már minden rendben van. Leírás sorrendjében: Főablak, Regisztrációs ablak, Stack panel, Menü panel.

Főablak: Ebben az ablakban történik a tényleges hibakeresés. Minden utasítás szétszerelt formában található. Az indexsort a kurzorral mozgathatja. Az indexsor segítségével kiválaszthatjuk, hogy melyik adatot másoljuk (itt minden sokkal egyszerűbb, mint a SoftIce-ben. Kijelölve. Ctrl+C, jó helyre került Ctrl+V), melyik parancsot kell módosítani, hova tenni töréspontot stb. . A következő címet ki kell jelölni az oldalán. A címek oszlop és a szétszerelt lista oszlop között van egy oszlop gépi kód utasításokkal. Az utolsó oszlop megjegyzéseket tartalmaz.

Regisztrációs ablak: A Regisztrációs ablak megjeleníti az összes 32 bites regisztert, zászlóregisztert és számos egyéb regisztert. Egy regiszter megváltoztatásához 2-szer kell rákattintani az értékére, és új értéket kell megadni. A zászlók regiszterét megfordíthatja, ha az egyikre duplán kattint.

Verem panel: A verem panelen módosíthatja a memóriában szükséges bájtokat, töréspontokat állíthat be, és megkeresheti a megfelelő regeket. kódok stb.

Menüsor: A menüsort egy nagyobb fejezetben tárgyaljuk, mert... ez a téma nagyon fontos.

5. A főmenü megismerése

Kezdjük a Fájl nevű menüvel. Ebben a menüben vannak lapok: Megnyitás, Csatolás, Kilépés. Megnyitás – fájl megnyitása hibakereséshez, Csatolás – csatlakozás egy már futó folyamathoz a hibakereséshez, Kilépés – kilépés.

Kilátás
Napló – napló megtekintése a fájlletöltésről stb. (gyorsbillentyű: Alt+L)
Futtatható modulok – Megtekintheti az összes modult, amelyet a hibakereső alkalmazás használ. (gyorsbillentyű: Alt+E)
Memória – A memóriakártya megtekintése. Íme a hozzávetőleges megjelenése:

Az első oszlop az a cím, ahová a fájl különböző részei, a DLL-könyvtárak betöltődnek. A második oszlop a szakasz memóriájában lévő mérete. A harmadik oszlop általában a modul neve. A negyedik oszlop a szakaszok neve. Az ötödik oszlop az, amit a szakasz tartalmaz. Az összes többi oszlop nem fontos, mert a szakaszok attribútumait tükrözik a memóriában. (gyorsbillentyű: Alt+M)

Szálak – Az összes programszál megtekintése, rögzítésük, p`glnpnghr| megváltoztatni a prioritásukat, megölni őket.
Windows – Akár x.. információ megtekintése ablakokról, osztályokról stb. a program használja.
Fogantyúk – Nézetfogantyúk.
CPU – Nyissa meg a főablakot. (gyorsbillentyű: Alt+C)
SEH-lánc – Nézze, tegyen töréspontot az összes bejelentett Seh-re.
Javítások – Megtekintheti a programon végzett összes módosítás listáját, visszavonhatja az összes módosítást stb. (gyorsbillentyű: Ctrl+P)
Call Stack – A veremben lévő összes kódot futtató hívás megtekintése. (gyorsbillentyű: Alt+K)
Töréspontok – Az összes töréspont megtekintése, letiltása, törlése. (gyorsbillentyű: Alt+B)
Nyomkövetés futtatása – A nyomkövetési napló megtekintése.
Fájl – Hexadecimális fájlszerkesztő.

Hibakeresés
Futtatás – Indítsa el az alkalmazást.
Szünet – Az alkalmazás végrehajtásának szüneteltetése.
Újraindítás – Indítsa újra a hibakeresés alatt álló programot.
Bezárás – A hibakeresés alatt álló program bezárása.
Lépj be – egyenértékű az F7-tel.
Lépj át – egyenértékű az F8-cal.
Animálás – Egyenértékű az F7 folyamatos lenyomásával.
Animate over – Egyenértékű az F8 folyamatos lenyomásával.
Végrehajtás a visszatérésig – A program végrehajtása az alprogramból való kilépés előtt.
Nyomkövetés – Automatikus nyomkövetés szubrutinokba való belépéssel.
Nyomkövetés – Automatikus nyomkövetés szubrutinok megadása nélkül.
Állítsa be a feltételt – feltétel hozzárendelése az automatikus nyomkövetéshez.
Futtatási nyomkövetés bezárása – Az automatikus nyomkövetés leállítása.
Hardvertöréspontok – Hardvertöréspontok megtekintése.

Ebben a menüben minden más nem fontos.

Lehetőségek
Megjelenés – A hibakereső felület beállításai. Ezeken a beállításokon nem foglalkozom, mert... Ezek nem kötelezőek, és Ön is kitalálhatja őket.
Hibakeresési lehetőségek (vízszintes billentyű – Alt+O) – Hibakereső beállítások. Ez a legérdekesebb, a következő fejezetet ennek a menüpontnak szentelem.
Just-in-time hibakeresés – Ezekben a beállításokban az Olly-t hozzárendelheti hibakeresőként, amely akkor indul el, ha valamelyik alkalmazás komoly hibát okoz.
Hozzáadás az Intézőhöz – adjon hozzá egy elemet a program hibakereséséhez az Intéző helyi menüjéhez.

6. Fő programbeállítások

Csak a legfontosabb lehetőségeket ismertetem.

Biztonság
Figyelmeztetés, ha a töréspont a kódszakaszon kívül van – Jelentse, ha töréspontot szeretne elhelyezni a kódszakaszon kívül. Természetesen ezt a lehetőséget nem szabad kiválasztani.
Figyelmeztetés az aktív folyamat leállításakor – Kérdezd meg: „Valóban le akarod állítani a folyamatot?” Ezt az opciót ki kell választani.
Figyelmeztetés, ha nem adminisztrátor – Ha nem rendszergazda, megzavarja Önt. Ez a lehetőség a szadomazochizmusra való :)

Hibakeresés
Magas prioritás beállítása a hibakeresési folyamat nyomon követésekor – Állítson be b(qnjhi) prioritást az alkalmazásnak nyomkövetéskor Ezt az opciót „ízlés szerint” kell kiválasztani (én kijelöltem).

Események
Tedd meg az első szünetet itt – Tedd meg az első megállást itt. Ebben az esetben három lehetőség kínálkozik: Rendszertöréspont, Belépési pont a fő modulba, Főablak. Ismét mindenkinek ki kell választania a legjobb lehetőséget. Kiválasztottam a fő modul belépési pontját.
Az új modul DLL megszakítása – álljon meg minden újonnan betöltött könyvtárnál.
A modul kiürítésének megszakítása – Leállítás a DLL-könyvtárak memóriából való törlésekor.
Új szál megszakítása – Leállítás új szál létrehozásakor.
Törés a szál végén – Álljon le, amikor a szál véget ér.

Kivételek
Memória-hozzáférési hibák figyelmen kívül hagyása a KERNEL32-ben – A Kernel32 memóriahibáinak figyelmen kívül hagyása.
Int3 szünetek – Ne álljon meg az int3 parancsoknál. Ez az opció NAGYON hasznos egyes védők kicsomagolásakor. További részletekért olvassa el a kicsomagolásról szóló cikkemet.

Nyom
Futtatási nyomkövetési puffer mérete – A nyomkövetési puffer mérete. Jobb a maximális érték beállítása.
Naplóparancsok – Vezessen naplót a nyomkövető működéséről. Ez az opció kissé lelassítja a nyomkövetést, ezért szükség esetén kell beállítani.
Mindig nyomon követni a rendszer DLL-eit – Mindig nyomon követni a rendszerkönyvtárakat. Ezt a lehetőséget mindenkinek ki kell választania.
A RET-ig történő végrehajtás után lépjen a RET fölé – Ez az opció lehetővé teszi a leállítást, ha a Ctrl+F9 billentyűkombinációt nem RET-en, hanem a végrehajtás után nyomja meg. Nagyon kényelmesnek találom ezt a lehetőséget, ezért azt tanácsolom, hogy válassza ki.

SFX
Ha a fő modul önkicsomagolható - Itt három lehetőség közül kell választani: Állj le a kicsomagoló kód elején, Nyomkövetés OEP-re blokkokban, Nyomkövetés OEP-re bájtonként. Nos, mit mondjak, lehetőségek az ingyenélők számára. Automatikus keresés OER! Igaz, néha az Olly nem határozza meg megfelelően, hogy a program csomagolva van-e vagy sem.

Húrok
Nos, itt minden világos. Különféle karakterek dekódolása.

Címek
Ezek a lehetőségek nem fontosak, mert ezek határozzák meg, hogy a címek hogyan jelenjenek meg.

Parancsok
Ezekre a lehetőségekre csak azoknak van szükségük, akik igazán szeretik a nagyon szép ACM-listákat.

Leszerelés
A szétszerelő beállításai. Az összes lehetőségre kattintva megnézheti, hogyan fog kinézni az asm-lista. Az összes többi beállítás szerintem nem fontos.

7. Első hibakeresés

A Fant0m crackme 4 hibakeresését elvégezzük. Innen töltheti le: http://fant0m.cjb.net/. Ebből a crackme-ből megpróbáljuk megszerezni a megfelelő reg. szám a nevedhez. Töltse be a crackme-et a hibakereső alá, és nyomja meg az F9-et a futtatáshoz. Adja meg annak a személynek a nevét, akinek regisztrálni akarjuk ezt a crackmet. Adjon meg bármilyen jelszót. Tehát most be kell állítanunk egy töréspontot a név és a jelszó olvasásához. Váltson az Olly-ra, és a qrpnje parancsba írja be a bpx GetDlgItemTextA parancsot. Kattintson az Ellenőrzés gombra. Azonnal ezen a helyen találtuk magunkat Ollyban:

00401217 E8 62010000 HÍVJON 0040121C 68 00010000 PUSH 100 00401221 68 84314000 PUSH 00403184 00401226 68 E9030000 PUSH 3E9 ; |ControlID = 3E9 (1001.) 0040122B FF75 08 PUSH DWORD PTR SS: ; |hWnd 0040122E E8 4B010000 HÍVÁS 00401233 FF75 08 PUSH DWORD PTR SS: 00401236 E8 BE000000 CALL 004012F9 0040123B 83F8 00 CMP EAX, 0 0040123E 74 SHORT 204040 15040 40 PUSH 40 00401242 68 29304000 PUSH 00403029 ; |Title = "Check Serial" 00401247 68 60304000 PUSH 00403060 ; |Text = "You got it! Congrats! :)" 0040124C 6A 00 PUSH 0 ; |hOwner = NULL 0040124E E8 49010000 CALL !} >

Azonnal egyértelmű, hogy a 004012F9 címen folyó eljárásban regisztrációs ellenőrzést végeznek. A hívását az F8-al érjük el, és az F7-tel írjuk be. Amit látunk:

004012F9 55 PUSH EBP 004012FA 8BEC MOV EBP, ESP 004012FC 56 PUSH ESI 004012FD 57 PUSH EDI 004012FE 8D3584304000 LEATR08D:3584304000 LEATR081 24 000 LEA EDI, DWORD PTR DS: 0040130A 33C0 XOR EAX, EAX 0040130C 33C9 XOR ECX, ECX 0040130E B31A MOV BL, 1A 00401310 803E00 CMP BYTE PTR DS:, 0 00401313 7415 JE SHORT 0040132A 00401315 8A06 MOV AL, BYTE PTR 0LC01, 31070 4CL010410 1319 32C 1 XOR AL, CL 0040131B F6F3 DIV BL 0040131D 66C1E808 SHR AX, ADD 1310 0040132A C 60700 MOV BYTE PTR DS:, 0 0040132D 33C0 XOR EAX, EAX 0040132F 83F900 CMP ECX , 0 00401332 741A JE SHORT 0040134E 00401334 6884324000 PUSH 00403284 ; /String2 = "" 00401339 6884314000 PUSH 00403184 ; |String1 = "qwerty" 0040133E E8A1000000 HÍVÁS 00401343 83F800 CMP EAX, 0 00401346 7404 JE RÖVID 0040134C 00401348 33C0 XOR EAX, EAX 0040134A EB02 JMP RÖVID 00401346 30401346 00401344 040134E 5F POP EDI 0040134F 5E POP ESI 00401350 C9 LEADÁS 00401351 C20400 RETN 4
Ebből a kódból egyértelműen kiderül, hogy a 0040133E címen az Ön kódja összehasonlításra kerül a megfelelővel. Helyezzen egy töréspontot erre a címre, és nyomja meg az F9 billentyűt. A String2 = "" megjegyzés a következőre változik: String2 = "ODMZAMHN". Tehát az ODMZAMHN helyhez a reg. kódot a nevéhez. Nyomja meg az F9-et, írja be a helyes kódot, nyomja meg a Check gombot, távolítsa el az összes töréspontot, nyomja meg az F9-et és örüljön.

1. számú melléklet

Segítség a Command Bar-hoz. A Command Bar parancsok magyarázata. Minden, általam feleslegesnek tartott parancsot eltávolítottunk ebből a listából.

Kifejezések
CALC [kifejezés] – Egy kifejezés értékének kiszámítása

Szétszerelő
AT [kifejezés] - Ugrás a címhez a disassemblerben
FOLLOW [by kifejezés] - Menjen a címre a szétszerelőben
ORIG – Ugrás a jelenlegi címre (EIP)
* - Ugrás az aktuális címre (EIP)

Lerakás és halmozás
D [kifejezés] – Menjen a kiíratóban lévő címre
DUMP [kifejezés] – Menjen a kiíratóban lévő címre
DA [kifejezés] - Dump assembler formátumban
DB [kifejezés] – hexadecimális kiírás
DC [kifejezés] – ASCII kódolású dump
DD [kifejezés] – Kiírja címként (verem formátum)
DU [kifejezés] - Kiíratása UNICODE kódolásban
DW [kifejezés] - Dump hexadecimális szóformátumban
STK [kifejezés] – Ugrás a címhez a veremben

Adás
A [kifejezés] [, parancs] - A cím szétszedése

Címkék és megjegyzések
L kifejezés, címke – Szimbolikus címkét társít egy címhez
C kifejezés, megjegyzés – megjegyzést állít be egy címhez

Töréspontok
BP [kifejezés] [,feltétel] - Állítsa be a töréspontot
BPX [függvény neve] – Állítson be töréspontokat a [függvény neve]-t hívó összes utasításhoz a modulban
BC [cím] - A címen lévő vezérlőpont törlése
MR kifejezés1 [,kifejezés2] – Állítson be egy töréspontot a memóriában egy adott terület eléréséhez
MBT kifejezés1 [, kifejezés2] – Állítson be egy töréspontot a memóriában, hogy egy adott területre írjon
MD - Törölje a töréspontot a memóriából
HR [cím] – A hardveres töréspont beállítása egy bájtra a címhez való hozzáférésenként
HW [cím] - A hardver töréspontjának beállítása egy bájtra írásonként a címen
HE [cím] – A hardvertöréspont beállítása a parancs végrehajtására a címen
HD [töréspont száma] – Hardvertöréspont szám törlése

Nyomkövetési parancsok
STOP – Szüneteltesse a nyomkövetést
PAUSE – A nyomkövetés szüneteltetése
RUN - Futtassa a programot
G [cím] – Végrehajtás a címre
GE – Végrehajtás a címre
S – F7-tel egyenértékű
SI – egyenértékű az F7-tel
SO – egyenértékű az F8-cal
TR - A program végrehajtása az alprogramból való kilépésig

OllyDbg ablakok
NAPLÓ – Napló nézet ablak
MOD - A végrehajtható modulok megtekintése
MEM – Memóriakártya ablak megnyitása
CPU - Nyissa meg a program főablakát
BRK - Nyissa meg a töréspont megtekintési ablakát
OPT – Beállítások

Különféle csapatok
EXIT – Kilép Ollyból
LÉPJ - Hagyd ki Ollyt
OPEN [fájlnév] – Nyissa meg a fájlt hibakereséshez
CLOSE - A hibakeresés alatt álló program bezárása
RST – Indítsa újra a hibakeresés alatt álló programot
Súgó – súgó megjelenítése (ez a szöveg, de nincs lefordítva)
SEGÍTSÉG – Olly mutasd meg Oll segítségét
HELP APIfunction – súgó az API-funkciókhoz

2. számú melléklet

Töréspontok. Az Olly többféle töréspontot támogat:
- Szokásos töréspont, ahol a törni kívánt parancs első bájtját az INT3 (Trap to Debugger) helyettesíti. A töréspontot úgy helyezheti el, hogy kiválaszt egy parancsot a disassemblerben és megnyomja az F2 billentyűt, vagy a felugró menüből. Ha másodszor is megnyomja az F2 billentyűt, amikor egy töréspont már be van állítva, az törlődik. Az INT3 töréspontok száma korlátlan. Amikor bezárja a hibakereső programot vagy a hibakeresőt, az Olly automatikusan menti a töréspontokat. Soha ne próbáljon töréspontot beállítani adatokon vagy parancsok közepén! Az Olly figyelmezteti Önt, ha egy kódszakaszon kívül próbál töréspontot beállítani. Ezt a figyelmeztetést kikapcsolhatja a védelmi beállításai között. Egyes esetekben a hibakereső beillesztheti saját ideiglenes INT3 töréspontjait.

Feltételes töréspont (vízszintes Shift+F2 billentyű) – normál INT3 töréspont feltétellel. Minden alkalommal, amikor a hibakereső ilyen törésponttal találkozik, kiértékeli annak kifejezését, és ha az eredmény nem nulla, vagy a kifejezés érvénytelen, leállítja a program hibakeresését.

Feltételes töréspont naplózással (vízszintes Shift+F4 billentyű) – feltételes töréspont naplózással, amely egy ismert függvény kifejezésének vagy paramétereinek értékét naplózza minden alkalommal, amikor a töréspont végrehajtódik.

Az emlékezet töréspontja. Az Olly lehetővé teszi, hogy egyszerre egyetlen töréspontot állítson be a memóriában. Ki kell választani a memória egy részét a disassemblerben vagy a CPU dumpban, és a felugró menü segítségével állíthatja be a töréspontot o`lr|-re. Az előző memóriatöréspont, ha van, automatikusan törlődik. Két lehetőség közül választhat: leállítja a memóriaelérést (olvasás, írás vagy végrehajtás), és csak írás. A töréspont beállításához az Olly módosítja az adatokat tartalmazó memóriablokkok attribútumait.

Hardveres töréspont (csak akkor érhető el, ha hibakeresőt használ Windows ME, NT, 2000 vagy XP alatt). A 80x86-kompatibilis processzorok 4 hardveres töréspont beállítását teszik lehetővé. A memóriatöréspontokkal ellentétben a hardveres töréspontok nem lassítják a végrehajtási sebességet, hanem legfeljebb 4 bájtot takarnak le.

Egyszeri megállás a memória hozzáférésnél (csak Windows NT, 2000 és XP alatt érhető el). Beállíthatja a Memória ablakban egy teljes memóriablokkra a felugró menün keresztül vagy az F2 megnyomásával. Ez a töréspont különösen akkor hasznos, ha egy bizonyos modulhoz intézett kéréseket szeretne elfogni.

Automatikus nyomkövetés – Meg kell adnia egy feltételt (vízszintes Ctrl+T billentyű), amely esetén a hibakereső leállítja a programot. Felhívjuk figyelmét, hogy ez az opció jelentősen (akár 20%-kal) lelassíthatja a program végrehajtási sebességét.

Az OllyDbg bizonyos eseményeknél is leállíthatja a programvégrehajtást, például ha egy DLL betöltődik vagy ki van töltve, vagy egy szál létrejön vagy leáll.

3. számú melléklet

Saját hibakereső beállításaim.
Ha használni szeretné a beállításaimat, cserélje ki az összes adatot ezzel a szöveggel az ollydbg.ini fájlban, amely ugyanabban a mappában található, ahol a hibakereső telepítve van.

Ellenőrizze a DLL-verziókat=0 Eszköztár megjelenítése=1 Állapot az eszköztárban=0 Hardveres töréspontok használata a lépéshez=1 Windows visszaállítása=104191 Görgetés MDI=1 Vízszintes scroll=0 Legfelső ablak=0 Alapértelmezett betűtípus indexe=1 Alapértelmezett színek indexe=0 Index alapértelmezett szintaxisból highlighting=0 Napló pufferméret index=0 Nyomkövetési pufferméret futtatása index=7 A szomszédos parancsok csoportosítása a profilban=1 Kiemelt nyomkövetési regiszter=-1 IDEÁLIS szétszerelési mód=0 Szétszerelés kisbetűkkel=0 Az argumentumok elválasztása TAB=0 Extra szóközzel arguments=1 Alapértelmezett szegmensek megjelenítése=1 NEAR jump módosítók=0 String parancsok rövid formájának használata=0 Méretérzékeny mnemonika=1 SSE méret dekódolási mód=0 FPU verem teteje=1 Mindig mutasson memória mérete=1 Bármely IP regiszter dekódolása =0 Szimbolikus címek megjelenítése=1 Helyi modulnevek megjelenítése=0 Kitöltésként használt szürke adatok=1 Ugrás irányának megjelenítése=0 Ugrás útvonalának megjelenítése=0 Ugrás útvonalának megjelenítése=0 Útvonal megjelenítése, ha az ugrás nem történik meg=0 Javítások aláhúzása=1 Középre KÖVETT command=0 Verem keretek megjelenítése=1 Helyi nevek megjelenítése a veremben=1 Kibővített verem nyomkövetés=0 Forrás szinkronizálása CPU-val=1 SFX kivonat szerepeltetése kódban=1 SFX nyomkövetési mód=0 Valódi SFX bejegyzés használata az előző futásból=1 SFX kivételek figyelmen kívül hagyása =1 Első szünet=1 Leállítás új DLL-nél=0 Leállítás DLL-nél unload=0 Leállítás új szálnál=0 Leállítás a szál végén=0 Leállítás hibakeresési karakterláncnál=0 SSE-regiszterek dekódolása=0 Utolsó hiba engedélyezése=1 Hozzáférési megsértések figyelmen kívül hagyása KERNEL32=1 Figyelmen kívül hagyás INT3=1 TRAP figyelmen kívül hagyása=0 Hozzáférési megsértések figyelmen kívül hagyása=0 Ismeretlen parancsok belépése=1 Osztás figyelmen kívül hagyása 0=0 illegális utasítások figyelmen kívül hagyása=0 Minden FPU kivétel figyelmen kívül hagyása=0 Figyelmeztetés, ha gyakori szünetek=0 Figyelmeztetés, ha a szünet nem jön be code=0 Autoreturn=1 Eredeti parancs mentése a trace=1 Nyomkövetett ESP megjelenítése=1 Animálás a rendszer felett DLL-ek=1 Nyomkövetés karakterláncon parancsok=1 CPU szinkronizálása és futtatása trace=0 Egyéni kivételek figyelmen kívül hagyása=1 Intelligens frissítés=1 Magas prioritás beállítása= 1 Argumentumok hozzáfűzése=1 ExitProcess használata=1 Injekció engedélyezése a WinProc lekéréséhez=0 WM_XXX rendezése név szerint=0 Az utolsó WinProc töréspont típusa=0 Hómentes rajz=1 Szimbolikus nevek szétbontása=0 Sorrend megtartása a névben=1 Csak ASCII nyomtatható dump=0 Diacritical symbols engedélyezése=1 Karakterlánc dekódolása=0 Figyelmeztetés, ha nem adminisztrátor=0 Figyelmeztetés folyamat befejezésekor=1 Dialógusok igazítása=1 Hívó betűtípus használata=0 Meghatározott párbeszédablak font=0 Ablakpozíciók visszaállítása=1 Oszlopok szélességének visszaállítása= 0 Kiemelés rendezve oszlop=0 Elemzési adatok tömörítése=1 UDD-fájlok biztonsági mentése=1 A parancs többi részének kitöltése NOP-okkal=1 Referencia keresési mód=0 Globális keresés=0 Igazított keresés=0 Hibamargó engedélyezése=0 Hexadecimális szerkesztési kijelölés megtartása=0 FPU regiszter címkéjének módosítása=1 Hex Inspector limits=1 MMX display mode=0 Utoljára kiválasztott opciók kártya=15 Utoljára kiválasztott megjelenési kártya=6 Kis- és nagybetűk figyelmen kívül hagyása a szöveges keresésnél=1 Betűkulcs a Disassemblerben=1 A kódelemzés lazasága=1 Pascal dekódolása strings=1 Az argumentumok számának becslése=1 Távoli hívások és visszatérések elfogadása=0 Közvetlen szegmensmódosítások elfogadása=0 VxD dekódolása hívások=0 Privilegizált parancsok elfogadása=0 I/O parancsok elfogadása=0 NOP elfogadása=1 Tartományon kívüli eltolások elfogadása=0 Felesleges előtagok elfogadása=0 LOCK prefixek elfogadása=0 Nem igazított veremműveletek elfogadása=1 Nem szabványos parancsformák elfogadása=1 ARG és LOCAL megjelenítése az eljárásokban=0 Elemzés mentése fájlba=1 Fő modul automatikus elemzése=1 Kódszerkezet elemzése=1 Dekódolás ifs as switches=0 Nyomkövetés mentése fájlba=0 Regiszterek tartalmának nyomon követése=1 Funkciók megőrzése registers=0 Dekódolás trükkök=0 Regisztertípus automatikus kiválasztása=1 Dekódolt argumentumok megjelenítése=1 Dekódolt argumentumok megjelenítése a veremben=1 Argumentumok megjelenítése a hívásban verem= 1 Indukált hívások megjelenítése=1 Címkemegjelenítési mód=0 Címke tartalmazza a modul nevét=0 Jelölje ki a szimbolikus címkéket=0 Jelölje ki a RETURN-okat a veremben=1 A felhasználói adatfájl elérési útja figyelmen kívül hagyása=1 A felhasználói adatfájlban lévő időbélyeg figyelmen kívül hagyása=1 A felhasználói adatfájlban lévő CRC figyelmen kívül hagyása =1 Alapértelmezett rendezési mód a neveknél=1 Oszlopok táblázatosítása a naplófájlban=0 Adatok hozzáfűzése a meglévő naplófájlhoz=0 Az összegyűjtött adatok kihúzása a naplófájlba=0 Szóközök kihagyása a forrásmegjegyzésekben=1 Nem létező forrásfájlok elrejtése=1 Tabulátorok= 8 Fájlgrafikon mód=2 Belső leírónevek megjelenítése=0 Irreleváns leírók elrejtése=0 RET használata RETN helyett=0 Nyomkövetett zászlók megjelenítése=1 EIP-t követő sorok száma=0 Modulon kívüli felhasználói adatok mentése=0 CPU=194,324,812,360 ,3 CPU-alablak=327,798,321,798,537,771,479,909 OllyTest=0,0,1024,746,1 Hivatkozások=256,420,256,210,1 Töréspontok=75,248,210,1 Töréspontok=75,248,626,3,3,16,26,3,168,3,16,2 1 Patch = 0,210,256,210,1 Futtatható modulok = 263,41,636,175,1 Memóriatérkép = 357 ,41,519,274,1 Könyvjelzők=110,145,624,175,1 Profil=132,174,624,182,1 Windows=132,177,614,179,1 Szálak=155,204,492,124,1,124,1,7,2,1,7,2,1,2,1,8 adatforrás ,2 10,256,210,1 Handles=196,325,647,175,1 Forrásfájlok=205,268,473,168,1 Hívás stack=0,420,256,210 ,1 Hívásfa=132,132,791,175,1 SEH-lánc=0,0,256,210,1 Figyelő kifejezések=256,0,256,210,1 CPU-séma=0 CPU Disassembler=7,0,0,0, 1,0 ,4353.0 CPU Stack=7,0,0,0 CPU Info=7,0,0,0 CPU regiszterek=7,0,0,0 Referenciák=7,0,1,0,0 Töréspontok=1, 0 ,1,0,0 Futtatási nyomkövetés=1,0,1,0,0 Patch=1

Befejezés

Ezzel véget ért a csodálatos OllyDebugger hibakeresővel való ismeretséged. Természetesen lehetetlen leírni a cikkben ennek a hibakeresőnek az összes képességét, de megpróbáltam, és remélem, sikerült. Néhány lehetőség túlmutat e cikk keretein, de biztos vagyok benne, hogy ezeket a lehetőségeket Ön is felfedezi majd. Teljesen cikkek nélkül tanítottam Ollyt, és bárki segítsége nélkül folytathatja az ismerkedést a hibakeresővel. Ha kérdései, javaslatai, szitokszavai stb. küldje el mindet [e-mail védett].

P.S. Feltétlenül olvassa el az Olly használatával történő kicsomagolásról szóló cikkemet.

Helló

Üdvözlök mindenkit a cracklabnál, és különösen MozgC-nek és Bad_guynak, ALEX-nek, Kerghannek, Mario555-nek, Hexnek és mindenkinek, aki elolvassa ezt a cikket.