С++ Обфускатор?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Vlad&slav, 18 Dec 2011.

  1. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    225
    Likes Received:
    41
    Reputations:
    9
    [​IMG]

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

    Тоесть например есть код
    PHP:
    Sleep(1);
    HANDLE hFile CreateFileA(path.c_str(), GENERIC_READ0NULLOPEN_EXISTING0NULL);
    DWORD FS GetFileSize(hFile,0) ;
    SOCKET Sock socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
    После обработки получим
    файл для подгрузки функций
    PHP:
    typedef HANDLE (__stdcall *CFAWU)(LPCSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
    typedef DWORD (__stdcall *GFSQJ)(HANDLE,LPDWORD);
    typedef void (__stdcall *STOBD)(DWORD);
    typedef WSAAPI (__stdcall *FQLTQ)(int,int,int);

    CFAWU pref_CreateFileA
    GFSQJ pref_GetFileSize
    STOBD pref_Sleep
    FQLTQ pref_socket


    HMODULE kernel32_dll 
    GetModuleHandle("kernel32.dll");
    if (
    kernel32_dll) {
      
    pref_CreateFileA = (CFAWU)GetProcAddress(kernel32_dll,"CreateFileA");
      
    pref_GetFileSize = (GFSQJ)GetProcAddress(kernel32_dll,"GetFileSize");
      
    pref_Sleep = (STOBD)GetProcAddress(kernel32_dll,"Sleep");
      
    // if (!pref_CreateFileA || !pref_GetFileSize || !pref_Sleep) ExitProc();
    } else {
      
    // nokernel32_dllerr = GetLastError();
      // ExitProc();
    }
    HMODULE ws2_32_dll GetModuleHandle("ws2_32.dll");
    if (
    ws2_32_dll) {
      
    pref_socket = (FQLTQ)GetProcAddress(ws2_32_dll,"socket");
      
    // if (!pref_socket) ExitProc();
    } else {
      
    // nows2_32_dllerr = GetLastError();
      // ExitProc();
    }
    файл с заменёнными функциями
    PHP:
    pref_Sleep(1);
    HANDLE hFile pref_CreateFileA(path.c_str(), GENERIC_READ0NULLOPEN_EXISTING0NULL);
    DWORD FS pref_GetFileSize(hFile,0) ;
    SOCKET Sock pref_socket(AF_INET,SOCK_STREAM,IPPROTO_IP);

    такой код после компиляции уже не палится авирями, не так легко отлаживается и ещё много чего

    пока поддерживает функции из
    PHP:
    ntdll.dll
    kernel32
    .dll
    advapi32
    .dll
    msvcrt
    .dll
    user32
    .dll
    secur32
    .dll
    shell32
    .dll
    wininet
    .dll
    ws2_32
    .dll
    crypt32
    .dll
    gdi32
    .dll
    потом найду нормальную базу - добавлю ещё



    собсна как назвать это? обфускатор с++?


    ссылка http://cp1251.darkoff.ru/procaddr/
     
  2. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    827
    Likes Received:
    185
    Reputations:
    84
    Прочитай определение обфускатора, и скажи, что делает твой скрипт? Ничего, просто вызовы заменяет. Читаемость кода от этого не страдает. Можно назвать это "никому не нужной байдой", например. И к C++ это мало отношения имеет, в чистом C++ апи-вызовы редко встречаются.
     
    _________________________
  3. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,937
    Likes Received:
    805
    Reputations:
    224
    Набор заменяемых функций (в контексте приведенных библиотек) неполный.
    Вложенные вызовы не обрабатываются по-моему.
     
  4. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    736
    Likes Received:
    339
    Reputations:
    37
    Мало того, динамический вызов и отсутствие импортаа вызовет еще больше подозрений у антивируса... Если это окончательный функционал программы - никак ее не называй. Она бесполезна.
     
  5. GRRRL Power

    GRRRL Power Moderator

    Joined:
    13 Jul 2010
    Messages:
    827
    Likes Received:
    185
    Reputations:
    84
    Импорт в любом случае будет из системных библиотек и CRT. Внутренние функции crt, которые встраиваются в исполняемый файл компилятором, в свою очередь, также используют системные библиотеки. Так что смысл скрипта тем более не ясен.
     
    _________________________
  6. spider-intruder

    spider-intruder Elder - Старейшина

    Joined:
    9 Dec 2005
    Messages:
    736
    Likes Received:
    339
    Reputations:
    37
    Крт можно выпилить. Ну 2 функции в Имопорте ввиде LoadLibrary и GetProcAdress- это сразу срабатывание антивируса или по крайней мере +1 для хипса. От них тоже можно избавиться, получая их адреса прямым сканированием своей памяти или через PEB но все равно это "палево"...
     
  7. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    225
    Likes Received:
    41
    Reputations:
    9
    Цитирую с хакепа
    http://www.xakep.ru/post/56236/ - Взрываем эвристику

     
  8. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,174
    Likes Received:
    266
    Reputations:
    82
    2 Vlad&slav, нашел откуда цитировать...

    [thread]132116[/thread] - по теме
     
    _________________________
  9. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    225
    Likes Received:
    41
    Reputations:
    9
    Забил временно на getprocaddr() , добавил одну функцию:
    Вставить "nop" _asm {...} инструкции с вероятностью %

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

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    654
    Likes Received:
    54
    Reputations:
    3
    Усложнить отладку может только ВМ ,или на худой конец "навесной" протектор.