![]() |
eXeL@B —› Вопросы новичков —› Поиск угла поворота |
Посл.ответ | Сообщение |
|
Создано: 27 марта 2013 22:26 · Поправил: Jimbo-Leps · Личное сообщение · #1 Добрый день в игре есть статистика выводится угол поворота персонажа. При смене угла в игре персонаж поворачивается в соответствующую сторону. Теперь проблема. К примеру персонаж у нас повернут на 180 градусов(в игре отображается так) Ищу диапазон значений от 170 до 190 типа float Нашлось 149 значений,пошел в игру сделал чтобы у персонажа был угол поворота 20 градусов. Отсеивал так же по диапазону 0 до 50 типа float,нашлось 0 значений ,и всегда этот 0 ,сколько бы не искал ,сколько бы не отсеивал,по всем типам данных искал,но не находит и все. Подскажите что я делаю не так?как можно найти? Предположил что в программе фактическое значение угла представлена в радианах,повезло это оказалось так ,НО! при смене значения оно не сменяется,и не замораживается и вообще ничего. ![]() |
|
Создано: 27 марта 2013 22:44 · Поправил: neomant · Личное сообщение · #2 ArtMoney? Совершенно !TRUE подход. Я бы начал с конца, а точнее с отлова вывода значения угла на экран, далее определение типа переменной и её расчёт. ----- Следуй за белым кроликом ![]() |
|
Создано: 27 марта 2013 23:54 · Личное сообщение · #3 |
|
Создано: 28 марта 2013 02:00 · Личное сообщение · #4 Jimbo-Leps Та же хрень. Во-первых, не факт, что float. Может быть и инт и дабл и еще что угодно. Во-вторых, диапазон изменений тоже может быть непредсказуемым. Хотя, обычно, это радианы. В-третьих, он может каждый раз считаться в новой памяти. Сомнительно но не невозможно. В-четвертых, действительно, смотри, где выводится на экран. От этого и пляши. neomant Иногда, кстати, артмани отлично помогает. Вообще, инструмент неплохой и довольно умный, с различными способами применения. ![]() |
|
Создано: 28 марта 2013 05:00 · Поправил: Модератор · Личное сообщение · #5 Пошел по вашему пути куря от текста, Но мой ассемблер в крэкинге еще очень плох,помогите пожалуйста разобрать. Нашелся статический адрес 10139981.применил к нему find what out access to this addres ,нашлась одна инструкция, 10085888 - 72 2A - jb bCPoint::operator=+7DF7D А вот я раскрыл эту инструкцию 10085882 - 83 E2 03 - and edx,03 10085885 - 83 F9 08 - cmp ecx,08 10085888 - 72 2A - jb 10000000+7DF7D << 1008588A - F3 A5 - repe movsd 1008588C - FF 24 95 A4590810 - jmp dword ptr [edx*4+10000000+7E06D] EAX=101399A9 EBX=0000015E ECX=00000009 EDX=00000001 ESI=10139984 EDI=1EFABB34 ESP=00CEEC68 EBP=00CEEC70 EIP=1008588A я понимаю ,что эта инструкция означает прыжок по адресу ,я прыгаю. вот какая инструкция для этого адреса jmp dword ptr [ecx*4+10085938] по адресу 10085938 стоит опкод wait я так понимаю что я не правильно перешел на 10085938,потому что адрес на который я перешел должен быть таким ,10085938+4*ecx. То есть мне нужно сейчас найти ecx умножить его на 4 и прибавить 10085938 и прыгнуть на адрес который у меня получился? подскажите пожалуйста Посчитал адрес учитывая ecx*4 адрес получился 10085940 по этому адресу вот такая инструкция sbb byte ptr [ecx+08],10 и тут я уже запутался ,объясните что дальше пожалуйста tomac я уже написал что любой тип данных не находит) да и если угол представлен в радианах то тип инт для этой ячейки будет глупым предположением,по тому что радианы от -3.14 до 3.14 либо double либо float ,но не как не инт ![]() |
|
Создано: 28 марта 2013 06:15 · Личное сообщение · #6 Нет все не то ,перезапустил игру опять применил к этому адресу find what out access to this addres в итоге есть 2 инструкции 1: 10092128 - 78 0B - js 10092135 1009212A - 8B 11 - mov edx,[ecx] 1009212C - 88 02 - mov [edx],al << 1009212E - FF 01 - inc [ecx] 10092130 - 0FB6 C0 - movzx eax,al EAX=00000020 EBX=307BB00E ECX=00CEEE2C EDX=10139981 ESI=00CEEBDC EDI=00CEEE94 ESP=00CEEB80 EBP=00CEEC10 EIP=1009212E 2 1008621C - 78 07 - js 10086225 1008621E - 8B 45 E0 - mov eax,[ebp-20] 10086221 - 88 18 - mov [eax],bl << 10086223 - EB 0C - jmp 10086231 10086225 - 8D 45 E0 - lea eax,[ebp-20] EAX=10139983 EBX=00000000 ECX=9025310F EDX=10139982 ESI=10139958 EDI=0000002B ESP=00CEEE20 EBP=00CEEE4C EIP=10086223 в edx если я не ошибаюсь хранится символьный тип,а в eax цифры ![]() |
|
Создано: 28 марта 2013 06:20 · Поправил: Модератор · Личное сообщение · #7 Кажется я приблежаюсь к цели, Искал какой адрес хранит адрес 10139981 таки нашел этот адрес 035CF868. теперь я понимаю нужно юзнуть на этот адрес find what out access to this addres юзнул ииии ничего( Кароче в итоге нашел инструкцию mov eax,[esi+ecx*4-0C] кто знает что в этом выражении mov eax,[esi+ecx*4-0C] означает ecx*4-0C адрес ecx умножить на 4 и вычесть из него C ,эта четверка в какой системе счисления представлена? Наверное я что-то не то делаю,объясните пожалуйста ,если можно на примере,как плясать от текста? что- то мне это подсказывает,что это перевод из строки в число ![]() |
![]() Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 28 марта 2013 07:34 · Личное сообщение · #8 Jimbo-Leps Ну и постов ты наплодил - Archer будет недоволен. 10085938+4*ecx - это оптимизированный оператор switch где регистр ecx - целое число, кратное 3 (AND ECX, 03 ?) Jimbo-Leps пишет: Кароче в итоге нашел инструкцию mov eax,[esi+ecx*4-0C] что- то мне это подсказывает,что это перевод из строки в число одной инструкцией невозможно перевести число в строку, должен быть цикл. В с++ за перевод отвечает оператор ltoa(itoa, xtoa) Jimbo-Leps пишет: адрес ecx умножить на 4 и вычесть из него C ,эта четверка в какой системе счисления представлена 4 она и в Африке 4. esi - указатель начало какой-то структуры, ecx*4 - значит прыгаем по DWORD(4 байтам), и смещаемся ниже еще на 0xC(в десятичной 12) байт. Jimbo-Leps пишет: как плясать от текста поставить memory breakpoint на чтение/запись и ловить рыбку ![]() |
|
Создано: 28 марта 2013 07:37 · Поправил: Модератор · Личное сообщение · #9 Искал даже так в CE через значение изменилось/не изменилось вы не поверите ничего не нашлось!что за фигня! Хмм искал искал и нашел большое количество адресов которые меняются при повороте персонажа ,от -1 до 1 ,вспомним геометрию,что может менятся от -1 до 1 ,правильно косинусы синусы и прочая белебирда) наконец то От модератора: Это не чЯтик, пользуйся кнопкой "Правка", не создавай сообщения подряд. ![]() |
|
Создано: 23 мая 2013 19:02 · Поправил: sigil · Личное сообщение · #10 Занопь мув и посмотри, будет ли работать поворот или нет. Всю ветку не читал, т.ч. возможно повторю что говорили раньше: 1. Выбираешь самую пустую карту, где нет NPC. Музыка отключена, звук и все опции отключены. Всё, что можно, ты отключил. 2. делаешь 2 дампа памяти с минимальным интервалом времени. Всё что ты сделал за этот интервал времени, это немного повернул героя. 3. Сравниваешь дампы, находишь изменённые переменные. Похоже, это ты уже сделал. 4. Встаёшь в отладчике по команде BPMB W на каждый адрес. 5. Поворачиваешь персонажа и радуешься! P.S. На этом работа не закончена, переменных может быть несколько. P.P.S. Если не дофига. Изображение твоего героя изменится, а значит изменится видеопамять и возможно какие-то структуры из движка рендеринга. Также, надо будет отсеивать те брэкпоинты, которые будут попадать в сторонние библиотеки. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Поиск угла поворота |