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

TrainME by Xipho


Xipho

Рекомендуемые сообщения

Так, в общем, накидал небольшой трейнми. Ломать его будет несложно, поэтому по мере взлома буду его усложнять (при наличии свободного времени). Задачи:

1. Взломать количество очков, поставить 99.

2. Изменить условие окончания игры на 99 очков

3. Изменить условие, чтобы при проигрыше очки начислялись не врагу, а игроку

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

5. Замедлить скорость движения шара.

6. (Кваз подсказал идею) Увеличить скорость движения игрока.

На этом пока все.

Взломать нужно по всем пунктам, выложить сюда скрипты и рассказать, как взламывали.

ЗЫ. Первый, кто выполнит все задания, выложит скрипт, и расскажет, как ломал - получит медальку и +10 к репутации.

tennistrainme.rar

Ссылка на комментарий
Поделиться на другие сайты

Вот собственно ссылка на трейнер

Вот опции и скрипты к ним:

1)end game = 99(1)


[ENABLE]
alloc(newmem,32)
label(returnhere)
label(exit)

newmem:
cmp dword ptr [edx],#99
jne 0040158D

exit:
jmp returnhere

00401582:
jmp newmem
returnhere:

[DISABLE]
00401582:
cmp dword ptr [edx],0F
jne 0040158D
dealloc(newmem)

2)end game = 99(2)


[ENABLE]
alloc(newmem,64)
label(returnhere)
label(exit)

newmem:
cmp dword ptr [ecx],#99
jne 0040157F

exit:
jmp returnhere

00401577:
jmp newmem
returnhere:

[DISABLE]
00401577:
cmp dword ptr [ecx],0F
jne 0040157F
dealloc(newmem)

3)player 1 = 99 goals


[ENABLE]
alloc(newmem,64)
label(returnhere)
label(gol)
registersymbol(gol)
label(exit)
aobscan(goals,8b 11 89 96 84 00 00 00 89 86 88 00 00 00 8b 47 0c 80 38 00 0f 85 1d 01 00 00)

newmem:
mov [ecx],#99
mov edx,[ecx]
mov [esi+00000084],edx

exit:
jmp returnhere

goals:
gol:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
unregistersymbol(gol)
gol:
mov edx,[ecx]
mov [esi+00000084],edx
dealloc(newmem)

4)player 2 = 99 goals


[ENABLE]
alloc(newmem,32)
label(returnhere)
label(exit)

newmem:
mov [eax],#99
mov eax,[eax]
mov edx,[ecx]
mov [esi+00000084],edx

exit:
jmp returnhere

00401559:
jmp newmem
nop
nop
nop
nop
nop
returnhere:

[DISABLE]
00401559:
mov eax,[eax]
mov edx,[ecx]
mov [esi+00000084],edx
dealloc(newmem)

5) Freeze enemy


// Y coord 2 player
[ENABLE]
alloc(newmem,64)
label(returnhere)
label(metka)
registersymbol(metka)
label(exit)
aobscan(freeze2,89 7e 70 e8 49 fa ff ff 5f 5e 8b e5 5d)

newmem:
nop
call 004010E0

exit:
jmp returnhere

freeze2:
metka:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka:
mov [esi+70],edi
call 004010E0
dealloc(newmem)

6) Freeze ball


//xy coord ball
[ENABLE]
alloc(newmem,256)
label(returnhere)
registersymbol(metka)
label(metka)
label(exit)
aobscan(xball,89 4e 74 89 46 78 8b 47 08 8b 48 14 89 48 0c 8b 7f 08)

newmem:
nop
nop

exit:
jmp returnhere

xball:
metka:
jmp newmem
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka://00401674
mov [esi+74],ecx //x coord inst
mov [esi+78],eax //y coord inst
dealloc(newmem)

7) Faster up


[ENABLE]
alloc(newmem,256)
label(returnhere)
registersymbol(metka)
label(metka)
label(original)
label(exit)
aobscan(up,89 4e 64 89 46 68 8b 47 10 80 78 53 00 74 2b 8b 4f 08)

newmem:
cmp [esi+68],#80
je original
mov [esi+64],ecx
sub eax,#20
mov [esi+68],eax //this is insrtuction coord up
jmp exit

original:
mov [esi+64],ecx
mov [esi+68],eax

exit:
jmp returnhere

up:
metka:
jmp newmem
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka: //004015ff and 00401602*
mov [esi+64],ecx
mov [esi+68],eax
dealloc(newmem)

8) Faster down


[ENABLE]
alloc(newmem,256)
label(returnhere)
registersymbol(metka)
label(metka)
label(original)
label(exit)
aobscan(down,89 4e 64 89 46 68 8b 57 0c 8b 4f 14 80 7a 01 00 8b 47 08)

newmem:
cmp [esi+68],#367
je original
mov [esi+64],ecx
add eax,#20
mov [esi+68],eax
jmp exit

original:
mov [esi+64],ecx
mov [esi+68],eax //this is instruction coord down

exit:
jmp returnhere

down:
metka:
jmp newmem
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka:// 00401633 and 00401636
mov [esi+64],ecx
mov [esi+68],eax
dealloc(newmem)

9) Always 1 player goals


[ENABLE]
alloc(newmem,256)
label(returnhere)
registersymbol(metka)
label(metka)
label(exit)
aobscan(playerwin,7f 26 8b 41 04 ff 00 8b 51 1c 8b 42 08 99)

newmem:
jg 004013F4
mov eax,[ecx+04]
inc [eax-10]


exit:
jmp returnhere

playerwin:
metka:
jmp newmem
nop
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka:
jg 004013F4
mov eax,[ecx+04]
inc [eax]
dealloc(newmem)

10) speed


[ENABLE]
alloc(newmem,256)
label(returnhere)
label(exit)

newmem:
mov [eax],#1
mov edx,[eax]
mov ecx,[edi+08]

exit:
jmp returnhere

00401655:
jmp newmem
returnhere:

[DISABLE]
00401655:
mov edx,[eax]
mov ecx,[edi+08]
dealloc(newmem)

Я долго взламывал и не знаю что здесь расказывать о своем взломе.

Вы спрашивайте а я буду отвечать в меру своих пока-что маленьких знаний. :)

Трейнми получился как раз на проверку моих знаний аобскана. :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Я долго взламывал и не знаю что здесь расказывать о своем взломе.

Вы спрашивайте а я буду отвечать в меру своих пока-что маленьких знаний. :)

Трейнми получился как раз на проверку моих знаний аобскана. :rolleyes:

Можно записать видео с процессом взлома. В любом случае, сегодня вечером или завтра утром проверю, если все работает так, как надо, будет медалька и +10 в репутацию, как и обещал.

Ссылка на комментарий
Поделиться на другие сайты

3 Пункт.

Самое интересное здесь две инструкции.


mov [esi+00000084],edx //P1Score
mov [esi+00000088],eax //P2Score

Если поменять местами смещение или регистр получим то что хотим.


mov [esi+00000088],edx
mov [esi+00000084],eax

или


mov [esi+00000084],eax
mov [esi+00000088],edx

Далее Пишем скрипт.

Ссылка на комментарий
Поделиться на другие сайты

Да недоработал я ету опцию:-)

У меня лично 2 варианта:

1)Этот вариант работает, но не всегда


[ENABLE]
alloc(newmem,256)
label(returnhere)
registersymbol(metka)
label(metka)
label(exit)
aobscan(playerwin,7f 26 8b 41 04 ff 00 8b 51 1c 8b 42 08 99)

newmem:
jg 004013F4
mov eax,[ecx+04]
inc [eax-10]
inc [eax-20]

exit:
jmp returnhere

playerwin:
metka:
jmp newmem
nop
nop
returnhere:

[DISABLE]
unregistersymbol(metka)
metka:
jg 004013F4
mov eax,[ecx+04]
inc [eax]
dealloc(newmem)

2)Этот вариант работает практически всегда


[ENABLE]
alloc(newmem,256)
label(returnhere)
label(exit)

newmem:
mov eax,[ecx]
inc [eax]

exit:
jmp returnhere

004013CE:
jmp newmem
returnhere:

[DISABLE]
004013CE:
mov eax,[ecx+04]
inc [eax]
dealloc(newmem)

Zockir если ты имел ввиду этот вариант


[ENABLE]
alloc(newmem,256)
label(returnhere)
label(exit)

newmem:
mov eax,[eax]
mov edx,[ecx]
mov [esi+00000088],edx
mov [esi+00000084],eax

exit:
jmp returnhere

00401559:
jmp newmem
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
returnhere:

[DISABLE]
00401559:
mov eax,[eax]
mov edx,[ecx]
mov [esi+00000084],edx
mov [esi+00000088],eax
dealloc(newmem)

то он меняет только местами очки игрока 1 и игрока 2.

Извините что без аобскана, но думаю его здесь и не надо:-)

Ссылка на комментарий
Поделиться на другие сайты

Версия 0.2. Основательно перелопатил код, кое-где оптимизировал, кое-где постарался усложнить будущий взлом. Особо не заморачивался, так что большой сложности не ждите.. Задачи те же, плюс еще:

7. найти указатели для очков игроков. Статические, разумеется.

8. найти указатели на координаты шары

9. Изменить размеры шара

10. Найти указатели на координаты ракетов и изменить их размеры (можно в длину, можно в ширину). Указатели на переменные, хранящие размеры, тоже желательно найти.

11. Теперь с течением времени шар начинает постепенно увеличивать скорость движения. Нужно найти и нейтрализовать эту фичу )).

Пока вроде все.

tennistrainme.rar

ЗЫ, Bromvol, как и было обещано, получает медальку "продвинутому геймхакеру" и + 10 в репутацию.

ЗЗЫ. Теперь можно поиграть вдвоем на одной клаве ) Ну или поиграть самому против себя )))

Ссылка на комментарий
Поделиться на другие сайты

Как ты усложнил проект,если находятся адреса exp так быстро. :)

tennistrainme.exe+7474

tennistrainme.exe+7470

тип float

В СЕ находим значение 15 тип флоат там всего найдется три адреса выбираем точно 15 внизу а не 15,99999905 добавим адрес в таблицу ставим точка останова на адрес и переходим в отладчик по найденной инструкции вот и координаты.

Ссылка на комментарий
Поделиться на другие сайты

Ребят, а куда выкладывать видео, ютуб мне говорит Отклонено, слишком длинное видео, хотя идет всего 18 минут

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

P.S. воодушевил меня Руслан, тоже сделаю что-нибудь наподобие.

Ссылка на комментарий
Поделиться на другие сайты

ZOCKIR, если поломал, пиши скрипты по всем пунктам задания и выкладывай ход взлома )) Сам я еще не ломал, но что-то мне подсказывает, что компилятор в очередной раз подложил мне свинью со своими оптимизациями. Интересно, как ты нашел количество очков не экранное.

Ссылка на комментарий
Поделиться на другие сайты

В общем взломал как писал #9

Пока таблица почти на все.

7. найти указатели для очков игроков. Статические, разумеется.

8. найти указатели на координаты шары

9. Изменить размеры шара

10. Найти указатели на координаты ракетов и изменить их размеры (можно в длину, можно в ширину). Указатели на переменные, хранящие размеры, тоже желательно найти.

Скачать tennistrainme.rar

Ссылка на комментарий
Поделиться на другие сайты

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

----------------------

Хотя нет, идея уже устарела, тут уже новые задания, ниче небуду выкладывать, для себя знаю что сломал и сломаю остальное.

В видео сказал спасибо Coder,у в основном все координаты , что прямоугольника что шара, ищются по x и по y , раньше смотрел уроки Coder,а.. а сейчас буду дальше ломать, на остальные задания

Ссылка на комментарий
Поделиться на другие сайты

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

Второй скрипт вызывает безусловную победу противника, что не было в задании

Третий скрипт (balls rovno) вышибает трейнми напрочь.

Итог - задание не выполнено.

Ссылка на комментарий
Поделиться на другие сайты

Блин я скрипты забыл удалить с таблицы, (Скрипты за счет не берите) там чисто указатели, все рабочие а переименовать сил не-было все.

На выходные в порядок приведу все указатели.

Ссылка на комментарий
Поделиться на другие сайты

Хорошо взломал.

Zockir а как ты находил адреса высоты и ширины ракетов и самого шара?

Если получится СЕГОДНЯ ИЛИ ЗАВТРА добавлю видео процесс взлома.

Взлом.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Наконец-то появилось время, немного допилил трейнми. Новая версия, задачи:

1. Найти и взломать количество очков для каждого игрока

2. Найти и переставить окончание игры не при 15, а при 100 очках.

3. Сделать, чтобы за каждую потерю начислялись очки игроку 1, а не компу.

Написать для всех задач скрипты.

Записать видео с показом и описанием процесса взлома (где искали значение, как на него выходили и тп)

Залить видео на ютуб и выложить здесь ссылку

Первым троим, выполнившим задание полностью - медальки. А также:

1 место (первый выложивший) - 20 очков к репе

2 место (второй выложивший) - 10 очков к репе

3 место (третий выложивший) - 5 очков к репе.

Каждый последующий выложивший - +1 в репутацию.

Файл: tennistrainme.rar

Ссылка на комментарий
Поделиться на другие сайты

Я скачал с этого поста

Xipho

Отправлено Сегодня, 01:13

Наконец-то появилось время, немного допилил трейнми. Новая версия, задачи:

1. Найти и взломать количество очков для каждого игрока

2. Найти и переставить окончание игры не при 15, а при 100 очках.

3. Сделать, чтобы за каждую потерю начислялись очки игроку 1, а не компу.

Написать для всех задач скрипты.

Записать видео с показом и описанием процесса взлома (где искали значение, как на него выходили и тп)

Залить видео на ютуб и выложить здесь ссылку

Первым троим, выполнившим задание полностью - медальки. А также:

1 место (первый выложивший) - 20 очков к репе

2 место (второй выложивший) - 10 очков к репе

3 место (третий выложивший) - 5 очков к репе.

Каждый последующий выложивший - +1 в репутацию.

Файл: tennistrainme.rar 7,58К 6 Количество загрузок:

Ссылка на комментарий
Поделиться на другие сайты

Адреса вроде статические.

Вот адрес на P1-Scores "tennistrainme.exe+6480" (Float)

------------------P2-Scores "tennistrainme.exe+6484" (Float)

Что бы P1-Scores до 99


[ENABLE]
alloc(newMem, 2048)
label(returnHere)
newMem:
cmp [tennistrainme.exe+6480],(float)99
jne tennistrainme.exe+1E87
mov byte ptr [eax+ecx],01
cmp eax,0F
jnge tennistrainme.exe+1FB1
jmp returnHere
tennistrainme.exe+1FB8:
jmp newMem
returnHere:
[DISABLE]
tennistrainme.exe+1FB8:
cmp eax,0F
jnge tennistrainme.exe+1FB1
dealloc(newMem)

Что бы P2-Scores до 99


[ENABLE]
alloc(newMem, 2048)
label(returnHere)
newMem:
cmp [tennistrainme.exe+6484],(float)99
jne tennistrainme.exe+1E87
mov byte ptr [eax+ecx],01
cmp eax,0F
jnge tennistrainme.exe+1E75
jmp returnHere
tennistrainme.exe+1E7C:
jmp newMem
returnHere:
[DISABLE]
tennistrainme.exe+1E7C:
cmp eax,0F
jnge tennistrainme.exe+1E75
dealloc(newMem)

Что бы всегда очки в пользу Р1


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
originalcode:
fld dword ptr [tennistrainme.exe+6480]
mov ecx,[esi+04]
fadd qword ptr [tennistrainme.exe+4428]
xor eax,eax
fstp dword ptr [tennistrainme.exe+6480]
exit:
jmp returnhere
"tennistrainme.exe"+1E5E:
jmp newmem
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
returnhere:

[DISABLE]
dealloc(newmem)
"tennistrainme.exe"+1E5E:
fld dword ptr [tennistrainme.exe+6484]
mov ecx,[esi+04]
fadd qword ptr [tennistrainme.exe+4428]
xor eax,eax
fstp dword ptr [tennistrainme.exe+6484]

Все условии сделаны (не смотря что все статические), кроме видео. Видео делать я не умею... уж извините) да и с временем туго.

Адреса вроде статические.

Вот адрес на P1-Scores "tennistrainme.exe+6480" (Float)

------------------P2-Scores "tennistrainme.exe+6484" (Float)

Эти адреса на экранные значение, а реальные значение только 15, т.е. подсчет идет ка кто по другому.

(попробую объяснит: Когда считает, игра проверяет пятнадцать 8 битных значении, расположенных подряд друг за другом на 0 или 1. Изначально все нули. Когда первый раз выигрывает, первый байт переводит на "один", второй раз выигрывает, второй байт... и так дале. Последний байт самый важный.

Я попробовал отключить подсчет и связал его с экранным значением... вроде получилось (скрипт на верху). Правда в конце один баг заметил, но исправить нету сил. спать хочется)

Ссылка на комментарий
Поделиться на другие сайты

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

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

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