Obfuskace a základní obfuskační techniky
Cí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é.
ČERMÁK, Miroslav, 2016. Obfuskace a základní obfuskační techniky. Online. Clever and Smart. ISSN 2694-9830. Dostupné z: https://www.cleverandsmart.cz/obfuskace-a-zakladni-obfuskacni-techniky/. [citováno 07.12.2024].
Štítky: obfuskace
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.