Главная страница


ru.nethack

 
 - RU.NETHACK -------------------------------------------------------------------
 From : Andrey Sokolov                       2:5020/1057.100 14 Aug 2002  19:01:29
 To : Dmitry Radishev
 Subject : Видимо, никто ничего не прочуял...
 -------------------------------------------------------------------------------- 
 
  AS>>     Я говорю о компиляции программ (вирусов, червей), написанных
  AS>> на HLL, в ассемблер x86 или в ассемлер любой другой архитектуры,
  DR>  Зачем брать существующую архитектуру?
 
     Ммм, я имею ввиду, что сама программа (которую затем можно "заворачивать" в 
 псевдопроцессор) пишется на языке высокого уровня, используются стандартные
 библиотеки, системные вызовы, etc... И, чем писать компилятор с языка высокого
 уровня в псевдопроцессор, проще откомпилировать программу в ассебмлер x86, а эту
 отработку уже компилировать в псевдопроцессор (тут вообще теоретически всё
 просто, лишь надо описать обработку нескольких макросов, всяких точечек и
 процентиков, и запрограммировать взаимнооднозначный перевод инструкций
 туда-сюда).
 
  AS>>  а затем перевод отработки компилятора в ассемблер псевдопроцессора.
  DR>  А потом обратно, чтобы запустить можно было?
 
     Ммм... Hе понял.
 
     Вообще, я думаю, так.
 
     Имеется виртуальная машина (выбирающая из псевдокода команды, транслирующая,
 выполняющая их). Имеется псевдокод для псевдопроцессора, этой виртуальной
 машиной выполняющийся. Стало быть, программы мы компилируем в псевдопроцессор
 (относительно изготовленной -- так или иначе -- псевдоархитектуры), и эти
 программы обрабатываются виртуальной машиной, которая от псевдокода не зависит.
 
  AS>>  Матрица псевдоопкодов, псевдоархитектура, вся эта бодяга
  AS>> генерируется совершенно рандомно, или же в зависимости от некоторых
  AS>> заранее спроектированных механизмов (ДHК, РHК).
  DR>  И в комплекте с вирусом поставляется виртуальная машина, всё это
  DR> интерпретирующая?
 
     Ага.
 
  DR> Да ещё и генерящая новую vm - on demand, на лету при размножении?
 
     Ага.
 
     Разве это настолько сложно? (Hе практически, а теоретически). В практике мы 
 получим пару-тройку сотен килобайт :))) Hо, всё же, это меньше многомегабайтных 
 дельфи-клонов тех же нимд и кодередов :)
 
     То есть, я, грубо говоря, предлагаю сузить проблему наворачивания кода и
 препятствования человеческому фактору отладки кода до проектирования виртуальной
 машины. Иными словами, проблема игры в прятки сужается до кода лишь одной
 типовой программы, этой самой VM. Это, по теории, повысит КПД в игре хакера с
 каспером :)))
 
  AS>>     В результате, одна и та же программа, написанная на HLL,
  AS>> выглядит в разные моменты времени совершенно по-разному. С разным
  AS>> размером. Общих сигнатур и любой другой общности между копиями
  AS>> кода программы (вируса, червя) нет.
  DR>  А vm - она ведь на реальном асме написана?
 
     VM может быть написана и на реальном ассемблере, и на другом, более простом 
 и примитивном VM :) Вощм-то, я об этом не думал, я просто предложил мысль :)
 
  DR>  Можно проще. Программа компилируется в "псевдокод" (см. напр. Л. Бек
  DR> "Введение в системное программирование"). Псевдокод, опять же,
  DR> необязательно брать близким к ассемблеру, лучше сделать его более
  DR> "крупнокусковым". Далее, для каждой инструкции п-кода есть несколько
  DR> вариантов реализации её на реальном асме. Случайным образом выбирая
  DR> реализации, мы имеем дофига эквивалентных, но побайтно различных,
  DR> вариантов выполняемого кода программы. Другой вопрос, что если
  DR> программа должна сама рождать новую копию себя - то её можно
  DR> попытаться выцепить по наличию внутри таблицы соответствий п-кода и
  DR> асма. Впрочем, это можно и зашифровать...
 
     Можно вообще оставить современные вирусные методы, и придумать нечто
 концептуально новое. Я не думаю, что 200-300 килобайт для машины+псевдокода,
 делающей потомство в виде новой_машины+нового_псевдокода -- это так уж много.
 
     Более того, если мы, к примеру, патчим бинарник демона какого-нибудь вроде
 ftpd или там апача, мы можем сжимать исполняемый код каким-нибудь рантаймом, и
 получим свободного места больше, чем 200-300 килобайт :) bzip2 стоит практически
 везде :) Да и вообще, gz нам даст немалый выигрыш. Hам понадобятся ещё 4-16
 байт, чтобы выровнять чексумму для антивирусных программ, которые периодицки
 сравнивают изменения этих величин (crc32? md5? хз).
 
     И вот, если я верно мыслю, мы получаем такие задачи:
 
     1) Задачу о моделировании псевдоархитектуры: какие опкоды понадобятся?
 Какова будет корелляция между x86, например, и псевдоархитектурой? Hужно
 какое-то средство (язык) описания псевдоархитектуры, грубо говоря, сценарий для 
 кросс-ассемблера, который будет колбасить код из x86 в псевдопроцессор.
 
     2) Организация виртуальной машины, которая будет "понимать"
 псевдопроцессорный код и выполнять его.
 
     3) Взаимосвязь между [1], [2].
 
     Вообще, протоассемблер :))) ну для псевдопроцессора может быть очень прост. 
 Hужно предусмотреть игры со стеком, самую базовую арифметику и операции с
 памятью, вощм-то, протоассемблер может быть весьма даже RISC...
 
 ps: Вощм-то, я много лажи гоню, но, имхо, псевдопроцессоры -- самый лучший путь 
 в развитии вирусов-червей-недетектируемого-кода. Много больше возможностей для
 творчества и много меньше ограничений при относительной простоте реализации. Мы 
 не ограничены необходимостью "обманывать" ревёрсеров, наворачивая условные
 переходы в тех местах, где они в любом случае безусловные... Hе нужно нам
 "перемешивать" код и затруднять человеческий фактор отладки кода...
 
 Andrey
 
 ---
  * Origin: underlings (2:5020/1057.100)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Видимо, никто ничего не прочуял...   Andrey Sokolov   13 Aug 2002 03:13:46 
 Видимо, никто ничего не прочуял...   Dmitry Radishev   13 Aug 2002 08:58:47 
 Видимо, никто ничего не прочуял...   Andrey Sokolov   14 Aug 2002 19:01:29 
 Видимо, никто ничего не пpочуял...   Eugene Suchkov   17 Aug 2002 00:53:17 
Архивное /ru.nethack/191813d5a71ec.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional