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

Здоровье в Command & Counquer 4 Tiberium Twilight


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

Привет читателям и профи!)) У меня возникли проблемы со взломом данной игры. Проблема заключается в том, что я нашёл инструкцию для здоровья, на сколько я на данный момент понял, не совсем рабочею, скрипт как бы вроде и допёр как написать (за несколько дней правда :-D ), я сделал бесконечное здоровье для юнитов и вроде для зданий, но оно работает не совсем правильно. Оно, если можно так сказать имеет эффект заморозки, а не записи значения в память по средством моего скрипта. Я пришёл к этому выводу потому, что значение даже явно визуально не стоит на месте как по идее при инъекции и должно быть, а постоянно обновляется именно как я и говорил ранее, подобно эффекту заморозки просто адреса. И ещё оказалось что при получении разом большого урона юнитом или зданием, значения не обновляются уже мгновенно, а просто стандартно отнимаются, ну и соответственно юнит или здание при получении большого урона просто уничтожается(умирает), хотя при этом это не распространяется на других юнитов, кто даже в это же время получает стандартно маленький, урон например от войск противника (у них жизни опять же "как бы" бесконечны). Вот собственно дорогие профи я и прошу вашей помощи в решении данной проблемы))) Да кстате фильтр соответственно я сделал и он работает. Для решения данной проблемы я уже перепробовал, на мой взгляд, всё, даже пытался внедрять скрипт в другие инструкции получающие доступ или пишущие, всё бесполезно, да и работают более менее только 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)

Жду вашей помощи.

За ранее спасибо вам уважаемые профи)))

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

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

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

Я делал на читающую инструкцию тоже самое, но эффект был даже хуже чем от этой, правда скрипт был тот же, я его не пробовал менять, да и честно говоря не знаю как(( До этого то еле додумался, спустя 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)

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

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

А можно скриншот инструкций которые обращаются к адресу жизней?


А по поводу float инструкции попробуй так

 

  1. [ENABLE]
  2. alloc(newMem, 2048)
  3. label(returnHere)
  4. label(hack)
  5.  
  6. newMem:
  7. cmp [ecx+50],1
  8. je hack
  9. fld dword ptr [ecx+04]
  10. fdiv dword ptr [esp]
  11. jmp returnHere
  12.  
  13. hack:
  14. fld dword ptr [ecx+04]
  15. fst dword ptr [ecx+C]
  16. fdiv dword ptr [esp]
  17. jmp returnHere
  18.  
  19.  
  20.  
  21.  
  22. [DISABLE]
  23. "CNC4.game"+2FB324:
  24. fld dword ptr [ecx+04]
  25. fdiv dword ptr [esp]
  26. dealloc(newmem)
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

 

А можно скриншот инструкций которые обращаются к адресу жизней?

А по поводу float инструкции попробуй так

 

  1. [ENABLE]
  2. alloc(newMem, 2048)
  3. label(returnHere)
  4. label(hack)
  5.  
  6. newMem:
  7. cmp [ecx+50],1
  8. je hack
  9. fld dword ptr [ecx+04]
  10. fdiv dword ptr [esp]
  11. jmp returnHere
  12.  
  13. hack:
  14. fld dword ptr [ecx+04]
  15. fst dword ptr [ecx+C]
  16. fdiv dword ptr [esp]
  17. jmp returnHere
  18.  
  19.  
  20.  
  21.  
  22. [DISABLE]
  23. "CNC4.game"+2FB324:
  24. fld dword ptr [ecx+04]
  25. fdiv dword ptr [esp]
  26. dealloc(newmem)

 

Спасибо тебе большое. Да конечно скрин инструкций выложу, без проблем))

Вот скрин инструкций как просил:

https://yadi.sk/i/V6pM08tmbTYBK

Попробовал в работе твой скрипт, он вообще не работает, а точнее работает очень странно, здоровье сразу максимальное становится на 0, полоска остаётся всегда целой, а текущее значение на уменьшение реагирует стандартно, при увеличении увеличивается до бесконечности. При попытке мною изменить как-то скрипт, не привело не к чему.

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

Можно попробывать без  14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так

 

  1. [ENABLE]
  2. alloc(newMem, 2048)
  3. label(returnHere)
  4. label(hack)
  5.  
  6. newMem:
  7. cmp [esi+50],1
  8. je hack
  9. comiss xmm0,[esi+04]
  10. jmp returnHere
  11.  
  12. hack:
  13. comiss xmm0,[esi+04]
  14. push [esi+04]
  15. pop [esi+0C]
  16. jmp returnHere

если будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04]

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

Можно попробывать без  14.fld dword ptr [ecx+04](то есть удалить 14-ю строчку из скрипта) или же попробывать с comiss xmm0,[esi+04](первый) взять за основу и написать примерно так

 

  1. [ENABLE]
  2. alloc(newMem, 2048)
  3. label(returnHere)
  4. label(hack)
  5.  
  6. newMem:
  7. cmp [esi+50],1
  8. je hack
  9. comiss xmm0,[esi+04]
  10. jmp returnHere
  11.  
  12. hack:
  13. comiss xmm0,[esi+04]
  14. push [esi+04]
  15. pop [esi+0C]
  16. jmp returnHere

если будеть криво работать также из hack: можно поробывать удалить comiss xmm0,[esi+04]

Я уже пробовал удалять 14 строку, бесполезно. И так же пробовал различно переделывать твой вариант скрипта, 0 толку(( Щас тогда попробую ещё с comiss xmm0,[esi+04] сделать скрипт

Попробовал сделать скрипт с предложенной тобой инструкцией - эффект 0, причём не реагирует игра на него вообще никак)) Пробовал так же различно менять скрипт, тоже бесполезно, либо работает криво, либо так же не реагирует. Пробовал применять твои оба варианта скрипта к другим инструкциям, так же 0 эффекта(((

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

Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя.

 

P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора.

 

P.S.S. Проверял без фильтра на инструкции

 

movss xmm0,[esi+0C]

movss [esi+04],xmm0

 

Вывод искать статичное смещение которое верно только для тебя.

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

Смещение ты не верное нашел в [esi+50] значение динамически меняется и поэтому скрипт срабатывает не всегда следовательно когда там не 1(оно походу игры в короткие промежутки времени скачет от 3 до 15 и проскакивает иногда 1,поэтому работает криво...) то скрипт не работает. Ищи статичное смещение которое не меняется никогда и которое действительно только для тебя.

 

P.S. Рабочее смещение искать не стал т.к. это метод научного тыка и перебора.

 

P.S.S. Проверял без фильтра на инструкции

 

movss xmm0,[esi+0C]

movss [esi+04],xmm0

 

Вывод искать статичное смещение которое верно только для тебя.

вот тебе огромное спасибо, я даже и не думал что это может быть проблема в фильтре. Буду значит искать другое смещение для фильтра)

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

Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?

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

Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?

Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур.

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

 

Блин, слушайте, какие бы я смещения не пробовал делать как бы не сравнивал, всё без толку(( Я уже перепробовал с пару десятков смещений, всё бесполезно, либо работает так же глючно, либо вообще не работает. Что делать уже хз. Возможно есть ещё у кого - нибудь идеи как это исправить?

Со стратегиями вообще все очень печально в плане сравнения структур. Generals ,Rome total war да куча всяких. Там тоже фиг найдешь в структуре именно нужное отличие(хотя в тех же Generals например под одним поинтером в смещении было указано Player(string) и имена ботов. Попробуй порыть в указателях. Хотя повторюсь со стратегиями все печально в сравнении структур.

 

Ок попробую как ты говоришь)

 

Это вопрос логики.  o_0  Тогда используй сразу 2-3 фильтра сравнения структур. 

Слушай, а разве так можно, использовать несколько фильтров подряд?

 

Кажется в этой игре указатель на здоровье находиться через сравнивание структур баз

 

Дак я же в структуре и ищу)) Как же ты ещё то фильтр сфарганишь, если не через структуру адреса?)

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

Помню на одну игрушку 5 фильтров (Указателей) вешал на одну инструкцию.

Так что можно.  :closeyes:

И не только можно использовать структуру для фильтра.............Можно использовать регистры + части адресов как фильтры. Где то здесь на форуме я уже писал об этом одному чуваку, поищи найдёшь.

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

Помню на одну игрушку 5 фильтров (Указателей) вешал на одну инструкцию.

Так что можно.  :closeyes:

И не только можно использовать структуру для фильтра.............Можно использовать регистры + части адресов как фильтры. Где то здесь на форуме я уже писал об этом одному чуваку, поищи найдёшь.

ок. спс за полезную инфу, попробую поискать твои камменты некому "чуваку")))

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

Чё то нефига. Пробовал я использовать способ сравнения части регистра с частью адреса, как было тобой описано в одной теме которую я нашёл, но у меня это ни какого результата не принесло(((

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

Я знаю только 3 способа сделать фильтр.  :closeyes:

1-й это найти указатель (Но в стратежках не актуален он или они, поскольку там много юнитов, только если ты хорошо знаешь ASM).

2-й это дата структуры. (Очень хорошо подходит для стратег, поскольку там работают с многими данными).

3-й это сравнение регистров. (Желательно использовать в стрелялках и гонках где только одна единица юнита). Это крайняя мера, если 1 и 2 вариант не помогает. Все игры разные, пробуй все способы.

Поскольку у тебя стратежка где много чего, поэтому способ №2 будет более актуален.

Просто делай побольше фильтров, если с одним фильтром перестаёт работать.

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

работать после перехода на следующий уровень.

В общем удачного тебе хака этой игрушки.  :-D

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

Я знаю только 3 способа сделать фильтр.  :closeyes:

1-й это найти указатель (Но в стратежках не актуален он или они, поскольку там много юнитов, только если ты хорошо знаешь ASM).

2-й это дата структуры. (Очень хорошо подходит для стратег, поскольку там работают с многими данными).

3-й это сравнение регистров. (Желательно использовать в стрелялках и гонках где только одна единица юнита). Это крайняя мера, если 1 и 2 вариант не помогает. Все игры разные, пробуй все способы.

Поскольку у тебя стратежка где много чего, поэтому способ №2 будет более актуален.

Просто делай побольше фильтров, если с одним фильтром перестаёт работать.

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

работать после перехода на следующий уровень.

В общем удачного тебе хака этой игрушки.  :-D

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

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

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

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

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