Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Töröljük a jelszót a MyTestX és easyQuizzy tesztekből

Először is nézzük meg a legkényesebb problémát: hogyan lehet kivágni egy tesztfájlt az .exe fájlból .mtf teszttel (ez a kérdés a MyTestX-ről).
Vegyünk egy .exe fájlt, amely tartalmaz egy tesztet (egy példát használtam a fórumból), és megnyitottam a CFF Explorerben. Azonnal menjen el a „Telefonkönyv” a bal oldali oszlopban, majd a jobb oldali listán, keresi a „Resource Könyvtárbejegyzés AKA :. RCData”, nyissa ki a legördülő listából, és ott keresi „Erőforrás Könyvtárbejegyzés AKA :. MTA”.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Ez az erőforrás valójában egy .mtf fájl, amelyről érdekel. Most ki kell bontanunk. Ehhez forduljunk az utolsóként említett erőforrás gyermekeleméhez - "Resource Data Entry". Válassza ki és nézze meg annak tulajdonságait az ablak alsó felében, az "OffsetToData" és a "Méret" mezők iránt érdeklődnek.

Ne feledkezzen meg az "OffsetToData" mező értékéről, és váltson át a "Cím átalakító" -ra a bal oldali listában. Most adja meg az értéket a RVA mezõben - a fájl elejére a "File Offset" (Fájl-offset) fizikai elmozdulást kapott.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Nyomja meg a Debug-> Futtatás és folytassa az alkalmazást. Ezután nyomja meg a jobb oldali gombot valahol a hibakereső bal felső ablakában. A megjelenő menüben válassza a Go to-> Expression menüpontot, a megjelenő ablakban írja be a ReadFile (a WinAPI függvény nevét, amely valószínűleg a tesztfájl tartalmának olvasásához szükséges).

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Az alábbi listában válassza a kernel32.ReadFile parancsot, és kattintson a "Követés kifejezés" gombra. A ReadFile függvény elején vagyunk, most meg kell adnunk egy töréspontot a program hívásának megfigyeléséhez. Töréspontot adtunk meg, ehhez nyomjuk meg a jobb gombbal az összeszerelő kód kiemelt vonalát, és válasszuk a Breakpoint-> Toggle lehetőséget. Általában mielőtt a töréspont, a legjobb első MyTestEditor nyitását okozza a teszt ablakot, különben lemaradsz egy csomó hívások (F9) a readfile nem érdekes számunkra, települések, azok értéke határozza meg a tetején a verem (jobb alsó debugger ablak, húr szöveg "Visszatérés a kernel32.ReadFile-ból."). A felhívás, ami érdekel minket, így fog kinézni:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Miután elkaptuk a megfelelő kezelést (ez történik, ha mi vagyunk a párbeszéd megnyitása teszt úgy döntünk, a vizsgálat, jelszóval védett, és kattintson a „Megnyitás”), nézd meg alaposan a jobb alsó hibakereső ablakban (amelyben látjuk a stack trace), görgessen le a keres egy sztringet, ami a fájl teljes elérési útja a teszttel (ebben a veremkeretben érdekelünk, hiszen valószínűleg a cél függvényében alakult ki).

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Folytassa a program végrehajtását (F9 vagy Debug-> Run). Egy idő után a program újra megáll, frissen telepített hardveres töréspontunk működni fog. Számomra úgy tűnt, hogy a működési hely valahogy így néz ki:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Emlékeztet egy köztes funkciót használja a fájlok, így használjuk többször lehetőséget Debug-> Execute évig visszatérő (Ctrl + F9), mégis találjuk magunkat a „magas szintű” kódot, a hely, ahol a hiba a fő fájl feldolgozási logika a teszt.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Megnézzük a kódot. Érdeklik az összes lehetséges feltételes átmenetet (je, stb, jz, jnz stb.), Amelyek több, vagy kevésbé lenyűgöző kódfájlra ugrik, mondjuk 5 utasításból. Rögtön hiányoztam néhány helyet, ahol úgy tűnt számomra, hogy érdektelen akciókat hajtottak végre, például ebben a töredékben:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Emlékezteti a tesztverzió ellenőrzését. Gondoltam egyszer, de lehet látni és tapasztalni azáltal töréspontot utasítására feltételes elágazás és a változó értékét Z-zászló a nyilvántartásba ablakban a jobb oldalon, amikor a program végrehajtása megszakad ezen az oldalon. Görgessen lefelé egy kicsit, és megbotlik a következő feltételes átmenetek csoportjával:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Próbáljuk meg változtatni a Z-lobogót minden homlokon. Azaz MyTestStudent nyitunk egy fájlválasztó párbeszédablak a vizsgálat, tesszük a töréspont az egyik átmenetek, a párbeszéd válasszon egy teszt fájl jelszóval védett tanúpad megkérdezése bemenetére a jelszót, írja be a szöveget, akkor meg kell dolgozni korábban beállított töréspontot, változtassa meg a Z-jelzőt és folytassa a program végrehajtását az F9 megnyomásával.
Látni fogjuk, hogy a fenti két szakasz, a változó Z-flag program leáll, akkor a böngésző indul, amely megnyitotta a weboldal egy töredéke jogszabályok: néhány saját készítésű „védelem” egy egyszerű betörés. Azonban ha megváltoztatod a feltételes ágág logikáját, amely alul található, látjuk, hogy a program előzetesen megnyitja a tesztet, bár a program még mindig befejezi a munkát és megnyitja a böngészőt.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

A böngésző megnyitásához valószínűleg a WinAPI ShellExecute funkciót használják. Ellenőrizzük feltevésünket: ismét jobb gombbal bárhol a bal felső hibakereső ablakot, a pop-up menüből válassza lépés to-> Expression, a megjelenő ablakban adja meg a nevét a funkció megy az elején a funkciót, és tedd töréspont. Ismét végrehajtjuk az utolsó feltételes ugrás logikájának módosítását, amelyet érdekel, és a töréspontunk működik:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Az általunk használt többször Debug-> Execute évig visszatérő (vagy Ctrl + F9), hogy visszatérjen a mélyben és a shell32.dll MyTestEditor egység (kövesse a debugger ablak címét, ahol abban a pillanatban meg van írva „[CPU - fő téma, a modul shell32 ] "). Majdnem azonnal eljutunk egy hasonló helyre:

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Itt egy másik feltételes átmenetet látunk, amelyet meg kell javítanunk (repülésre vagy a feltétel nélküli jmp-re való feltételes ugrás helyett). Kiderül, hogy két feltételes átmenetre van szükségünk ahhoz, hogy egy biztonságos teszt megnyitását bármely jelszó beírásával meg lehessen nyitni. Cseréljük és ellenőrizzük:

Váltás a fő futtatható easyQuizzy modul debugger (Nézet-> Végrehajtható modulok, kattintson duplán a modul nevét, ellenőrizze, hogy a szöveg van jelen az ablak címe: „Module easyQuizzy”). Mi kattintson a jobb gombbal a hibakereső ablakban, és keresse meg a futtatható kódban hivatkozott összes sztring erőforrást.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Mielőtt egy sor táblázatot kapunk egy nagy táblában, találunk benne sorokat egy hibás jelszóval kapcsolatos üzenettel és feltörési pontokkal.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Megpróbáljuk megnyitni a védett tesztet, és azonnal elkapjuk a töréspontot.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Egy szórakoztató funkcióban találtunk magunkat, ahol megfigyelhetjük egy nagy nagy kódfájl leugrását egy feltételes ugrással, továbbá a hiányzó töredék tartalmaz egy hivatkozást a "Hibás jelszó" karakterláncra.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

De hogyan szerezzünk be ezt a kódot egyáltalán? Görgesse le a listát egy kicsit, és nézzen meg egy sokkal érdekesebb feltételes ugrást: lehetővé teszi, hogy kihagyjon még egy funkcióhívást is, amely megjeleníti a jelszóbeviteli párbeszédablakot.

Távolítsa el a jelszót a mytestx és easyquizzy tesztekről

Megpróbáljuk megváltoztatni működésének logikáját (például eltömítjük a feltételes NOP'ami átvitelt) - voila, a védett teszt nyitva van, anélkül, hogy jelszót kérnénk.

Azt is javaslom olvasni