Russian
Интернет находится в нормальном состоянии, крупных эпидемий и других серьезных инцидентов службой мониторинга «Лаборатории Касперского» не зафиксировано. Уровень опасности: 1

Загадка фреймворка Duqu

Игорь Суменков
Эксперт «Лаборатории Касперского»
опубликовано 7 мар 2012, 19:58  MSK
Сюжеты: Duqu
0.5
 

В процессе анализа компонентов Duqu мы обнаружили интересную особенность в его основном компоненте, который реализует практически всю его бизнес-логику — в Payload DLL. Мы хотели бы поделиться полученной информацией и попросить о помощи в анализе данных.

Расположение кода

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

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


Содержимое секции кода Payload DLL

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

Фреймворк

Особенности

В коде Фреймворка Duqu прослеживаются явные особенности:

  • Весь функционал реализуют объекты.
  • Таблица функций объекта находится непосредственно в его памяти и может быть изменена в процессе выполнения.
  • Нет явных отличий между классами, которые можно было бы отнести к какой-либо стандартной библиотеке (связные списки, хэш-таблицы), и классами троянца.
  • Объекты общаются между собой с помощью прямых вызовов их методов, отложенных вызовов и объектов для обратного вызова по событию.
  • Не используются функции стандартных библиотек, при этом активно используются функции Windows API.

Объекты

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


Функция-конструктор для класса связного списка

Расположение полей в памяти объекта зависит от конкретного класса. Например, не у всех классов таблица функций находится в начале. При этом у некоторых классов бинарно совместимы таблицы функций, но прямых указаний на наличие у них общего класса-предка, как в других объектно-ориентированных языках, не обнаруживается.


Расположение полей в объекте связного списка. Первые 10 полей — указатели на функции

Объекты удаляются с помощью функций-деструкторов. Типичный деструктор удаляет объекты-поля, затем освобождает память самого объекта.


Функция-деструктор для класса связного списка

Методы классов могут вызываться по указателю из таблицы функций (аналогично «виртуальным» функциям C++) или напрямую. В большинстве объектно-ориентированных языков методы получают параметр «this», при этом порядок передачи этого параметра обычно фиксирован — в определенном регистре или параметре в стеке. Однако для классов Фреймворка Duqu этот порядок не фиксирован — параметр может передаваться в любом регистре или в стеке.


Метод класса связного списка. Параметр «this» передается первым параметром в стеке

Событийно-ориентированное программирование

Реализация и содержание объектов в Фреймворке Duqu не совместимо с объектами C++, которые используются во всех других компонентах Duqu. Однако есть ещё одна особенность, которая активно используется во Фреймворке — парадигма событийно-ориентированного программирования.

Фреймворк содержит специальные объекты, которые реализуют свою модель обработки событий:

  • Объект события, использующий системные объекты Windows API.
  • Контексты потоков, хранящие состояния потоков, списки принадлежащих им событий и очереди отложенных вызовов.
  • Объекты обратных вызовов, связывающиеся с объектами событий.
  • Мониторы событий, которые создаются в каждом потоке и отвечают за обратные вызовы по срабатыванию событий.
  • Глобальных объект, хранящий список всех контекстов потоков.

Модель напоминает среду исполнения языка Objective C, однако её реализация не похожа на код Objective C, создаваемый известными нам компиляторами данного языка.


Обработка событий в Фреймворке Duqu

Каждый контекст потока запускает «основной цикл», который следит за появлением новых объектов в списках событий и отложенных вызовов. Большая часть кода Duqu следует единому принципу: создать объект, привязать несколько обратных вызовов к собственным или внешним событиям и выйти. Затем мониторы событий отслеживают срабатывания данных событий и вызывают соответствующие функции обратного вызова в их потоках исполнения.

Пример псевдокода для объекта сетевого сокета:

SocketObjectConstructor {
    NativeSocket = socket();
    SocketEvent = new MonitoredEvent(NativeSocket);
    SocketObjectCallback = new ObjectCallback(this, SocketEvent, OnCallbackFunc);
    connect(NativeSocket, ...);
}
OnCallbackFunc {
    switch(GetType(Event)) {
    case Connected: ...
    case ReadData: ...
...}
}

