Эксперты «Лаборатории Касперского» обратились к сообществу с просьбой помочь разобраться, как работает программный код, который составляет значительную часть в основном компоненте Duqu, то есть в payload DLL, и вообще — на каком языке программирования написан этот код?

На диаграмме секция с таинственным программным кодом обозначена красным цветом, специалисты «Лаборатории Касперского» назвали её «Фреймворком Duqu» (именно так, с большой буквы).

Вот что пишет Игорь Суменков, эксперт «Лаборатории Касперского»:

На первый взгляд, Payload DLL выглядит как обычная загружаемая библиотека формата Windows PE, скомпилированная Microsoft Visual Studio 2008 (версия компоновщика 9.0). Код, расположенный в точке входа, абсолютно стандартный. Единственная экспортируемая функция под номером 1 тоже написана на MSVC++. Эта функция вызывается из PNF DLL и реализует весь функционал данной библиотеки — соединение и общение с C&C серверами, получение и выполнение дополнительных модулей троянца. Интересные детали обнаруживаются при более глубоком анализе кода, который вызывается этой функцией в процессе работы.

Содержимое секции кода Payload DLL типично для исполняемого файла, скомпонованного из нескольких исходных модулей. Секцию можно условно разделить на несколько разделов, каждый из которых соответствует одному или нескольким файлам исходного кода. Большая часть разделов присутствует в любой программе, написанной на C++, — это, например, функции стандартной библиотеки шаблонов STL, функции стандартной библиотеки языка и собственно код программы. Однако самый большой раздел, реализующий всю логику общения с C&C серверами, отличается от них во всём.

Этот раздел не типичен для C++ программ, потому что его исходный код – не C++. Код внутри раздела не обращается к другим функциям программы, написанным на C++, и не использует стандартную библиотеку языка, хотя используемые парадигмы явно указывают, что исходный текст был написан на объектно-ориентированном языке программирования. Мы назвали это Фреймворком Duqu.

Далее эксперты «лаборатории Касперского» пытаются разобраться, каким образом работает объектно-ориентированный язык во фреймворке Duqu. Они отмечают, что весь функционал в коде реализуют объекты, все они являются экземплярами какого-либо класса, всего в коде обнаружено 60 различных классов. Таблица функций объекта находится непосредственно в его памяти и может быть изменена в процессе выполнения. Во фреймворке активно используется парадигма так называемого событийно-ориентированного программирования.

Специалисты «Лаборатории Касперского» с ноября 2011 года потратили много времени на анализ кода и делают вывод, что фреймворк Duqu написан не на Visual C++, а загадочный язык программирования — определённо не C++, не Objective C, не Java, не Python, не Ada, не Lua и ещё не 30 других языков программирования, которые они проверили. «Лаборатория Касперского» обратились за помощью к самым опытным профессионалам по реверс-инжинирингу, которых смогла найти, но те тоже ничем не смогли помочь.



Оставить мнение