trackmania

Discussion in 'Реверсинг' started by Tarakan, 24 Dec 2006.

  1. Tarakan

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    В данной игре необходимо выкличить соперников, т.к. при игре по сети они очень мешают ехать. В предыдущей версии число отображаемых соперников хранилось в файле конфигурации игры (в игре для изменения настроек используется отдельная прога). Там мы просто меняли число на ноль и спокойно играли. В новой версии игры нашел место куда прописывается число соперников. Но похоже что сама игра начала проверять это число ( и если оно <4, то меняет на 4). Каким образом можно обойти эту проверку или найти куда записывается в памяти это число?
    При этом в режиме сингл можно нажать кнопку "o" и все противники выключаются. В сетевой и интернет игре это не работает. Как я понимаю это работает "переключатель". Как можно его найти?
    В общем - жду советов. :confused:
     
  2. TaNkist

    TaNkist Elder - Старейшина

    Joined:
    6 Apr 2006
    Messages:
    147
    Likes Received:
    47
    Reputations:
    19
    С помощью Artmoney ломать не пробывал?
     
  3. Tarakan

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    Хм, совсем забыл про это программку. В общем нашел адрес в памяти. Но это срабатывает только в сингле. В мультиплеере изменение этого адреса не на что не влияет :( Таким же образом найти адрес для мультиплеера не получится - там противники включены постоянно.
    Можно как нибудь попробовать определить куда в памяти грузится значенеие из файла?
     
  4. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Можно открыть её в дизассемблерн(ida), найти в строках имя нужного файла, процедуру его открытия и узнать место его сохранения, также моно найти проверку "не меньше 4х" и пропатчить.
     
  5. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    http://www.chemax.ru/cgi-bin/search/search?q=trackmania&B2=%25CF%25EE%25E8%25F1%25EA

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

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    to Sn@k3:
    это не то. Нужны не читы :)
    Я наверно не до конца объяснил ситуацию. Игра Trackmania United (только появилась). Столкновения между машинами там отсутсвуют (машины проезжают сквозь друг друга). Соревнования проводятся в режиме раундов - то есть 6 (8 или 10) машин стартуют одновременно. Разобраться в этом хаосе в поворотах просто невозможно. Для того чтоб можно было нормально ехать хочется выключить соперников.
    Для мультиплеера можно задать лимит отображаемых соперников. Но меньше 4 задать не получается, т.к. игра при загрузке и настройщик при сохранении проверяют это число. Вот ищу способ обойти эти проверки ( а как я понимаю надо обойти только одну - та, что выполняется самой игрой при загрузке).
    Буду пробовать дизассемблировать
     
    #6 Tarakan, 24 Dec 2006
    Last edited: 24 Dec 2006
  7. Sn@k3

    Sn@k3 Elder - Старейшина

    Joined:
    13 Apr 2006
    Messages:
    1,000
    Likes Received:
    438
    Reputations:
    90
    "Буду пробовать дизассемблировать" ну удачи)
     
  8. Tarakan

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    О чем я думал когда говорил это? Теперь сижу и смотрю в монитор как баран на новые ворота :) М-да... буду разбираться
     
  9. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    пробуй искать в исполняемом файле байты

    83 FB 04 7C
    83 FA 04 7C

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

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    В общем вот:
    число соперников задается равным 123456789. Затем с первого раза это значение находится в памяти. (догадаться до этого сам не смог :) - помогли). Все время запускать артмани не удобно. Хотелось бы создать трейнер. Но есть одна проблема - не умею читать и записывать данные в память чужого процесса. Помогите пожалуйста, как это делается? Какие функции WinAPI используются для этого?
     
  11. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    CreateProcessA/OpenProcess
    ReadProcessMemory
    WriteProcessMemory
    CloseHandle
     
  12. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    примерно так

    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ить
     
    #12 ProTeuS, 9 Jan 2007
    Last edited: 9 Jan 2007
    1 person likes this.
  13. Tarakan

    Tarakan Member

    Joined:
    16 Dec 2006
    Messages:
    7
    Likes Received:
    37
    Reputations:
    11
    Всем огромное спасибо. Программа работает. :)
    Осталось ускорить поиск да добавить возможность включать/выключать соперников.
     
    #13 Tarakan, 10 Jan 2007
    Last edited: 10 Jan 2007