Выводы

  • Фреймворк Duqu, возможно, написан на неизвестном языке программирования.
  • В отличие от остальных компонентов Duqu, исходный язык Фреймворка— не C++, при этом использован отличный от Microsoft's Visual C++ 2008 компилятор.
  • Событийно-ориентированная архитектура позволяет коду выполняться в разных, в том числе асинхронных средах.
  • С учетом масштаба проекта Duqu можно предположить, что Фреймворк разрабатывала отдельная команда, не связанная с авторами эксплойтов и остальных его компонентов.
  • Загадочный язык программирования — определенно НЕ C++, Objective C, Java, Python, Ada, Lua и не многие другие языки, которые мы проверили.
  • Фреймворк Duqu — одна из особенностей, значительно отличающих Duqu от Stuxnet, который полностью написан на MSVC++.

Фреймворк Duqu: что же это?

Мы потратили много времени на анализ кода и можем с уверенностью утверждать, что Фреймворк Duqu написан не на Visual C++. Возможно, авторы использовали собственные средства для генерации конечного кода на C или написали его на другом языке программирования.

Мы хотели бы обратиться к сообществу разработчиков и попросить любого, кто знает средства разработки, языки или компиляторы, генерирующие подобный Фреймворку код, связаться с нами или оставить комментарий к посту. Мы надеемся, что это поможет нам разгадать и эту загадку в истории Duqu.


89 комментариев

новые сверху
«дерево»
 

Кирюшык

14 мар 2012, 15:25
0
 

Vala?

Murmoshka

13 мар 2012, 21:55
0
 

Do:
Print "Я самый умный криминалист во всех Раменках":
Print "Умнее меня нет никого на этом свете, по крайней мере, в ЦСТ НТЦ ФСБ":
Loop:

Compile
Make
Run

Enjoy

haiku

12 июн 2012, 11:56
0
 

Re:

Oh no, Murmoshka is a trap!!11
А вы, простите, что тут забыли вообще, если всюду ФСБ и прочие? Благими намерениями распугиваете обычный программистский народ? ФСБшникам в случае чего пробить базу трудоустройства и так проблемы не составит, а кто за шторкой сидит, тот и так не дурак и не спалится лишний раз.

Murmoshka

13 мар 2012, 21:52
0
 

Мы пойдем в лукошко - два кота и кошка!
Отказ от назначения генералом грозит разжалованием в рядовые.
Клизма перед операцией назначается почти всегда, если операция плановая и нет противопоказаний.
На копейку уже ничего не купишь.
А хочешь, мы прямо сейчас полетим в Лилль? Ты был в Лилле, Серый?

iso1600

13 мар 2012, 15:07
0
 

Пробовали выделить части которые можно назвать стандартными (списки, хэши) и поискать бинарные сигнатуры в большой выборке?

Murmoshka

13 мар 2012, 22:05
0
 

Re:

2+2=5
Больной дошел до 4 стадии и не проснулся.
Водка несовместима с вождением.
Уважай правила. Води по-человечески.
Управление ГИБДД по Ярославской области.

Bazuzu

13 мар 2012, 14:00
0
 

Странный код Duqu

первоисточник тут:
http://contagiodump.blogspot.com/2011/10/duqu-rat-trojan-precursor-to-next.html

1)
def ror(byte, count):
while count > 0:
byte = (byte >> 1 | byte << 7) 0xFF
count -= 1
return byte

2)
def decode (key, data):
keyxform = key ^ 0x8471122
decoded=''
for x in data:
decoded+= chr(ord(x)^(keyxform 0xff))

keymorph=ror(keyxform,3)
keyxform = ((((keymorph * keymorph) * 0x1e2d6da3) >> 0xc) + (0x4747293 * keymorph) + 1) ^ keymorph
return decoded
the ror is needed

Интересно что будут делать наши тайнохранители из Касперского когда в следующей версии весь код будет таким? ))) Ребята вы реально хотите разобраться с эти в одиночку?

Единственный аналог для примера ?1 (но это все же не то) это разложение полинома в двоичном поле Галуа (что жесть).

ОПИСАНИЕ:
Рассмотрим теперь программную процедуру, реализующую деление
на примитивный неприводимый многочлен х**3+х+1 в поле Галуа
GF(8), представленную короткой программой на языке Бейсик.
Переменные в ней рассматриваются как целые числа.

'программа деления на многочлен х**З+х+1
DEFINT A-Z
n = 1
DO
m = О

'-----------расчет бита переноса
IF n AND 2^2 THEN m = m+1
IF n AND 2^0 THEN m = m + 1
n = 2 * (n AND (2^2-1)) OR (m AND 1)
LOOP UNTIL n = 1
END

исправлено: Bazuzu, 13 мар 2012, 14:48

nlo

13 мар 2012, 00:31
0
 

to Игорь Суменков

(continue of previous post)
duqu mystery == http://i44.tinypic.com/34htic3.png

Murmoshka

13 мар 2012, 21:57
0
 

Re: to Игорь Суменков

О... ребята из ШАБАК подвалили...
Пошли пиво пить в пивную на Новокузнецкой
По следам боевой славы...
То есть последам аморального военного атташе,
Который так некстати засветился в постели с Наташей (она же Оксана), ну та, что с Демушкиным, из 31 ГКБ...

Bazuzu

12 мар 2012, 21:59
1
 

Код на Dutu framework

Если вы действительно хотите чтобы вам помогли, открыли бы для начала код Dutu написанный на неизвестном языке. По крайней мере можно будет сделать попытку восстановления конструкций языка по коду.

При худшем сценарии, если это действительно новый специализированный компилятор, то код сгенерированный его следующей версией продолжит "креативные" идеи с разным форматом вызова функций и плавающей таблицей виртуальных функций. Ой тут много чего интересного можно сделать )) Не зря они именно протокол обмена подсадили на эту хреновину.

исправлено: Bazuzu, 13 мар 2012, 00:00

w8m

13 мар 2012, 08:23
0
 

Re: Код на Dutu framework

Правильно. Просят помощи, а ничего показывать не хотят.

1
 

Может быть код был смешан. В смысле к примеру С++ + asm и может быть ещё "поковырялись" в дизассемблере. Такое смешание точно будет трудно распознать. Скорее невозможно.
Причина смешения кода можно объяснить как угодно. К примеру может быть создателей вируса было несколько и вирус разрабатывался по частям на разных языках программирования, а потом всё было скомпилировано в одну программу.
Удачи.

nlo

12 мар 2012, 15:29
1
 

to Игорь Суменков

unknown framework :D

sample code from Payload DLL
http://i42.tinypic.com/2637ptg.png

sample code from other DLL
http://i43.tinypic.com/242iqkp.png

killy

12 мар 2012, 14:08
0
 

А теперь давайте все смешаем...

имхо, публикуем новость вознаграждение в 1кк валюты создателю, Duqu. Создатель найдется, а там может и поделится с вами знаниями, и пойдет работать в Скуп.

с ув.

Murmoshka

13 мар 2012, 21:58
0
 

Re:

А точнее, в СУП - писать закладки для выведения из строя компьютеров, за которыми сидят оппозиционеры, которых травят предатели, которые, увы, все еще работают у нас в конторе.

Murmoshka

13 мар 2012, 21:58
0
 

Re:

А точнее, в СУП - писать закладки для выведения из строя компьютеров, за которыми сидят оппозиционеры, которых травят предатели, которые, увы, все еще работают у нас в конторе.

KapNemo

12 мар 2012, 11:50
-1
 

Бесперспективно

Бесперспективное, во всех отношениях, для вас занятие. Но из "уважения" к дяде Жене и Микро посоветовал бы, для полноты картины, покопать сети ЗАО АСЭ февралем 2010 и ОАО НИАЭП мартом 2012. Удачи.

Murmoshka

13 мар 2012, 21:50
0
 

Re: Бесперспективно

