eXtreme Movie Manager – pitva

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

Ráno mě přepadla nenápadná chuť rozpitvat nějaký program a zjistit, jak funguje. V dnešním postu se tak v rychlosti podíváme, jak interně funguje eXtreme Movie Manager.

Zajímá nás, jak to funguje, ne jak používat program bez licence!

Nejzajímavější částí typicky bývá kontrola a ověření licence. Proto si ukážeme, jaké techniky použít k obejití ochrany reálného programu.

Co budeme zkoumat?

Po spuštění vyskočí okno s žádostí o licenční klíč.

eXtreme Movie Manager – zádost o vložení licenčního klíče

Protože správný klíč neznáme, vložíme náhodný a okamžitě dostaneme negativní odpověď.

eXtreme Movie Manager – vložený kód není správný

Ještě než se pustíme do pořádná špionáže, zjistíme, jaké technologie a knihovny jsou použity. Bez těchto informací by bylo složité vybrat správnou sadu nástrojů a rozvrhnout další postup.

Švýcarským nožem analýzy spustitelných souborů je program Exeinfo PE. Detekuje různé typy .exe souborů, použitých knihoven a další důležité informace. Šikovnou schopnostní je detekce použitých obfuskací, extrakce řetězců a resource souborů.

Výsledek analýzy programem Exeinfo PE

Výsledky provedené analýzy ukazují, že soubor je určen pro platformu x86, je vytvořen v technologii .NET a používá obfuskátor od společnosti PreEmpire Solutions. Musíme si uvědomit, že tyto údaje jsou pouze odhadem a protivník (autor programu) je mohl účelově změnit pro ztížení analýzy. To jsou lidi, co? 😀

Dekompilace

Pro deobfuskaci použijeme navržený nástroj de4dot. Ten podporuje celou řadu ochran a nástrojů, navíc umí detekovat i jejich vzájemné kombinace.

Úspěšně provedená deobfuskace

Obfuskace se používají na platformě .NET hlavně z důvodu ztížení analýzy. V první verzi .NET 1.1 byl převod EXE → CILvyšší jazyk poměrně stadný a přímý, proto vzniklo velké množství technik maskující skutečnou činnost programu.

Základní techniky obfuskace:

  • outlining – část kódu je přesunuta do metody
  • šifrování řetězců a konstant
  • nepřímé volání funkcí – všechny funkce jsou volány pomocí delegátů
  • přejmenování symbolů – změna názvů tříd, metod a proměnných
  • přídání anti-debugovacího kódu
  • odstranění namespaců – všechny třídy jsou umístěny do společného prostoru
Struktura deobfuskovaného souboru

Pro zkoumání .exe souboru použijeme Telerik JustDecompile, bezplatný nástroj pro analýzu .NET souborů. Po instalaci importujeme soubor a prohlédneme si obsah.

Budeme hledat různá vodítka, která by nás dovedla ke kontrole licence. Mezi formuláři se pokusíme najít žádost o zadání klíče. Pomocníkem nám budou řetězce, které se vyskytují v GUI. Použít tuto techniku je možné až nyní, protože de4dot všechny řetězce rozšifroval.

this.vmethod_6().Text = "To Authenticate your copy you must be Connected to Internet!!";

Hledaný text z dialogového okna je nastaven na řádku 134 ve tříde GForm3

V této chvíli je téměř jisté, že hledaným formulářem je GForm3. Dále musíme zjistit, co se stane po kliknutí na tlačítko Authenticate. Rozhlédneme se ve třídě a budeme hledat obslužný kód.

internal virtual void vmethod_9(SimpleButton simpleButton_2) {
    GForm3 gForm3 = this;
    EventHandler eventHandler = new EventHandler(gForm3.method_1);
    if (this.simpleButton_0 != null) {
        this.simpleButton_0.Click -= eventHandler;
    }
    this.simpleButton_0 = simpleButton_2;
    if (this.simpleButton_0 != null) {
        this.simpleButton_0.Click += eventHandler;
    }
}

Při kliknutí na tlačítko se zavolá metoda gForm3.method_1

To, že se funkce nepodařilo správně převést do vyššího jazyka může být následek obfuskací, nebo agresivních optimalizací použitých kompilátorem.

Naši pozornost proto zamíříme na metodu GForm3.method_1. Tu se ale nepodařilo správně dekompilovat do jazyka C#, přepneme se tedy do IL a budeme pokračovat v analýze. Tato funkce je malý statový automat, který ve smyčce načítá klíč, uloží ho do registu a zavolá statickou metodu Class13::smethod_156, která ihned volá Class13::smethod_157.

Mimochodem je vidět, že klíč k programu se přenáší jako plain text. Potenciální útočník by ho tak snadno mohl odposlechnout a zneužít.

Metoda Class13::smethod_157 posílá požadavek na webový server a kontroluje návratovou hodnotu. Musíme si nyní projít kód WebRequestu, abychom zjistili, jak program komunikuje se serverem. Vidíme, že je nastavována pouze proxy, použije tak defaultní HTTP metoda GET.

string_33 = string.Concat("http://www.binaryworks.it/extrememoviemanager/gateway/validate.asp?key=", string_33);

Adresa webového serveru, který kontroluje licenční klíč v metodě smethod_157

Zkusmo vložíme adresu do webového prohlížeče a vidíme, že návratová hodnota je EXPIRED. Pokračujeme v rozboru funkce. Zjišťujeme, že odpověď serveru je uložena do dočasného souboru, stream je uzavřen a hodnota je srovnána s řetězcem OK.

num1 = Strings.InStr(1, str, "OK", CompareMethod.Text);

Očekávaná hodnota je porovnána s řetězcem OK

Jak zaútočíme?

V této fázi máme na výběr z několika postupů, jak se zbavit žádosti o klíč. Můžeme si od serveru nechat zaslat správnou odpověď, což odpovídá zakoupení softwaru. Lze také odstranit kontrolu a to několika způsoby. Stačilo by nejspíše přeskočit volání dialogového okna a někde v kontruktoru správně nastavit proměnné označující licencovaní programu. Mohli bychom také odstanit podmínky na návratovou hodnotu od serveru. Dalším přístupem by bylo vytvoření vlastního serveru, který by vracel požadovanou odpověď.

Přístup, který jsem si vybral já, je ze všech nejjednodušší. Změníme porovnávaný řetězec OK na EXPIRE. Technicky tak budeme muset měnit obsah .exe souboru, přesněji tabulku stringů. Do programu JustDecompile stáhneme doplněk Reflexil, který změnu umožňuje.

Abychom mohli doplněk použít přepneme se do IL. Další úprava je přímočará. Spustíme ho, najdeme příslušný řádek a přepíšeme řetězec. Pro uložení upraveného souboru klikneme pravým tlačítkem na assembly a souboru pomocí Reflexilu uložíme do původní složky. A teď je čas otestovat nás výsledek.

eXtreme Movie Manager – vložený klíč je správný, gratulujeme!

Wohó! Výsledný program už nemá omezení na 50 spravovaných filmů a při dalším spuštění neobtěžuje žádostí o licenci. Do registru je při registraci uložena hodnota, která označuje plnohodnotný program, který tak nebude žádat o klíč.

eXtreme Movie Manager – cesta ke klíči v registrech

Dalším krokem by byla blokace programu ve firewallu, jako ochrana proti případné změně a aktualizce.

Gratuluji k dobrému pocitu. Nyní je ta správná chvíle program vyzkoušet a zakoupit plnou verzi.

Použité nástroje:

Vložit komentář

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