Obfuskace a základní obfuskační techniky

jokerCílem obfuskace je zabránit nebo alespoň co nejvíce ztížit analýzu zdrojového kódu a to tak, že se ve zdrojovém kódu provedou takové úpravy, které způsobí, že pro člověka se takový kód stane značně nečitelným a to i pro samotného autora.

Obfuskace tak bývá dost často používána jako určitá ochrana intelektuálního vlastnictví. Využívají ji však i autoři malwaru, kteří obfuskaci používají k zakrytí toho, co kód vlastně dělá a tím ztěžují jeho detekci.

Nezabrání tím sice zkopírování zdrojového kódu programovacího nebo skriptovacího jazyka např. makra napsaného ve VBA nebo z webové stránky, kde se nachází VBS nebo JS, ale značně zhorší jeho čitelnost.

Obfuskační techniky nejsou nic nového, používají se již po mnoho let téměř ve všech jazycích a stále se zdokonalují. Obfuskaci je možné provést ručně, ale u většího počtu řádků se jeví jako efektivnější použít nějaký nástroj, nebo přímo funkci ve vývojovém prostředí, která příslušné úpravy v kódu provede automaticky. Mezi základní obfuskační techniky pak patří obfuskace kódu a obfuskace dat, která se nacházejí v kódu. V praxi se pak můžeme setkat as tím, že se provádí:

  • odstranění komentářů, a případně vložení falešných komentářů, protože v nich je často napsáno, co daná funkce dělá, usnadňuje tak pochopení daného kódu;
  • zrušení formátování kódu, což se provede tak, že se smažou veškeré mezery a z kdysi čitelného kódu se stane souvislý blok textu. Nutno podotknout, že tato technika je nejméně účinná, protože takový kód lze poměrně snadno zase naformátovat;
  • přejmenování názvů veškerých tříd, metod, proměnných, konstant, funkcí a podprogramů na nějaký dlouhý řetězec složený z náhodně generovaných znaků a čísel anebo jen prosté zahashování veškerých názvů pomocí nějaké hashovací funkce;
  • vkládání mrtvého kódu funkcí, konstant, proměnných a jejich používání a volání ze stávajících funkcí, za účelem odvedení pozornosti, a aby se nedalo tak snadno určit, který kód je ten hlavní.
  • rozdělení stávajícího kódu do více částí, kdy se stávající třídy rozdělí do více tříd, rozhází se po celém programu a pak se propojí postupným voláním. Podstatné je, že se už kód není uspořádán tak, jak byl napsán a volán.
  • duplicita stávajícího kódu, kdy se vybrané funkce zkopírují, přejmenují, provede se v nich substituce, takže na první pohled vypadají zcela jinak, a pak se na místech kde původně volala daná funkce, volá za stejným účelem jednou ta a po druhá za ona.
  • substituce, ta funguje na tom principu, že se hodnoty proměnných a určité matematické a logické operace nahradí jinými operacemi, které poskytují stejný výsledek.
  • štěpení proměnných, kdy se přiřazování hodnot do jednotlivých proměnných provádí voláním nejrůznějších logických a matematických funkcí a jejím postupným skládáním na různých místech programu, aby se nedalo prostým pohledem do kódu zjistit, jakých hodnot daná proměnná nabývá;
  • kódování nebo šifrování dat, data mohou být kódována nebo šifrována za pomocí běžných funkcí dostupných v daném vývojovém prostředí;
  • složení dat za běhu programu, data se například uloží do pole, z kterého se načítají, dělají se nad nimi různé transformace a pak se z nich použije jen určitá část.

Po těchto úpravách je možné kód přesto analyzovat a pokusit se o jeho deobfuskaci, která však může trvat různě dlouho podle toho, jaké techniky obfuskace byly použity a jaké deobfuskátory použijeme. Nikdy však již nedostaneme původní kód, protože výše uvedené techniky jsou jednosměrné.


Pokud vás tento příspěvek zaujal, sdílejte ho!
Share on FacebookShare on LinkedInTweet about this on TwitterShare on Google+Email this to someonePrint this page

Štítky:


K článku “Obfuskace a základní obfuskační techniky” se zde nenachází žádný komentář - buďte první.

Diskuse na tomto webu je moderována. Pod článkem budou zobrazovány jen takové komentáře, které nebudou sloužit k propagaci konkrétní firmy, produktu nebo služby. V případě, že chcete, aby z těchto stránek vedl odkaz na váš web, kontaktujte nás, známe efektivnější způsoby propagace.

Přihlášeným uživatelům se tento formulář nezobrazuje - zaregistrujte se.

Jméno:(požadováno)
E-mail:(požadováno - nebude zobrazen)
Web:

Text vaší reakce: