Жажда Знаний Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Уважаемые знатоки и профессионалы. Помогите пожалуйста. Конкретную игру не привожу так как эта инструкция встречается часто и в многих играх. Инструкция такая, на примере: mov [eax],ebx. Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 Смотри вторую часть моего видео по взлому Bulletstorm. Поиск по форуму поможет тебе найти это видео. Ссылка на комментарий Поделиться на другие сайты Поделиться
SER[G]ANT Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 смещение = 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 17 декабря, 2014 Автор Поделиться Опубликовано 17 декабря, 2014 Спасибо, но ранее я смотрел все эти видео, но этого не достаточно, не совсем всё понимаю. Или вы имеете в виду метод проб и ошибок ? Нет, это не нулевое смещение. Такая инструкция работает с кучей адресов и под инструкций. Например мне нужно найти смещение адреса x предмета, как это сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Tiger Опубликовано 17 декабря, 2014 Поделиться Опубликовано 17 декабря, 2014 (изменено) *** мне нужно найти смещение адреса x предмета, как это сделать?смещение в подобном случае понимается как +38 в ниже представленном примере add eax,[rbx+38] Но я кажется понял о чем ты спросил. Хотя, как правило, в структуре обязательно будет и ID и само название предмета просто нужно раскрывать и читать указатели выше-ниже по структуре... 1.Попробуй отсортировать адрес предмета через сравнение регистров, по содержимому стека и т.д. 2.Попробуй использовать анализ кода/структур, найди выше 2,3 и выше указатель затем инструкцию которая с ним работает,запиши на бумажку смещение от найденого указателя до требуемого адреса,затем делай инжект на инструкцию обновления указателя, сортируй там по регистру и читай/пиши по смещению. 3. Сравнением значения "экранного" и обаратываемого адреса. 4. Попробуй найти инструкцию чтения указателей инвентаря... 5. то как я еще не догадался Способов тысячи, подобное часто встречается в "затаблеченных" играх. Всетаки укажи на название твоей мишени. Будет время поможем. Изменено 17 декабря, 2014 пользователем Tiger Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 17 декабря, 2014 Автор Поделиться Опубликовано 17 декабря, 2014 Да, это мне частично понятно, но для начала мне интересно вот что,это начало структуры таких инструкций как (mov [eax],ebx )и т.д, как писал Sergant : смещение = 0. Так вот это и будет начало структуры каждого адреса находящигося в этой инструкции ? Если нет, то как мне выйти на начало её ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 18 декабря, 2014 Поделиться Опубликовано 18 декабря, 2014 Так в моем видео, о котором говорил выше, и рассказывается, как выйти на начало структуры путем анализа стека. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 19 декабря, 2014 Автор Поделиться Опубликовано 19 декабря, 2014 (изменено) Вот напримере, если поставить бряк на число зелья, при срабатавании можно ли в стеке найти то что работает с этим предметом, например эффект, время его действия ? Изменено 19 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 19 декабря, 2014 Поделиться Опубликовано 19 декабря, 2014 Это зависит от игры. Надо анализировать стек и структуру зелья. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 19 декабря, 2014 Автор Поделиться Опубликовано 19 декабря, 2014 Огромное спасибо за верное наставление, только вот еще проблемка. Смещение нашел, а теперь как бы её записать правильно что бы работала. Смещение 12c, инструкция: mov xmm0,[rax+rbx] Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 19 декабря, 2014 Поделиться Опубликовано 19 декабря, 2014 mov xmm0,[rax+rbx-12с] Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 19 декабря, 2014 Автор Поделиться Опубликовано 19 декабря, 2014 (изменено) Такой вариант не работает, а как будет вариант с фильтром, с переходом ? Напримере как : cmp [rax+12c],? Изменено 19 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 20 декабря, 2014 Поделиться Опубликовано 20 декабря, 2014 Мало данных,что за смещение, что за игра? смещение в стеке или смещение по анализу структур?mov xmm0,[rax+rbx] инструкция чтения. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 20 декабря, 2014 Автор Поделиться Опубликовано 20 декабря, 2014 Это смещение по анализу структур, вышел на него через по регистру rbx,на его начало. Эта интрукция постоянно обращается к адресу. Но вот как лучше внедрить в игру правильный код незнаю, игра сворачивается. Сама игра наз. Zombie ... Дальше не помню Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 20 декабря, 2014 Поделиться Опубликовано 20 декабря, 2014 newmem:cmp rbx,12Cje instructionjmp originalcode instruction: // сюда если rbx(смещение равно 12С)mov [rax+rbx],(float)100 //к примеруmov xmm0,[rax+rbx]jmp returnhere originalcode: //сюда во всех остальных случаяхmov xmm0,[rax+rbx]jmp returnhere 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 20 декабря, 2014 Автор Поделиться Опубликовано 20 декабря, 2014 (изменено) Ок. Спасибо. Подскажи пожайлуста как вычислить погрешность критического урона.(инструкции), скорость атаки. Проблема с игрой Nevewinter night 2, не как не получается найти скорость атаки и действия игрока, перепробовал все что на ум приходило. Дело в том что находит кучу адресов которые не поддаются заморозки. Все что хотел сделал, а это ни как. Нашел время способностей через сравнение регистров(60сек), т.е исходное начало таймера, единственное что получилось с временем. Оч сложна она. Изменено 20 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 21 декабря, 2014 Автор Поделиться Опубликовано 21 декабря, 2014 (изменено) newmem:cmp rbx,12Cje instructionjmp originalcode instruction: // сюда если rbx(смещение равно 12С)mov [rax+rbx],(float)100 //к примеруmov xmm0,[rax+rbx]jmp returnhere originalcode: //сюда во всех остальных случаяхmov xmm0,[rax+rbx]jmp returnhereЧто то не получается такой вариант, может я что делаю нет так . Пробовал не нескольких играх, не сработало, игры сворачиваются. На примере игра Dragon Age 2, Ищу смещение на скорость Атаки(адрес 203E7F94). Ставя чтение на доступ на этот адрес Вылезает инструкция ( fld dword ptr [esi+04] ). Затем ставя бряк на Адрес срабатывают такие регистры как :eax 005AE690ebx 203D47E4 (Анализ структур провожу по регистру ebx) , бряк на адресе 203E7F94ecx 203E7F90edx 00BF5C1Cesi 203E7F90edi 203D45F0ebp 205895D0По нему нахожу постоянное смещение (D84)Вот Скрипт который я делал newMem:cmp [ebx],d84mov [esi+04],или [esi+d84] (float)100je @f@@:fld dword ptr [esi+04]mov ecx,[esi+14]jmp returnHere DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:jmp newMemnopreturnHere: [DISABLE]DragonAge2.AK::MemoryMgr::GetPoolName+81EA6:fld dword ptr [esi+04]mov ecx,[esi+14] dealloc(newMem)что я делаю не так ? Изменено 21 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 Data Breakpoint не пробовал ставить? Как у меня в видео? Но для этого нужно, чтобы игра была в оконном режиме, иначе не свернешь, при срабатывании бряка. Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 а зачем в ebx ковырятся? то есть по вашему логика фильтра получается такаязначение по адресу [ebx] то есть в вашем случае [203D47E4] равно d84. То есть по адресу лежит ЗНАЧЕНИЕ d84.Надо сравнивать значения а не смещения. К примеру.Вот ваша инструкцияfld dword ptr [esi+04] анализируем[esi+04] = [203E7F90+4] то есть адрес по нему некое значение.где 203E7F90=esi=базовый адрес этой инструкции+04 смещение от базового адреса то есть 203E7F94 в инструкции типа [esx+ebx]тут как раз в регистре ebx хранится смещение и поэтому по нему можно писать фильтр. А то что вы понаписали сверху я вообще не вкурил... Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 21 декабря, 2014 Автор Поделиться Опубликовано 21 декабря, 2014 (изменено) Data Breakpoint не пробовал ставить? Как у меня в видео? Но для этого нужно, чтобы игра была в оконном режиме, иначе не свернешь, при срабатывании бряка.Я именно так и делал.а зачем в ebx ковырятся? то есть по вашему логика фильтра получается такаязначение по адресу [ebx] то есть в вашем случае [203D47E4] равно d84. То есть по адресу лежит ЗНАЧЕНИЕ d84.Надо сравнивать значения а не смещения. К примеру.Вот ваша инструкцияfld dword ptr [esi+04] анализируем[esi+04] = [203E7F90+4] то есть адрес по нему некое значение.где 203E7F90=esi=базовый адрес этой инструкции+04 смещение от базового адреса то есть 203E7F94А то что вы понаписали сверху я вообще не вкурил... Если брать смещение -04,то любой адрес с этой инструкции будет на одном и том же смещении. На смещении ( 04 ) Изменено 21 декабря, 2014 пользователем Жажда Знаний Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 21 декабря, 2014 Поделиться Опубликовано 21 декабря, 2014 Вам что конкретно нужно сделать? Отсеять лишние адреса? Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 21 декабря, 2014 Автор Поделиться Опубликовано 21 декабря, 2014 Нет,найти правильное смещение и внедрить его в код. В ebx'е искать, потому что при бряке идет выгрузка регистров с самого нижнего, заканчивая eax. Ebx больше подходит на начало структуры. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 23 декабря, 2014 Автор Поделиться Опубликовано 23 декабря, 2014 Все. Всем спасибо, Разобрался. Я как понял, что можно и не ставить условные прыжки.. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 23 декабря, 2014 Поделиться Опубликовано 23 декабря, 2014 Проблема: как найти и вычеслить смещение. Опишите пожалуйста принцип пошагово. Можно в разных вариациях. Че, блин?Ну ты хоть теорию почитай. Или уроки посмотри у кодера или Михаила Ремизова (keng) - они понятно объясняют.В моем понимании - смещение это отклонение регистра от нуля на указанное количество байт. Смещение и адреса всегда в hex (16-ричная система исчистления).К примеру, из записи mov [eax+18],xmm0 мы можем видеть, что eax - регистр, а 18 - смещение.Однако, лайф хак: чтобы в анализе структур увидеть значение регистра уже со смещением - просто возьми начальный адрес регистра и прибавь смещение. К примеру, если адрес регистра eax - 485E24A5 то в анализе структур запиши 485E24A5+18, где 18 - наше смещение. Тогда нулевой адрес будет наш адрес, уже со смещением.Так же, из записи mov [eax+18],xmm0 мы можем видеть, что регистр xmm0 копируется в смещение [eax+18]. Т.е:На первом месте идет глагол. То, что мы делаем с инструкцией. К примеру: mov - записать (сдвинуть) смещение, dec - вычесть 1, inc - прибавить 1, cmp - сравнение (используется в бессмертии и OHK)На втором месте идет "подопытный". То, с чем мы проводим операцию. В нашем случае - это смещение. Однако "подопытным" может быть и адрес и многое другое.На третьем месте идет "виновник торжества". Объект нашего действия. Он будет выполнять действие, указанное на первом месте, с тем, что указано на втором месте. Формулировка мутная, но думаю ты поймешьP.s. Я вижу тут тебе уже помогли, но малоли... Может все же будет полезно. Ссылка на комментарий Поделиться на другие сайты Поделиться
Жажда Знаний Опубликовано 23 декабря, 2014 Автор Поделиться Опубликовано 23 декабря, 2014 Че, блин?Ну ты хоть теорию почитай. Или уроки посмотри у кодера или Михаила Ремизова (keng) - они понятно объясняют.В моем понимании - смещение это отклонение регистра от нуля на указанное количество байт. Смещение и адреса всегда в hex (16-ричная система исчистления).К примеру, из записи mov [eax+18],xmm0 мы можем видеть, что eax - регистр, а 18 - смещение.Однако, лайф хак: чтобы в анализе структур увидеть значение регистра уже со смещением - просто возьми начальный адрес регистра и прибавь смещение. К примеру, если адрес регистра eax - 485E24A5 то в анализе структур запиши 485E24A5+18, где 18 - наше смещение. Тогда нулевой адрес будет наш адрес, уже со смещением.Так же, из записи mov [eax+18],xmm0 мы можем видеть, что регистр xmm0 копируется в смещение [eax+18]. Т.е:На первом месте идет глагол. То, что мы делаем с инструкцией. К примеру: mov - записать (сдвинуть) смещение, dec - вычесть 1, inc - прибавить 1, cmp - сравнение (используется в бессмертии и OHK)На втором месте идет "подопытный". То, с чем мы проводим операцию. В нашем случае - это смещение. Однако "подопытным" может быть и адрес и многое другое.На третьем месте идет "виновник торжества". Объект нашего действия. Он будет выполнять действие, указанное на первом месте, с тем, что указано на втором месте. Формулировка мутная, но думаю ты поймешьP.s. Я вижу тут тебе уже помогли, но малоли... Может все же будет полезно. Благодарю за разьяснение, но это я все уже знал давно и нового не извлёк. Такое впечатление что ни кто не понимает о чем тут речь. Ни кто не помогал, разобрался сам. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения