Перейти к содержанию

temtriss

Пользователи+
  • Постов

    174
  • Зарегистрирован

  • Посещение

  • Победитель дней

    7

Сообщения, опубликованные temtriss

  1. Сори, не нашел в своем хламе не чего с работой с памятью :( 

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

     
    
    #include <Windows.h>
    #include <TlHelp32.h>
    #include <iostream>
    
    DWORD PID = NULL;
    DWORD BaseAddr = NULL;
    DWORD offs = NULL;
    char* ProcName = "Tutorial-i386.exe";
    
    int HP;
    // Портотип
    bool OpenProc();
    
    int main()
    {
        OpenProc();
        HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, TRUE, PID);
        printf("%x \n", hProc);
    
        if (hProc != NULL)
        {
            // Базовый адрес
            BaseAddr = 0x400000;
            printf("0x%x \n", PID);
            // До тех пор пока не нажмем INSERT
            while (!GetAsyncKeyState(VK_INSERT))
            {
                if (GetAsyncKeyState(VK_F1) & 1)
                {
                    printf("Test Memory Read \n");
                    
    
                    // Ох... Давно не работал из вне процесса жертвы
                    // Так бы сейчас разименованым указателем жахнул
                    // *(DWORD*)
    
                    ReadProcessMemory(hProc, (LPVOID*)(BaseAddr + 0x001FD5D0), &offs, 4, NULL);
                    printf("Readed \n Now We need add offset 0x480 to readed Addr 0x%x \n", offs);
                    offs += 0x480;
                    // Ну вот и все, читаем наш оффс
                    ReadProcessMemory(hProc, (LPVOID*)(offs), &HP, 4, NULL);
                    printf("Our HP is %d \n", HP);
            
                }
            }
    
    
        }
        else
        {
            printf("LastError: %x \n", GetLastError());
        }
        system("PAUSE");
        return 0;
    }
    
    
    bool OpenProc()
    {
        // Сначала ищем наш процес
        // как-то так
        PROCESSENTRY32 pe = { sizeof(PROCESSENTRY32) };
        HANDLE hSnapshot;
        
        while (!PID)
        {
            hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
            if (Process32First(hSnapshot, &pe))
            {
                do
                {
                    if (!strcmp(pe.szExeFile, ProcName))
                    {
                        PID = pe.th32ProcessID;
                        printf("We find Process!!! PID: %x \n", PID);
                        break;
                    }
                    
                }
                while (Process32Next(hSnapshot, &pe));
    
            }
            Sleep(1000);
    
        }
        // В любом случае вернем false в PID мы и так все записали раз дошли сюда :)
        return false;
    }

     

     

    Как-то так, надеюсь поможет.

     

    P.s. для модеров, удалил тег кода, он весь мой код без перехода на след. строку лепит. Не читабельно!

  2. 2 часа назад, vadik111 сказал:

    это же просто #define

    Дефайн чего? PostMessageA в случае мультибайтовой кодировки и PostMessageW в случае уникод.

    Если следовать вашей логике, то и SendMessage - define

     

    Если я правильно помню, то сенд месседж ожидает обратки сообщения до возврата, а пост просто помещает сообщение в очередь, более детально я хз.

  3. В 05.02.2018 в 20:49, roma91212 сказал:

    Пиши Internal cheat

    У человека явные проблемы с простейшими WinAPI функциями и указателями, о чем еще может быть речь?

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

  4. Все что сказали выше более правельный подход, только вот SendMessage у меня не разу не отработало не в одном приложении, а вот 

    
            PostMessage(targetHWND,WM_KEYDOWN,VK_F2, 1);
            PostMessage(targetHWND, WM_KEYUP, VK_F2, 0);
    
    


    Отрабатывало в некоторых приложениях :) Можешь попробовать. 
  5. В ‎25‎.‎11‎.‎2017 в 19:20, X86Jumps сказал:

    создают D3DDevice

    Вот у меня остался старый проектик - частично переделанный урок кенга с убранной утечкой памяти(В уроке шрифт создавался в хукнутой Present и не высвобождался, а это очень опасно для функции, которая вызывается 60 раз в секунду(Ну или сколько там ФПС в вашем приложении)) и хуком EndScene вместо Present

    Скрытый текст
    
    
    #include "HackClass.h"
    #include <d3dx9.h>
    #include <d3d9.h>
    
    
    // #include <MinHook.h>
    
    
    #pragma comment(lib, "d3dx9.lib")
    #pragma comment(lib, "d3d9.lib")
    
     
    
    // #pragma comment(lib, "libMinHook-x86-v140-mtd.lib")
    
     
    
    typedef IDirect3D9*(__stdcall *DIRECT3DCREATE9)(unsigned int);
    // EndaaScene() sig:
    // \x6A\x20\xB8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x8B\x75
    // xxx????x????xx
    //  d3d9.dll + 43B60 
    
    HackClass* h = new HackClass;
    DWORD * DXvTable;
    
    typedef HRESULT(__stdcall * EndScene)(IDirect3DDevice9* pDevice);
    EndScene fnEndScene;
    BYTE origCode[5] = { 0,0,0,0,0 };
    BYTE jmpCode[5] = { 0,0,0,0,0 };
    DWORD oldProtEndScene;
    DWORD funcAddr = 0;
    
    LPD3DXFONT pFont;
    
    void FildRect(IDirect3DDevice9* pDevice,int x, int y, int w, int h, int a, int r, int g, int b )
    {
        D3DCOLOR color = D3DCOLOR_ARGB(a, r, g, b);
        D3DRECT rect = { x, y, w, h };
        pDevice->Clear(1, &rect, D3DCLEAR_TARGET | D3DCLEAR_TARGET, color, 0, 0);
    
    }
    
    void WriteTextToScreen(IDirect3DDevice9* pDevice,int x, int y,DWORD color, char* txt)
    {
        RECT rect;
        SetRect(&rect, x, y, x, y);
        pFont->DrawTextA(NULL, txt, -1, &rect, DT_NOCLIP | DT_LEFT, color);
    }
    
    
    HRESULT __stdcall  HookedEndScene(IDirect3DDevice9* pDevice)
    {
        BYTE * CodeDest = (BYTE*)fnEndScene;
        CodeDest[0] = origCode[0];
        *(DWORD*)(CodeDest + 1) = *(DWORD*)(origCode + 1);
    
        //h->Log("We Hook EndScene yeaah!!!");
    
        if (pFont)
        {
            pFont->Release();
            pFont = NULL;
        }
        if (!pFont)
        {
            D3DXCreateFontA(pDevice, 14, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont);
        }
    
        WriteTextToScreen(pDevice, 15, 80, D3DCOLOR_ARGB(255, 255, 000, 000), "Type your Text HERE!");
        FildRect(pDevice, 15, 80, 300, 300, 30, 50, 50, 200);
    
        DWORD res = fnEndScene(pDevice);
        CodeDest[0] = jmpCode[0];
        *(DWORD*)(CodeDest + 1) = *(DWORD*)(jmpCode + 1);
    
        return res;
    }
    
    void  HookDevice()
    {
        HWND hWnd = CreateWindowA("STATIC", "WindowsName", 0, 0, 0, 0, 0, 0, 0, 0, 0);
        HMODULE    hD3D9 = GetModuleHandleA("d3d9"); // GetModuleHandleA("d3d9");
        h->Log("D3D9 Library Handle: 0x%x", hD3D9);
        //IDirect3D9*(__stdcall*pDirect3DCreate9)(UINT) = (IDirect3D9*(__stdcall*)(UINT))GetProcAddress(hD3D9, "Direct3DCreate9");
        DIRECT3DCREATE9 pDirect3DCreate9 = (DIRECT3DCREATE9)GetProcAddress(hD3D9, "Direct3DCreate9");
    
        // Создаем свое устройство
        IDirect3D9* pD3D = pDirect3DCreate9(D3D_SDK_VERSION);
    
        D3DDISPLAYMODE d3ddm;
        pD3D->GetAdapterDisplayMode(0, &d3ddm);
        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp, sizeof(d3dpp));
        d3dpp.Windowed = 1;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
        d3dpp.BackBufferFormat = d3ddm.Format;
    
        IDirect3DDevice9 * ppReturnedDeviceInterface = 0; // Да - Это то, что нам нужно!))
    
        pD3D->CreateDevice(0, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &ppReturnedDeviceInterface);
    
        DXvTable = (DWORD*)(*((DWORD*)ppReturnedDeviceInterface));
    
        ppReturnedDeviceInterface->Release();
        pD3D->Release();
        FreeLibrary(hD3D9);
        CloseHandle(hWnd);
    }
    
    // Пустой поток, я не помню зачем я его делал, но удалять и коментить не стал, только вызов закоментил
    
    DWORD __stdcall NewThread(LPVOID lp)
    {
    
    
        return 0;
    }
    
    DWORD __stdcall HookThread(LPVOID lp)
    {
        HookDevice();
        h->Log("Reset() : 0x%x", DXvTable[16]);
        h->Log("Present() : 0x%x", DXvTable[17]);
        h->Log("EndScene() : 0x%x", DXvTable[42]);
        h->Log("DrawIndexPrimitive() : 0x%x", DXvTable[82]);
        funcAddr = DXvTable[42];
        // Пробуем!)
        fnEndScene = (EndScene)((DWORD)funcAddr);
        jmpCode[0] = 0xE9;
        DWORD addr = (DWORD)HookedEndScene - (DWORD)fnEndScene - 5; // Расчитываем джампик
        memcpy(jmpCode + 1, &addr, sizeof(DWORD));
        memcpy(origCode, fnEndScene, 5);
        VirtualProtect(fnEndScene, 5, PAGE_EXECUTE_READWRITE, &oldProtEndScene);
        memcpy(fnEndScene, jmpCode, 5);
    
        return 0;
    }
    
    
    BOOL __stdcall DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
    {
        switch (dwReason)
        {
        case DLL_PROCESS_ATTACH:
    //    LPDIRECT3DDEVICE9 lpDevice;
    //    CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(NewThread), hModule, 0, 0);
        CreateThread(0, 0, reinterpret_cast<LPTHREAD_START_ROUTINE>(HookThread), hModule, 0, 0);
        case DLL_PROCESS_DETACH:
    
            break;
        }
        
        
        return TRUE;
    }
    

     

    P.s.: Ну и соответственно обьявление HackClass и все вызовы Log надо убрать, я морочится не стал) Хотя если интересно, могу скинуть(там не чего особенного). 

    P.s.2: Надеюсь сейчас по правилам оформил, очень старался)) Мат из коментов поудалял :D

  6. Хорошо, я отвечу, 

    5 часов назад, sallahdin сказал:

    1) Что собственно нужно для этого?

    Не малый багаж знаний. Очень не малый. 

    5 часов назад, sallahdin сказал:

    с чего мне начать

    Я бы посоветовал начать с основ и хотя бы поверхностно выучить асм, но это не самый легкий путь. Далее я бы посоветовал почтитать что-то связаное с процессами и их устроством, память и прочее. Ну и далее выбрать язык програмирования более высокого уровня, например С++(советую С++ так как сам на нем пишу и очень люблю этот язык, хотя перепробовал массу). А делее дело техники. :) 

    5 часов назад, sallahdin сказал:

    дебаггеры безполезны

    Приемов атни-анти-отладки дофига, погуглите. Какой-то ТитанИнжен например.

     

    P.s. какой вопрос, такой и ответ, в вопросе конкретики я не вижу, по этому просто высказал свое мнение!) 

  7. Посмотри какие функции обращаются к адресу, а так же посмотри к каким адресам обращаются найденые функции. Если к одному, то все просто делаешь иньекцию кода, копируешь адрес(оттуда где обращение идет к адресу), выполняешь затертый джампом кусок и возвращаешся. Ну просто как вариант, он далеко не 100% и не всегда его возможно реализовать.

  8.  

    5 часов назад, partoftheworlD сказал:

    далеко до hex-rays

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

     

    5 часов назад, partoftheworlD сказал:

    Удобна

    Ну это наверно дело привычки, с Идой я мало работал, а вот с Олли и потом с х64дбг достаточно, мне на много удобнее)))

     

     

  9. В 11.11.2017 в 14:56, Dejavu сказал:

    IDA куда удобнее

    Ида - как отладчик не особо то и удобная... Как сказали выше, лучше и удобнне использовать привычный дебагер(х64дбг/СЕ дебагер, ВинДбг etc.)

    В 11.11.2017 в 14:56, Dejavu сказал:

    она распознает уже документированные функции.

    x64Dbg тоже умеет и так же умеет выдавать псевдокод, а по поводу распознания оно так, 50/50 в плане конвенции вызова) так что это не панацея.

  10. Запилил видосик на скорую руку))) По гайду так сказать.... видос доступен только по ссылке... вроде... Но это не точно :D

    https://youtu.be/ZDbQ0dhA_H8

     

    • Плюс 2
  11. 1 час назад, TheErel сказал:

    Пожалуйста запишите видео.

    Блин... тут же гайд аля, делай как я... если вы не можете с этим справится, то вам еще такое рано, не в обиду сказано. Но хорошо, я запишу, сейчас докачаю сорс.

  12. 12 минуты назад, TheErel сказал:

    я дополнил вопрос.

    Ида - интерактивный дизасемблер, она анализирует без подключения(Да функция и возможность дебага есть, но ИМХО не так удобно как например Олли или х64дбг)... Открывается dllка из папки игры... можно посмотреть в заголовке окна иды... найти строку... кликнуть по строке выбрать Xref или просто нажать на X... в окошке выбираем функцию(как я понял только одна функция использует эту строку).... далее ищем первый call  перед помещением(ну так на скрине) ее в стек(push offset что-то там....) заходим в функцию и ищем где заполняется ECX... нашел?! отлично дальеш подключаешся любым дебагером к игре(можно и ЦЕ) идеш по смещению в engine dll... ставишь бряк, на функцию, которая заполняет ECX получаешь адрес... профит!

     

    P.s. Залейте мне куда-то engine.dll я вам нагляднее покажу))

  13. В 02.11.2017 в 21:53, partoftheworlD сказал:

    имя владельца процесса.

    Хех, я не подумал об одном моменте, для получения токена нужен хэндл, а на стадии получения хэндла отсеивается 99% ненужных приложений из списка c ошибкой 0x5(Windows (User-Mode): Access is denied.). В общем решил задачу!) Всем еще раз спасибо за участие, тему можно закрыть!)

  14. В 31.10.2017 в 23:17, ReWanet сказал:

    но это не меняет сути

    Пока не было времени посмотреть :(( Работа :(( Но завтра последний рабочий день и 3 выходных, обязательно гляну!)) Спасибо и + в репу в любом случае :))) Если ответов больше не будет, то тему можно закрыть в выходные сам разберусь если инфа выше не поможет :))

  15. Всем привет, наверно странный вопрос. Понадобилась такая тема как отображение процессов(Помогаю товарищу), да задача элементарная. 

    Что-то типо этого:

     

     


    void GetProcessesList()
    {
        DWORD ProccessID = NULL;
        
        HANDLE hSnapshot;
        // Обьявим структуру ProcessEntry и сразу заполним ее размер. 
        PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };


        hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        // Начинаем перебирать с первого процесса!)
     
        if (Process32First(hSnapshot, &pe32))
        {
            // Цикл
            do
            {
                // Чуть позже переделаю AddText в функцию с неизвестным кол-вом параметров и буду формировать строки
                // Через vsprintf уже внутри, а пока е... с буфером

                // Лишние 3 строки  для переделывания AddText  это перебор для меня :D 
                ProccessID = pe32.th32ProcessID;
                
                char buff[255];
                sprintf(buff, "PID: %d", ProccessID);

                AddTextToList(hListBox1, buff);
                AddTextToList(hListBox1, pe32.szExeFile);
            }
            // До тех пор пока есть след. процесс
            while (Process32Next(hSnapshot ,&pe32 ));
        }
        AddTextToList(hListBox1, "Finish \n");
        CloseHandle(hSnapshot);

    }
     

     

     

    Вроде все просто и работает отлично. Но мне нужно отфильтровать процессы, не найти какой-то конкретны(Это слишком легкая задача), а отфильтровать типо системный/пользовательский и отобразить только пользовательские. Или можно, а даже лучший вариант это как в CE 6.7 вкладка Application но это уже не обязательно. Как бы это можно реализовать? Может не правильно гуглил, но гугл инфы не дал :(

     Заранее спасибо! :)

     

  16. 5 часов назад, Gekas сказал:

    вызова функции по факту не происходит

    а вы уверены в правильности передачи параметров функции?) я в портотипе не вижу конвенции вызова. Я не знаю на 100 процентов, но могу предположить, что по умолчанию плюсы будут использовать cdecl

  17. 3 часа назад, gamehikker сказал:

    От компа зависит

    эммм... а Вы уверены в правильности Вашей функции поиска сигнатур? для примера 2гб оепативы у меня сканируется около 2-3 сек на планшете!!!(Intel Atom 1.44Ghz) Я почему-то сомневаюсь, что у вас комп слабее моего планшета...

     

  18. 7 минут назад, gamehikker сказал:

    новую строку , не стирая старых 

    Мультилайн edit надеюсь?)

    LB_ADDSTRING это же для лист бокса)

    попробуйте сообщение WM_SETTEXT вроде должно работать, если не поможет, я свои старые проекты раскопаю, подскажу)

     

    • Плюс 1
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.