System oparty na sztucznej inteligencji odtwarza działanie programu, choć nie ma dostępu do kodu źródłowego

Reverse engineering, inżynieria odwrotna, inżynieria wsteczna, programowanie zwrotne – pod tymi nazwami kryje się proces badania działania jakiegoś urządzenia lub programu w celu jego odtworzenia.

Kojarzy się źle – głównie z nieuczciwą konkurencją i firmami, które próbują skopiować rozwiązania innych producentów. Jednak w niektórych kontekstach inżynieria odwrotna może przynieść dużo dobrego.

Część oprogramowania działa na zasadzie open source. W tych przypadkach eksperci od cyberbezpieczeństwa mają dostęp do kodu źródłowego i mogą wychwytywać błędy i luki w zabezpieczeniach, a także upewnić się, że działanie aplikacji nie łamie na przykład prywatności użytkowników. Gorzej, kiedy do kodu źródłowego ma dostęp jedynie jego producent. I tu właśnie przydaje się reverse engineering, które pozwala zewnętrznym podmiotom skontrolować działanie aplikacji.

Eksperci z DeepMind i CISPA Helmholtz Center for Information Security stworzyli system, który do inżynierii odwrotnej zaprzęga sztuczną inteligencję. Swoje dokonania opisują w opublikowanej niedawno pracy.

Efektem ich badań jest system o nazwie IReEn. Potrafi on wyłącznie na podstawie danych wejściowych i wyjściowych jakiegoś programu napisać drugi program, który działa analogicznie do oryginału, a jego kod jest zrozumiały dla człowieka.

Systemowi udało się zrekonstruować na przykład działającą, grywalną wersję Pac-Mana na podstawie zapisu obrazów z rozgrywki oraz zsynchronizowanej z nimi listy akcji poszczególnych postaci

W pierwszym kroku model zbiera informacje o działaniu analizowanego programu – wysyła do niego losowe zapytania i kolekcjonuje odpowiedzi. Pary wejście-wyjście są przesyłane do kolejnego modułu, który tworzy na ich podstawie propozycje programów.

W kolejnym kroku system ocenia stopień podobieństwa działania wygenerowanych programów do klonowanego oryginału. Program, który na największą liczbę zapytań odpowiedział tak samo jak oryginał, przechodzi dalej.

Jeśli zbieżność działania z oryginałem jest stuprocentowa, system ogłasza sukces. Jeśli są rozbieżności, to te zapytania, na które wygenerowany program odpowiedział inaczej niż oryginał, stają się podstawą do generowania kolejnych kandydatów, i tak w kółko do osiągnięcia stuprocentowej zgodności z oryginałem.

Jak podaje venturebeat.com, system został wyuczony na udostępnionej na zasadach open source bazie ponad miliona programów wraz z odpowiadającymi im zestawami danych wejściowych i wyjściowych.

Jak zauważają autorzy pracy, istnieją już rozwiązania pozwalające na programowanie zwrotne, jednak do działania potrzebują dodatkowych informacji, na przykład dostępu do kodu programu. W dodatku efekt ich pracy to często skomplikowane modele, nieczytelne dla człowieka. W odróżnieniu od nich rozwiązanie zaprezentowane przez autorów bazuje tylko i wyłącznie na informacjach na wejściu i na wyjściu programu, a rezultatem pracy systemu jest działający program, którego kod jest zrozumiały dla informatyków.

Do weryfikacji działania swojego systemu zespół wybrał aplikacje napisane w języku Karel, który przez swoją złożoną strukturę stanowi wyzwanie dla systemów programowania zwrotnego. IReEn miał za zadanie odtworzyć działanie setki programów. W 78 przypadkach udało mu się stworzyć działające aplikacje tożsame z oryginałem.

IReEn bazuje częściowo na systemie GameGAN stworzonym przez NVIDIA. Kilka miesięcy temu firma pokazała jego możliwości. Udało mu się zrekonstruować działającą, grywalną wersję Pac-Mana na podstawie zapisu obrazów z rozgrywki oraz zsynchronizowanej z nimi listy akcji poszczególnych postaci.