• XSS.stack #1 – первый литературный журнал от юзеров форума

Методы криптовки и полиморфизма...

dampil

(L3) cache
Пользователь
Регистрация
01.01.2005
Сообщения
232
Реакции
0
Интересны перспективные методы криптовки и полиморфизма в самом коде, а не в сторонних криптовщиках. Кто что может сказать ? А то я в этом вообще ничего не понял. Может кто подкинет статуйку подходящую.
 
Имхо имеется в виду реализация полиморфного движка, дабы программа имела приблуду для самокрипта. Как у некоторых вирусах. При каджом запуке, например, в ход идет некий загрузчик, который является частью ехе, который в памяти криптует и запускает тело вируса.

Я думаю есть смысл посмотреть исходники древних вирусов. Среди них оч много полиморфных. Они на асм в асновном. Я не помню к сожалению название сайта но если поищеш в гугле на .de доменах слово CIH ( =) ) то скорее всего найдеш на первых 2-3 страницах.
Добавлено в [time]1157803049[/time]
у меня был дето кусок молиморфа на вижуале. поищу.
 
Сделав код полиморфным (т.е. самоизменяющимся), мы сможем защититься от обнаружения по сигнатуре (куску кода, присущему этой программе, и не присущему другим).

Вот несколько типов таких преобразваний:

1. Вставка неактуального кода. Происходит работа с регистрами и памятью, которые никак не затрагивают состояние процессора, используемое данным этапом алгоритма. Эмулятор не может знать, какие действия актуальны, а какие-нет, вынужден эмулировать их все.

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

3. Эквивалентные с точки зрения актуальности преобразования кода.

Пример: вместо mov eax, ebx можно использовать
push ebx
pop ecx
mov eax, ecx.
 
UnWin скахал именно то что треубется рассмотреть :) Просто интересует не криптер как дополнительная приблуда, а как встроенная функция, которая будет сама обеспечивать безопастность тела вируса, или иного кода от отладчика и эмулятора.
 
Избитая тема,но актуальная!И на Wasm.ru есть подробные туторы!
Генератор псевдослучайных чисел и получается полиморфный декриптор!
А изменение всего кода если быть точьным так это уже метаморфизм!А вот если кому интересно простой макрос для фасма для простого хор шифрования:

macro begincrypt name
{
name#.begin:
}

macro endcrypt name, key
{
name#.end:
count = (rva name#.end - rva name#.begin)
repeat count - 1
load b byte from name#.begin+%-1
b = (b xor key)
store byte b at name#.begin+%-1
end repeat
}

begincrypt layer

код!!!!!!!!!!!!!!!!!!

endcrypt layer, 0x11
 
UnWin
То, что ты сказал итак ясно, ты в первом посту сказал:

Имхо имеется в виду реализация полиморфного движка, дабы программа имела приблуду для самокрипта.

Ты понимаешь разницу между полиморфизмом и шифрованием кода?

dampil
Встроенная куда функция?
 
Полиморфизм в ярком примере это когда в функции родителя вызывается функция, которая находиться в наследнеке...
А шифрование кода это уже шифрование кода... Когда идет какой-то дешифратор в начале exe и после уже выполняется сам код.
Однако... а как это вообще можно написать на Визуале ??? UnWin Никогда не думал, что можно на нем такое написать... Давным-давно, где-то в начале 90х годов народ собрался и решил думать как делать вот то вот шифрование... люди сошлись во мнениях, что на С++, Pascal и еще какие-то там языки совсем не пригодны к шифрованию себя же... asm еще как-то там справлялся... и типа сошлись, что вссе это надо делать в машинных кодах...

Если я не прав, исправте меня и приведите пример... но нас учили именно так ;о). А пример нужен чтобы подсунуть преподу под нос и сказать: "ах ты засранец, что ж ты так нас безбожно наипал то !!!"
 
Lamer
Что нам нужно знать, чтобы зашифровать своё тело? Указатель на данные и их размер. Как правило всё это делается через функции. Указатель на функцию можно узнать на любом языке:

Delphi:

Код:
function blabla(): boolean;
begin
MessageBox(0,0,0,0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShowMessage(IntToHex(dword(@blabla), 8));
end;

C:

Код:
int SomeFunction()
{
	MessageBox(0,0,0,0);
}

int main( void )
{
	printf("Adress of SomeFunction: %x", (DWORD)&SomeFunction);
	getch();
}

И даже на бейсеге:

Код:
Private Sub Form_Load()
    MsgBox Hex(fn(AddressOf blabla))
End Sub

Public Function blabla()
    MsgBox "1111111111111"
End Function

Public Function fn(ByVal fn_ptr As Long)
    fn = fn_ptr
End Function

Проблема встаёт, когда надо узнать размер участка кода, на ассемблере это делается просто:

Код:
blabla proc 
	invoke MessageBox,0,0,0,0	
blabla endp
sz = $ - blabla

А чтобы такое сделать на ЯВУ нужно писать дизассемблер длин инструкций или извращаться с GetThreadContext... или есть способы и я просто о них не знаю?
Да и вообще, на ЯВУ ты никогда не сможешь контролировать каждую инструкцию и её выполнение, а в данной задаче это зачастую необходимо, поэтому здесь конечно нужно использовать ассемблер, по-крайней мере мне кажется это удобнее.
 
BUG(O)R
Куда куда, в сам проект. Ну если объяснить точнее, то меня интересует методы самозащиты кода, я думал что ето и есть полиморфность, т.е. самоизменение кода.
 
Я уже отписал в своём прошлом сообщении с какими проблемами ты столкнёшься, если соберёшься писать это на ЯВУ. Хотя у тебя есть ещё вариант. Писать все нужные функции, компилировать проект, сувать его в дизассемблер и находя нужные процедуры узнавать их размеры. Только метод дерьмо:)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх