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

Coder

Ветераны
  • Постов

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

  • Посещение

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

    13

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

  1. Найди инструкции которые пишут в адрес с патронами, и напиши нужный тебе скрипт.

    Если же тебе надо, чтобы значение осталось таким же как и было (а не 999 например), ищи инструкцию, которая пишет в твой адрес при выстрели, а потом проверь что ещё к ней обращается, если же там только твой адрес, можешь нопить её и всё.

    Если там ещё чужие адреса окажутся, делай фильтр (как его сделать можно найти на форуме).

    ACID, нет разницы - указал ты конкретное число или будет браться тоже самое число только с какого-нибудь регистра.

  2. Версия игры: 1.0.5427.1; дата создания: 04.18.2012; 11 функций

    post-8127-0-06197700-1334710658_thumb.jp

    Корабль:

    F1 - Невидимый корабль, жнецы никогда за вами не явятся

    F2 - Бесконечное топливо

    F3 - Телепорт корабля

    F4 - Сохранить позицию

    F5 - Загрузить позиция

    Шепард и его команда:

    F6 - Режим бога (здоровье никогда не отнимется) + убийство с одного касания/пинка/ранения

    F7 - Бесконечная броня (!!будьте осторожны, сверхмощные повреждения, отнимают здоровье даже через броню!!)

    F8 - Прибавить указанное количество кредитов

    F10 - Телепорт Шепарда

    F11 - Сохранить позицию

    F12 - Загрузить позицию

    P.S. требует .NET 4.0

    Обсуждение моих трейнеров - http://forum.gamehac...BE%D1%82-coder/

    ME3_Trainer.zip

    • Плюс 3
  3. Версия игры 1.4 (актуальная на данный момент); Версия трейнера 1.0; дата создания: 04.04.2012

    post-8127-0-87299700-1333544991_thumb.jp

    Функции:

    F1 - Бесконечные патроны

    F2 - Бесконечная выносливость

    F3 - Режим бога (максимум брони и здоровья + они не отнимаются: взрывами, падениями, ударами, стрельбой и т.д.) + бесконечные гранаты

    F4 - Отключение искусственного интеллекта игры (все ваши враги на уровне просто стоят и всё, никак не реагируют ни на что), если вы захотите всё вернуть назад, отключите эту функцию, и загрузите последнюю сохранённую игру.

    Трейнер закрывается правым кликом мыши.

    P.S. требует .NET 4.0

    Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/

    Скачать:

    FarCry Trainer.zip

    • Плюс 2
  4. Полностью подверждаю слова кенга.

    Полное нитро имеет значение (float)6, инструкция которая пишет обращается в адрес [edi+50], несмотря на то, что адрес нитро расположен в [edi+58], ну да ладно :)

    К тому же игра полностью меняет базу указателей при рестарте гонки.

    Стабильно держатся только координаты для этой гонки (в других гонках уже нужно заново искать указатели на координаты).

    Это что-то новое в защите игр. От EA я такого никак не ожидал.

    P.S. ну вот какого чёрта отладчик отображает что эта инструкция пишет в адрес нитро, хотя она пишет совершенно в другой адрес.

  5. Версия игры 1.02; версия трейнера 1.1; дата создания трейнера 02.02.2012

    post-8127-0-42385300-1333383266_thumb.jp

    Описание:

    F1 - Бесконечная энергия (нитро)

    F2 - Всегда первый

    F3 - ТелепортХак, после включения (F4 - Сохранить координаты, F5 - Восстановить координаты).

    P.S. требует .NET 4.0

    Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/

    RidgeTrainer.zip

    • Плюс 2
  6. Версия игры 1.0.5.0; версия трейнера 1.0, дата создания 03.02.2012

    post-8127-0-84282200-1333382542_thumb.jp

    Описание:

    F1 - Бесконечная закись азота

    F2 - Остановка таймера (даже если вы не приехали первым фактически, вы всё равно выиграете (игра определяет победителя по времени))

    F3 - Бесконечные бонусы (турбо, ЭМИ, вертолёты, заграждения и т.д., даже если вам не выдали никаких бонусов в гонке, они появятся всё равно)

    F4 - Мгновенная перезарядка (вы можете использовать бонусы, не дождавшись перезарядки)

    F5 - Ультралёгкая машина (немного увеличивается макс. скорость, неимоверно увеличивается ускорение, но управлять тяжело)

    Настоятельно рекомендуется отключить эту функцию в конце гонки, и сбросить массу (NumPad0).

    F6 - Телепорт, в объяснении не нуждается (правда немного кривой он).

    Трейнер закрывается правым кликом мыши.

    Обсуждение моих трейнеров - http://forum.gamehacklab.ru/topic/1359-%D0%BE%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D1%82%D1%80%D0%B5%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%BE%D1%82-coder/

    P.S. требует .NET 4.0

    NFSHPTrainer.zip

    • Плюс 2
  7. Есть некоторый прогресс,хотел найти значение скорости тачки, нашёл экранное значение скорости.

    Начал смотреть что в него пишет, была одна инстукция fld.

    Решил полазить по отладчику, и вуаля нашёл не скорость, а 3 значения (структура), смещение машины по оси X,Y,Z.

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

    Выглядит это так:

    775380b86b63.jpg

    Да как я и думал, немного продолжив своё шествие по отладчику (поставил бряк на смещения), я нашёл координаты.

    Отпишусь если найду скорость.

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

    P.S. я не "жидяра" и не "школоло", я советовал бы Вам быть по адекватнее.

    400bb748ce5e.jpg

  8. CSS конечно же = )

    Я этому человеку даже в скайпе показал как координаты искать, он всёравно повторить не смог =)

    Извините, но я вас не знаю и тем более вас нет у меня в скайпе.

    А игра Ridge Racer Unbounded (2012), как и искать координаты я знаю=)

  9. Здравствуйте! Вышла новая часть игры Ridge Racer.

    Ну для начала, я сделал бесконечную энергию, потом решил пошалить с координатами.

    Так вот, когда дошёл до координат, я увидел облом.

    Решил найти структуру координат по Z (ведь так проще всего).

    Ничто не предвещало проблем, но всё же произошла проблема, при долгом и тщательном отсеивании остаются два адреса, они меняются когда меняется высота (высота больше, значение больше).

    Но эти значения не настоящие (их изменение ничего не даёт, т.к. после изменения сразу возвращается прошлое значение).

    Искал и float и double, толку не дало.

    Может есть какие-нибудь рекомендации?

  10. Это не обязательно текст - вполне может быть текстура, т.е. картинка с надписью, которую игра и отображает. В этом случае поиск затянется - но на всякий случай погугли на тему "замена текстур".

    Гугл выводит бред, типа - закиньте свои текстуры в такую-то папку.

    А как понятно, мне это явно не подходит.

    ---

    Так есть какие-нибудь варианты?

  11. Здравствуйте!

    Нашел внутриигровое значение скорости атаки героев в игре.

    Теперь я хотел бы заменить текст в игре - Скорость боя: Высокая на Скорость боя: [внутриигровое значение]

    Но вот найти значение поля Скорость боя никак не получается..

    Как это возможно реализовать?

  12. Спасибо за подсказки, получилось сделать трейнер на C++.

    #include <windows.h>
    #include <conio.h>
    #include <dos.h>
    #include <tlhelp32.h>
    #include <stdio.h>

    LPVOID gm_addr1 = (void*) адрес; // memory address of the stamina value in the WarRock process
    LPVOID gm_addr2 = (void*) адрес;
    LPVOID gm_addr3 = (void*) адрес;
    LPVOID gm_addr4 = (void*) адрес;
    LPVOID gm_off1 = (void*) байт кода;
    LPVOID gm_off2 = (void*) байт кода;
    LPVOID gm_off3 = (void*) байт кода;
    LPVOID gm_off4 = (void*) байт кода;
    LPVOID gm_on1 = (void*) байт кода;
    LPVOID gm_on2 = (void*) байт кода;
    LPVOID gm_on3 = (void*) байт кода;
    LPVOID gm_on4 = (void*) байт кода;

    void screen() // output
    {
    system("cls"); // clear the screen
    printf("WarCraft 3 Map Hack \n");
    printf("Press NumPad1 to enable MapHack \n");
    printf("Press NumPad2 to disable MapHack \n");
    printf("Created by Coder, connect with me ICQ: 222932 \n");

    }

    int main(int argc, char* argv[])
    {
    HANDLE hProcessSnap; // will store a snapshot of all processes
    HANDLE hProcess = NULL; // we will use this one for the WarRock process
    PROCESSENTRY32 pe32; // stores basic info of a process, using this one to read the ProcessID from

    hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); // make process snapshot

    pe32.dwSize = sizeof( PROCESSENTRY32 ); // correct size

    Process32First(hProcessSnap, &pe32); // read info about the first process into pe32

    do // loop to find the WarRock process
    {
    if(strcmp(pe32.szExeFile, "war3.exe") == 0) // if WarRock was found
    {
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); // open it, assigning to the hProcess handle
    break; // break the loop
    }
    }
    while(Process32Next(hProcessSnap, &pe32)); // loop continued until Process32Next deliver NULL or its interrupted with the "break" above

    CloseHandle( hProcessSnap ); // close the handle (just fuckin do it)

    if(hProcess == NULL) // self explanatory tbh
    {
    printf("WarCraft is not running!");
    getch(); // wait for a key press. otherwise the app will just close so fast when the process is not found, you wont know wtf happened.
    }
    else
    {
    screen(); // print the display

    char key = ' '; // make a key variable to store pressed keys

    while(key != VK_ESCAPE) // loop until user presses Escape
    {

    if(kbhit()) // if a key was pressed
    {
    key = getch(); // it is saved into "key"

    switch(key) // here the commands are handled depending on the key that was pressed
    { // case '1': ... break; case '2': ... break; and so on
    case '1':
    WriteProcessMemory(hProcess, gm_addr1, &gm_on1, 1, NULL); // read the stamina value from the memory into the "stamina" variable
    WriteProcessMemory(hProcess, gm_addr2, &gm_on2, 1, NULL);
    WriteProcessMemory(hProcess, gm_addr3, &gm_on3, 1, NULL);
    WriteProcessMemory(hProcess, gm_addr4, &gm_on4, 1, NULL);
    break;
    case '2':
    WriteProcessMemory(hProcess, gm_addr1, &gm_off1, 1, NULL); // read the stamina value from the memory into the "stamina" variable
    WriteProcessMemory(hProcess, gm_addr2, &gm_off2, 1, NULL);
    WriteProcessMemory(hProcess, gm_addr3, &gm_off3, 1, NULL);
    WriteProcessMemory(hProcess, gm_addr4, &gm_off4, 1, NULL);
    break;
    }

    screen(); // print the display after each key press

    }

    CloseHandle(hProcess); // close the handle

    }

    return 0; // THE END
    }
    }

  13. Первая и самая грубая ошибка - после того, как процесс найден, или же перебор процессов закончен (в случае, если игра не запущена), надо обязательно закрывать хэндл снимка системы. Это раз. Ну а по поводу записи в память - большинство игр сейчас идут с защитой от подобных изменений, поэтому, прежде чем записать что-либо в память процесса, надо сначала получить права на запись, а точнее, сменить тип защиты нужного адреса. Делается это функцией VirtualProtectEx. Далее, сразу же после записи нужных данных в память процесса, нужно восстановить старые настройки защиты (их можно сохранить при первом запуске упомянутой функции - МСДН объяснит) вызовом этой же самой функции. Это неоднократно рассматировалось в разных статьях и разных тредах нашего форума, надо не лениться и пользоваться поиском. Если в каждой теме обмусоливать одни и те же вопросы - мы все погрязнем в куче однотипной информации, в которой что-то полезное будет найти весьма проблематично.

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

    format PE GUI 4.0
    entry start
    include 'd:\Coding\fasm\include\win32a.inc'
    struct PROCESSENTRY32
    dwSize dd ?
    cntUsage dd ?
    th32ProcessID dd ?
    th32DefaultHeapID dd ?
    th32ModuleID dd ?
    cntThreads dd ?
    th32ParentProcessID dd ?
    pcPriClassBase dd ?
    dwFlags dd ?
    szExeFile rd 260
    ends
    section '.data' data readable writable
    file_name db 'war3.exe',0
    handle_snap dd ?
    handle_proc dd ?
    error_message db 'Access denited!',0
    caption db 'Fasm Trainer',0
    Poke dd _Poke
    addr dd адрес
    godmode_on db байты
    godmode_off db байты

    pe32 PROCESSENTRY32
    section '.text' code readable executable
    start:
    invoke CreateToolhelp32Snapshot, 0fh, 0
    mov [handle_snap], eax
    invoke Process32First, eax, pe32
    invoke GetModuleHandle,0
    invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
    invoke ExitProcess,0
    @next:
    nop
    invoke Process32Next, [handle_snap], pe32
    test eax, eax
    jz @error
    invoke lstrcmp, pe32.szExeFile, file_name
    test eax, eax
    jnz @next
    @error:
    invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
    proc DialogProc hwnddlg,msg,wparam,lparam
    cmp [msg],WM_CLOSE
    je .wmclose
    cmp [msg],WM_COMMAND
    je .wmcommand
    cmp [msg],WM_LBUTTONDOWN
    je .move
    xor eax,eax
    jmp .finish
    .wmcommand:
    cmp [wparam],BN_CLICKED shl 16 + 1
    je .poke
    cmp [wparam],BN_CLICKED shl 16 + 2
    je .wmclose
    .poke:
    invoke Poke,[addr],godmode_on,4
    jmp .finish
    .wmclose:
    invoke Poke,[addr],godmode_off,4
    invoke EndDialog,[hwnddlg],0
    .move:
    invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
    .finish:
    ret
    endp
    proc _Poke,memadd,memval,bytes
    invoke OpenProcess, PROCESS_ALL_ACCESS, 0, [pe32.th32ProcessID]
    cmp eax,0
    je .error
    invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
    cmp eax,0
    je .error
    invoke CloseHandle, [handle_snap]
    ret
    .error:
    invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
    ret
    endp
    section '.idata' import data readable writeable
    library kernel,'kernel32.DLL',\
    user,'user32.DLL'
    import kernel,\
    GetModuleHandle,'GetModuleHandleA',\
    ExitProcess,'ExitProcess',\
    OpenProcess,'OpenProcess',\
    WriteProcessMemory,'WriteProcessMemory',\
    CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
    Process32First,'Process32First',\
    Process32Next,'Process32Next',\
    lstrcmp,'lstrcmp',\
    CloseHandle,'CloseHandle'
    import user,\
    DialogBoxParam,'DialogBoxParamA',\
    EndDialog,'EndDialog',\
    MessageBox,'MessageBoxA',\
    SendMessage,'SendMessageA'
    section '.rsrc' resource data readable
    directory RT_DIALOG,dialogs
    resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
    dialog demonstration,'Trainer by Coder',70,70,190,175,WS_POPUP
    dialogitem 'STATIC','Press OK for toggle godmode on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
    dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
    dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
    enddialog

  14. Сделал вещь, процесс видит, но запись в код игры не происходит, в чём проблема?

    format PE GUI 4.0
    include 'd:\Coding\fasm\include\win32ax.inc'

    struct PROCESSENTRY32
    .dwSize dd ?
    .cntUsage dd ?
    .th32ProcessID dd ?
    .th32DefaultHeapID dd ?
    .th32ModuleID dd ?
    .cntThreads dd ?
    .th32ParentProcessID dd ?
    .pcPriClassBase dd ?
    .dwFlags dd ?
    .szExeFile rb 260
    ends

    TH32CS_SNAPPROCESS = 0x2

    ;------------------------------------------------
    ;Declares
    ;------------------------------------------------
    .data
    SnapHandle dd ?
    Poke dd _Poke
    ProcessEntry PROCESSENTRY32
    szProcessName db "war3.exe", 0
    addr dd адрес
    godmode_on db байты
    proc _Poke,memadd,memval,bytes
    invoke OpenProcess,PROCESS_ALL_ACCESS,0,[ProcessEntry..th32ProcessID]
    invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
    cmp eax,0
    je Exit
    ret
    endp
    .code
    Main:
    ;------------------------------------------------
    ;Create Snapshot of Processes
    ;------------------------------------------------
    mov dword [ProcessEntry..dwSize], sizeof.PROCESSENTRY32
    invoke CreateToolhelp32Snapshot, TH32CS_SNAPPROCESS, 0
    cmp eax, 0
    je Exit
    mov dword [SnapHandle], eax
    invoke Process32First, dword [SnapHandle], ProcessEntry

    ;------------------------------------------------
    ;Loop Through All Processes
    ;------------------------------------------------
    NextProcess:
    cmp eax, 0
    je Exit
    invoke lstrcmpi, ProcessEntry..szExeFile, szProcessName
    cmp eax, 0
    je Found
    invoke Process32Next, dword [SnapHandle], ProcessEntry
    jmp NextProcess
    ;------------------------------------------------
    ;Show a messagebox if found
    ;------------------------------------------------
    Found:
    invoke MessageBox, 0, "Patch Sucessful!", szProcessName, MB_ICONQUESTION
    invoke Poke,addr,godmode_on,4;
    ;jmp Exit

    ;------------------------------------------------
    ;Exit the loader when done
    ;------------------------------------------------
    Exit:
    invoke ExitProcess, 0
    .end Main

  15. Сейчас попробую запилить.

    Вроде бы понял как работают эти функции. Но тогда возникает вопрос, а как я узнаю что функция остановилась на моём процессе? И собственно остановлюсь на своём процессе.

    Кое-что написал, но при компиляции ошибка на линии 58 ( invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pe32.th32ProcessID] )

    format PE GUI 4.0
    entry start
    include 'd:\Coding\fasm\include\win32a.inc'
    section '.data' data readable writable
    error_message db 'Access denited!',0
    caption db 'Fasm Trainer',0
    pid dd 0
    Poke dd _Poke
    windowcap db 'Warcraft III',0
    addr dd адрес
    mh_on db байты вкл
    mh_off db байты выкл
    section '.text' code readable executable
    start:
    invoke GetModuleHandle,0
    invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
    invoke ExitProcess,0
    proc DialogProc hwnddlg,msg,wparam,lparam
    cmp [msg],WM_CLOSE
    je .wmclose
    cmp [msg],WM_COMMAND
    je .wmcommand
    cmp [msg],WM_LBUTTONDOWN
    je .move
    xor eax,eax
    jmp .finish
    .wmcommand:
    cmp [wparam],BN_CLICKED shl 16 + 1
    je .poke
    cmp [wparam],BN_CLICKED shl 16 + 2
    je .wmclose
    .poke:
    invoke Poke,[addr],mh_on,4
    jmp .finish
    .wmclose:
    invoke Poke,[addr],mh_off,4
    invoke EndDialog,[hwnddlg],0
    .move:
    invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
    .finish:
    ret
    endp
    proc _Poke,memadd,memval,bytes
    invoke CreateToolhelp32Snapshot,0fh,NULL
    mov edx, eax
    mov [pe32.dwSize],sizeof.PROCESSENTRY32
    cmp eax,0
    je .error
    invoke Process32First,edx,pe32
    test eax,eax
    jz .error
    invoke Process32Next,edx,pe32
    test eax,eax
    jz .error
    invoke lstrcmpi,pe32.szExeFile,'war3.exe'
    test eax,eax
    jz .error
    invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pe32.th32ProcessID]
    cmp eax,0
    je .error
    invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
    cmp eax,0
    je .error
    ret
    .error:
    invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
    ret
    endp
    struct PROCESSENTRY32

    dwSize dd MAX_PATH
    cntUsage dd NULL
    th32ProcessID dq NULL
    th32DefaultHeapID dq NULL
    th32ModuleID dd NULL
    cntThreads dd NULL
    th32ParentProcessID dd NULL
    pcPriClassBase dd NULL
    dwFlags dd NULL
    szExeFile db MAX_PATH dup NULL
    ends
    pe32 PROCESSENTRY32
    section '.idata' import data readable writeable
    library kernel,'kernel32.DLL',\
    user,'user32.DLL'
    import kernel,\
    GetModuleHandle,'GetModuleHandleA',\
    ExitProcess,'ExitProcess',\
    OpenProcess,'OpenProcess',\
    WriteProcessMemory,'WriteProcessMemory',\
    CreateToolhelp32Snapshot,'CreateToolhelp32Snapshot',\
    Process32First,'Process32First',\
    Process32Next,'Process32Next '
    import user,\
    DialogBoxParam,'DialogBoxParamA',\
    EndDialog,'EndDialog',\
    MessageBox,'MessageBoxA',\
    FindWindow,'FindWindowA',\
    GetWindowThreadProcessId,'GetWindowThreadProcessId',\
    SendMessage,'SendMessageA'
    section '.rsrc' resource data readable
    directory RT_DIALOG,dialogs
    resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
    dialog demonstration,'Trainer by Coder',70,70,190,175,WS_POPUP
    dialogitem 'STATIC','Press OK for toggle godmode on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
    dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
    dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
    enddialog

  16. Здравствуйте! Как в FASM подключиться к процессу по его имени (war3.exe)?

    Или по его классу?

    format PE GUI 4.0
    entry start
    include 'd:\Coding\fasm\include\win32a.inc'
    section '.data' data readable writable
    error_message db 'Access denited!',0
    caption db 'Fasm Trainer',0
    pid dd 0
    Poke dd _Poke
    windowcap db 'Warcraft III',0
    addr dd адрес
    godmode_on db байты вкл
    godmode_off db байты выкл

    section '.text' code readable executable
    start:
    invoke GetModuleHandle,0
    invoke DialogBoxParam,eax,37,HWND_DESKTOP,DialogProc,0
    invoke ExitProcess,0
    proc DialogProc hwnddlg,msg,wparam,lparam
    cmp [msg],WM_CLOSE
    je .wmclose
    cmp [msg],WM_COMMAND
    je .wmcommand
    cmp [msg],WM_LBUTTONDOWN
    je .move
    xor eax,eax
    jmp .finish
    .wmcommand:
    cmp [wparam],BN_CLICKED shl 16 + 1
    je .poke
    cmp [wparam],BN_CLICKED shl 16 + 2
    je .wmclose
    .poke:
    invoke Poke,[addr],godmode_on,2
    jmp .finish
    .wmclose:
    invoke Poke,[addr],godmode_off,2
    invoke EndDialog,[hwnddlg],0
    .move:
    invoke SendMessage,[hwnddlg],WM_NCLBUTTONDOWN,2,0
    .finish:
    ret
    endp
    proc _Poke,memadd,memval,bytes
    invoke FindWindow, windowcap, windowcap
    cmp eax,0
    je .error
    invoke GetWindowThreadProcessId,eax,pid
    cmp [pid],0
    je .error
    invoke OpenProcess,PROCESS_ALL_ACCESS,0,[pid]
    cmp eax,0
    je .error
    invoke WriteProcessMemory,eax,[memadd],[memval],[bytes],0
    cmp eax,0
    je .error
    ret
    .error:
    invoke MessageBox,HWND_DESKTOP,error_message,caption,MB_OK
    ret
    endp
    section '.idata' import data readable writeable
    library kernel,'kernel32.DLL',\
    user,'user32.DLL'
    import kernel,\
    GetModuleHandle,'GetModuleHandleA',\
    ExitProcess,'ExitProcess',\
    OpenProcess,'OpenProcess',\
    WriteProcessMemory,'WriteProcessMemory'
    import user,\
    DialogBoxParam,'DialogBoxParamA',\
    EndDialog,'EndDialog',\
    MessageBox,'MessageBoxA',\
    FindWindow,'FindWindowA',\
    GetWindowThreadProcessId,'GetWindowThreadProcessId',\
    SendMessage,'SendMessageA'
    section '.rsrc' resource data readable
    directory RT_DIALOG,dialogs
    resource dialogs,37,LANG_ENGLISH+SUBLANG_DEFAULT,demonstration
    dialog demonstration,'WarCraft +1 trainer',70,70,190,175,WS_POPUP
    dialogitem 'STATIC','Press OK for toggle godmone on.',-1,0,0,163,188,SS_LEFT + WS_VISIBLE+ SS_CENTER
    dialogitem 'BUTTON','OK',1,85,150,45,15,WS_VISIBLE
    dialogitem 'BUTTON','Exit',2,135,150,45,15,WS_VISIBLE
    enddialog

    Так как подключиться по имени окна не получается, та же самая проблема возникла и при написании данного трейнера на C#, проблема при подключении к процессу.

  17. Данный код не работает.

    После того как тыкаешь, чтобы изменить значение, вылетает ошибка на строке

    if (iRetValue == 0)

    throw new Exception("CloseHandle Failed");

    }

    Вот моя Form1

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Globalization;
    using System.Threading;
    using trainer2;

    namespace IE
    {
    public partial class Form1 : Form
    {
    trainer2.Memory oMemory = new Memory();
    bool gamehacklab = true;
    public Form1()
    {
    InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
    Process[] aProcesses = Process.GetProcessesByName("war3"); //Имя процесса игры в памяти, пишем без "exe"
    if (aProcesses.Length != 0)
    {
    oMemory.ReadProcess = aProcesses[0];
    oMemory.Open();

    int myGame_Address = Addr.ToDec("52C0000"); // Статичный адрес указателя
    int[] myGame_Offsets = { 0x42CA1A }; // Офсеты, смещение пишем в виде 0х--
    int bytesWritten; //
    byte[] bValue_To_Write = BitConverter.GetBytes(15); //3аписиваем 999 количество трутниц
    string sWritten_Address = oMemory.PointerWrite((IntPtr)myGame_Address, bValue_To_Write, myGame_Offsets, out bytesWritten);

    if (bytesWritten == bValue_To_Write.Length)
    label1.Text = ("MapHack Enabled." + "!"); // Выводим текст если изменяется значение
    else
    label1.Text = ("MapHack Disabled (Error!). " + ".");// Выводим текст если ничего не получится

    oMemory.CloseHandle();
    }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
    Process[] aProcesses = Process.GetProcessesByName("war3");
    if (aProcesses.Length != 0)
    {
    gamehacklab = true;
    label2.Text = "Игра запущена";

    }

    else
    {
    gamehacklab = false;
    label2.Text = "Игра Не запущена";
    }
    }
    }
    }

    В чём проблема?

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

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

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