Дядя Женя, как вы его назвали - обвиняемый по делу о разглашении государственной тайны и о государственной измене. Он в бегах, объявлен в международный розыск, сидит где-то в Англии, где шпионы МИ-5 ему приготовили место в атомном бункере, где как и в Раменках, вечное лето и птички поют механическими голосами

Aleck

12 мар 2012, 11:40
0
 

Искать надо среди языков у которых корутины first-class citizens. OnCallbackFunc - типичный корутин, а система в целом написана в соответствии async pattern. Те объекты которые корутины принимаю в качестве this - это не объекты, это замыкания, они автоматически генерятся средой, отсюда и их колличество, и их мутная структура. Я работаю с Vala, мне это хорошо знакомо, но у вас не Vala. Vala завязан на GLib, и это сразу было бы видно, было бы много текстовых строк с именами классов, методов и т.д. Спросите у этих ребят: http://live.gnome.org/Vala они в этом настоящие звери.

DrDevil666

12 мар 2012, 08:53
0
 

?

Простите, вы смотрели в сторону ASM подобных обьектно ориентированных оберток? Просто уж больно код красивый в дизасме... похож очень на то, что видишь после компиляции именно асм-программ. Возможно какая-нить вариация есстественно, типо fasm, nasm. Ведь этот язык в первую очередь и ценится за полную свободу, даже несмотря на рутинность некоторых вещей.

AlpenColt

11 мар 2012, 18:00
0
 

Не смотрели в сторону AngelScript и прочих встраиваемых языков, используемых в геймдеве?

Booch

11 мар 2012, 14:48
0
 

если это и правда очень похоже на LISP, как написали в англоязычных комментах, то у меня есть версия - CLIPS. Компилируется в нативный код, связан с программированием микроконтроллеров...
Удачи!

tek

11 мар 2012, 14:47
0
 

Попробуйте Gambit Scheme он как раз в С транслирует и у него очень интересный компилятор.

sluge

11 мар 2012, 11:40
2
 

а меня вот интересует вопрос-а зачем было вообще огород городить и делать какой-то там фраймворк на каком то там языке? Нафига!? Все что описано, легко можно было сделать на с/с++, или найти готовую реализацию...

Едиственное, что приходит на ум, так это то, что у авторов дуку уже был готовый фреймворк, реализующий событийно-ориентирванную архитектуру, и они решили его заюзать, чтобы с нуля это не делать. Тут я вижу две альтернативы-

1)Этот фреймворк-какая то академическая разработка, что-то типа курсовой или докторской, и кто-то из членов команды дуку или хорошо знаком с ней, или сам ее писал, пока учился в универе

2)Это внутрикорпоративная разработка, которую кто-то из членов дуку упер со своей бывшей работы. Причем он именно над ней работал, и знал всю ее силу. Тут возможен вариант, что работал над фреймворком не сам член команды дуку, а скажем его знакомый, и знакомый чисто для прикола прделился с другом такой прикольной библиотечкой

3)Это какая то разработка спецслужб или военных. Ну тут говорить не о чем, значит или США или Китай причастны к созданию дуку, а это серьезно...

И вообще, парни, которые комают эту дуку, ведут себя крайне глупо, в блогах пишут под настоящими именами, с фотками даже. По моим полсчетам на стукснет/дуку было потрачено около 10 миллионов баксов, причем не только на разработку, но и на всякие силовые акции, типа закинуть вредоносный код ирану или еще чего. Люди с такими деньгами пойдут на все, чтобы не докопаись до истины. Вот иранских ядерщиков скока поубивали в самом же иране...

Murmoshka

11 мар 2012, 18:57
0
 

Re:

А ты слышал выражение "На воре шапка горит". Подумай, во-первых, почему Лабораторию Касперского заинтересовал именно Duqu (что на свете мало других вредоносных программ). И ответь на вопрос, почему эта Лаборатория Касперского вдруг работает и на ФСБ, с одной стороны, и на Майкрософт. И ты придешь к совершенно восхитительной мысли о том, что спецслужбы США и России, хотя и враждуют между собой, но некоторые грязные делишки все же делают сообща... Включай воображение, в мире столько всего интересного =)
Маша

w8m

11 мар 2012, 18:48
1
 

Re:

> Люди с такими деньгами пойдут на все, чтобы не докопались до истины.
А в коде, судя по приведённым примерам, не было обфускации.

agrep

11 мар 2012, 09:41
0
 

SystemC или какие-нибудь трансляторы с "языков описания аппаратуры"

dmi

11 мар 2012, 01:19
0
 

Была вот например такая штука:
http://citforum.ru/programming/application/flora.shtml

В основе идеологии архитектуры Flora/C+ лежит нелинейная структура памяти, организованная в виде дерева объектов (Objects Tree), узлами которого могут быть элементарные типы данных и производные от них, встроенные объекты, пользовательские объекты, программы и задачи.

Управление деревом объектов выполняется объектной машиной (Objects Engine).

anon

10 мар 2012, 19:39
0
 

Эрланг.Он как раз использует событийно-ориентированную поточную модель.

Murmoshka

10 мар 2012, 20:23
0
 

Re:

Ты прав, друг! Но я поправлю, это не собственно Эрланг, а аналогичный ему язык, разработанный под задачи ЦРУ в недрах этой же организации. Кстати, похожий код обнаружили ребята из ИК ЦСТ в устройствах для бесконтактной связи, которые применяли в москве их шпионы для связи с нашими контрагентами.

anon

11 мар 2012, 00:35
0
 

Re: Re:

В нашем неспокойном мире ЦРУ не котируется, они стараются выглядеть тем, чем не являются.Гораздо опаснее частники.
Сейчас у частников денег и ресурсов побольше будет.

Murmoshka

11 мар 2012, 18:55
0
 

Re: Re: Re:

=))) Тебе рассказать, как умирают такие частники. Нередко через повешение. Почему? Потому что суициды с явной картиной самоповешения и очаровательной запиской типа "Прощайте, прошу считать меня коммунистом" никто и никогда не расследует. И концы в воду. Рассказать тебе про Асанжа?

w8m

10 мар 2012, 07:46
1
 

А какая вообще разница на чём он написан? Специалистам Лаборатории Касперского значит больше заняться нечем? Если любители пишут свои простенькие компиляторы, то и команда программистов которым хорошо платят напишет всё что угодно.
И дайте код посмотреть, а то показали только пару бессмысленных огрызков из IDA и какие-то дурацкие схемки.

исправлено: w8m, 10 мар 2012, 08:48

Murmoshka

10 мар 2012, 10:11
0
 

Re:

Вот именно! Это чистой воды провокация. ФСБ почти наверняка разрабатывает подобные программы, чтобы ставить бесконтактным способом "на контроль" наших оппозиционеров, так что им интересны все, кто в этом хоть что-то понимает, чтобы "нейтрализовать" их деятельность, ведь верно говорят, "не пали конторку".
Вы знаете, я уже шестой год в разведке служу, это стиль совершенно узнаваемый, они могут изменять адреса, пароли, явочные квартиры, сайты, ключи etcetera, но стиль они не меняют! Это очень сложно - изменить стиль.
Маша

w8m

10 мар 2012, 11:36
0
 

Re: Re:

От оппозиции столько шума. В чьей разведке, если не секрет?

Murmoshka

10 мар 2012, 11:39
0
 

Re: Re: Re:

В нашей (МВД РФ). Это не секрет - думаю, без труда найдете мое ЛД.

w8m

10 мар 2012, 11:43
0
 

Re: Re: Re: Re:

Мало платят?

Murmoshka

10 мар 2012, 12:05
0
 

Re: Re: Re: Re: Re:

Ладно, извините, мне пора идти заниматься.
Пишите на murmoshka(AT)bk.ru.
Спасибо

w8m

10 мар 2012, 12:36
0
 

Re: Re: Re: Re: Re: Re:

И вам спасибо, было приятно познакомиться.

Murmoshka

10 мар 2012, 12:04
0
 

Re: Re: Re: Re: Re:

Это сведения ограниченного распространения.
Шокирует меня большей частью факт аморального поведения сотрудников "ЛК", являющихся внештатниками в ФСБ.

Murmoshka

10 мар 2012, 11:38
0
 

Re: Re: Re:

Ну они фашисты по своей морали, так что они будут использовать очень разные и совершенные методы. Ведь перемалывать людей как скот на бойне придумали далеко не нацисты, а англичане во время Англо-Бурской войны. Так и вирусы придумали на Западе, а применяют у нас. Хотя по этике и морали и те и те - палачи

jman

10 мар 2012, 00:58
1
 

Есть мысль, что исходный код gcc открыт, а следовательно квалифицированному программисту не является проблемой сделать свой С/С++ компилятор, который будет генерировать немного странный код. При этом изначально это может быть вполне себе чистый С++.

Вопрос в том насколько сложно внутри gcc добавить свой собственный call convention или изменить способ генерации кода для vtable. Почему-то мне кажется, что это не есть глобально сложно... а скорее даже глобально несложно :)

Целью всех этих извращений могло быть простое желание запутать анализаторы антивирусов.

Murmoshka

10 мар 2012, 10:16
0
 

Не ведитесь, умоляю Вас, на провокации! Берегите Ваш разум!!!!!!!!!

Хотите правду? Все насчет Duqu / Stuxnet / X67 уже давно известно?
Как?
Потому что кроме самодеятельных подментованных криминалистов, вроде здешних, есть еще огромная агентура СВР и ГРУ. Потому что в разработке вышеупомянутой платформы были задействованы около 4500 программистов в центре разработке программных средств в Санта-Барбаре. Потому что на эту тему была отослана в разведцентр в Тропарево хренова туча донесений и это все было обработано нашими аналитиками, в том числе, из ИК на Профсоюзной.
Вас тут держат некоторые авторы на форуме за откровенных идиотов.
Я еще раз и еще раз повторяю, что им не нужны ваши познания, им не нужна ваша помощь, потому что предоставленные тут данные, скриншоты, явно недостаточны для полноценного криминалистического заключения. Эта серия статей - сама является обманкой, им надо выяснить IP адреса и взять на контроль всех, кто интересуется антивирусной тематикой, потому что ФСБ ведет аналогичные разработки (я имею в виду 18 лабораторию в ЦСТ - Центре специальной техники) и поэтому им надо нейтрализовать всех, кто может потенциально даже рассекретить аналогичные российские разработки. Понятно?
Маша

jman

10 мар 2012, 12:22
1
 

Re: Не ведитесь, умоляю Вас, на провокации! Берегите Ваш разум!!!!!!!!!

Мрак, пойду-ка я наверное шапочку из фольги куплю... :)

Murmoshka

10 мар 2012, 20:23
0
 

Re: Re: Не ведитесь, умоляю Вас, на провокации! Берегите Ваш разум!!!!!!!!!

Не поможет от микроволн. учи биофизику

Murmoshka

09 мар 2012, 18:15
0
 

Я конечно понимаю... но скажу

Привет привет всем!
Зовут меня Маша, Лукьянова, я вам вот что скажу.
Вся эта череда статей насчет вируса Duqu напоминает хорошо заезженный ФСБ-щный спектакль. Цель спектакля, по моему мнению, не узнать подробности насчет Duqu\Stuxnet, а выявить сетевых авторов, которые располагают какими-то знаниями насчет подобных вирусных технологий, открыть на них ДОУ и поставить их на контроль.

Зачем это нужно ФСБ?

Потому что программисты тесно общаются между собой, а даже у нас в Москве есть группы программистов, которые пишут по заказу ФСБ подобные вирусные программы. Некоторые из них прицельно встраиваются на личные страницы бесплатных сетевых вирусов типа Mail.ru или Vkontakte, другие реализуются путем подмены целевых сайтов (например, в режиме эмуляции сервера какой-нибудь газеты).

А ФСБ очень не любит, когда, говоря языком их агентов "кто-то палит конторку". Поэтому я бы на месте всех авторов выше приведенных комментариев не писала бы г-ну Гостеву и иже с ним НИЧЕГО.

Не поддерживайте тех, кто не против заниматься нечестными делами.

С уважением, Маша

akakist

09 мар 2012, 04:12
0
 

Поправка
Если объектом считать обычный объект C++, то это называется сервисом. Оно имеет свойства сервера (имеет адрес и ему можно сделать запрос).

Сейчас подобные фреймворки - самый модный тренд, если что.

akakist

09 мар 2012, 04:02
0
 

Событийно ориентированное программирование

Рулез, сами пользуем подобный фреймворк.
Действительно запаритесь реинжинирить, поскольку каждый объект имеет свой тред, а взаимодействие осуществляется евентами.
Т.е. после посылки евента исполнение возвращается в данном потоке, вам придется лазить по другим потокам, чтобы посмотреть, что происходит с евентом далее.

То, что вы описали - очень похоже.

mt_

09 мар 2012, 03:36
0
 

Передача параметров функций

Такой вопрос: вы анализировали методы передачи параметров в функции? Наверняка да.
Всегда ли они одинаковы? Какие варианты присутствуют?

Lyulchenko

09 мар 2012, 01:06
0
 

Jass))))

исправлено: Lyulchenko, 09 мар 2012, 01:44

mva

08 мар 2012, 22:34
0
 

хотелось бы подкинуть идею о том, что чисто теоретически сие может быть luajit'ом ;) На мысль натолкнуло заявление автора об реализации им под это дело нечто с названием DynAssembler ;)
Вполне возможно, что туда залинкована статически libluajit и написано на lua с C'шными FFI.
Собственно на идею о Lua тоже наталкивает похожесть на С.

К слову, может это просто FFI+LLVM, даже без привязки к Lua...

Игорь Суменков

08 мар 2012, 23:34
0
 

Re:

Lua'вский jit был проверен одним из первых. Генерит очень много функций рантайма, совсем не похожих на наш экземпляр.

ElfkbntVtyzGj;fkeqcnf

08 мар 2012, 21:48
0
 

Возможно фрагмент кода в первом блоке принадлежит LabView

Пруф линк:
http://forums.ni.com/t5/LabVIEW/Write-to-Binary-File-Function-Append-to-existing-file/td-p/1554594
Другими словами сочитание методов в одном объекте:
append_to_existing
count
Достаточно уникально само по себе.

Кроме того, применение LabView шикарно подходит по контексту:
+ микроконтроллеры
+ windows программа
+ асинхронный ввод - вывод
+ никто (некто) не разрабатывал свой компилятор, а пользовался чем-то стандартным.
+ не получается найти сам язык в виде текста (в LabView - графическое представление текста программы)

исправлено: ElfkbntVtyzGj;fkeqcnf, 08 мар 2012, 22:16

Игорь Суменков

08 мар 2012, 23:32
1
 

Re: Возможно фрагмент кода в первом блоке принадлежит LabView

Методы в дизассемблерном листинге мы назвали сами - это результат анализа кода.
Предположение интересное, спасибо, попробуем. Но, возможно, и не оно - по утверждению авторов LabView, скомпилированные им приложения сильно зависят от внешних библиотек рантайма.

Constantin E. Climentieff

09 мар 2012, 12:21
0
 

Re: Re: Возможно фрагмент кода в первом блоке принадлежит LabView

Я тоже сразу про LabView подумал. Только не про LabView, а про LabWindows/CVI - он строит СИ-шный код для ваткомовского компилятора. Но увы, этот код полностью завязан на обработку сообщений от лицевой панели. Можно ли "отвязать"? Не знаю.

eXtremal

08 мар 2012, 19:29
0
 

Создание полноценного компилятора "с нуля", как известно, очень затратно, не очень верится, что сейчас кто-то будет его реализовывать (хотя вероятность всё же есть). Поэтому для начала неплохо бы определить, что именно использовалось для генерации машинного кода. Это может быть компилятор C (msvc, gcc, clang, watcom, borland, Intel C++ и.т.д.), компилятор какого-либо другого языка в машинный код (Delphi разве что вспоминается), общедоступный backend компилятора (их 2 - gcc и llvm).

>>> Однако для классов Фреймворка Duqu этот порядок не фиксирован - параметр может передаваться в любом регистре или в стеке.

Хмм.. вот это отсекает почти все среды генерации кода, разве нет вообще абсолютно никакого соглашения о передаче параметров в функции? Даже в такой гибкой среде, как llvm, используются несколько фиксированных соглашений о передаче параметров (платформонезависимые, как cdecl, либо специфичные для ОС - win32 stdcall, win64 call, и.т.д). Если всё же такого соглашения нет, то похоже, что использовалась сильномодифицированная opensource (скорее всего llvm, ибо там разобраться и что-то переделать на порядок проще, чем в gcc) среда генерации кода, или всё-же что-то самописное - в этом случае frontend компилятора тоже самописный и язык определить будет сложнее.

Если инструмент кодогенерации будет определён, то это заметно облегчит поиск самого языка. Тут надо идти с двух сторон - выявить архитектурные элементы (этим уже занимаются, определили, что используется разновидность ООП, каждый объект содержит таблицу функций, в отличии от всех известных реализаций C++, где используется ссылка на vtable, и.т.д.) и, с другой стороны, собирая информацию о frontend-ах, использующих инструмент кодогенерации, определённый ранее... Наверное, такой подход лучше тупого перебора всех подряд компиляторов=)

Игорь Суменков

08 мар 2012, 23:39
-1
 

Re:

Вполне вероятно, что исходный код на некотором языке был сначала транслирован в C, а затем уже с оптимизацией скомпилирован чем-то известным, в таком случае наиболее вероятный кандидат - gcc (на msvc не похоже, возможно clang).
В случае, если использовалась межмодульная оптимизация, соглашения вызовов могли быть успешно откинуты.
Исходных языков мы перепробовали много, в том числе и трансляторы в Си - пока без видимого успеха.

Constantin E. Climentieff

09 мар 2012, 12:04
-1
 

Re: Re:

Гм. Кстати, мысль. Такие вещи умеет, например, XDS от компании Excelsior. Издохник пишется на Modula-2 или Обероне(в этих языках, кстати, и ООП прикручен), потом либо сразу линкуется, либо - что интересно! - предварительно при помощи XDSC перетранслируеся в C, чтобы можно было использовать любой другой компилятор.

eXtremal

09 мар 2012, 00:53
0
 

Re: Re:

>>> В случае, если использовалась межмодульная оптимизация, соглашения вызовов могли быть успешно откинуты.

В теории да, если указано, что функция имеет тип связывания Internal Linkage (в терминах llvm), то никакого соглашения о передаче параметров соблюдать вообще не надо... довольно таки продвинутая оптимизация, может посмотреть, какие инструменты её поддерживают? Причём не просто поддерживают, а умеют распределять регистры произвольным образом, как в исходном коде трояна.

Ещё можно попробовать чисто визуально угадать, что за компилятор=) Открыть в IDA что-нибудь скомпилированное msvc, gcc, clang, попытаться выявить характерные признаки (прологи/эпилоги функций, реализация switch-ей, и.т.д.)

>>> Таблица функций объекта находится непосредственно в его памяти и может быть изменена в процессе выполнения.

Если копать в другом направлении (через язык), то это очень похоже на прототипный подход http://en.wikipedia.org/wiki/Prototype-based_programming (ссылку на русскую страницу движок искажает)
Если язык использует классовый подход, то абсолютно незачем хранить vtable в каждом объекте.. ну только если чтоб запутать исследователей кода :) Там же в википедии есть список языков, которые этот подход используют.

И ещё, по характеру кода довольно просто определить типизацию языка.. по тем фрагментам, что тут выложены, скорее всего используется статическая типизация.. не очень представляю, как язык с динамической типизацией можно настолько сильно оптимизировать. Хотя кто его знает, может и можно, пока ничего подобного не встречалось.

исправлено: eXtremal, 09 мар 2012, 01:07

Для добавления комментариев необходимо


Bookmark and Share
Закладки

Также в аналитике

В блоге