Я тута в aspack увидел: public main main proc near pusha call first_anti db 0E9h ; first bad byte main endp main_metka: jmp short sekond_anti first_anti: pop ebp inc ebp push ebp retn ; jmp main_metka sekond_anti: call start_code db 0EBh ; sekond bad byte start_code: Это же не писк моды дизассемблирования?! )) Какие еще есть?
Что-то я не понял что это за first Bad Byte и sekond Bad Byte. jmp без операндов. Для чего? И что случится при их выполнении?
(Эта) подобная тема как раз недавно обсуждалась в треде А бывает относительный безусловный jmp? не полностью понятно что кого куда вызывает, но вызываемой процедуре никто не запрещает сделать, например, следующее: Код (Text): mov ebx,dword ptr [esp] mov byte ptr куда-то,[ebx] ; читаем байт, следующий за call inc dword ptr [esp] ; увеличиваем адрес возврата на один ; (на следующий байт) еще: вызываемая процедура также может никогда и не возвращаться в вызываемую (на то он и асьм
я глянул код внимательней (я ж, типа, на работе это как раз и есть момент запутывания дизасемблера, когда нужно глазками пробегать чтобы понять, откуда начинать думать. а это точно так: не call main, который возвращает в start_code потом? я вообще-то не асс наверное, в иде можно скрипт лепить для таких дел, но их тоже на все случаи не слепишь (полиморфизм, однако
Да я увидел это в иде, но можно и в Hiew, ваще прикольная вещь, но легко распознается нечто подобное было в Образ Мышления Ida pro: add si,6 jmp si b9 А тут не посредственно с адресами без регистров, Есть ли еще методы противодействия?
ну, путать можно по разному, даже не так явно в фрейме процедуры взять и впендюрить адрес в [ebp+4], после корректного leave пойдем по этому адресу. а вообще, если честно, не понял, противодействие чему ты имеешь ввиду - дизассемблеру или наглому коду? если коду - то все случаи не рассмотришь. Я было анализировал почтовый троян (который ко мне пришел по почте, хе-хе) - там корректная процедура main, которая почти ничего не делает и культурно завершается. там просто пишется двойное слово, которое затирает "культурное завершение" нехорошим кодом, который во время выполнения программы вызывает исключение, а обработчик размещен в ресурсах, который и расшифровывает зашифрованый текст программы. Пришлось вручную менять байты согласно командам и передизассемблировать, чтобы это понять. А если ты хочешь противодействовать взлому - это вопрос не только технический, но и психологический, так как проведя дизассемблер ты заставишь человека с кислой рожей наклонится к монитору - и тут уже держись лучше поводить за нос, чем резко явно мусорить (мнение мое личное)