Korol2010 Опубликовано 11 сентября, 2014 Поделиться Опубликовано 11 сентября, 2014 Привет читателям и профи!)) У меня возникли проблемы со взломом данной игры. Проблема заключается в том, что я нашёл инструкцию для здоровья, на сколько я на данный момент понял, не совсем рабочею, скрипт как бы вроде и допёр как написать (за несколько дней правда ), я сделал бесконечное здоровье для юнитов и вроде для зданий, но оно работает не совсем правильно. Оно, если можно так сказать имеет эффект заморозки, а не записи значения в память по средством моего скрипта. Я пришёл к этому выводу потому, что значение даже явно визуально не стоит на месте как по идее при инъекции и должно быть, а постоянно обновляется именно как я и говорил ранее, подобно эффекту заморозки просто адреса. И ещё оказалось что при получении разом большого урона юнитом или зданием, значения не обновляются уже мгновенно, а просто стандартно отнимаются, ну и соответственно юнит или здание при получении большого урона просто уничтожается(умирает), хотя при этом это не распространяется на других юнитов, кто даже в это же время получает стандартно маленький, урон например от войск противника (у них жизни опять же "как бы" бесконечны). Вот собственно дорогие профи я и прошу вашей помощи в решении данной проблемы))) Да кстате фильтр соответственно я сделал и он работает. Для решения данной проблемы я уже перепробовал, на мой взгляд, всё, даже пытался внедрять скрипт в другие инструкции получающие доступ или пишущие, всё бесполезно, да и работают более менее только 2 инструкции. Вот кстате одна из них, вторая правда потерялась уже :movss [esi+04],xmm0Вот скрипт который до которого я так долго додумывался (в виду моих слабы знаний ассемблера и геймхакинга):[ENABLE]alloc(newMem, 2048)label(returnHere)label(hack)newMem:cmp [esi+50],#1je hackmovss [esi+04],xmm0jmp returnHerehack:push eaxmov eax, [esi+c]mov [esi+04],eaxpop eaxjmp returnHereCNC4.AptTarget::GetNext+54B9E:jmp newMemreturnHere:[DISABLE]CNC4.AptTarget::GetNext+54B9E:movss [esi+04],xmm0dealloc(newMem)Жду вашей помощи.За ранее спасибо вам уважаемые профи))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 11 сентября, 2014 Поделиться Опубликовано 11 сентября, 2014 Первое и главное - у тебя инструкция, которая записывает значение. Попробуй найти инструкцию, которая читает значение и сделать точно такой же фильтр с ней (думаю, сделанный тобой фильтр тоже сработает, единственное - нужно будет его изменить под читающую инструкцию). Как правило, читающие инструкции срабатывают гораздо чаще, чем записывающие, следовательно, и твой скрипт в этом случае тоже будет срабатывать гораздо чаще. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 11 сентября, 2014 Автор Поделиться Опубликовано 11 сентября, 2014 Я делал на читающую инструкцию тоже самое, но эффект был даже хуже чем от этой, правда скрипт был тот же, я его не пробовал менять, да и честно говоря не знаю как(( До этого то еле додумался, спустя 4 дня и 10 часов обще убитого время. Инструкция была если щас вспомнить вроде fld dword ptr [ecx+04]вот оригинальная инъекция читающей инструкции, и ещё 1 читающая, но она не работает с моим написанным скриптом, только первая:[ENABLE]alloc(newmem,2048)label(returnhere)newmem:fld dword ptr [ecx+04]fdiv dword ptr [esp]exit:jmp returnhere"CNC4.game"+2FB324:jmp newmemnopreturnhere: [DISABLE]"CNC4.game"+2FB324:fld dword ptr [ecx+04]fdiv dword ptr [esp]dealloc(newmem)[ENABLE]alloc(newmem,2048)label(returnhere)newmem:fld dword ptr [ecx+04]ret int 3 exit:jmp returnhere"CNC4.game"+245080:jmp newmemreturnhere: [DISABLE]"CNC4.game"+245080:fld dword ptr [ecx+04]ret int 3 dealloc(newmem)Эта выполняется большее кол-во раз, и появляется в списке инструкций раньше первой. Восстановил всё же обе сейчас, всё равно это минутное дело)) Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 11 сентября, 2014 Поделиться Опубликовано 11 сентября, 2014 А можно скриншот инструкций которые обращаются к адресу жизней?А по поводу float инструкции попробуй так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [ecx+50],1 je hack fld dword ptr [ecx+04] fdiv dword ptr [esp] jmp returnHere hack: fld dword ptr [ecx+04] fst dword ptr [ecx+C] fdiv dword ptr [esp] jmp returnHere [DISABLE] "CNC4.game"+2FB324: fld dword ptr [ecx+04] fdiv dword ptr [esp] dealloc(newmem) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 13 сентября, 2014 Автор Поделиться Опубликовано 13 сентября, 2014 А можно скриншот инструкций которые обращаются к адресу жизней?А по поводу float инструкции попробуй так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [ecx+50],1 je hack fld dword ptr [ecx+04] fdiv dword ptr [esp] jmp returnHere hack: fld dword ptr [ecx+04] fst dword ptr [ecx+C] fdiv dword ptr [esp] jmp returnHere [DISABLE] "CNC4.game"+2FB324: fld dword ptr [ecx+04] fdiv dword ptr [esp] dealloc(newmem) Спасибо тебе большое. Да конечно скрин инструкций выложу, без проблем))Вот скрин инструкций как просил:https://yadi.sk/i/V6pM08tmbTYBKПопробовал в работе твой скрипт, он вообще не работает, а точнее работает очень странно, здоровье сразу максимальное становится на 0, полоска остаётся всегда целой, а текущее значение на уменьшение реагирует стандартно, при увеличении увеличивается до бесконечности. При попытке мною изменить как-то скрипт, не привело не к чему. Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 13 сентября, 2014 Поделиться Опубликовано 13 сентября, 2014 Можно попробывать без 14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [esi+50],1 je hack comiss xmm0,[esi+04] jmp returnHere hack: comiss xmm0,[esi+04] push [esi+04] pop [esi+0C] jmp returnHereесли будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04] Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 13 сентября, 2014 Автор Поделиться Опубликовано 13 сентября, 2014 Можно попробывать без 14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так [ENABLE] alloc(newMem, 2048) label(returnHere) label(hack) newMem: cmp [esi+50],1 je hack comiss xmm0,[esi+04] jmp returnHere hack: comiss xmm0,[esi+04] push [esi+04] pop [esi+0C] jmp returnHereесли будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04]Я уже пробовал удалять 14 строку, бесполезно. И так же пробовал различно переделывать твой вариант скрипта, 0 толку(( Щас тогда попробую ещё с comiss xmm0,[esi+04] сделать скриптПопробовал сделать скрипт с предложенной тобой инструкцией - эффект 0, причём не реагирует игра на него вообще никак)) Пробовал так же различно менять скрипт, тоже бесполезно, либо работает криво, либо так же не реагирует. Пробовал применять твои оба варианта скрипта к другим инструкциям, так же 0 эффекта((( Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 14 сентября, 2014 Поделиться Опубликовано 14 сентября, 2014 Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя. P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора. P.S.S. Проверял без фильтра на инструкции movss xmm0,[esi+0C]movss [esi+04],xmm0 Вывод искать статичное смещение которое верно только для тебя. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 16 сентября, 2014 Автор Поделиться Опубликовано 16 сентября, 2014 Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя. P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора. P.S.S. Проверял без фильтра на инструкции movss xmm0,[esi+0C]movss [esi+04],xmm0 Вывод искать статичное смещение которое верно только для тебя.вот тебе огромное спасибо, я даже и не думал что это может быть проблема в фильтре. Буду значит искать другое смещение для фильтра) Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 18 сентября, 2014 Автор Поделиться Опубликовано 18 сентября, 2014 Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить? Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 18 сентября, 2014 Поделиться Опубликовано 18 сентября, 2014 Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 18 сентября, 2014 Поделиться Опубликовано 18 сентября, 2014 Кажется в этой игре указатель на здоровье находиться через сравнивание структур баз Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 19 сентября, 2014 Поделиться Опубликовано 19 сентября, 2014 Это вопрос логики. Тогда используй сразу 2-3 фильтра сравнения структур. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 20 сентября, 2014 Автор Поделиться Опубликовано 20 сентября, 2014 Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур. Ок попробую как ты говоришь) Это вопрос логики. Тогда используй сразу 2-3 фильтра сравнения структур. Слушай, а разве так можно, использовать несколько фильтров подряд? Кажется в этой игре указатель на здоровье находиться через сравнивание структур баз Дак я же в структуре и ищу)) Как же ты ещё то фильтр сфарганишь, если не через структуру адреса?) Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 21 сентября, 2014 Поделиться Опубликовано 21 сентября, 2014 Помню на одну игрушку 5 фильтров (Указателей) вешал на одну инструкцию.Так что можно. И не только можно использовать структуру для фильтра.............Можно использовать регистры + части адресов как фильтры. Где то здесь на форуме я уже писал об этом одному чуваку, поищи найдёшь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 22 сентября, 2014 Автор Поделиться Опубликовано 22 сентября, 2014 Помню на одну игрушку 5 фильтров (Указателей) вешал на одну инструкцию.Так что можно. И не только можно использовать структуру для фильтра.............Можно использовать регистры + части адресов как фильтры. Где то здесь на форуме я уже писал об этом одному чуваку, поищи найдёшь.ок. спс за полезную инфу, попробую поискать твои камменты некому "чуваку"))) Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 24 сентября, 2014 Автор Поделиться Опубликовано 24 сентября, 2014 Чё то нефига. Пробовал я использовать способ сравнения части регистра с частью адреса, как было тобой описано в одной теме которую я нашёл, но у меня это ни какого результата не принесло((( Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 25 сентября, 2014 Поделиться Опубликовано 25 сентября, 2014 Я знаю только 3 способа сделать фильтр. 1-й это найти указатель (Но в стратежках не актуален он или они, поскольку там много юнитов, только если ты хорошо знаешь ASM).2-й это дата структуры. (Очень хорошо подходит для стратег, поскольку там работают с многими данными).3-й это сравнение регистров. (Желательно использовать в стрелялках и гонках где только одна единица юнита). Это крайняя мера, если 1 и 2 вариант не помогает. Все игры разные, пробуй все способы.Поскольку у тебя стратежка где много чего, поэтому способ №2 будет более актуален.Просто делай побольше фильтров, если с одним фильтром перестаёт работать.Бывает так что приходиться проходить игру и ломать походу прохождения, поскольку не знаешь будет ли скрипт -работать после перехода на следующий уровень.В общем удачного тебе хака этой игрушки. Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 25 сентября, 2014 Автор Поделиться Опубликовано 25 сентября, 2014 Я знаю только 3 способа сделать фильтр. 1-й это найти указатель (Но в стратежках не актуален он или они, поскольку там много юнитов, только если ты хорошо знаешь ASM).2-й это дата структуры. (Очень хорошо подходит для стратег, поскольку там работают с многими данными).3-й это сравнение регистров. (Желательно использовать в стрелялках и гонках где только одна единица юнита). Это крайняя мера, если 1 и 2 вариант не помогает. Все игры разные, пробуй все способы.Поскольку у тебя стратежка где много чего, поэтому способ №2 будет более актуален.Просто делай побольше фильтров, если с одним фильтром перестаёт работать.Бывает так что приходиться проходить игру и ломать походу прохождения, поскольку не знаешь будет ли скрипт -работать после перехода на следующий уровень.В общем удачного тебе хака этой игрушки. Спс тебе)) Только вот я о втором способе в первые слышу, и даже не знал что есть у структур даты. Если я правильно понимаю под датой подразумевается какое-то типо системное время, или программное? Если не сложно опиши пожалуйста хотя бы в каком-нибуть простеньком примере как это можно провернуть Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 26 сентября, 2014 Поделиться Опубликовано 26 сентября, 2014 EXCUSE MUA! Я имел ввиду "анализ данных/структур" Ссылка на комментарий Поделиться на другие сайты Поделиться
Korol2010 Опубликовано 26 сентября, 2014 Автор Поделиться Опубликовано 26 сентября, 2014 EXCUSE MUA! Я имел ввиду "анализ данных/структур"ааа епть понятно, я то думал что-то другое Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения