|
|
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) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.nethack/191813d5a71ec.html, оценка из 5, голосов 10
|