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

gmz

Разработчики (+)
  • Постов

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

  • Посещение

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

    26

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

  1. 10 минуту назад, helldrg сказал:

    Да я понял что L подставляешь и пишешь строку, а почему юникодом надо пользоваться?)

    2hWZg.png

    +A версии постоянно хип юзают/конвертируют..

     

    15 минуту назад, helldrg сказал:

    NtQueryInformationThread

    наверно имели ввиду GetThreadIOPendingFlag, зачем такое нужно в обычном трейнере :D

     

  2. 13 минуты назад, helldrg сказал:

    Я так делал потому что имя модуля в MODULEENTRY32 хранится вместе с путем, можно было сроку обработать и получить только имя, но я просто воспользовался этой функцией GetModuleBaseName

    там есть szModule

  3. 8 минут назад, keng сказал:

    Я хочу посмотреть на твой первый трейнер, нет, серьезно. :D

     

    6 минут назад, Garik66 сказал:

    gmz, кстати я тоже бы с удовольствием посмотрел на него (если конечно сохранился), причём с твоими теперешними замечаниями. :D;)

    он был похож на это только на масм32 +замена линкера +бредооптимиз. весил ~2.7кб (пак) и самый большой косяк - мерцание текста когда вкл/откл

    а еще рекордный был на вирьтотал - 47+ детектов :D

     

    8 минут назад, helldrg сказал:

    А можно по подробней?

    L"blabla"

     

    9 минут назад, helldrg сказал:

    Вот это я немного не понял

    https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms684839(v=vs.85).aspx

     

     

    • Плюс 1
  4. 1 в DLL было бы круче +желательно когда жмешь Х что бы она зачистила все и выгрузилась xD
    2 можешь удалить CRT мусор изменив ентри на.. например _Main (вроде в вс2015.3 исправили) - будет еще меньше по размеру
    3 unicode билд обязательно (все равно на вин98 не запустится)
    4 форс админ права не нужно (манифест тот)
    5 для OpenProcess желательно подбирать права типа PROCESS_VM_OPERATION+PROCESS_VM_READ+PROCESS_VM_WRITE тд тп
    6 K32GetModuleBaseName что там делает? в структуре от Module32Next уже есть имя ProcessEntry.szExeFile
    7 можно заюзать K32EnumProcesses\K32EnumProcessModules\K32GetModuleBaseNameW - они быстрее (вин7+)
    8 шрифт добавь! Lol

     

  5. там не прямой адрес. вот например:

    Скрытый текст
    
    .lulz:
    lea eax,[.zz] ;адрес для jmp
    sub eax,0x400000  даном случае база модуля
    lea ecx,[.kk+5] ;адрес jmp +его размер
    sub ecx,0x400000
    sub eax,ecx ;получаем новый адрес для jmp
    mov [.kk+1],eax ;пишем
    .zz:
    nop
    .kk:
    jmp near .lulz

     

    так что у тебя должно быть 0-5=FFFFFFFB типа E9 FBFFFFFF

     

    • Плюс 1
  6. lulz:

    Скрытый текст
    
    #include "windows.h"
    #include "wchar.h"
    #include "tlhelp32.h"
    
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam){
    static HWND hProcessList;
    HFONT hFont;
    WCHAR Buffer[300];
    PROCESSENTRY32 ProcessEntry;
    HANDLE hSnapshot;
    SC_HANDLE hSCManager;
    DWORD BytesNeeded;
    DWORD ServicesReturned;
    PBYTE lpServices;
    BYTE IsService;
    
    switch (uMsg){
    case WM_CREATE:
    hFont = CreateFontW(15,6,0,0,FW_MEDIUM,0,0,0,DEFAULT_CHARSET,0,0,PROOF_QUALITY,DEFAULT_PITCH,L"Tahoma");
    hProcessList = CreateWindowExW(WS_EX_CLIENTEDGE,L"LISTBOX",0,WS_VISIBLE+WS_CHILD+WS_VSCROLL+LBS_NOTIFY,4,4,276,200,hWnd,(HMENU)1,0,0);
    SendMessageW(hProcessList,WM_SETFONT,(WPARAM)hFont,1);
    ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
    hSCManager = OpenSCManager(0,SERVICES_ACTIVE_DATABASE,SC_MANAGER_CONNECT+SC_MANAGER_ENUMERATE_SERVICE);
    EnumServicesStatusEx(hSCManager,SC_ENUM_PROCESS_INFO,SERVICE_WIN32,SERVICE_STATE_ALL,0,0,&BytesNeeded,&ServicesReturned,0,0);
    lpServices = (PBYTE)malloc(BytesNeeded);
    EnumServicesStatusEx(hSCManager,SC_ENUM_PROCESS_INFO,SERVICE_WIN32,SERVICE_STATE_ALL,lpServices,BytesNeeded,&BytesNeeded,&ServicesReturned,0,0);
    while (Process32NextW(hSnapshot,&ProcessEntry)){
    ENUM_SERVICE_STATUS_PROCESS* serv = (ENUM_SERVICE_STATUS_PROCESS*)lpServices;
    IsService = 0;
    for (DWORD i = 0; i < ServicesReturned; i++){
    if (ProcessEntry.th32ProcessID == serv[i].ServiceStatusProcess.dwProcessId){
    IsService = 1;
    break;
    }}
    if (!IsService){
    swprintf(Buffer,L"Id: %d %s",ProcessEntry.th32ProcessID,ProcessEntry.szExeFile);
    SendMessageW(hProcessList,LB_ADDSTRING,0,(LPARAM)Buffer);
    }}
    free(lpServices);
    CloseHandle(hSnapshot);
    CloseServiceHandle(hSCManager);
    break;
    
    case WM_COMMAND:
    if (LOWORD(wParam) == 1){
    if (HIWORD(wParam) == LBN_SELCHANGE){
    SendMessageW(hProcessList,LB_GETTEXT,SendMessageW(hProcessList,LB_GETCURSEL,0,0),(LPARAM)Buffer);
    MessageBoxW(hWnd,Buffer,L"",MB_OK);
    
    DWORD Id = _wtoi(Buffer+4); //skip "Id: "
    }}
    break;
    
    case WM_GETMINMAXINFO:
    MINMAXINFO *lpMinMaxInfo;
    lpMinMaxInfo = (MINMAXINFO*)lParam;
    lpMinMaxInfo->ptMinTrackSize.x = 300;
    lpMinMaxInfo->ptMinTrackSize.y = 250;
    break;
    
    case WM_LBUTTONDOWN:
    PostMessageW(hWnd,WM_NCLBUTTONDOWN,MK_RBUTTON,0);
    break;
    
    case WM_DESTROY:
    PostQuitMessage(0);
    break;
    
    default:
    return DefWindowProcW(hWnd,uMsg,wParam,lParam);
    }
    return 0;
    }
    
    
    void wmain(){
    WNDCLASSEX wcx;
    MSG msg;
    wcx.cbSize = sizeof(WNDCLASSEX);
    wcx.style = 0;
    wcx.lpfnWndProc = WndProc;
    wcx.cbClsExtra = 0;
    wcx.cbWndExtra = 0;
    wcx.hInstance = 0;
    wcx.hIcon = 0;
    wcx.hCursor = LoadCursorW(0,IDC_ARROW);
    wcx.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
    wcx.lpszMenuName = 0;
    wcx.lpszClassName = L"test window";
    wcx.hIconSm = 0;
    RegisterClassExW(&wcx);
    ShowWindow(CreateWindowExW(0,L"test window",L"test window",WS_SYSMENU+WS_MINIMIZEBOX,CW_USEDEFAULT,CW_USEDEFAULT,0,0,0,0,0,0),SW_SHOW);
    while (GetMessageW(&msg,0,0,0)){TranslateMessage(&msg);DispatchMessageW(&msg);}
    ExitProcess(msg.wParam);
    }

    кст зачем такое нужно? :D

     

  7. 1 час назад, Garik66 сказал:

    1. У меня же вроде известный размер - это размер exe -ника. Правильно?

    обновят игру - облом. потому надо читать из хидера.

    + у тебя и так неправильный размер :D

     

    1 час назад, Garik66 сказал:

    2. Что это за инструкции 

    просто в калькуляторе деление и and...
    mov ecx,12 / 4 - получаем количество dword для movsd
    mov ecx,12 & 3 - получаем остаток для movsb

     

    1 час назад, Garik66 сказал:

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

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

     

    • Плюс 1
  8. Скрытый текст
    
    известный размер:
    mov rsi,[from]
    mov rdi,[to]
    mov ecx,12 / 8
    rep movsq
    mov ecx,12 & 7
    rep movsb
    или
    mov rsi,[from]
    mov rdi,[to]
    mov ecx,12 / 4
    rep movsd
    mov ecx,12 & 3
    rep movsb
    
    неизвестный размер:
    mov rsi,[from]
    mov rdi,[to]
    mov ecx,12
    mov edx,ecx
    shr ecx,3
    and edx,7
    rep movsq
    mov ecx,edx
    rep movsb
    или
    mov rsi,[from]
    mov rdi,[to]
    mov ecx,12
    mov edx,ecx
    shr ecx,2
    and edx,3
    rep movsd
    mov ecx,edx
    rep movsb

     

    дальше... [TheCrew.exe+1000] (который для пропуска хидера) надо нормально прочитать для универсальности.. r12 - база модуля

    mov eax,[r12+0x3C] ;e_lfanew
    mov ecx,[r12+rax+0x50] ;SizeOfImage
    mov edx,[r12+rax+0x54] ;SizeOfHeaders

    наверно на СЕ будет так:

    mov eax,[TheCrew.exe+0x3C] ;e_lfanew
    mov ecx,[TheCrew.exe+rax+0x50] ;SizeOfImage
    mov edx,[TheCrew.exe+rax+0x54] ;SizeOfHeaders

     

    • Плюс 2
  9. 22 часа назад, LIRW сказал:

    На машину не пробовал сделать - не разрушаемость ?

    делал возможность гонять на взорванных, оно как то бредово смотрится :D

    скорость бега всеравно круче. пока получилось не управ. ускорение всех на карте..

  10. 17 час назад, LIRW сказал:

    Трейнер не повтор,от gmz что то не работает, там не то процесс другой, не то просто не работает - это сиди гадай, хотя версия та же 1.0 

    инжект не сработал? если не лень - запусти игру (без админ прав) потом закинь хак в x64_dbg (без админ прав) посмотри регистр RAX после всех апи, наприемр:

    call qword ptr ds:[<&CreateToolhelp32Snapshot>]

    rax = 0x12345

    и так дале. их там мало xD

     

  11. дааааа качаешь fasm начинаешь примерно:

    Скрытый текст
    
    format pe nx gui 5.01 dll at 0x10000000 on 'nul'
    entry DllMain
    include '..\fasm\include\win32wx.inc'
    include '..\fasm\include\encoding\utf8.inc'
    
    section '.code' code readable writeable executable
    proc DllMain uses ebx esi edi,hInstDLL,fdwReason,lpvReserved
    .if [fdwReason] = DLL_PROCESS_ATTACH
    invoke DisableThreadLibraryCalls,[hInstDLL]
    invoke CreateThread,0,4096,Init,0,0,0
    invoke CloseHandle,eax
    mov al,1
    .endif
    ret
    endp
    
    proc Init
    local OldProtect rd 1
    invoke GetModuleHandleW,0
    mov esi,eax
    lea edi,[OldProtect]
    invoke VirtualProtect,esi,1,PAGE_EXECUTE_READWRITE,edi
    mov byte[esi+2],0xFF
    invoke VirtualProtect,esi,1,dword[edi],edi
    ret
    endp
    
    data import
    library kernel32,'kernel32.dll'
    import kernel32,\
    DisableThreadLibraryCalls,'DisableThreadLibraryCalls',\
    CreateThread,'CreateThread',\
    CloseHandle,'CloseHandle',\
    GetModuleHandleW,'GetModuleHandleW',\
    VirtualProtect,'VirtualProtect'
    end data
    
    data fixups
    end data

     

    билдишь... и оно уже почти трейнер! в виде x32 dll, уже патчит 3`тий байт в ехе в который ты ее инжект... без интерфейса и кнопок.. какой простор для прокачки! lulz
    ps для дебага используй x32_dbg/x64_dbg, если он фейл - ollydbg v2+

     

  12. 1 час назад, Garik66 сказал:

    У Xipho в уроке примерно всё это и делается.

    слишком хардкорд. размер пе хидера надо брать из него же и размер иниц модуля..

    обычно модуль на сектора делят например по ~500кб, проще найти структуру где лежат адреса кусков, поставить хук на код который пашет когда детект, когда сканер найдет мод код (хук), он сгенерит другой хеш и сработает наш код, дальше всем адресам сменить базу на новый блок, прыгнуть на рескан и норм.

    кст на игре все еще тормозной вмпрот?

     

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

  14. 8 часов назад, Xipho сказал:

    На самом деле, все достаточно просто. На Си и СиПэПэ можно кодить трейнеры и вполне себе графически красивые демосцены.

    дк если пишешь "трейнер" который не dll/exe а кусок кода? недавно писал такой в х64 виде. у него есть окно, он коректно сам себя освобождает из памяти если нажать Х +код пакован до инжекта. а С что? макс dll +какой то лоадер +куча движухи.. короче не то.

     

  15. 3 часа назад, Trix сказал:

    С чего следует начать системное обучение, чтобы не гов**кодить и не писать костыли.

    справки/примеров fasm/nasm должно хватить. на оф сайтах найдешь остальное... тут также есть "уроки", правда редкие годятся для создания чего то МОЩНОГО

     

    3 часа назад, Trix сказал:

    Какой ассемблер учить и какие существуют вообще, в чем их отличия? Какой материал поможет мне в этой теме?

    лучшие fasm/nasm. их дофига, некоторые больше чем на хелловорд не годятся :D

    fasm - х32 модуль, не нужен линкер, не нужен билдер ресурсов, имеет минмум среду для кодинга под винду, также имеет кучу макросов которые помогают нубам и уменьшают количество строк кода в исходнике, иногда макросы мешают и создают невероятный бредокод lulz
    nasm - х32/х64 модуль, нужен линкер, нужен билдер ресурсов, нужен редактор, в стиле "сделай все сам", поддерживает выравнивание в структурах, подходит для кодинга сложных шеллкодов, в х32 можно юзать регистр ebp (в fasm он забит стек фреймом), генерит код именно так как написал

    материал любой где есть примеры х32/х64 вида. также тебе может понадобится С компиль для получения некой инфы из инклудов - подойдет mingw64. хотя в большинстве случаев хватает msdn...

    конечно можно забить и кодить какой то хлам на С, как было сказано выше, кулстори в стиле что круче для кодинга тренеров С или asm всегда ржач lulz

     

    • Плюс 1
  16. 1 час назад, LIRW сказал:

    Ну найти то всё нашел, а вот спустя какое то время она просто испарялась и всё.

    эт античит

     

    1 час назад, LIRW сказал:

    Если в первой можно было всё за просто найти, то тут придется наверное не хило посидеть. 

    шифро там динамик, апи QueryPerformanceCounter - особенно весело там инвентарь заполнять

     

×
×
  • Создать...

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

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