В данной игре необходимо выкличить соперников, т.к. при игре по сети они очень мешают ехать. В предыдущей версии число отображаемых соперников хранилось в файле конфигурации игры (в игре для изменения настроек используется отдельная прога). Там мы просто меняли число на ноль и спокойно играли. В новой версии игры нашел место куда прописывается число соперников. Но похоже что сама игра начала проверять это число ( и если оно <4, то меняет на 4). Каким образом можно обойти эту проверку или найти куда записывается в памяти это число? При этом в режиме сингл можно нажать кнопку "o" и все противники выключаются. В сетевой и интернет игре это не работает. Как я понимаю это работает "переключатель". Как можно его найти? В общем - жду советов.
Хм, совсем забыл про это программку. В общем нашел адрес в памяти. Но это срабатывает только в сингле. В мультиплеере изменение этого адреса не на что не влияет Таким же образом найти адрес для мультиплеера не получится - там противники включены постоянно. Можно как нибудь попробовать определить куда в памяти грузится значенеие из файла?
Можно открыть её в дизассемблерн(ida), найти в строках имя нужного файла, процедуру его открытия и узнать место его сохранения, также моно найти проверку "не меньше 4х" и пропатчить.
http://www.chemax.ru/cgi-bin/search/search?q=trackmania&B2=%25CF%25EE%25E8%25F1%25EA зачем так сложно)) можно гораздо проще)
to Sn@k3: это не то. Нужны не читы Я наверно не до конца объяснил ситуацию. Игра Trackmania United (только появилась). Столкновения между машинами там отсутсвуют (машины проезжают сквозь друг друга). Соревнования проводятся в режиме раундов - то есть 6 (8 или 10) машин стартуют одновременно. Разобраться в этом хаосе в поворотах просто невозможно. Для того чтоб можно было нормально ехать хочется выключить соперников. Для мультиплеера можно задать лимит отображаемых соперников. Но меньше 4 задать не получается, т.к. игра при загрузке и настройщик при сохранении проверяют это число. Вот ищу способ обойти эти проверки ( а как я понимаю надо обойти только одну - та, что выполняется самой игрой при загрузке). Буду пробовать дизассемблировать
О чем я думал когда говорил это? Теперь сижу и смотрю в монитор как баран на новые ворота М-да... буду разбираться
пробуй искать в исполняемом файле байты 83 FB 04 7C 83 FA 04 7C может повезти и тогда просто нужно будет 0x04 заменить на 0x00
В общем вот: число соперников задается равным 123456789. Затем с первого раза это значение находится в памяти. (догадаться до этого сам не смог - помогли). Все время запускать артмани не удобно. Хотелось бы создать трейнер. Но есть одна проблема - не умею читать и записывать данные в память чужого процесса. Помогите пожалуйста, как это делается? Какие функции WinAPI используются для этого?
примерно так Code: include 'win32ax.inc' Patch db 0x75BCD15 ;Your constant .code start: invoke FindWindow, NULL, 'Put here your WindowName' or eax, eax jz .err invoke GetWindowThreadProcessId, eax, PID or eax, eax jz .err invoke OpenProcess, PROCESS_VM_OPERATION or PROCESS_VM_WRITE, NULL, [PID] mov dword [handle], eax or eax, eax jz .err mov edi, 0x00410000 ;StartBruteforcePoint .Brute: inc edi mov esi, dword [edi] cmp esi, dword [Patch] jnz .Brute invoke WriteProcessMemory, dword [handle], edi, Patch, 1, temp invoke CloseHandle, dword [handle] jmp .ending .err: invoke MessageBox, NULL, Err, 'loader', MB_OK or MB_ICONWARNING invoke ExitProcess, 0 .ending: invoke MessageBox, NULL, Suc, 'loader', MB_OK or MB_ICONWARNING invoke ExitProcess, 0 ret .end start Err db 'Error patching!', 0; Suc db 'Patching done!', 0; handle db ? PID dd ? temp db ? BaseOffset db ? мож даж заработает ) а вообще лу4ше узнать смещение в файле с константой и руками ее пропат4ить
Всем огромное спасибо. Программа работает. Осталось ускорить поиск да добавить возможность включать/выключать соперников.