Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Реверсинг (https://forum.antichat.xyz/forumdisplay.php?f=94)
-   -   trackmania (https://forum.antichat.xyz/showthread.php?t=29775)

Tarakan 24.12.2006 16:21

trackmania
 
В данной игре необходимо выкличить соперников, т.к. при игре по сети они очень мешают ехать. В предыдущей версии число отображаемых соперников хранилось в файле конфигурации игры (в игре для изменения настроек используется отдельная прога). Там мы просто меняли число на ноль и спокойно играли. В новой версии игры нашел место куда прописывается число соперников. Но похоже что сама игра начала проверять это число ( и если оно <4, то меняет на 4). Каким образом можно обойти эту проверку или найти куда записывается в памяти это число?
При этом в режиме сингл можно нажать кнопку "o" и все противники выключаются. В сетевой и интернет игре это не работает. Как я понимаю это работает "переключатель". Как можно его найти?
В общем - жду советов. :confused:

TaNkist 24.12.2006 17:47

С помощью Artmoney ломать не пробывал?

Tarakan 24.12.2006 18:46

Хм, совсем забыл про это программку. В общем нашел адрес в памяти. Но это срабатывает только в сингле. В мультиплеере изменение этого адреса не на что не влияет :( Таким же образом найти адрес для мультиплеера не получится - там противники включены постоянно.
Можно как нибудь попробовать определить куда в памяти грузится значенеие из файла?

hidden 24.12.2006 19:31

Можно открыть её в дизассемблерн(ida), найти в строках имя нужного файла, процедуру его открытия и узнать место его сохранения, также моно найти проверку "не меньше 4х" и пропатчить.

Sn@k3 24.12.2006 19:50

http://www.chemax.ru/cgi-bin/search/search?q=trackmania&B2=%25CF%25EE%25E8%25F1%25EA

зачем так сложно)) можно гораздо проще)

Tarakan 24.12.2006 20:01

to Sn@k3:
это не то. Нужны не читы :)
Я наверно не до конца объяснил ситуацию. Игра Trackmania United (только появилась). Столкновения между машинами там отсутсвуют (машины проезжают сквозь друг друга). Соревнования проводятся в режиме раундов - то есть 6 (8 или 10) машин стартуют одновременно. Разобраться в этом хаосе в поворотах просто невозможно. Для того чтоб можно было нормально ехать хочется выключить соперников.
Для мультиплеера можно задать лимит отображаемых соперников. Но меньше 4 задать не получается, т.к. игра при загрузке и настройщик при сохранении проверяют это число. Вот ищу способ обойти эти проверки ( а как я понимаю надо обойти только одну - та, что выполняется самой игрой при загрузке).
Буду пробовать дизассемблировать

Sn@k3 24.12.2006 20:25

"Буду пробовать дизассемблировать" ну удачи)

Tarakan 24.12.2006 21:25

Цитата:

Сообщение от Sn@k3
"Буду пробовать дизассемблировать" ну удачи)

О чем я думал когда говорил это? Теперь сижу и смотрю в монитор как баран на новые ворота :) М-да... буду разбираться

ProTeuS 24.12.2006 21:42

пробуй искать в исполняемом файле байты

83 FB 04 7C
83 FA 04 7C

может повезти и тогда просто нужно будет 0x04 заменить на 0x00

Tarakan 09.01.2007 21:04

В общем вот:
число соперников задается равным 123456789. Затем с первого раза это значение находится в памяти. (догадаться до этого сам не смог :) - помогли). Все время запускать артмани не удобно. Хотелось бы создать трейнер. Но есть одна проблема - не умею читать и записывать данные в память чужого процесса. Помогите пожалуйста, как это делается? Какие функции WinAPI используются для этого?

hidden 09.01.2007 21:10

Цитата:

Сообщение от Tarakan
Какие функции WinAPI используются для этого?

CreateProcessA/OpenProcess
ReadProcessMemory
WriteProcessMemory
CloseHandle

ProTeuS 09.01.2007 22:44

примерно так

Код:

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ить

Tarakan 10.01.2007 02:01

Всем огромное спасибо. Программа работает. :)
Осталось ускорить поиск да добавить возможность включать/выключать соперников.


Время: 21:47