Собственно есть ли среди нас те, кто пользуется сим чудом? Конечно в первую очередь программа направленна на взлом игр, в плане сделать себе бесконечные жизни\деньги и тд. Самое интересное начинается, когда начинаешь копаться копаться в игре, на уровне кодов ассемблера (а иначе никак). Благодаря этой проге и некоторым туториалам много сам научился (работать и понимать asm, писать для него скрипты).
Для изучения азов в самом Cheat Engine имеются туториалы: Файл Tutorial-x86_64.exe или Tutorial-i386.exe На английском вам расскажут и вы будете сразу же применять на практике знания о том, как где и зачем искать. #77
Конечно тема в первую очередь для тех, кто уже заинтересован и имеет опыт общения с ПК на низком уровне. Т.е. без начального знания языка ассемблера будет тяжеловато. Совсем продвинутые гуру конечно знают и asm и lua (если игра Lua, то обычные методы её "исследования" никак не помогут). Ну и самое важное - это написание грамотных скриптов.
ПРЕДУПРЕЖДЕНИЕ: Ни о каких Online играх мы НИКОГДА в данной теме не говорим и о способах их взлома. Чисто singleplayer или по крайне мере только об одиночном режиме. Это касается так-же и Онлайн любых игр в Вконтакте, Facebook. Забудьте. (тем более, что server side ничего хорошего не даст, без еще тонны знаний)
Добавлено спустя 47 минут 4 секунды: -------------------------------------------------------------------------
Моя текущая игра - не могу никак найти нужный оффсет (30.08.2015)
Собственно после рядя более-менее успешных работ с некоторыми играми, наткнулся на какую-то дичь. Советовался и с теми, кто более опытен, чем я (йа то новичок), пока безрезультатно (т.е. мне помогли, но все-равно есть большие проблемы). И так сама игра Relic Hunters Zero (http://store.steampowered.com/app/382490 - бесплатна стиме) казалось бы, что может быть в 60 мб? Как оказалось - полная каша из кода. ОООЧЕЕЕНЬ тяжело с ней работать и найти и написать нужное тебе.
Первое: #77 В принципе обычная картина для некоторых игр, но это первое неудобство. Жизни, опыт, патроны, здоровья врага, разрешение игры, уровень громкости - все обращается в 2 функции. Т.е. как минимум для всех действий нужен фильтр, ибо иначе это будет crash игры в любом случае.
Второе: #77 Была попытка поискать поинтеры. Конечно первым делом думает, что все будет зашибись и с 5ым уровнем поинтеров. После 2-3 перезапусков пк понимаем - у нас 0 хороших результатов. Тогда идем ва-банк - идем уже до 7уровня offset'ов. Разница в том, что 5 уровень пк для такой игры +- быстро обработает. А вот 7 ур.... Поиск шел 1500 секунд, после чего по 6 потокам суммарное количество поинтеров было 7 000 000 000 (7 млрд.), а общий всего этого - 90гб Конечно поиск я прервал, ибо стало и так ясно - пк не сможет все поинтеры найти до того, как кончиться место на HDD. А еще обработка 1 000 000 000 (млрд) поинтеров (их же надо еще отсеивать потом) занимает на моем пк порядка 50 минут. 50 х 7 = 350 минут или ~5 часов. 5 часов что-бы найти поинтеры, которые, с очень большой вероятностью, в этой игре все-равно слетят на фиг и после очередного перезапуска (или на другом пк) будут указывать абсолютно в иное место (а то и вообще за пределы).
Третье: AOB метод Как оказалось игра под завязку забита повторяющимся кодом. Сигнатуру очень сложно найти, ибо либо не найдет такой участок кода потом, либо таких участков будет больше 1 и адрес будет явно не тот. Ну либо да, сигнатура разная, но настолько разная, что если делать сравнение между ними и искать по результату - будет великое множество областей.
Четвертое: Самое веселое, что мне приходилось делать на протяжении 5-10 часов (не за один день конечно) - это искать отличие в структуре между собой (если конкретнее: значением HP например) и всем тем, что еще обращается к функции. И за все это время был найден лишь один успешный оффсет:
Код:
[edi+10]
Для патронов это было
Код:
cmp [edi+10],00018720
т.е. сравнивая edi по offset'у +10 с 00018720, уникальным, как казалось, для игрока, вышло сделать бесконечные патроны и игра при этом не вылетала. Первые проблемы прочувствовались в том, что музыка между уровнями стала заедать. Т.е. не только патроны стали быть вечным значением в 99, но под этот фильтр так-же попал и музон игры из-за чего с ним начались траблы. Ладно, фиг с этим, не столь важно.
Весь код:
Код:
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit)
label(check)
newmem: //this is allocated memory, you have read,write,execute access cmp [edi+10],00018720 je check jmp originalcode
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "RelicHuntersZero.exe"+109E4F: fstp qword ptr [edi] pop edi pop esi pop ebp //Alt: db DD 1F 5F 5E 5D
Для жизней
Код:
cmp [edi+10],187B2
А вот тут привычный, одиночный фильтр показал, что его одного недостаточно.
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "RelicHuntersZero.exe"+109E4F: fstp qword ptr [edi] pop edi pop esi pop ebp //Alt: db DD 1F 5F 5E 5D
Да, при таком раскладе у игрока становиться 999 жизней. Проблема в том, что у разрушаемых предметов, наших врагов (самое главное) - тоже. И вот тут то все (я и еще пара человек) увязли с концами.
Часа 2-3 ушло на осмотр старой доброй структуры между нами и всем остальным в надежде найти отличия, кроме +10 оффсета (теперь было окончательно ясно, что он как уникален как минимум не только для игрока, но и для объектов\врагов), что бы написать к фильтру еще дополнительные условия. ИИИИИИИИ... ЕГО НЕТ XD
Все остальные оффсеты тупо либо вечно меняются, либо есть перехлест с врагами\предметами.
На этом пока все и встало. Что в таком случае делать - не знаю. Кое кто сказал, что походу надо искать инструкцию, которая каждый раз так долбашит структуру игрока, а от нее уже дальше отталкиваться. Но и с этим пока все глухо.
Однако есть и положительные моменты: 1) По крайне мере есть скрипт на беск. патроны на любое оружие
Код:
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,64) alloc(mine,4) label(returnhere) label(originalcode) label(exit)
label(check)
newmem: //this is allocated memory, you have read,write,execute access cmp [edi+10],00018720 je check jmp originalcode
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "RelicHuntersZero.exe"+109E4F: fstp qword ptr [edi] pop edi pop esi pop ebp //Alt: db DD 1F 5F 5E 5D
И на бесконечные звезды (они открывают следующие уровни)
Код:
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,64) alloc(star,4) label(infstars) label(returnhere) label(originalcode) label(exit)
newmem: cmp [edi+8],73726550 je infstars
originalcode: fstp qword ptr [edi] pop edi pop esi pop ebp jmp returnhere
infstars: mov [star],(float)99999 fld [star] fstp qword ptr [edi] pop edi pop esi pop ebp jmp returnhere
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) "RelicHuntersZero.exe"+109E4F: fstp qword ptr [edi] pop edi pop esi pop ebp //Alt: db DD 1F 5F 5E 5D
Я еще делал код на бесконечные гранаты, но там функции были похожие, а !!!ВНЕЗАПНО!!! регистр не edi, а esi. В чем проблема? Ну во-первых в том, что старый добрый псевдо уникальный оффсет +10 уже абсолютно не канал (ну при фильтрации на нем хотя бы игра не вылетала), а во вторых, да - не смог найти уникального оффсета. А следовательно нельзя сделать фильтр, а следовательно игра послала на хрен меня.
Ибо иначе с FPU не поработаешь, на прямую не выйдет. Вроде бы абсолютно обычная вещь, только вот я до этого с таким не попадал в играх и не знал. Из-за этого крашнул игру раз 5 наверное, прежде, чем мне написали, как с этим надо работать.
З.Ы.Ы. Еще прикол в том, что функции то 2 для большинства всего нужного. И все новоиспеченные скрипты (code inject'а) так-же влетают в эту область конечно. А это конечно же делает невозможным их одновременную активацию. Т.е. только 1 скрипт одновременно может работать. И, из-за неопытности, я пока не понял, как все это слить в 1 массу. (хотя бы звезды и патроны)
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Member
Статус: Не в сети Регистрация: 14.06.2010 Откуда: Сыктывкар Фото: 0
Bl00dRedDragon писал(а):
Ссылки на полезные, по моему мнению, обучающие топики (не для новичков, для бывалых )
Зачем бывалым обучающие топики?
Bl00dRedDragon писал(а):
Конечно тема в первую очередь для тех, кто уже заинтересован и имеет опыт общения с ПК на низком уровне.Т.е. без начального знания языка ассемблера будет тяжеловато.
Все кто владеют ПК, сразу должны изучать ассемблер?
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
REALpredatoR писал(а):
Все кто владеют ПК, сразу должны изучать ассемблер?
Ты что-то явно не так прочел. Написанно
Цитата:
опыт общения с ПК на низком уровне
Конечно, чтобы общаться с ПК на самом низком уровне, самом прямом нужен, asm. И абсолютно бесполезно лезть в это дело, хотя бы немного не понимая его.
Конечно, первое, что рекомендуется сделать любому новичку - это качать те же шутеры 98-2000 годов. Они во-первых все будут x32 бита, во вторых в большинстве случаев - с самыми основными инструкциями, которые легко понять и переписать.
А если, типа как я, сразу лезть в современные игры - можно изначально на немного более сложные вещи наткнуться, как x64 архитектуру, с более сложными командами или на прямую работу с FPU, что изначально тоже несколько сложнее.
REALpredatoR писал(а):
Зачем бывалым обучающие топики?
Интересный ты человек. Мне кажется не существует тех людей, которые бы умели абсолютно все в asm и знали, а так-же умели бы пользоваться любым софтом по максимуму. Бывалый в плане того, тут уже нужно уметь писать скрипты и понимать, что вообще происходит в том коде, который был сгенерирован\написан.
Почему нельзя скажем вместо ASM заранее знать тот-же C#\C++\JAVA? Ну потому что любая игра - это не исходники. Из нельзя чем либо открыть, на высоком уровне. А смотреть машинные коды можно всегда и для всего - asm как раз. Т.е. он универсален.
З.Ы. Правда игры можно взламывать и с ПОМОЩЬЮ C++\JAVA, т.е. не через cheat engine писать все, а через IDE соот. Но при этом С++ с IDE будут предоставлять безграничный функционал для УЖЕ найденного кода, т.е. в ЛЮБОМ случае придется все-равно до этого поработать с asm и cheat engine.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
Мы ломали, ломали и наконец то СЛОМАЛИ, УРААА XD
Relic Hunters Zero все-же доламили. Очень забавным методом. Выставили уникальное значение хп себе -> потом всегда его и ищем, что бы поддерживать на том-же уровне.
В итоге такой вот скрипт
Код:
[ENABLE] //code from here to '[DISABLE]' will be used to enable the cheat alloc(newmem,2048) label(returnhere) label(originalcode) label(exit)
newmem: //this is allocated memory, you have read,write,execute access cmp [edi+10],00018723 je check cmp [edi+10],000187B5 je health cmp [edi+10],00018714 je stars jmp originalcode
check: // inf ammo too cmp [_do_inf_ammo],01 jne originalcode fstp st(0) mov [temp],63 fild [temp] fstp qword ptr [edi] jmp exit
/////////////////////////////////////////////////////////////////////////////// health: cmp [_do_inf_hp],01 jne originalcode cmp [count],01 je health2
/////////////////////////////////////////////////////////////////////////////// _do_inf_hp: db 0
_do_inf_ammo: db 0
_do_inf_stars: db 0 /////////////////////////////////////////////////////////////////////////////// "RelicHuntersZero.exe"+109E4F: jmp newmem returnhere:
[DISABLE] //code from here till the end of the code will be used to disable the cheat dealloc(newmem) dealloc(mine) dealloc(count) dealloc(_do_inf_hp) dealloc(_do_inf_ammo) dealloc(_do_inf_stars) dealloc(temp) unregistersymbol(mine) unregistersymbol(count) unregistersymbol(_do_inf_hp) unregistersymbol(_do_inf_ammo) unregistersymbol(_do_inf_stars) "RelicHuntersZero.exe"+109E4F: fstp qword ptr [edi] pop edi pop esi pop ebp //Alt: db DD 1F 5F 5E 5D
Штуки типа
Код:
cmp [_do_inf_hp],01
просто переключатели. Дело в том, что количество хп, патронов, звезды - все обращается сюда. Поэтому что-бы это все было в одной памяти, но могло по отдельности включаться (скажем я хочу ТОЛЬКО беск. здоровье), нужны такие переключатели. К ним конечно же попросту идут внешние скрипты типа:
Код:
[ENABLE] _do_inf_hp: db 01
[DISABLE] _do_inf_hp: db 00
Следующая игра, над которой работаю: Shoppe Keep. Вроде бы все начиналось неплохо, но в итоге привело к AOB и к тому, что не смог пока найти уникальную сигнатуру.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Advanced guest
Статус: Не в сети Регистрация: 03.12.2004
REALpredatoR писал(а):
Все кто владеют ПК, сразу должны изучать ассемблер?
Программа вполне работает и без знания asm. В ней конечно есть возможность наделать самые разные и сложные скрипты. Но если просто хочется добавить себе деньжат (или поменять любую другую циферку), то можно обойтись без этого.
_________________ Like I said, kids are cruel, Jack. And I'm very in touch with my inner child.
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
4e_alex писал(а):
Но если просто хочется добавить себе деньжат (или поменять любую другую циферку), то можно обойтись без этого.
Ну с этим никто не спорит. Т.е. пока игра у вас работает, вы на одном и том-же месте, не на какие другие локации не переходили\вас не убивали - значения хп\денег и тд 100% в той-же области памяти. А вот после перезапуска уже и тд - все, пока.
Но есть оговорка: А если захотелось скажем бесконечных патронов на ВСЕ оружия? Будешь адрес каждой пушки искать? Опять-таки здесь будет гораздо легче работать с 1ой единственной функций, чем каждый раз с 100 адресами.
Еще момент: даже АСМ по сути отлично знать не надо. Сойдет его элементарное понимание. А он простой до жути. Тело скрипта CE сам писать, автоматически, умеет. От юзверя требуется, по сути, добавить детали.
Ну и писал, что ломаю Shoppe Keep сейчас. Уже взломал конечно же давно. Но он очень легкий в плане взлома, поэтому на нем внимания не заострил.
Не знаю, стоит ли пробовать делать туториал по взлому чего либо? На ютубе есть их и так не мало. И конечно, если и буду делать туториал, то только на основе инъекции кода и aob. Ибо не вижу смысла их делать по чему-то вроде "Как найти свое значение ХП и заморозить его" - это уж совсем бред.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
Думал такой хакнуть command and conquer 3 tiberium wars на бесконечные хп для себя, но чет не пошло. Прикол в том, что как обычно, надо искать отличие между ХП своих юнитов\построек и врага\союзников. Вроде бы что-то находил, но после тестов ВСЕГДА оказывалось, что значение не уникально и либо никто не неуязвим, либо все неуязвимы.
Правда есть фишечка - там 3 смещения подряд идут с соот. 3 значениями. Если в текущей игре для активации чита делать сравнение ос всеми 3мя - то только я сам неуязвим. В чем трабла- эти значения каждую игру меняются и изначально приходиться опять узнавать, какие они по этим смещениям именно для себя самого. Т.е. надо бы как-то придумать, что с этим делать
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
Собстно продолжение банкета XD Ничуть не забросил этим заниматься. Заметил, что ссаные indie игры хрен взломаешь, ибо там везде этот тупой game engine или как там его - как relic hunters zero. Я так и не вдуплил нормально, как оно должно ломаться.
Хоть какой-то видосик.
DOOM новый вообще легко поддается. Комп перезапускал (для того, чтобы адресное пространство иначе на игру выделилось), игру перезапускал - все робит. Значит должно по крайне мере на этой версии у всех работать. С патронами все вышло легко, ибо 1 функция, которая отвечает только за эти самые патроны. С хп сразу несколько проблем нарисовалось: 1) там округление происходит, а исходное значение во float несколько меньше, из-за чего мой первый поиск хп привел к 0 результатов. Когда начал искать "любимым" методом "увеличилось на" "уменьшилось на" cheat engine на первой иттерации дал 5 миллиардов адрессов, из-за чего все 16гб рам легли на хрен и все повисло Я уж думал придется все заново делать, перезапускать пк. Но обошлось. Кое-как до смерти сумел найти реальное значение хп (на видео видно, сколько там просто визуальных значений). 2) movss очень простая функция, но, из-за длительного перерыва, забыл, как с ней работать. В итоге быстренько нагуглил изи. 3) самое важное - функция для хп работает и на броню, и на хп мобов. В принципе обычный случай вполне, приходиться тогда использовать различия по структурам. На видео опять таки есть этот момент аж 2 раза, когда я заношу адреса в disssect data\stuctures утилиту и смотрю различия. Сначала, мне казалось, что уникальность игрока заключается по смещению +30, в значении 12 (float). Ибо у всхе врагов было 3. Но оказалось, после перезапуска в SnapMap, что у игрока теперь там 4, а не 12. В итоге сошелся на том, что все мобы со значением 3 просто. И это работает... но не дай бог в игре попадается что-то, что обрабатывается этой функцией из врагов\разрушаемых предметов и по смещению 30 у него не будет значения 3 - он будет тогда тоже неуязвим. В принципе просто лень уже было все дотошно выяснять, вроде и так работает - норм. Если где будет прокол- значит надо искать другое уникальное значение.
Кстати и структура хорошая у дума. Я еще на патроны не смотрел правда, а зря. Но на хп там видно, что есть готовый оффсет в принципе на максимальное количество хп, количетсво брони и тд. У мобов тоже. Можно было еще one shot kill написать, но... лень, ага
З.Ы. Я то еще думал, что из-за MOVSS придется через одно место помещать значение в xmm0, типа как с FPU, с его этими fld, fstp. Но нет, просто (float) и movss на mov заменить. Easy.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Последний раз редактировалось Bl00dRedDragon 15.05.2016 10:27, всего редактировалось 2 раз(а).
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
Думаю, когда нибудь у меня будет время снять туториалы по этой проге. Хотя по сути все это уже снято и не один раз, многими людьми. И, если кто заинтересован - я лично очень многое для себя с офф форума подчеркиваю. Т.е. там люди вполне помогают даже самым зеленым. Я например так хоть с fpu смог разобраться, да и AOB (Array Of Bytes) научится более-менее. Хотя мое знание этого всего еще сильно хромает. Есть очень много более разбирающихся людей в этом плане, чем я. Учиться тут можно чуть ли не до бесконечности, было бы время и желание только =)
observer_07 rainmeter с темой enigma.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Куратор темы Статус: Не в сети Регистрация: 04.12.2009 Откуда: Москва Фото: 13
Еще хочу вам посоветовать один ютуб канал про обучение Cheat engine с азов и выше https://www.youtube.com/playlist?list=P ... xv2m6mrmHr Туториалы оч хорошие, разжёванные. Материал в 1080p60fps-1440p. Туториалы английские, но человек очень хорошо и ясно все выговаривает и англ хороший очень, приятно слушать (ну как по мне).
Некоторые моменты вот у него сейчас смотрю, про xmm как раз и прочее - крайне интересная информация.
_________________ Den aller yngste greven, som der på skipet var, han ville visst trolova sig, enn sjølv så ung han var... DCS player =3
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения