PDA

Просмотр полной версии : Путаем следы


taha
19.09.2006, 11:43
Сегодня я хочу поговорить с вами о мусоре, столь полезной как оказалось в защите вещи.
Начнём.
Порывшись в инете можно найти вот такие заготовки.
mov ecx,virus_size
lea edi,pointer_to_code_to_crypt
mov eax,crypt_key
@@1: xor dword ptr [edi],eax
add edi,4
loop @@1
Какже можно усложнить код. Порывшись ещё, можно узнать, как представить xor через or, not, and.

xor eax, ebx
-------------
mov ecx, eax
or ecx, ebx
and eax,ebx
not eax
and eax,ecx

Вот так. Можете проверить.
Поискав в сатьях по булевой алгебре, можно нейти следущее предстовление or(and).

or ecx, ebx
---------------
not ecx
not ebx
and ecx, ebx
not ecx
Проверяем. Подстовляем "or" в "xor."

mov ecx, eax
not ecx
not ebx
and ecx, ebx
not ecx
and eax,ebx
not eax
and eax,ecx

Затем вставляем бессмысленные функции, типа:
and eax,11111111b
or eax,0

mov ecx, eax
and eax,11111111b
or eax,0
not ecx
or eax,0
not ebx
and eax,11111111b
and ecx, ebx
not ecx
and eax,ebx
and eax,11111111b
not eax
and eax,ecx

И ещё хотелось напимнить, что многие команды взаимозаменяемы. Например:
not eax = xor eax,0ffffh
xor ecx,ecx = and ecx,0h = loop $ =sub ecx,ecx
и т.д.
Устрошающе выглядит?
Хотелось бы больше задач на эту тему. Ведь видеть суть кода очень полезный навык.
Жду задач.

Dmitriy507
20.09.2006, 05:14
если не секрет от куда ты выдрал этот код?

ProTeuS
20.09.2006, 14:29
Dmitriy507, а 4то такого в нем сверхестественного?

сам асмовый код - всего лишь одна из миллионов простеньких вариаций на тему полиморфизма\метаморфизма, а and\or - просто хаки булевой логики

hidden
20.09.2006, 18:32
Вот только время выполнения этих циклов увеличится примерно в 10 раз, т.к.
1) Как минимум двойное обращения к памяти.
2) Задействование дополнительного регистра
3) Несколько операций вместо одной
Но если код не большей, то можно и пожертвовать времинем вымолнеия

Поискав в сатьях по булевой алгебре, можно нейти следущее предстовление or(and).
Тоже, только наоборот:
and ecx, ebx
---------------
not ecx
not ebx
or ecx, ebx
not ecx

Затем вставляем бессмысленные функции, типа:
А вот этого добра, вообще несметное количество:
add eax, 0
sub eax, 0
ror eax, 0 или 32, 64, 128
rol eax, 0 или 32, 64, 128
mov eax, eax
or eax, eax
and eax, eax
shr eax, 0
shl eax, 0
и множество других...

taha
21.09.2006, 12:21
если не секрет от куда ты выдрал этот код?
В google введи "булевая алгебра" и читай, читай, читай.

Но если код не большей
А я не говорю что нужно всё переделывать. Просто пару xor'ов.

А вот этого добра, вообще несметное количество:
вот-вот!! Просто пара примеров.

Я всё это к тому что задач по оптимизации и разгребании мусора на форуме практически нет :). Всё на отладку да на отладку. Яж без компа(в данный момент), и задачи в виде текста будут интересны не тока мне.

ProTeuS
21.09.2006, 21:21
>>Я всё это к тому что задач по оптимизации и разгребании мусора на форуме практически нет

дык какая же это оптимизация, это же замусоревание ;)

а так, поддерживаю, тема более-менее интересная и может как основа пригодиться

taha
22.09.2006, 12:47
а так, поддерживаю
Сапасибо за понимание