hackerszone All about Computer

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » hackerszone All about Computer » Исследование... » Тушим свет самомодифицирующимся кодом.


Тушим свет самомодифицирующимся кодом.

Сообщений 1 страница 5 из 5

1

Статья написана исключительно в целях показать несовершенствие антивирусных программ. За причинение кем либо, какого либо вреда автор ответственности не несёт.

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

В качестве подопытного кролика я взял прогу Netbios Password Cracker (NPC) ver. 0.04b, написанную MAD'ом. Так как у меня стоит Антивирус Касперского Personal 5.0.372 с базами от 11.03.2006, то и результаты будем скармливать ему (мож подавиться :D ).

Для выкалывания глаз касперу, нам понадобится пакер (я пользовал ASPack ver. 2.12), ре-эдитор(LordPE или по вкусу) и hex-редактор ( HIEW само-то ).

Коротко по теме:
В принципе сбить с толку антивирь мона просто запаковав ехешник и затерев сигнатуры пакера, а еще лучше заменить их на сигнатуры других, более продвинутых пакеров. Но стоит только этим сигнатурам попасть в базу антивируса, всё пропало.
Мы пойдем другим путём. Попробуем внедрить в бинарник самомодифицирующийся код, который просто не даст виртуальной машине антивиря себя проэмулировать (подавится).

Для начала проверим, действительно ли каспарян обнаруживает прогу.
Ну вот каспер однозначно кричит что npc.exe является потенциально опасным ПО HackTool.Win32.NSS.a, во как. Приступим...
NPC.exe уже запакован UPX' ом, но upx + самомодифицирующийся код ни к какому результату не приведет, разве что исспользовать средства структурного исключения, то биш SEH. Используя SEH некоторые вредоносные проги можно вообще не паковать, никакой антивирус не в состоянии сэмулировать структурные исключения. Но это тема отдельного разговора. Не буду описывать как я распако-запаковывал npc.exe ASPack'ом, но вот он, запакованый npc.exe :)

Внедрять код придется куда нить в середину файла, потому что некоторые вири внедряются в заголовок либо в последнюю секцию, а для антивирусов обнаружить это раз плюнуть.
Начнемс...Грузим упакованый файл в HIEW, теперь нам надо просмотреть таблицу секций, для этого давим F8 затем F6 и видим секции что-то вроде:

1 .text
2 .rdata
3 .data
4 .rsrc
5 .aspack
6 .adata

Далее выбираем любую секцию по середине, наприм .data, жмём ENTER и попадаем в начало секции:
/---------------------------------------------------------------------------------------------/
.0040D000: 1803                         sbb       [ebx],al                     
.0040D002: BBA9991980            mov      ebx,0801999A9
.0040D009: BBB96C96A2           mov      ebx,0A2966CB9 
.0040D00E: CB                            retf                                   
.0040D00F: 78EF                         js       .00040D000
/---------------------------------------------------------------------------------------------/ 

Пролистываем немного вверх и попадаем на полянку с множеством нулей, 

/---------------------------------------------------------------------------------------------/
.0040ABE0: 0000                         add       [eax],al                     
.0040ABE2: 0000                         add       [eax],al                     
.0040ABE4: 0000                         add       [eax],al                     
.0040ABE6: 0000                         add       [eax],al                     
.0040ABE8: 0000                         add       [eax],al                     
.0040ABEA: 0000                         add       [eax],al                     
.0040ABEC: 0000                         add       [eax],al                     
.0040ABEE: 0000                         add       [eax],al                     
.0040ABF0: 0000                         add       [eax],al                     
.0040ABF2: 0000                         add       [eax],al                     
.0040ABF4: 0000                         add       [eax],al                     
.0040ABF6: 0000                         add       [eax],al                     
.0040ABF8: 0000                         add       [eax],al                     
.0040ABFA: 0000                         add       [eax],al                     
.0040ABFC: 0000                         add       [eax],al                     
.0040ABFE: 0000                         add       [eax],al                     
.0040D000: 1803                         sbb       [ebx],al                     
.0040D002: BBA9991980            mov       ebx,0801999A9
.0040D007: 002A                         add       [edx],ch                     
.0040D009: BBB96C96A2           mov       ebx,0A2966CB9
/------------------------------------------------------------------------------------------/

это конец предыдущей секции, выбираем любой понравившийся адрес ( желательно с запасом нулей), вот сюда то и будет направлена наша новая точка входа (EntryPoint). Я выбрал адрес 0040ABF0h, записываем его аккуратно, нам он еще пригодится.
Теперь надо изменить точку входа. Закрываем hiew (F10), бежим в LordPE, запускаем PE Editor, выбираем нашего пациента и смотрим...
EntryPoint и ImageBase заносим на кусок бумажки для дальнейших математических оперций. В моём случае:

EntryPoint = 00023001h
ImageBase = 00400000h

Теперь надо вычислить нашу новую точку входа, для этого просто надо из выбранного нами ранее адреса вычесть базовый адрес загрузки(ImageBase): 

0040ABF0h - 00400000h = 0000ABF0h (спасибо училке по математике :D

Там же в PE-Editore меняем старую EP (00023001h) на нашу (0000ABF0h), и жмем батон <Save>, затем <OK>.
Всё! Теперь у нас другая точка входа :)
Осталось внедрить код... Грузим наш файл в hiew, нажимая F8->F5 попадаем на наш адрес.
Немного о нашем внедрении. Мы просто поместим в стек инструкцию безусловного перехода на оригинальную точку входа и перейдём к исполнению ентой инструкции. Для этого используем последовательность команд:

mov      eax, <адрес старой точки входа>
push     E0FF
jmp       esp

Вот собственно и весь код. E0FF это ни что иное как машинный код команды jmp eax. А адрес старой точки входа вычисляем тем же путем предложенным учительницей 4-го класса-Марь Михайловной :) , то бишь сложением записанными ранее EntryPoint и ImageBase:

00023001h + 00400000h = 00423001h

Для редактирования в hiew жмём F3 и пишем код, получится что-то вроде этого:

/--------------------------------------------------------------------------------------------/
.0040ABEC: 0000                         add       [eax],al                     
.0040ABEE: 0000                         add       [eax],al                     
.0040ABF0: B801304200             mov       eax,000423001   // Помещаем в eax адрес старой ЕР
.0040ABF5: 68FFE00000             push      00000E0FF         //Помещаем с стек команду jmp eax
.0040ABFA: FFE4                         jmp       esp                      //Исполняем команду jmp eax   
.0040ABFC: 0000                         add       [eax],al                     
.0040ABFE: 0000                         add       [eax],al                     
.0040D000: 1803                         sbb       [ebx],al                     
.0040D002: BBA9991980            mov       ebx,0801999A9
/--------------------------------------------------------------------------------------------/

Жмем F9 для сохранения результатов и выходим из hiew (F10).
Фу-у-ух всё. Проверяем модифицированный файл каспаряном, хе-хе-хе спиииит и ухом не ведёт.... :D

// by vol4nd  ^^._.^^

0

2

Респект!
Сам написал?

0

3

BLADE написал(а):

Сам написал?

Сам..., а не погоди училка по математика помогла :D
ЗЫ: Думаю написать еще исспользования структурных исключений.

0

4

vol4nd написал(а):
BLADE написал(а):

Сам написал?

Сам..., а не погоди училка по математика помогла :D
ЗЫ: Думаю написать еще исспользования структурных исключений.

Училке респект!Дай-ка мне ее мыло,пообщаться хочется! :D

0

5

или асю:P

0


Вы здесь » hackerszone All about Computer » Исследование... » Тушим свет самомодифицирующимся кодом.