• XSS.stack #1 – первый литературный журнал от юзеров форума

Ломаем псевдокод иды и других ей подобных / Broke ida PseudoCode

Barmaleus

(L2) cache
Пользователь
Регистрация
11.08.2023
Сообщения
403
Реакции
165
Гарант сделки
11
Депозит
0.0001
Писал трешген на c++ который добавляет мусора в опредленный метод, мусор разный в каждом методе, постепенно сломал псевдокод IDA).
После трешгена WinMain / До трешгена WinMain

1716478881042.png

1716479156034.png



Псевдокод иды даже не хочет работать в этом методе и других куда я добавил мусора.
1716479313216.png

Генерация по началу была максимально тупой и представляла собой что-то по типу int i = generated_compile_time; some_method(i);

Чуть позже уже выходило что - то вроде этого.
1716479521603.png

Ida сломалась от плюсового кода :/ , работает с разными компилерами MingGW, LLVM - MingGW, Android NDK Tools, дальше не проверял.

На винде я так же ломал псевдокод иды вызовом макроса BUG(), который сам заметил при компиляции без return 0; в main(), пример ниже, это ломало логическую цепочку, но в описанном выше случае, я не юзал ничего кроме c++. Макрос оказался универсальным и работал даже на x64.

Скрытый контент для зарегистрированных пользователей.

В пример привожу код и скрины того же CrackMe(click)

После данного вызова получалось что код находился в секциях. можете зайти в иду и сами посмотреть.

Но это происходило только благодаря компилеру и позволяло прятать методы не всегда,

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

Так же минус данного способа что программа переходит в access violation, т.к ничего не возвращает.


void main();
1716481219634.png

void main(); - asm

1716481501926.png

void CallFreeConsole();

1716481252885.png


1716481333074.png

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))
 

Вложения

  • 1716481491704.png
    1716481491704.png
    23 КБ · Просмотры: 15
Последнее редактирование:


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх