Media Center Master – pitva

Zveřejněno , upraveno - holoubekm Přidat komentář pitváme program

Dnes jsem opět dostal chuť podívat se na zoubek nějakému programu. Hlouběji se tak podíváme první z trojice recenzovaných správců – Media Center Master. Bude nás zejména zajímat, jak program řeší ověřování uživatelů, a co by se s tím dalo udělat. Pusť me se do toho!

Najdeme instalační složku a ponoříme se do analýzy.

Najdeme .exe soubor a pustíme se do zkoumání. Všimněte si textu Stub v názvu souboru.

Abychom ale neskákali po hlavě do neznáma, program spustíme a prozkoumáme jeho chování. Přivítá nás zkušební demoverze. Proklikáme program a zjistíme, že v záložce Menu > Licensing můžeme vložit licenční klíč a email.

Jak program ví, k jakému emailu klíč patří?

Program zadané informace musí ověřit a to buď offline a nebo online pomocí licenčních serverů. Toto si snadno ověříme v programu Wireshark, který umožňuje zachytávání a analýzu síťového toku. Spustíme analýzu ve Wiresharku, vyplníme v programu licenční údaje a odešleme je. Poté zastavíme další zachytávání paketů a projdeme nasbíraná data.

Wireshark – ručně vyfiltrujeme ostatní komunikaci a zjistíme, zda se program pokusil připojit k serveru.

Z výpisu vidíme, že i po odfiltrování zbytečných dat žádná komunikace se serverem neproběhla. Může to tedy znamenat, že licenční klíč v sobě nese informace o přidruženém účtu. Toto chování lze implementovat například pomocí šifrování dat. Licenční klíč typicky obsahuje délku, typ licence, identifikační údaje majitele a případné další údaje. Jeho struktura a způsob odvození je typicky autory bedlivě střežen, protože je to často jediný způsob autentizace, který v případě prolomení může být snadno zneužit. Druhou možností, proč se žádná data neodeslala, je nějaký způsob kontroly správnosti klíče – například délky, či jiné vlastnosti, a na server se tak vůbec neodešle.

Rada pro lenochy jako jsem já: Během zachytávání paketů ukončete veškeré síťové operace. Velmi to pak zpřehlední následující analýzu.

Nyní je čas přejít ke zkoumání samotného programu. V sotfwaru Exeinfo PE otevřeme soubor MCMStubLauncher.exe a vidíme, že byl vytvořen pro platformu .NET s použitím obfuskačního nástroje Eazfuscator.NET. Pro deobfuskaci můžeme použít univerzální nástroj nástroj de4dot. Ten je schopen automaticky detekovat často používané obfuskace platformy .NET a velkou část z nich deobfuskovat. Spustíme ho v konzoli a jako parametr předáme požadovaný .exe soubor, výstupem bude soubor MCMStubLauncher-cleaned.

Hledá se program

Nyní využijeme známý software Telerik JustDecompile, importujeme vyčištěný soubor a prozkoumáme defaultní namespace. Tento software umožňuje dekompilaci bytekódu .NET  (CIL) do některého z vyšších jazyků – C#, F#, VB apod.

První věc, co nás překvapí, je nízký počet tříd. Stejně tak, když se podíváme na velikost souboru (~431KB) vidíme, že je program nezvykle malý na to, jakou funkcionalitu umožňuje. Je to proto, že se jedná o tzv. stub program, který zkontroluje dostupné aktualizace a spustí cílový program. Projdeme zdrojové kódy a hledáme funkci, která spouští child proces, tedy finální binární soubor.

GClass2 řádek 58: Metoda, vracející složku cílového programu.

 

Příspěvek má sloužit jen jako učební pomůcka. Jestli ho nějakej vykuk zneužije, za to nenesu odpovědnost.
Nelson Muntz

Postupně se tak dostaneme do složky C:\Users\******\AppData\Roaming\Peter Souza IV\Media Center Master\bin, ve které se nachází skutečně spouštěný program MediaCenterMaster s velikostí (~4,5MB). Naši pozornost přesuneme na něj. Jak bychom čekali, i tento program je chráněn stejnou obfuskovací metodou. Znovu se spolehneme na nástroj de4dot a vyčistíme .exe soubor. Importujeme ho do dekompilátoru.

Budeme hledat cokoliv, co bude souviset s licencováním. Mou pozornost jako první upoutal formulář frmLicensing. Systematicky projedeme obsluhy událostí – event handlery, které jsou definovány pro tento formulář. V metodě s názvem private bool method_0() najdeme zmiňovanou lokální kontrolu klíče, jehož délka musí být přesně 20 znaků.

private bool method_0() {
	string str = this.txtLicenseCode.Text;
	if (str.Length != 20)
		return false;
	this.txtLicenseCode.Text = str;
	return true;
}

Kód kontrolující délku klíče. Zkráceno.

Následující postup je jasný, vygenerujeme náhodný 20 místný klíč, spustíme Wireshark a zachytíme data.

Úspěšně zachycená komunikace se serverem. Všimněte si, že licenční údaje se předávají v plaintextu, což může být pro uživatele nebezpečné.

Když budeme program zkoumat dál, zjistíme, že z hardwarového vybavení počítače je spočítán otisk a ten je převeden na řetězec. Následně je něj odvozeno heslo pomocí třídy PasswordDeriveBytes a hashovací funkce SHA1. Pomocí statického vstupního vektoru a vygenerovaného hesla je zašifrován řetězec algoritmem AES (Rijndael) v módu CBC. V případě úspěchu je ze serveru navrácena odpověď, která je složena z bool příznaku, který udává úspěšnost a dále několik čísel. Jak snadno odhadneme, tato čísla udávají datum a čas v Unix formátu epoch.

Jak obejdeme licenční server?

Nyní máme několik možností, jak pokračovat.

  • Díky zachycené komunikaci víme, že program se dotazuje serveru mediacentermaster.com. Změnou souboru hosts bychom mohli přesměrovat komunikaci na lokální počítač. Můžeme vytvořit náš vlastní server, který bude na zaslaný požadavek vždy vracet úspěch. Výhodou tohoto přístupu je fakt, že nemusíme vůbec zasahovat do programu jako takového. Pouze přesměrujeme komunikaci.
  • Druhou možností je upravit program tak, aby vynechal kontroly licence a umožnil nám přístup k plnohodnotné verzi.
  • Dále ještě můžeme prozkoumat kód, zda neobsahuje nějaké výhybky. Tím jsou myšleny části, sloužící k debuggování, které by měly být v produkčním kódu odstraněny, ale často tomu tak není.

Třetí možnosti je vyjmenována zcela účelně, protože při zkoumání dalšího kódu narazíme na následující úkaz.

Náznak toho, že program obsahuje zadní vrátka určená k debuggování.

V dekompilátoru vyhledáme všechny řetězce obsahující DevMode a s troškou štěstí najdeme další reference.

Po prozkoumání referencí vedoucích k této funkci zjistíme, že se jedná o informace načítáné z registru ze složky HKEY_CURRENT_USER\SOFTWARE\Peter Souza IV\Media Center Master. Nalezené hodnoty proto přidáme na příslušné místo pomocí nástroje regedit a zjistíme, jak program reaguje.

Výsledek našeho snažení. Z programu zmizely všechny zmínky o licenci.

Po spuštení zjistíme, že v programu není vůbec zmíněna licence a jeho chování odpovídá plné verzi. Cíle jsme dosáhli, poněkud nešťastně zapomenutými, zadními vrátky, které měly sloužit (a nejspíš slouží) k vývoji programu.

Musíme si nyní také uvědomit, že program je spuštěn ve vývojářském módu a proto se může chovat jinak, než bychom čekali.

Díky, že jste vydrželi až sem. Dobrá práce!

Použité nástroje:

Jako vždy upozorňuji, že nás zajímá postup. Rozbor tohoto programu slouží pouze jako ukázka. Všem doporučuji klíč z registru smazat, přečíst si homepage vývojáře a zakoupit plnou verzi.

Vložit komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *