XVTT Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 Есть некий адресс.Вопрос:Как изменить его значение,если при изменении его байтов игра сразу крашит.Как в OllyDBG и CE посмотреть асму- хз.Через классы- тож не варик,не понимаю как там и что.Игра - FarCry Адреса и вывод их значения : char tests[MAX_PATH]; char tests2[MAX_PATH]; DWORD _Player_Hp = (DWORD)GetModuleHandleA("CrySystem.dll") + 0x000947A4; DWORD Ofsset_1 = *(DWORD*)(_Player_Hp); DWORD Ofsset_2 = *(DWORD*)(Ofsset_1 + 0x31C); DWORD Ofsset_3 = *(DWORD*)(Ofsset_2 + 0x2A0); DWORD Ofsset_4 = *(DWORD*)(Ofsset_3 + 0xA0); DWORD AmmoPl = (DWORD)GetModuleHandleA("CryEntitySystem.dll") + 0x00036330; DWORD Ofset_1 = *(DWORD*)(AmmoPl); DWORD Ofset_2 = *(DWORD*)(Ofset_1 + 0xA4); DWORD Ofset_3 = *(DWORD*)(Ofset_2 + 0x450); DWORD Ofset_4 = *(DWORD*)(Ofset_3 + 0xA8); sprintf_s(tests, "Bullet=%d", Ofset_4); NewText(x + 180, y + 59, tests, D3DCOLOR_ARGB(240, 200, 200, 200), LText); sprintf_s(tests2, "HP=%d", Ofsset_4); NewText(x + 180, y + 79, tests2, D3DCOLOR_ARGB(240, 200, 200, 200), LText);Прошу по возможности объяснить все подробно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 25 октября, 2014 Поделиться Опубликовано 25 октября, 2014 На нашем форуме есть целая серия видеоуроков по реверсингу игры FarCry от Coder. В них все весьма подробно рассмотрено. Используй поиск по форуму. Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 26 октября, 2014 Поделиться Опубликовано 26 октября, 2014 (изменено) Как в OllyDBG и CE посмотреть асму- хз.Через классы- тож не варик,не понимаю как там и что.Урок кодера по Far Cry смотри: http://www.youtube.com/watch?v=4249xzjqI88Отличный видео-урок. Изменено 26 октября, 2014 пользователем lamalamaz Ссылка на комментарий Поделиться на другие сайты Поделиться
XVTT Опубликовано 26 октября, 2014 Автор Поделиться Опубликовано 26 октября, 2014 (изменено) На нашем форуме есть целая серия видеоуроков по реверсингу игры FarCry от Coder. В них все весьма подробно рассмотрено. Используй поиск по форуму.Опять же он использует классы.Мне пока до них,как раком до китая.Но все-равно,спасибо. Изменено 26 октября, 2014 пользователем XVTT Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 26 октября, 2014 Поделиться Опубликовано 26 октября, 2014 После изменения байтов в адресе игра может крашить по двум причинам1. XLive (его защита целостности кода проверяет память эпизодически)2. Адрес, который ты нашел, на самом деле является исполняемым кодом, и при перетирании, естественно, логика работы кода меняется на непредсказуемую, что и приводит к вылету из игры Так что ты объясни, что за адрес, как ты на него вышел, и что именно ты хочешь сделать. Попробую помочь. Ссылка на комментарий Поделиться на другие сайты Поделиться
XVTT Опубликовано 26 октября, 2014 Автор Поделиться Опубликовано 26 октября, 2014 После изменения байтов в адресе игра может крашить по двум причинам1. XLive (его защита целостности кода проверяет память эпизодически)2. Адрес, который ты нашел, на самом деле является исполняемым кодом, и при перетирании, естественно, логика работы кода меняется на непредсказуемую, что и приводит к вылету из игры Так что ты объясни, что за адрес, как ты на него вышел, и что именно ты хочешь сделать. Попробую помочь.Хорошо.В СЕ я нашел адресс здоровья и попробовал найти к нему поинтер.как видите,он находится по адресу ("CrySystem.dll") + 0x000947A4 b +3 смещения.Как только я пишу какие-либо байты в получившийся адресс - игра крашит.Может-быть я что-то не так сделал?Ибо через инструкции обращавшиеся к адресу ,искать адрес статический мне не хочется. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 26 октября, 2014 Поделиться Опубликовано 26 октября, 2014 Скорее всего, указатель нашелся неправильный, я так полагаю. Или ты цепочку смещений строишь неправильно. Потому как в нормальной ситуации крэша быть не должно. И вообще, указатели - штука не надежная, лучше выходить на инструкцию и делать фильтр - самый надежный вариант. Тем более, что в первом фаркрае есть железный параметр для фильтра - имя героя. Ссылка на комментарий Поделиться на другие сайты Поделиться
XVTT Опубликовано 26 октября, 2014 Автор Поделиться Опубликовано 26 октября, 2014 Скорее всего, указатель нашелся неправильный, я так полагаю. Или ты цепочку смещений строишь неправильно. Потому как в нормальной ситуации крэша быть не должно. И вообще, указатели - штука не надежная, лучше выходить на инструкцию и делать фильтр - самый надежный вариант. Тем более, что в первом фаркрае есть железный параметр для фильтра - имя героя.Указатели правильные,ибо значения патронов и хп показывают верное.Про имя героя не знал.Как фильтр делать не знаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 26 октября, 2014 Поделиться Опубликовано 26 октября, 2014 Указатели правильные,ибо значения патронов и хп показывают верное. Про имя героя не знал. Как фильтр делать не знаю.Если показывается верное значение, то совсем не обязательно, что оно верное, и отвечает именно за то, что ты искал. Есть такое понятие, как "Экранное значение", то есть то значение, которое мы видим на экране, но в действительности - может быть любое значение, любого типа. Например, игра нам показывает количество здоровья, равное 100, а на самом деле, это может быть: и 200 деленное на 2, и 99.892, и т.д. и т.п., вплоть до мозголомкого шифрования значения. Попробуй искать методом "изменилось" и "не изменилось". Или поставь бряк на доступ, и посмотри, какие инструкции и адреса всплывают при обращении. Ссылка на комментарий Поделиться на другие сайты Поделиться
XVTT Опубликовано 26 октября, 2014 Автор Поделиться Опубликовано 26 октября, 2014 Если показывается верное значение, то совсем не обязательно, что оно верное, и отвечает именно за то, что ты искал. Есть такое понятие, как "Экранное значение", то есть то значение, которое мы видим на экране, но в действительности - может быть любое значение, любого типа.Например, игра нам показывает количество здоровья, равное 100, а на самом деле, это может быть: и 200 деленное на 2, и 99.892, и т.д. и т.п., вплоть до мозголомкого шифрования значения.Попробуй искать методом "изменилось" и "не изменилось". Или поставь бряк на доступ, и посмотри, какие инструкции и адреса всплывают при обращении.Так я и искал методом изменилось\неизменилось.С бряками тож попробую,спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения