User123 Опубликовано 27 апреля, 2015 Поделиться Опубликовано 27 апреля, 2015 (изменено) Собственно,во многих играх,функции(возьмем,например,изменяющую здоровье) появляются только после того,как она потребуется,то-есть когда наносится урон.Вопрос:как можно это обойти,то-есть сканировать сигнатуру сразу,как только эта функция появляетсяНадеюсь,меня поняли P.S. Бесконечный цикл не предлагать Изменено 27 апреля, 2015 пользователем User123 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Надеюсь,меня понялиНе очень поняли. Лучше было пояснить, что именно ты хочешь сделать. А так можем только строить предположения. У каждого адреса есть инструкции, которые срабатывают на запись (Брейкпоинт на запись) - ты говоришь про них, но есть инструкции, которые срабатывают на чтение (Брейкпоинт на чтение)- так вот эти инструкции работают обычно всегда и не нужно ждать нанесения урона. Может они тебе подойдут? Бесконечный цикл не предлагатьЕсли инструкция очень часто обращается к адресу, а тебе нужно чтобы скрипт срабатывал один раз, то это тоже не проблема, много тем на форуме по созданию одноразовых скриптов. Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 28 апреля, 2015 Автор Поделиться Опубликовано 28 апреля, 2015 Например,я хочу занопить инструкцию,наносящую уронСделал сигнатуру,но CE ее не находит пока игроку не нанесется уронИз чего я предположил,что инструкция появляется в памяти игры только тогда,когда она вызывается в первый разА на счет бесконечного цикла,я имею ввиду постоянное сканирование сигнатуры в памяти Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Как найти сигнатуру, которой не существует до первого определенного действия в игре? Ответ. Никак. Это же очевидно Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 28 апреля, 2015 Автор Поделиться Опубликовано 28 апреля, 2015 Как найти сигнатуру, которой не существует до первого определенного действия в игре? Ответ. Никак. Это же очевидно Вот я и спрашиваю,вдруг есть какой-то способ Вопрос:как можно это обойти,то-есть сканировать сигнатуру сразу,как только эта функция появляется Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Инструкция есть всегда - ее просто не может не быть до какого-то определенного момента, другой вопрос: почему твоя сигнатура не указывает на нужную инструкцию? И вообще, тут нужно уточнить, как сканирует сигнатуру автор темы; если он пишет трейнер на C++, Delphi, Assembler, и т.д., то проблем с поиском инструкции (если сигнатура верна) - не должно, а вот если автор пишет скрипт на СЕ, то скрипт срабатывает при каждом вызове конкретной инструкции игрой. Проще всего поставить бряк на доступ, и выйти на инструкцию, которая вызывается по таймеру, а не при получении урона, например. В общем, я надеюсь, что я правильно понял вопрос автора темы. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Вопрос: как можно это обойти, то-есть сканировать сигнатуру сразу, как только эта функция появляетсяНужно искать сигнатуру только после того, как функция появляется. Именно тогда, когда сигнатура существует, то именно тогда её можно найти. Это 100%. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Привет! Исходный код игры находится в скомпилированном виде в бинарном файле. Чтобы игра заработала, ОС должна бинарный файл загрузить в оперативную память. Единственное исключение - это самомодифицирующийся код, но вряд ли есть игры, генерирующие исполняемый код на лету. Исходя из этого, я не совсем понимаю, что ты хочешь сделать. Адрес участка кода, для которого сделана маска (сигнатура) можно выяснить сразу же после запуска игры - то есть после того как нужный исполняемый модуль загрузится в оперативную память. Если у тебя это происходит не так, то ты явно что-то делаешь не совсем правильно. Поэтому показывай, как ты делаешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Chrome Gold. Код распаковывался в выделенную память. Игра на яве. Защищенные старфорсом игры тоже распаковывали код динамически. Так что пока функция не сработает хотя бы раз - гарантий нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Xipho, тогда я наивно полагаю, что игра написана на C++ и не имеет никакой защиты, т.к. автор не указал обратного. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 апреля, 2015 Поделиться Опубликовано 28 апреля, 2015 Кстати, Securom какой-то из версий тоже грешил шифрованием. Но старфорс - это виртуальная машина с шифрованием на лету по топологии диска. Вообще головная боль была для взлома. Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 28 апреля, 2015 Автор Поделиться Опубликовано 28 апреля, 2015 (изменено) Игра INDEPENDENT написана на c# в unity3dКак-то так Изменено 28 апреля, 2015 пользователем User123 Ссылка на комментарий Поделиться на другие сайты Поделиться
дон Педро Опубликовано 29 апреля, 2015 Поделиться Опубликовано 29 апреля, 2015 Psi-Ops.The Mindgate Conspiracy HEX-код======================================00371857(00771857) B9 63 00 00 00 90 [бесконечные патроны] Как задействовать этот хекс-код?СПС!P.S. ну не люблю я патроны экономить, не люблю.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 апреля, 2015 Поделиться Опубликовано 29 апреля, 2015 (изменено) Как задействовать этот хекс-код? Предполагаю, что 00371857 - байты оригинальной инструкцию, а 00 37 18 57 B9 63 00 00 00 90 - это сигнатура.Тогда так:Если скрипт не включается значит наоборот: 00771857 - байты оригинальной инструкции и скрипт будет таким:Попробуй.[ENABLE]aobscan(InfiniteAmmo, 00 37 18 57 B9 63 00 00 00 90) registersymbol(InfiniteAmmo)InfiniteAmmo: db 00 77 18 57[DISABLE]InfiniteAmmo:db 00 37 18 57unregistersymbol(InfiniteAmmo) [ENABLE]aobscan(InfiniteAmmo, 00 77 18 57 B9 63 00 00 00 90) registersymbol(InfiniteAmmo)InfiniteAmmo: db 00 37 18 57[DISABLE]InfiniteAmmo:db 00 77 18 57unregistersymbol(InfiniteAmmo) Изменено 29 апреля, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
дон Педро Опубликовано 29 апреля, 2015 Поделиться Опубликовано 29 апреля, 2015 без пол-литры не разобратьсо.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 апреля, 2015 Поделиться Опубликовано 29 апреля, 2015 Вставь скрипты в СЕ и пробуй. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Это не байты оригинальной инструкции. Это адрес, по которому нужно внести байты патча. Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Так что,кто-нибудь поможет?Поэтому показывай, как ты делаешь Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Так тебе уже помогли. Либо ищи инструкцию, которая постоянно читает из адреса, либо, в некоторых случаях, ее действительно не будет до первого использования функции. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Так что,кто-нибудь поможет? Скорее всего, никто, т.к. надо писать код, а никто не хочет. Самое простое делать через таймер . Проверяешь был ли нанесен урон по таймеру. Т.е. если прошлое здоровье больше текущего, то начинаешь искать сигнатуру. Еще вариант, заставлять появляться сигнатуру до нанесения первого урона. Но я даже примерно не знаю как это можно сделать. Еще вариант, внедрять dll, которая работает с Unity3d функциями и без всяких сигнатур ищет GameObject по типу или имени, ищет поле (закрытое или открытое) и правит его. Еще можешь поковырять mono примочки в Cheat Engine, если будешь CE использовать. С ними можно искать объекты и менять их значения. Т.е. никаких dll своих делать не придется. Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Так тебе уже помогли. Либо ищи инструкцию, которая постоянно читает из адреса, либо, в некоторых случаях, ее действительно не будет до первого использования функции.Но мне нужно было сделать так,чтобы игрока нельзя было убить,а ты,я так понимаю,предлагаешь сделать инъекцию кода,пишущую определенное значение в адрес здоровья.В игре,вроде как,если тебе попадают в голову,то убивают с одного выстрела,так что не катит.Самое простое делать через таймер . Проверяешь был ли нанесен урон по таймеру. Т.е. если прошлое здоровье больше текущего, то начинаешь искать сигнатуру. P.S. Бесконечный цикл не предлагатьЛадно,я понял,никто с этим еще не заморачивался Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Но мне нужно было сделать так,чтобы игрока нельзя было убить,а ты,я так понимаю,предлагаешь сделать инъекцию кода,пишущую определенное значение в адрес здоровья.В игре,вроде как,если тебе попадают в голову,то убивают с одного выстрела,так что не катит.Ставь бряк на запись при получении урона, устанавливай значение регистру, который отвечает за урон равным нулю - вот тебе и отключение урона. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 В игре,вроде как,если тебе попадают в голову,то убивают с одного выстрела,так что не катит.Да не давно обнаружил, что есть игры, где при соблюдении каких-нибудь условий, герой умирает всё равно - даже если записывать максимальное здоровье по нужному адресу. Конкретнее описано здесь. В этой игре, если к ГГ враги прилепляли бомбу липучку, то ГГ умирал.Как написал GodMod в этом случае, нашёл инструкцию, которая записывала в здоровье 0 (ставил брейкпоинт на доступ). И потом выше по коду нашёл условные прыжки (их там было несколько) и самый нижний заменил на безусловный прыжок jmp, чтобы код гарантированно перепрыгивал запись 0 в здоровье и весь это участок. Потом объединил полученный скрипт с основным и God Mod заработал. Ссылка на комментарий Поделиться на другие сайты Поделиться
User123 Опубликовано 30 апреля, 2015 Автор Поделиться Опубликовано 30 апреля, 2015 Ставь бряк на запись при получении урона, устанавливай значение регистру, который отвечает за урон равным нулю - вот тебе и отключение урона.Так а тема то о чем?Надо найти адрес инструкции,наносящей урон Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 30 апреля, 2015 Поделиться Опубликовано 30 апреля, 2015 Тогда тебе не повезло, потому что получается замкнутый круг. Возможно тебе будет проще использовать цепочки указателей и заморозку значений. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения