Сейчас на форуме: asfa, Rio, _MBK_, Adler (+8 невидимых)

 eXeL@B —› Вопросы новичков —› Поиск угла поворота
Посл.ответ Сообщение

Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2013 22:26 · Поправил: Jimbo-Leps
· Личное сообщение · #1

Добрый день в игре есть статистика выводится угол поворота персонажа.
При смене угла в игре персонаж поворачивается в соответствующую сторону.
Теперь проблема.
К примеру персонаж у нас повернут на 180 градусов(в игре отображается так)
Ищу диапазон значений от 170 до 190 типа float
Нашлось 149 значений,пошел в игру сделал чтобы у персонажа был угол поворота 20 градусов.
Отсеивал так же по диапазону 0 до 50 типа float,нашлось 0 значений ,и всегда этот 0 ,сколько бы не искал ,сколько бы не отсеивал,по всем типам данных искал,но не находит и все.
Подскажите что я делаю не так?как можно найти?
Предположил что в программе фактическое значение угла представлена в радианах,повезло это оказалось так ,НО! при смене значения оно не сменяется,и не замораживается и вообще ничего.




Ранг: 164.6 (ветеран), 65thx
Активность: 0.120
Статус: Участник
Волшебник

Создано: 27 марта 2013 22:44 · Поправил: neomant
· Личное сообщение · #2

ArtMoney? Совершенно !TRUE подход. Я бы начал с конца, а точнее с отлова вывода значения угла на экран, далее определение типа переменной и её расчёт.

-----
Следуй за белым кроликом


| Сообщение посчитали полезным: Jimbo-Leps

Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 27 марта 2013 23:54
· Личное сообщение · #3

нет CE



Ранг: 65.3 (постоянный), 10thx
Активность: 0.020
Статус: Участник

Создано: 28 марта 2013 02:00
· Личное сообщение · #4

Jimbo-Leps
Та же хрень.
Во-первых, не факт, что float. Может быть и инт и дабл и еще что угодно.
Во-вторых, диапазон изменений тоже может быть непредсказуемым. Хотя, обычно, это радианы.
В-третьих, он может каждый раз считаться в новой памяти. Сомнительно но не невозможно.
В-четвертых, действительно, смотри, где выводится на экран. От этого и пляши.

neomant
Иногда, кстати, артмани отлично помогает. Вообще, инструмент неплохой и довольно умный, с различными способами применения.

| Сообщение посчитали полезным: Jimbo-Leps

Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 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 ,но не как не инт



Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 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 цифры



Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 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.460.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 на чтение/запись и ловить рыбку

| Сообщение посчитали полезным: Jimbo-Leps

Ранг: -5.0 (нарушитель)
Активность: 0=0
Статус: Участник

Создано: 28 марта 2013 07:37 · Поправил: Модератор
· Личное сообщение · #9

Искал даже так в CE через значение изменилось/не изменилось вы не поверите ничего не нашлось!что за фигня!
Хмм искал искал и нашел большое количество адресов которые меняются при повороте персонажа ,от -1 до 1 ,вспомним геометрию,что может менятся от -1 до 1 ,правильно косинусы синусы и прочая белебирда) наконец то
От модератора: Это не чЯтик, пользуйся кнопкой "Правка", не создавай сообщения подряд.



Ранг: -2.1 (нарушитель)
Активность: 0.010
Статус: Участник

Создано: 23 мая 2013 19:02 · Поправил: sigil
· Личное сообщение · #10

Занопь мув и посмотри, будет ли работать поворот или нет. Всю ветку не читал, т.ч. возможно повторю что говорили раньше:

1. Выбираешь самую пустую карту, где нет NPC. Музыка отключена, звук и все опции отключены. Всё, что можно, ты отключил.
2. делаешь 2 дампа памяти с минимальным интервалом времени. Всё что ты сделал за этот интервал времени, это немного повернул героя.
3. Сравниваешь дампы, находишь изменённые переменные. Похоже, это ты уже сделал.
4. Встаёшь в отладчике по команде BPMB W на каждый адрес.
5. Поворачиваешь персонажа и радуешься!

P.S. На этом работа не закончена, переменных может быть несколько.

P.P.S. Если не дофига. Изображение твоего героя изменится, а значит изменится видеопамять и возможно какие-то структуры из движка рендеринга. Также, надо будет отсеивать те брэкпоинты, которые будут попадать в сторонние библиотеки.


 eXeL@B —› Вопросы новичков —› Поиск угла поворота
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати