Писал трешген на c++ который добавляет мусора в опредленный метод, мусор разный в каждом методе, постепенно сломал псевдокод IDA).
После трешгена WinMain / До трешгена WinMain
Псевдокод иды даже не хочет работать в этом методе и других куда я добавил мусора.
Генерация по началу была максимально тупой и представляла собой что-то по типу
Чуть позже уже выходило что - то вроде этого.
Ida сломалась от плюсового кода :/ , работает с разными компилерами MingGW, LLVM - MingGW, Android NDK Tools, дальше не проверял.
На винде я так же ломал псевдокод иды вызовом макроса BUG(), который сам заметил при компиляции без return 0; в main(), пример ниже, это ломало логическую цепочку, но в описанном выше случае, я не юзал ничего кроме c++. Макрос оказался универсальным и работал даже на x64.
В пример привожу код и скрины того же CrackMe(click)
После данного вызова получалось что код находился в секциях. можете зайти в иду и сами посмотреть.
Но это происходило только благодаря компилеру и позволяло прятать методы не всегда,
были проблемы с вылетами и тд, поэтому нужно было тыкать почти в каждую строку и проверять.
Так же минус данного способа что программа переходит в access violation, т.к ничего не возвращает.
void main();
void main(); - asm
void CallFreeConsole();
После трешгена WinMain / До трешгена WinMain
Псевдокод иды даже не хочет работать в этом методе и других куда я добавил мусора.
Генерация по началу была максимально тупой и представляла собой что-то по типу
int i = generated_compile_time; some_method(i);Чуть позже уже выходило что - то вроде этого.
Ida сломалась от плюсового кода :/ , работает с разными компилерами MingGW, LLVM - MingGW, Android NDK Tools, дальше не проверял.
На винде я так же ломал псевдокод иды вызовом макроса BUG(), который сам заметил при компиляции без return 0; в main(), пример ниже, это ломало логическую цепочку, но в описанном выше случае, я не юзал ничего кроме c++. Макрос оказался универсальным и работал даже на x64.
Скрытый контент для зарегистрированных пользователей.
В пример привожу код и скрины того же CrackMe(click)
После данного вызова получалось что код находился в секциях. можете зайти в иду и сами посмотреть.
Но это происходило только благодаря компилеру и позволяло прятать методы не всегда,
были проблемы с вылетами и тд, поэтому нужно было тыкать почти в каждую строку и проверять.
Так же минус данного способа что программа переходит в access violation, т.к ничего не возвращает.
void main();
void main(); - asm
void CallFreeConsole();
C++:
#include <iostream>
# define KEEP_SECTION_UPX \
__attribute__((__section__("########")))
# define KEEP_SECTION_UPX1 \
__attribute__((__section__("!#######")))
#include "windows.h"
char fakeupx[] __attribute__((section(".text"))) = "0.39\0UPX!\x0d\x09\x02\x08\x3f\x3a\xcc";
char fakeUPX[] __attribute__((section(".text"))) = "0.39UPX!";
char fakeUPX1[] __attribute__((section(".text"))) = "UPX!";
char fakeUPX2[] __attribute__((section(".text"))) = "uPx";
char fakeUPX3[] __attribute__((section(".text"))) = {0xA1, 0xD8, 0xD0, 0xD5};
KEEP_SECTION_UPX struct Defines{
typedef FARPROC xFARPROC;
typedef HMODULE xHMODULE;
typedef LPCSTR xLPCSTR;
typedef const char* cchar;
typedef HWND xHWND;
typedef LPSTR xLPSTR;
typedef HRSRC xHRSRC;
typedef HGLOBAL xHGLOBAL;
typedef PCONTEXT xPCONTEXT;
typedef LPVOID xLPVOID;
typedef LPCVOID xLPCVOID;
typedef LPSECURITY_ATTRIBUTES xLPSECURITY_ATTRIBUTES;
typedef HANDLE xHANDLE;
typedef PVOID xPVOID;
typedef LPPROCESS_INFORMATION xLPPROCESS_INFORMATION;
typedef STARTUPINFOA xSTARTUPINFOA;
typedef PROCESS_INFORMATION xPROCESS_INFORMATION;
typedef LPCONTEXT xLPCONTEXT;
typedef LPSTARTUPINFOA xLPSTARTUPINFOA;
typedef PIMAGE_NT_HEADERS64 xPIMAGE_NT_HEADERS64;
typedef PIMAGE_NT_HEADERS xPIMAGE_NT_HEADERS;
typedef PIMAGE_SECTION_HEADER xPIMAGE_SECTION_HEADER;
typedef PIMAGE_DOS_HEADER xPIMAGE_DOS_HEADER;
typedef WPARAM xWPARAM;
typedef LPARAM xLPARAM;
typedef LPMSG xLPMSG;
typedef MSG xMSG;
typedef MEMORYSTATUSEX xMEMORYSTATUSEX;
typedef LPMEMORYSTATUSEX xLPMEMORYSTATUSEX;
typedef CONTEXT xCONTEXT;
typedef LPTHREAD_START_ROUTINE xLPTHREAD_START_ROUTINE;
typedef LIST_ENTRY xLIST_ENTRY;
typedef NT_TIB xNT_TIB;
typedef IMAGE_DOS_HEADER xIMAGE_DOS_HEADER;
typedef IMAGE_NT_HEADERS xIMAGE_NT_HEADERS;
typedef IMAGE_EXPORT_DIRECTORY xIMAGE_EXPORT_DIRECTORY;
typedef IMAGE_DATA_DIRECTORY xIMAGE_DATA_DIRECTORY;
typedef IMAGE_FILE_HEADER xIMAGE_FILE_HEADER;
typedef IMAGE_SECTION_HEADER xIMAGE_SECTION_HEADER;
typedef IMAGE_OPTIONAL_HEADER32 xIMAGE_OPTIONAL_HEADER32;
typedef IMAGE_OPTIONAL_HEADER64 xIMAGE_OPTIONAL_HEADER64;
typedef IMAGE_OPTIONAL_HEADER xIMAGE_OPTIONAL_HEADER;
typedef IMAGE_ROM_OPTIONAL_HEADER xIMAGE_ROM_OPTIONAL_HEADER;
typedef PIMAGE_EXPORT_DIRECTORY xPIMAGE_EXPORT_DIRECTORY;
typedef PLIST_ENTRY xPLIST_ENTRY;
typedef LPWSTR xLPWSTR;
typedef LPCWSTR xLPCWSTR;
};
KEEP_SECTION_UPX1 __attribute__((constructor)) int setupMessageBoxA(void* addr){
if(!addr){
return (int)MessageBoxA;
} BROKE_CODE22();
}
KEEP_SECTION_UPX1 __attribute__((constructor)) int CallFreeConsole(void* addr){
if(!addr){
return (int)FreeConsole();
}
}
int voke = 4;
bool voke2;
void set_sect(auto& file,auto value){
file = value;
}
int types(){
return atoi("4"_stringcrypt.c_str());
}
KEEP_SECTION_UPX1 __attribute__((constructor)) int init(bool voke){
BROKE_CODE22();
typedef int (WINAPI *tMessageBoxA)(Defines::xHWND hWnd, Defines::xLPCSTR lpText, Defines::xLPCSTR lpCaption,
UINT uType);
if(types() == 4){
voke = 0;
}else{
voke = 1;
}
set_sect(voke2,0);
tMessageBoxA hMessageBoxA = (tMessageBoxA)setupMessageBoxA(nullptr);
if(!voke2 && !voke){
hMessageBoxA(nullptr,"Try crack it xd!"_stringcrypt.c_str(),
"Not cracked!"_stringcrypt.c_str(),
MB_ICONSTOP | MB_OK);
}
if(!voke && voke2){
hMessageBoxA(nullptr,"Whats next? You do it -> Post in theme!"_stringcrypt.c_str(),
"Cracked!"_stringcrypt.c_str(),
MB_ICONQUESTION | MB_OK);
}
if(voke){
hMessageBoxA(nullptr,"Try crack it xd!"_stringcrypt.c_str(),
"Not cracked[.]This patch helped u?!"_stringcrypt.c_str(),
MB_ICONSTOP | MB_OK);
}
BROKE_CODE22();
}
KEEP_SECTION_UPX1 __attribute__((constructor)) int MainFunction() {
CallFreeConsole(nullptr);
if(voke == 4){
voke = 0;
}
init((bool)voke);
}
KEEP_SECTION_UPX1 int WINAPI WinMain(HINSTANCE /* hInstance */, HINSTANCE /* hPrevInstance */, LPSTR lpCmdLine, int /* nCmdShow */){
BROKE_CODE2();
MainFunction();
BROKE_CODE2();
}
C++:
#define BROKE_CODE2() \
__asm__ __volatile__( "ud2\n" \
"\t.word %c0\n" \
"\t.long %c1\n" \
: : "i" (nullptr), "i" (nullptr))
#define BROKE_CODE22() \
__asm__ __volatile__("\t.word %c0\n" \
"\t.long %c1\n" \
: : "i" (nullptr), "i" (nullptr))
Вложения
Последнее редактирование: