Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› криптование вируса
Посл.ответ Сообщение

Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 07 февраля 2006 12:51
· Личное сообщение · #1

я поднимал эту тему на васме но ответов не увидел потом васм упал а тема для меня счас важна. поэтому я подниму ее здесь.

хотелось бы услышать мнений на сколько это перспективно, так же буду рад вашим советам и идеям.

-----

моя идея шифровки тела вируса.


ситуация такова запускается файл скажем some.exe. мы ищем в его секции кода по маске типичные куски кода к примеру возмем
стандартные прологи. находим штук 15 (количество на свой вкус) и ставим там бряки (например переходы на свою внедренную
в процесс длл). из сработавших выбираем любой. там мы всунем джамп а тело нашего вируса. а теперь вот в чем вся соль
на входе в вирь мы будемвести статистику по регистрам и содержимому стека (глубиной дворда на 4). будем вести эту статистику
скажем скажем на протяжении 10-20 запусков. потом посмотрим какие регистры были неизменны на каждом запуске программы и какие
данные в стеке оставались неизменны. на основе этих данных мы построим расшифровщик тела вируса. вот приблизительно какой код
получится

...
original code
....
....
....
mov ebx, some offset
push ebx
push 3453453 ; some param
call some_proc
...
...
mov ebx, some other offset
push ebx
push fffd53 ; some other param
call some_proc ; первой срабатывает допустим эта
...
...

some_proc:
вот допустим мы и внедрились в этот пролог

jmp virus_decoder

....

virus_decoder:

и вот тут у нас такой раскодировщик


mov ecx, ebx
add ecx, ; разница между ebx и длиной вируса
mov eax, [esp]
mov edx, [esp+4]
mov edi, ; разница между началом вирусного тела и some other param

decode:
xor [edi], eax
add eax, edx
add edi, 4
loop decode
add eax, ;разница между eax на этом этапе и точкой входа

jmp eax

......


по поводу тела вируса


оно сохранено так

---- virus body ----
случайное количество случайных байт
---- real virus body ---

------------------------
случайное количество случайных байт
--------------------------

это для того чтоб всякие товарищи не брутфорсили пару двордов =)



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



эта идея результат крекерсой практики. ставиш бряк на какойнебудь процедурке запускаеш прогу потом еще несколько раз
запускаеш и видишчто даже esp один и тотже =).

-----
power and the money money and the power




Ранг: 41.2 (посетитель)
Активность: 0.030
Статус: Участник

Создано: 07 февраля 2006 14:08
· Личное сообщение · #2

doctor Ice
По поводу твоего кода
Считай твою идею если она стоящая подхватят вирмейкеры,
ну где-то через неделю, а еще через неделю каспер и вебер палить будут.
твою пеработаную сигну.
Думаю Ara напишит ЛОЛ.



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 07 февраля 2006 14:35
· Личное сообщение · #3

Да причем тут код? да он вообще ничего не стоит эо херь я задумал нехилый метаморф =) или даже не метаморф =) ИДЕИ ВОТ ЧТО ИМЕЕТ ЗНАЧЕНИЕ!

-----
power and the money money and the power




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 07 февраля 2006 15:26
· Личное сообщение · #4

блин народ тема то имхо козырная. участвуем! давайте ваши предложения по улучшению.

-----
power and the money money and the power




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 07 февраля 2006 15:45
· Личное сообщение · #5

тут кстати могут быть траблы если в кодовой секции например зашифрованные данные а мы втыкнем в них свой бряк =( тут можно на кодовую секцию поставать атрибут только выполнение и следить за исключениями.

-----
power and the money money and the power




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 07 февраля 2006 17:04
· Личное сообщение · #6

По моему не стоит следить за состоянием регистров и менять дескриптор после скольки-то там запусков.
Легче так:

mov esi,vir_off ;\
mov ecx,vir_size ;где-то в теле проги такой кусочек будет очень непосто найти.
mov edx,key ;
jmp descrypt ;/

...
descrypt:
дескриптор
......

doctor Ice
тут кстати могут быть траблы если в кодовой секции например зашифрованные данные а мы втыкнем в них свой бряк =( тут можно на кодовую секцию поставать атрибут только выполнение и следить за исключениями.

А как ты собираешься за исключениями следить если ещё управления не получал???
Вариант: смотрим на начало some proc и если там есть
push ebp
sub esp,xx
mov epb,esp
, то вероятно тело проги не криптовано.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 07 февраля 2006 17:06
· Личное сообщение · #7

Этот пост теперь вирусология называется???



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 09:11 · Поправил: doctor Ice
· Личное сообщение · #8

asd
А как ты собираешься за исключениями следить если ещё управления не получал???
Вариант: смотрим на начало some proc и если там есть

а вообще твоя идея мне понравилась - надежно =)

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

-----
power and the money money and the power




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 08 февраля 2006 09:47
· Личное сообщение · #9

ААА тупой я. Наконец-то допёрла до меня твоя идея.
В принципе может неплохо получиться.
Хотя следить за состоянием регистров - это изврат ИМХО. Легче самим их перед прыжком на дескриптор настроить. результат тот же будет в плане незаметности




Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 08 февраля 2006 09:51
· Личное сообщение · #10

doctor Ice
Давай напиши сначала такой вирус, а я его поймаю, причем без трейса и эмуляции.

-----
Скажем дружно - нафиг нужно.




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 10:04
· Личное сообщение · #11

Ms-Rem
К чему ваш пост? все и так в курсе что вы очень крутой. Вы бы лучше что нибудь посоветовали а вам я уверен есть что подсказать.

Да и дело то совсем не в неуловимости =) я добиваюсь нелечимости или хотябы максимального затруднения лечимости я добиваюсь того чтобы врямя на детекцию и лечение было просто абсурдным.

-----
power and the money money and the power





Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 08 февраля 2006 10:11
· Личное сообщение · #12

doctor Ice пишет:
я добиваюсь нелечимости или хотябы максимального затруднения лечимости я добиваюсь того чтобы врямя на детекцию и лечение было просто абсурдным.

ЗАЧЕМ??? Чтобы потом писать "интересные" крякми?

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 10:26
· Личное сообщение · #13

ValdiS
Да что угодно хоть кряк-ми хоть протекторы хоть вири. для меня сейчас это в большей стпени просто интересная задачка (последний мой вирь был под вин 3.1 и дальше моего компа он не ушел).

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

-----
power and the money money and the power





Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 08 февраля 2006 10:32 · Поправил: Ms-Rem
· Личное сообщение · #14

doctor Ice пишет:
К чему ваш пост? все и так в курсе что вы очень крутой. Вы бы лучше что нибудь посоветовали а вам я уверен есть что подсказать.
Да и дело то совсем не в неуловимости =) я добиваюсь нелечимости или хотябы максимального затруднения лечимости я добиваюсь того чтобы врямя на детекцию и лечение было просто абсурдным


А пост к тому, что я хочу сказать что вирус подобной системы можно будет поймать довольно простыми средствами. Универсальный способ тут предложить трудно, нужно иметь на руках конкретный вирус чтобы сделать процедуру его поиска. Вот я и говорю что делай вирус, и тогда посмотрим насколько неуловимым он получиться. Насчет нелечимости и большого времени на детекцию я тоже сильно сомневаюсь.

-----
Скажем дружно - нафиг нужно.





Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 08 февраля 2006 10:44 · Поправил: Ms-Rem
· Личное сообщение · #15

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

-----
Скажем дружно - нафиг нужно.




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 11:33
· Личное сообщение · #16

вот это уже интересно.
так адрес стека нас на самом деле не волнует я esp использовать не собирался на самом деле.

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

>При переборе зная особенности конкретного вируса можно сузить диапазон поиска и пропускать >случайные байты сразу вычисляя точку входа вирусного тела.
Как? даже сам декриптор незнает сколько там случайных байт декритор будет декриптить и случайные байты так будто это часть тела вируса.

>Если иде привязка декриптора к большому числу регистров или данных в стеке, то скорее всего придется >запускать программу и ставить бряк на это место.
вот этого я и добиваюсь. а что если эта процедурка будет гдето внутри обработчика оконных сообщений =) то просто запустить не прокатит придется еще и батоны давить все подряд =)


вот кажется начинается реально интересное обсуждение =)

-----
power and the money money and the power




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 11:50
· Личное сообщение · #17

кстати у кого нибудь есть сорцы какогонибудь компрессора на асме чтоб жал не хуже зипа?

-----
power and the money money and the power





Ранг: 120.6 (ветеран)
Активность: 0.090
Статус: Участник
rootkit developer

Создано: 08 февраля 2006 11:59 · Поправил: Ms-Rem
· Личное сообщение · #18

doctor Ice пишет:
Да тут нужен жирный метаморф и тогда ложные срабатывания сделают этот метод абсурдным.

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


doctor Ice пишет:
Как? даже сам декриптор незнает сколько там случайных байт декритор будет декриптить и случайные байты так будто это часть тела вируса.

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

-----
Скажем дружно - нафиг нужно.




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 12:11
· Личное сообщение · #19

> Правда это сильно зависит от примененного алгоритма шифрования.
Вот здесь архивация тоже будет кстати =) а мусорные байты и правда лучше делать неслучайными!!!! типичные куски кода будут в самый раз.

>Для лечения необязательно расшифровывать тело вируса.
ну естественно мы попортим филейные части прожки (смотреть тему про внедрение тела - покриптуем те куски).

спасибо за подсказку о мусоре.

-----
power and the money money and the power




Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 08 февраля 2006 15:05
· Личное сообщение · #20

Ms-Rem
Ну, против любого метаморфа можно будет сделать алгоритм обнаружения не дающий ложных срабатываний
Отлично, пишем червя, который распространяется по сети. Когда его обнаруживают, мы создаём службу, которая контролирует поражаемый червём порт и осуществляет его модификацию. И выпускаем пропатченного червя. С вирусом будет сложнее, идиотов мало его запускать.
Да, как бы вот сделать чтобы код полностью мутировал и при этом ни какой бы антивирус это не палил. Сложно себе это представить.



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 08 февраля 2006 15:19
· Личное сообщение · #21

NullSession

>Да, как бы вот сделать чтобы код полностью мутировал и при этом ни какой бы антивирус это не палил. >Сложно себе это представить.

есть одна идея...очень хорошая такая... я ее немного обмозгую еще и изложу...

-----
power and the money money and the power




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 08 февраля 2006 16:45
· Личное сообщение · #22

NullSession
Да, как бы вот сделать чтобы код полностью мутировал...

Пермутация??? ну-ну...

NullSession
...и при этом ни какой бы антивирус это не палил.

не палил щас или не палил вобще???

если щас, то не такая уж и нерешаемая проблема, а вот чтоб и через неделю\месяц, то действительно сложно. А если вобще, то это AI какой-то

А теперь по делу:
такое вот размышление: не так уж много найдётся в нынешних прогах процедур у которых нет пролога ИМХО. Если ты будешь затирать пролог джампом, то это уже будет являться подозрительным. Достаточно будет проверить все call , и там где нет пролога проверить более акуратно. Так что пролог лучьше не затирать.



Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 08 февраля 2006 18:15
· Личное сообщение · #23

asd пишет:
Достаточно будет проверить все call

no comments



Ранг: 2.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 февраля 2006 18:18
· Личное сообщение · #24

Кстати, а никто не задумывался о функциях, состоящих из одного JMP на полученное от GetProcAddress значение? Можно было бы не затирать прологи, а изменить генерируемый компилятором код: найти себе местечко в файле, изменить эту самую переменную на вход вируса и в месте кода, вызывающем GetProcAddress изменить очень распространенный MOV [адрес], EAX на переменную в теле вируса, которую потом и используем в конце вирусного кода как адрес возврата.
Заодно это даст возможность пережить трудные времена, в случае если функция вызывается редко.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 08 февраля 2006 19:34
· Личное сообщение · #25

infern0
no comments

Я понтмаю, что это не мало, но это всё же лучьше, чем искать полиморфный дескриптор по всему файлу.



Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 11 февраля 2006 07:55
· Личное сообщение · #26

awesome
Кстати, а никто не задумывался о функциях, состоящих из одного JMP на полученное от GetProcAddress значение?
Это будет подозрительно для эвристического анализатора. Ещё несколько таких трюков, и Вы объявлены вирусом. Потому что ни в одной программе такого практически не бывает. Разве что в процедуре обработки сообщений, там jmp даёт существенную экономию.



Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 11 февраля 2006 08:23
· Личное сообщение · #27

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

mov eax, x
add eax, y
call eax

-----
power and the money money and the power





Ранг: 85.7 (постоянный)
Активность: 0.110
Статус: Участник

Создано: 14 февраля 2006 12:46
· Личное сообщение · #28

Virgo пишет:
По поводу твоего кода
Считай твою идею если она стоящая подхватят вирмейкеры,
ну где-то через неделю, а еще через неделю каспер и вебер палить будут.

ИМХО, Win32.Neshta. Создан в Белоруси. Ноябрь 2005 года. Заражены были почти все знакомые. А Касп до сих пор лечить его не может только удаляет. А на вируслист его вообще нету. Справляется только ДрВеб последней версии и с новыми базами. Еще не известно подхватят ли его вирмейкеры или нет. Как будто ты один такой умный и решил закриптовать тело .
З.Ы. Вирус пишутся на публику или "другу" дать хочется?

-----
Я фантомас, а ты гавно




Ранг: 79.6 (постоянный)
Активность: 0.060
Статус: Участник

Создано: 15 февраля 2006 09:02
· Личное сообщение · #29

Rid3r

пока разрабатывается технология интерес теоретический а потом кто знает....

-----
power and the money money and the power



 eXeL@B —› Программирование —› криптование вируса
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати