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

Еще один TrainMe by Merano


Гость Merano

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

Доброго времени суток всем!

Предлагаю вам поиздеваться над новой жертвой - "TrainMe by Merano" :)

Мой первый TrainMe находился в этой теме: http://forum.gamehacklab.ru/topic/1731-trainme-by-merano/

К сожалению, файл был удален с файлообменника по истечению срока хранения, а исходников и скомпиленного TrainMe у меня не осталось, т.к. тот винт, на котором лежали исходники - сгорел :(

Но все-таки я набрался смелости, и написал новый TrainMe, который, на мой взгляд, интересней предыдущего.

Итак, "TrainMe by Merano" бросает вам новый вызов :)

На этот раз он использует следующие способы защиты:

  • Динамическое распределение памяти.
  • Взаимно используемый код.

Подсказка #1

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

Конечно, ничто не мешает переписать инструкцию количества патронов, изменив ее на "over999".

Это значение сделано для тех случаев, когда (и если) люди захотят попробовать найти скрытое значение. Ну а также маленький тест, возможно ли найти это скрытое значение, или же нет :)

Подсказка #2:

Здоровье хранится во "Float".

Патроны хранятся в "Double"

Справка:

Я вас обманул, в игре не одно скрытое значение, а четыре (на данный момент). Остальные три - патроны врагов.

Взломав эти три значения, и изменив их, допустим, на 0 - враги не смогут вас атаковать :)

Но это будет в следующей версии. В версии 1.0 эти три адреса были сделаны для тестирования, и я просто забыл их убрать до следующей версии :)

А пока можете потренироваться на изменении этих значений :)

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

Этот TrainMe, надеюсь, будет интересен не только новичкам, но и продвинутым взломщикам игр.

Скачать "TrainMe by Merano" можно по этой ссылке: http://rghost.ru/44184444

Срок хранения файла: 30 дней

Версия: 1.0

Сделано специально для GameHackLab.ru :)

P.S.

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

P.S. #2

Над TrainMe потел 2 дня, и программирование структур для меня в новинку, поэтому прошу сильно не пинать :)

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

Привет.... вот что намудрил))))))))))))

Здоровье максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(stsandart)
newmem:
cmp byte ptr [eax+10],#****
jne stsandart
fstp dword ptr [eax+04]
mov [eax+04],(float)100
wait
pop edx
jmp returnhere
stsandart:
fstp dword ptr [eax+04]
wait
pop edx
jmp returnhere
TrnMe.exe+52F56:
jmp newmem
returnhere:
[DISABLE]
TrnMe.exe+52F56:
fstp dword ptr [eax+04]
wait
pop edx
dealloc(newmem)

Броня максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
mov eax,0
sub [edx+04],eax
cmp [edx+04],#100
jge +07
mov [edx+04],#100
jmp TrnMe.exe+535B8
jmp returnhere
TrnMe.exe+53596:
jmp newmem
returnhere:
[DISABLE]
TrnMe.exe+53596:
sub [edx+04],eax
jmp TrnMe.exe+535B8
dealloc(newmem)

Патроны не уменьшаются


[ENABLE]
TrnMe.exe+52F5F:
db 90 90 90 90 90 90
[DISABLE]
TrnMe.exe+52F5F:
db D8 25 6C 2F 45 00

Деньги не падают ниже 100 ( Уст 1000 )


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
cmp [eax],#100
jge +06
mov [eax],#1000
mov eax,[eax]
cmp eax,02
jmp returnhere
TrnMe.exe+53B51:
jmp newmem
returnhere:
[DISABLE]
TrnMe.exe+53B51:
mov eax,[eax]
cmp eax,02
dealloc(newmem)

Легкое убийство


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(stsandart)
newmem:
cmp byte ptr [eax+10],#****
jne stsandart
fstp dword ptr [eax+04]
mov [eax+04],(float)100
wait
pop edx
jmp returnhere
stsandart:
fstp dword ptr [eax+04]
mov [eax+04],0
wait
pop edx
jmp returnhere
TrnMe.exe+52F56:
jmp newmem
returnhere:
[DISABLE]
TrnMe.exe+52F56:
fstp dword ptr [eax+04]
wait
pop edx
dealloc(newmem)

Все вроде ок... но айди не тот взял..... ##### тут хранится как бы порядковый номер у нас он 1.... враги 2-3-4.... а вот тут хранится нормальный айди... ####... но он в дубл хранится.... как с дубл работать в скриптах ... так и не разобрался....... а так вроде все функции работают.........

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

Grom-Skynet, приветствую!

Ну вы прям профи :)

А удалось найти адрес, который отвечает за максимальное количество патронов в обойме?

И еще маленькая просьба: спрячьте, пожалуйста, хотя-бы ID под спойлер, чтобы другим не обламывать интерес ;)

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

Grom-Skynet, приветствую!

Ну вы прям профи :)

А удалось найти адрес, который отвечает за максимальное количество патронов в обойме?

И еще маленькая просьба: спрячьте, пожалуйста, хотя-бы ID под спойлер, чтобы другим не обламывать интерес ;)

айди спрятал.... а вот насчет патронов ... точнее максимального их значения.... попытаюсь найти......)))))

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

Grom-Skynet, спасибо :)

Уже готовится к релизу 1.1 версия.

Пока выложу список изменений, что на данный момент сделано, а новую версию TrainMe выложу ближе к вечеру (по МСК), до этого момента надо еще по-отлаживать да и может еще чего в голову взбредет сделать :)

Изменения в версии 1.1:

  • Исправлен недочет в расчете здоровья. Больше никаких ошибок связанных со здоровьем выскакивать не должно.
  • Добавлена функция проверки взлома. Пока только проверка проходит по здоровью.
  • Изменена функция получения урона, добавлена проверка патронов у врагов. Как и было обещано.

Также в версии 1.1 были изменены адреса и смещения, что говорит о том, что скрипты, которые были сделаны до этого - на этой версии работать не будут. Это сделано для того, чтобы никто заранее не знал, как выглядят адреса со смещениями, и чтобы каждый прошел процесс взлома с нуля, и почувствовал силу изменений :)

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

Godmode

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(hack)

label(exit)

newmem:

cmp [eax+0010],1

je hack

fstp dword ptr [eax+04]

jmp exit

hack:

fstp dword ptr [eax+04]

mov [eax+04],(float)100

jmp exit

exit:

wait

pop edx

jmp returnhere

"TrnMe.exe"+52F56:

jmp newmem

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

"TrnMe.exe"+52F56:

fstp dword ptr [eax+04]

wait

pop edx

dealloc(newmem)

//Alt: db D9 58 04 9B 5A

Armor

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(exit)

newmem:

mov [eax+04],#100

mov edx,[eax+04]

jmp exit

exit:

mov eax,[TrnMe.exe+56BDC]

jmp returnhere

"TrnMe.exe"+52C32:

jmp newmem

nop

nop

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

"TrnMe.exe"+52C32:

mov edx,[eax+04]

mov eax,[TrnMe.exe+56BDC]

dealloc(newmem)

//Alt: db 8B 50 04 A1 DC 6B 45 00

Super Ammo

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(exit)

newmem:

mov [eax+000C],(float)4.96875

fld qword ptr [eax+08]

add esp,F4

jmp exit

exit:

jmp returnhere

"TrnMe.exe"+536C0:

jmp newmem

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

"TrnMe.exe"+536C0:

fld qword ptr [eax+08]

add esp,F4

dealloc(newmem)

//Alt: db DD 40 08 83 C4 F4

Money

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048) //2kb should be enough

label(returnhere)

label(exit)

newmem:

mov [eax],#200

fild dword ptr [eax]

add esp,F4

jmp exit

exit:

jmp returnhere

"TrnMe.exe"+53711:

jmp newmem

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

"TrnMe.exe"+53711:

fild dword ptr [eax]

add esp,F4

dealloc(newmem)

//Alt: db DB 00 83 C4 F4

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

Все вроде ок... но айди не тот взял..... ##### тут хранится как бы порядковый номер у нас он 1.... враги 2-3-4.... а вот тут хранится нормальный айди... ####... но он в дубл хранится.... как с дубл работать в скриптах ... так и не разобрался....... а так вроде все функции работают.........

Grom-Skynet, я говорил об идентификаторах, которые в процитированном месте находятся, про скрипты я ничего не говорил :) Просто чтобы не на виду были, а хотя бы под спойлером.. Вы меня неправильно поняли :)

Ладно, в 1.1. сделаю другие идентификаторы :)

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

Трейн ми хороший,но честно говоря меня здесь ничего не удивило(ну это лично мое мнение),кроме этого момента : В TrainMe есть также скрытое значения, которое отвечает за максимальную вместимость патронов в обойму.

Конечно, ничто не мешает переписать инструкцию количества патронов, изменив ее на "over999".

Это значение сделано для тех случаев, когда (и если) люди захотят попробовать найти скрытое значение. Ну а также маленький тест, возможно ли найти это скрытое значение, или же нет :)

Ну хоть что-то необычное.Надеюсь что версию 1.1 ломать будет посложнее.

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

Трейн ми хороший,но честно говоря меня здесь ничего не удивило(ну это лично мое мнение)

Ну хоть что-то необычное.Надеюсь что версию 1.1 ломать будет посложнее.

А чего вы ждете от TrainMe?

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

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

Конструктивная критика приветствуется, предъявы и сгибание пальцев веером без причины - в других темах.

У всех остальных прошу прощения за маленький срыв :)

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

Патроны не уменьшаются


...

В твоей реализации, если подумать, то не патроны не уменьшаются в их количестве, а выстрел не происходит. Данная инструкция подходит для Rapid Fire, но никак не для бесконечных патрон.

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

Ну, вот и версия 1.1

Список изменений:

  • Исправлен недочет в расчете здоровья. Больше никаких ошибок связанных со здоровьем выскакивать не должно.
  • Добавлена функция проверки взлома. Пока только проверка проходит по здоровью.
  • Изменена функция получения урона, добавлена проверка патронов у врагов. Как и было обещано.
  • Отлажена функция проверки патронов врагов.
  • Исправлено несколько незначительных недочетов.

Также в версии 1.1 намеренно изменены адреса, смещения и идентификаторы игроков, что говорит о том, что скрипты, которые были сделаны до этого - на этой версии работать не будут. Это сделано для того, чтобы никто заранее не знал, как выглядят адреса со смещениями, и чтобы каждый прошел процесс взлома с нуля, и почувствовал силу изменений

Ссылка на скачивание: http://rghost.ru/44195960

Версия: 1.1

Срок хранения 30 дней

В версии 1.2 будет полная проверка взлома (по всем параметрам), сейчас просто отлучаюсь часто, совсем не до кодинга... Что еще будет в версии 1.2 - пока точно сказать не могу.

Огромная просьба ко всем: все ключевые моменты взлома кидайте ПОД спойлер. Давайте осознаем, что кроме себя любимого - на форуме есть также и другие люди, которые, возможно, тоже хотят самостоятельно взломать TrainMe и насладиться процессом. :)

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

Сломал только здоровье, в остальном изменений не было же.


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
newmem:
cmp [ebx+1d4],34
jne short originalcode
mov [ebx+30],(float)100
jmp returnhere
originalcode:
mov [ebx+30],eax
mov eax,004C4B40
jmp returnhere
"TrnMe11.exe"+52F44:
jmp newmem
db 90 90 90
returnhere:
[DISABLE]
"TrnMe11.exe"+52F44:
mov [ebx+30],eax
mov eax,004C4B40
dealloc(newmem)

"добавлена проверка патронов у врагов"

А смысл в этом, если враги - это только полоски, без каких-либо действий, т.е. не стреляют.

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

SER[G]ANT, не только "полоски"...

У врагов тоже есть патроны. И при нажатии "Получить урон" - враги КАК-БЫ стреляют в персонажа игрока, соответственно - у персонажа игрока отнимается здоровье и броня, у врагов по патрону за выстрел.

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

Бред? Нет. Сделано для тех, кто хочет лишний раз попрактиковаться.

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

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

...не только "полоски"...

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

...

если ид, то у меня 52 почемуто

А если подумать? :-D

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

Ну что.... вот как это все выглядит....

Здоровья максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(standart)
newmem:
cmp [ebx+1D4],#52
jne standart
mov [ebx+30],(float)100
mov eax,004C4B40
jmp returnhere
standart:
mov [ebx+30],eax
mov eax,004C4B40
jmp returnhere
TrnMe11.exe+52F44:
jmp newmem
nop
nop
nop
returnhere:
[DISABLE]
TrnMe11.exe+52F44:
mov [ebx+30],eax
mov eax,004C4B40
dealloc(newmem)

Броня максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
mov eax,0
sub [edx+04],eax
cmp [edx+04],#100
jge +07
mov [edx+04],#100
jmp TrnMe11.exe+5386E
jmp returnhere
TrnMe11.exe+537FC:
jmp newmem
returnhere:
[DISABLE]
TrnMe11.exe+537FC:
sub [edx+04],eax
jmp TrnMe11.exe+5386E
dealloc(newmem)

Патроны не уменьшаются



[ENABLE]
TrnMe11.exe+52F5F:
db 90 90 90 90 90 90
[DISABLE]
TrnMe11.exe+52F5F:
db D8 25 6C 2F 45 00

Легкое убийство


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(standart)

newmem:
cmp [ebx+1D4],#52
jne standart
mov [ebx+30],(float)100
mov eax,004C4B40
jmp returnhere

standart:
mov [ebx+30],0
mov eax,004C4B40
jmp returnhere

TrnMe11.exe+52F44:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
TrnMe11.exe+52F44:
mov [ebx+30],eax
mov eax,004C4B40
dealloc(newmem)
[DISABLE]
TrnMe11.exe+52F5F:
db D8 25 6C 2F 45 00

Деньги не падают ниже 100 ( Уст 1000 )


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
cmp [eax],#100
jge +06
mov [eax],#1000
mov eax,[eax]
cmp eax,02
jmp returnhere
TrnMe11.exe+53E11:
jmp newmem
returnhere:
[DISABLE]
TrnMe11.exe+53E11:
mov eax,[eax]
cmp eax,02
dealloc(newmem)

Патроны у вас бесконечные... у врагов ноль


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(chit)
globalalloc(patroni,4)
newmem:
cmp [eax+1D4],#52
je chit
mov [patroni],(float)5000
fld qword ptr [eax+38]
fsub dword ptr [patroni]
jmp returnhere
chit:
fld qword ptr [eax+38]
db 90 90 90 90 90 90
jmp returnhere
TrnMe11.exe+52F5C:
jmp newmem
nop
nop
nop
nop
returnhere:
[DISABLE]
TrnMe11.exe+52F5C:
fld qword ptr [eax+38]
fsub dword ptr [TrnMe11.exe+52F6C]
dealloc(newmem)

Да и вот что еще......)))))) >>>> post-117-0-35564900-1362156935_thumb.jpg post-117-0-28295200-1362208997_thumb.jpg

Таблица >>> TrnMe11.CT

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

ANT' timestamp='1362154802' post='13389']

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

А что вас конкретно не устраивает? В каких шутерах вы встречали ситуацию, когда вам показывают количество патронов врагов? И хочу заметить, что отнюдь не во всех играх отображается здоровье противников. Что же касается получения урона, то тут, по-моему, все должно быть интуитивно понятно, ибо если в вас выстрелили - в вас ВЫСТРЕЛИЛИ, а не ветер дунул и попортил вам здоровье. Я старался все действия в TrainMe оправдать, и оправдал - я считаю. А если в нем отсутствуют бабахи и 3D модели, сигнализирующие о том, что враг в вас выстрелил - это не обязательно баг; - возможно так задумано. И в первом посте я уже говорил о том, что у врагов тоже присутствуют патроны, и что это не просто так.

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

SER[G]ANT, курить бросаю, поэтому пока так остро реагирую на все "раздражители"... Извините :(

По поводу сигнализирования о том, что противники стреляют в персонажа - я подумаю над этим. Возможно, будет звуковое сопровождение; возможно будет как-то иначе... не знаю пока.

Grom-Skynet, нет, как Double.

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

Ну что.... вот как это все выглядит....

Здоровья максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(standart)
newmem:
cmp [ebx+1D4],#52
jne standart
mov [ebx+30],(float)100
mov eax,004C4B40
jmp returnhere
standart:
mov [ebx+30],eax
mov eax,004C4B40
jmp returnhere
TrnMe11.exe+52F44:
jmp newmem
nop
nop
nop
returnhere:
[DISABLE]
TrnMe11.exe+52F44:
mov [ebx+30],eax
mov eax,004C4B40
dealloc(newmem)

Броня максимум


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
mov eax,0
sub [edx+04],eax
cmp [edx+04],#100
jge +07
mov [edx+04],#100
jmp TrnMe11.exe+5386E
jmp returnhere
TrnMe11.exe+537FC:
jmp newmem
returnhere:
[DISABLE]
TrnMe11.exe+537FC:
sub [edx+04],eax
jmp TrnMe11.exe+5386E
dealloc(newmem)

Патроны не уменьшаются



[ENABLE]
TrnMe11.exe+52F5F:
db 90 90 90 90 90 90
[DISABLE]
TrnMe11.exe+52F5F:
db D8 25 6C 2F 45 00

Легкое убийство


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(standart)

newmem:
cmp [ebx+1D4],#52
jne standart
mov [ebx+30],(float)100
mov eax,004C4B40
jmp returnhere

standart:
mov [ebx+30],0
mov eax,004C4B40
jmp returnhere

TrnMe11.exe+52F44:
jmp newmem
nop
nop
nop
returnhere:

[DISABLE]
TrnMe11.exe+52F44:
mov [ebx+30],eax
mov eax,004C4B40
dealloc(newmem)
[DISABLE]
TrnMe11.exe+52F5F:
db D8 25 6C 2F 45 00

Деньги не падают ниже 100 ( Уст 1000 )


[ENABLE]
alloc(newmem,2048)
label(returnhere)
newmem:
cmp [eax],#100
jge +06
mov [eax],#1000
mov eax,[eax]
cmp eax,02
jmp returnhere
TrnMe11.exe+53E11:
jmp newmem
returnhere:
[DISABLE]
TrnMe11.exe+53E11:
mov eax,[eax]
cmp eax,02
dealloc(newmem)

Патроны у вас бесконечные... у врагов ноль


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(chit)
globalalloc(patroni,4)
newmem:
cmp [eax+1D4],#52
je chit
mov [patroni],(float)5000
fld qword ptr [eax+38]
fsub dword ptr [patroni]
jmp returnhere
chit:
fld qword ptr [eax+38]
db 90 90 90 90 90 90
jmp returnhere
TrnMe11.exe+52F5C:
jmp newmem
nop
nop
nop
nop
returnhere:
[DISABLE]
TrnMe11.exe+52F5C:
fld qword ptr [eax+38]
fsub dword ptr [TrnMe11.exe+52F6C]
dealloc(newmem)

Да и вот что еще......)))))) >>>> post-117-0-12472000-1362209107_thumb.jpg post-117-0-63984600-1362209106_thumb.jpg

Таблица >>> TrnMe11.CT

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

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

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

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