Важный фрагмент кода известного трояна Duqu написан на неизвестном до сих пор языке программирования, рассказал CNews главный антивирусный эксперт «Лаборатории Касперского» Александр Гостев.
Фрагмент кода, написанный на неизвестном языке программирования, получил в «Лаборатории Касперского» название «Фреймворк Duqu». Он предназначен для обмена информацией между модулем, внедряемым в операционную систему заражаемого ПК и командными серверами Duqu.
По словам эксперта, при изучении Duqu аналитиками «Лаборатории Касперского» было проверено около трех десятков языков программирования, «включая Brainfuck и Haskell». «Мы пытаемся распознать его с ноября 2011 г. Мы спросили самых серьезных специалистов-реверсеров в Microsoft, но не нашли языка, который бы создавал подобный код», — говорит Александр Гостев.
Напомним, что о трояне Duqu стало известно 1 сентября 2011 г. По предположению экспертов, этот троян был создан для точечных атак и кражи информации из компьютеров промышленных объектов, а также правительственных и коммерческих структур Ирана.
08.03.12 12:33: Перенесено модератором из 'Компьютерные священные войны' — kochetkov.vladimir
Re: Троян Duqu написан на неизвестном языке программирования
Здравствуйте, rttrtt, Вы писали:
R>Важный фрагмент кода известного трояна Duqu написан на неизвестном до сих пор языке программирования, рассказал CNews главный антивирусный эксперт «Лаборатории Касперского» Александр Гостев.
Nemerle уже проверяли? (дежурная шутка)
R>По словам эксперта, при изучении Duqu аналитиками «Лаборатории Касперского» было проверено около трех десятков языков программирования, «включая Brainfuck и Haskell». «Мы пытаемся распознать его с ноября 2011 г. Мы спросили самых серьезных специалистов-реверсеров в Microsoft, но не нашли языка, который бы создавал подобный код», — говорит Александр Гостев.
Интересно, как именно они их проверяли?
The God is real, unless declared integer.
Re: Троян Duqu написан на неизвестном языке программирования
Здравствуйте, rttrtt, Вы писали:
R>Важный фрагмент кода известного трояна Duqu написан на неизвестном до сих пор языке программирования, рассказал CNews главный антивирусный эксперт «Лаборатории Касперского» Александр Гостев.
Ассемблер — это не язык?
Вселенная бесконечна как вширь, так и вглубь.
Re[2]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, Real 3L0, Вы писали:
R3>Здравствуйте, rttrtt, Вы писали:
R>>Важный фрагмент кода известного трояна Duqu написан на неизвестном до сих пор языке программирования, рассказал CNews главный антивирусный эксперт «Лаборатории Касперского» Александр Гостев.
R3>Ассемблер — это не язык?
Можно считать, что нет, это не язык, это метаязык. Ассемблер без макросов — это автокод (был такой удобный термин в советское время). С набором макросов ассемблер превращается в произвольный язык, хоть и с сильными ограничениями. Вот загляните сюда — пример, что можно сделать из ассемблера.
Если кто-то породит набор таких макросов, он сможет неплохо писать под конкретную задачу и не будет похоже ни на один язык программирования среднего или высокого уровня...
The God is real, unless declared integer.
Re[2]: Троян Duqu написан на неизвестном языке программирова
Большинство языков программирования имеют специфические порядки следования инструкций. Например, работа со стеком (уже по этому признаку определяются многие языки), calling conventions.
Один из самых простых способов определить язык — последовательно скармливать различным дизассемблерам. Простые случаи вроде C/C++ отлавливаются без проблем. Не очень понимаю, как в этом смысле определить Brainfuck (я в целом не специалист в этом вопросе ).
Ассемблер, кстати, если писать традиционными путям (даже почти без макросов), тоже можно определить (по структурам данных, сегментов и т.п.).
Вообще, IMHO, поверх сгенерированного бинарного кода мог пройти бинарный обфускатор. Тогда характерные особенности кодогенераторов вряд ли удастся найти.
PS: ах да, еще по набору вызываемых инструкций процессора зачастую можно даже опции компилятора узнать, не то что язык.
Re[3]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, SkyDance, Вы писали:
SD>Один из самых простых способов определить язык — последовательно скармливать различным дизассемблерам.
ужос! понабрали..
SD>Ассемблер, кстати, если писать традиционными путям (даже почти без макросов), тоже можно определить (по структурам данных, сегментов и т.п.).
по каким таким структурам данных и по каким сегментам?
про те которые в PE формате или про что?
Re[4]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, rttrtt, Вы писали:
R>По словам эксперта, при изучении Duqu аналитиками «Лаборатории Касперского» было проверено около трех десятков языков программирования, «включая Brainfuck и Haskell».
Здравствуйте, Lazytech, Вы писали:
L>Здравствуйте, rttrtt, Вы писали:
R>>По словам эксперта, при изучении Duqu аналитиками «Лаборатории Касперского» было проверено около трех десятков языков программирования, «включая Brainfuck и Haskell».
L>Я не программист,
Маловероятно. У скомпилированного фортовского кода очень чёткий вид. Грубо говоря, это небольшой кусок машинного кода с непосредственным выполнением действий, дальше большой блок кусков, в которых преобладают над всем вызовы подпрограмм (напрямую машинными командами или просто списками адресов), небольшое количество втиснутых прямо в код констант и чёткая цепочка определённых программистов "слов" с их именами и ссылками между ними. Конкретная адаптированная реализация может терять или модифицировать какие-то части этого набора (например, список словаря ведётся отдельно и затем дискардится), но не все и не до конца. Или у касперского предельно тупые эксперты (не верю), или это не Форт.
The God is real, unless declared integer.
Re[3]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, netch80, Вы писали:
L>>Я не программист,
N>В каком смысле?
В буквальном. Про Форт знаю потому, что он используется в моем любимом скриптере nnCron.
N>Маловероятно. [skip] Или у касперского предельно тупые эксперты (не верю), или это не Форт.
Понятно.
Re[4]: Троян Duqu написан на неизвестном языке программирова
Собственно из этого поста и высосана вся остальная шумиха. Умение быстро находить первоисточник в наше время первейший скилл.
А то развели блин балабольства на целую страницу.
Re: Троян Duqu написан на неизвестном языке программирования
Здравствуйте, wildwind, Вы писали:
W>Умение быстро находить первоисточник в наше время первейший скилл.
Если честно, на первоисточник я набрел чисто случайно: "Форт" "Duqu"
Кстати, результаты гуглопоиска уже изменились: буквально пару часов назад ссылка на ту статью была на 2-м месте.
Re[6]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, Lazytech, Вы писали:
L>Здравствуйте, wildwind, Вы писали:
W>>Умение быстро находить первоисточник в наше время первейший скилл.
L>Если честно, на первоисточник я набрел чисто случайно: "Форт" "Duqu" L>Кстати, результаты гуглопоиска уже изменились: буквально пару часов назад ссылка на ту статью была на 2-м месте.
Лучше вместо "Форт" напиши "Forth"
The God is real, unless declared integer.
Re: Троян Duqu написан на неизвестном языке программирования
http://www.securelist.com/ru/blog/41063/Zagadka_freymvorka_Duqu
> Расположение полей в памяти объекта зависит от конкретного класса. Например, не у всех классов таблица функций находится в начале. При этом у некоторых классов бинарно совместимы таблицы функций, но прямых указаний на наличие у них общего класса-предка, как в других объектно-ориентированных языках, не обнаруживается.
о! у причастного к этому работают мозги
> В большинстве объектно-ориентированных языков методы получают параметр «this», при этом порядок передачи этого параметра обычно фиксирован — в определенном регистре или параметре в стеке. Однако для классов Фреймворка Duqu этот порядок не фиксирован — параметр может передаваться в любом регистре или в стеке.
это конечно хорошо, но уже делались предположения насчет Internal Linkage (в терминах llvm) и последующих оптимизаций
Re[2]: Троян Duqu написан на неизвестном языке программирова
Здравствуйте, m e, Вы писали:
ME>http://www.securelist.com/ru/blog/41063/Zagadka_freymvorka_Duqu
>> Расположение полей в памяти объекта зависит от конкретного класса. Например, не у всех классов таблица функций находится в начале. При этом у некоторых классов бинарно совместимы таблицы функций, но прямых указаний на наличие у них общего класса-предка, как в других объектно-ориентированных языках, не обнаруживается.
>> В большинстве объектно-ориентированных языков методы получают параметр «this», при этом порядок передачи этого параметра обычно фиксирован — в определенном регистре или параметре в стеке. Однако для классов Фреймворка Duqu этот порядок не фиксирован — параметр может передаваться в любом регистре или в стеке.
ME>это конечно хорошо, но уже делались предположения насчет Internal Linkage (в терминах llvm) и последующих оптимизаций
Обфускацию забыли как вариант)
Реально это может быть си с кодогенерацией, где кодогенерация реализует некую простую модель сервисов. Тогда и таблица функций будет "где придётся", и прототипное ООП будет чем-то напоминать, и функции для простоты кодогенерации станут массово виртуальными, и обмен сообщениями как основа взаимодействия объектов достаточно органично вписывается. Не такой уж большой по размеру фреймворк вырисовывается, чтобы думать про что-то ещё.
Старые книжки, середины-конца 90-х, часто рекомендовали подобный подход, даже в the pragmatic programmer есть глава на тему.