Zdrojový kód každého autora je specifický málem jako literární styl, nicméně moderní nástroje prý umožňují identifikovat tyto vlastnosti celkem spolehlivě i ve zkompilovaném kódu. Může to být využitelné např. při pátrání po tvůrcích malwaru nebo v jiných forenzních aplikacích; mnoho programátorů může však současně mít pocit ohrožení soukromí.
Výzkumníci z Princeton University, Drexel University, Braunschweig University of Technology a společností Sophos a Shiftleft ukázali ve studii publikované na preprintovém serveru ArXiv, jak lze nástroje zkoumající styl nasadit i na binární soubory. Stačí pomocí strojového učení dostatečně vytrénovat program na obdobných známých vzorcích a pak binární soubor dekompilovat do kódu podobného jazyku C (jistě by šlo provést i jinak). Vlastní použitý proces je několikastupňový, přes assembler až po tvorbu abstraktního syntaktického stromu, a využívá více nástrojů (Radare2, ndisasm, Hex-Rays) – ti si autoři výzkumu sami nevyvíjeli, takže zde je další prostor pro zvýšení účinnosti, vytvořením speciálních nástrojů šitých na míru.
Při kompilování se celá řada atributů původního zdrojového kódu samozřejmě ztratí, např. i v důsledku optimalizace. Komentáře, mnohá metadata nebo i názvy proměnných a funkcí se již dekomplilací obnovit nedají, ale i tak zbude dost individuálních rysů – alespoň pro současné programy umělé inteligence. Jaká je úspěšnost přiřazení autora? Výzkumníci zkusili své neuronové sítě na dvou typech vzorků, z Google Code Jam a veřejných repozitářů na GitHubu.
U Google Code Jam dostal algoritmus strojového učení na začátek 8 programů každého účastníka. Mezi 100 programátory pak šlo autora určit s úspěšností 96 %, mezi 600 poklesla na 83 %. Zajímavé je, že úspěšnost identifikace stoupala s pokročilostí programátora – čím jsou lepší, tím mají víc vlastní styl (přitom by se dalo čekat, že naopak snadněji by šlo odhalit programátory podle toho, že používají neefektivní, suboptimální řešení, špatně lze věc udělat více způsoby než správně; možná by se to dalo porovnávat třeba s identifikací děl malířů, šachistů apod. v závislosti na jejich kvalitě).
U GitHubu byla úspěšnost menší, asi 65 % při 50 programátorech. To podle autorů výzkumu vyplývá hlavně z toho, že kód mnohdy obsahuje části, jejichž autorem byl někdo jiný než vlastník repozitáře.
Další otázkou je, co se stane, pokud autoři programu budou kromě komplikace mít snahu záměrně své dílo anonymizovat, tedy např. odstranit operace o symbolech, měnit operace za jejich sémantické ekvivalenty nebo dokonce přidávat nepotřebné příkazy (tedy používat různé techniky obfuskace, ty jsou ovšem ve stávající podobě určeny pro znečitelnění zdrojového kódu). Samozřejmě záleží na tom, jaké konkrétní nástroje se k tomu použijí, ale podle autorů výzkumu se tím přiřazení autorství neznemožní, i když úspěšnost identifikace programátora přirozeně poklesne.
Techniky znáhodňování kódu používají na různé úrovni už dávno tvůrci malwaru, nemusí jim to ale být nic platné (pokud ovšem není kód dílem velké skupiny, která navíc využívá ještě jiné části kódu). Také lze tímto způsobem třeba odhalovat autorství programů, které se z řady důvodů nelíbí v některých státech – obcházejí cenzuru, firewally, nabízejí šifrování apod. Mohou takto prostě vycházet najevo různé věci, bez ohledu na to, na čí straně budou v konkrétních případech naše sympatie.
Co doporučit vývojářům, kteří si chtějí zachovat anonymitu? Podle autorů výzkumu je nejjednodušší v první řadě nepoužívat veřejné přístupné repozitáře kódů. Pro každý uvolněný kód lze vytvořit jinou identitu – neuronová síť nejprve potřebuje určitý vzorek, aby se „naučila“ styl konkrétního člověka, s hromadou autorů jediného programu si asi pořádně poradit nedokáže. The Register cituje Ailyn Calyskan z Princetonu, která navíc rozebírá účinnost různých speciálních technik na proces detekce (např. náhodně vždy použít různých obfuskačních nástrojů apod.). Nakonec některé věci stejně náhodné nejsou, malware třeba komunikuje s určitými řídicími servery, odesílá určitá data – to už ale není předmětem vlastní práce.