Перейти к содержанию

[DarkDevotion] Поиск статичного указателя для камеры


Рекомендуемые сообщения

Комрады привет всем! Писал уже в дискорде, отправили создавать ветку на форуме. Проблема следующая:

 

Пытаюсь сделать свободную камеру в игре DarkDevotion. Нашел нужные значения, заменил nop-ами инструкции записывающие по этим значениям. Игра вроде ломается - но камеру можно двигать. Возникла большая проблема с поиском "статических" значений - делал как по видосу, находит не то что нужно.

 

Обе инструкции записывающие в нужное значение указывают на один и тот же адрес:

Спойлер

unknown.png?width=812&height=594

 

 

Прописал три указателя, на запись к ним никто не обращается.

Спойлер

unknown.png?width=812&height=700

 

На чтение по нижним двум инструкциям никто не обращается. На верхнюю, на чтение обращаются:

Спойлер

unknown.png?width=812&height=1137

 

И это значнение уже не находится в поиске.

 

Мне порекомендовали:

"Пробуй искать инструкции, читающие верхний найденный указатель, есть вероятность, что на этой инструкции можно будет сделать инъекцию кода, в которой в свою какую-то переменную загонять этот указатель"

 

Но не совсем понятно как это делать, что можно посмотреть, да и вообще это первая игрушка которую ломаю.

Буду рад любым понятным для масленка советам!

 

Игра ломается для нужд СНГ спидран комьюнити, в моем лице :)

Ссылка на комментарий
Поделиться на другие сайты

В 24.01.2020 в 15:05, ShaoShur сказал:

Комрады привет всем!

Привет!

видео (не свободная камера):}

 

скрипт:

Спойлер

{ Game   : DarkDevotion.exe
  Version: 
  Date   : 2020-01-25
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(COORD,DarkDevotion.exe,8B 4F 4C 8B 77 58) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(T_coord)
label(T_flag)
registersymbol(T_flag)
registersymbol(COORD)

newmem:
  cmp [T_flag],2
  je @f
  mov ecx,[edi+4C]
  cmp [T_flag],1
  jne code
  mov [T_flag],0
  mov [T_coord],ecx
  jmp code

@@:
  cmp [T_coord],0
  je code
  mov ecx,[T_coord]
  mov [edi+4C],ecx
  mov [T_flag],0

code:
  mov esi,[edi+58]
  jmp return

T_coord:
  dd 0
T_flag:
  dd 0

COORD:
  jmp newmem
  db 90
return:

[DISABLE]
COORD:
  db 8B 4F 4C 8B 77 58

unregistersymbol(T_flag)
unregistersymbol(COORD)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "DarkDevotion.exe"+74824

"DarkDevotion.exe"+747FB: 89 88 EC 00 00 00        -  mov [eax+000000EC],ecx
"DarkDevotion.exe"+74801: 0F B7 47 18              -  movzx eax,word ptr [edi+18]
"DarkDevotion.exe"+74805: 0D 00 00 F5 FF           -  or eax,FFF50000
"DarkDevotion.exe"+7480A: 50                       -  push eax
"DarkDevotion.exe"+7480B: 57                       -  push edi
"DarkDevotion.exe"+7480C: E8 7F 08 00 00           -  call DarkDevotion.exe+75090
"DarkDevotion.exe"+74811: A1 0C 3C 17 00           -  mov eax,[DarkDevotion.exe+103C0C]
"DarkDevotion.exe"+74816: 83 C4 08                 -  add esp,08
"DarkDevotion.exe"+74819: 89 B0 EC 00 00 00        -  mov [eax+000000EC],esi
"DarkDevotion.exe"+7481F: A1 0C 3C 17 00           -  mov eax,[DarkDevotion.exe+103C0C]
// ---------- INJECTING HERE ----------
"DarkDevotion.exe"+74824: 8B 4F 4C                 -  mov ecx,[edi+4C]
"DarkDevotion.exe"+74827: 8B 77 58                 -  mov esi,[edi+58]
// ---------- DONE INJECTING  ----------
"DarkDevotion.exe"+7482A: 8B 7F 5C                 -  mov edi,[edi+5C]
"DarkDevotion.exe"+7482D: 8B 90 A8 00 00 00        -  mov edx,[eax+000000A8]
"DarkDevotion.exe"+74833: 8B C1                    -  mov eax,ecx
"DarkDevotion.exe"+74835: 2B C6                    -  sub eax,esi
"DarkDevotion.exe"+74837: 89 4D F0                 -  mov [ebp-10],ecx
"DarkDevotion.exe"+7483A: 33 C9                    -  xor ecx,ecx
"DarkDevotion.exe"+7483C: 89 55 F8                 -  mov [ebp-08],edx
"DarkDevotion.exe"+7483F: 3B C2                    -  cmp eax,edx
"DarkDevotion.exe"+74841: 8B 45 FC                 -  mov eax,[ebp-04]
"DarkDevotion.exe"+74844: 0F 9D C1                 -  setge cl
}

 

табличку выложил - ТУТ

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Garik66 сказал:

Привет!

 

Фига! Круто! Сейчас буду разбираться) Спасибо!

 

Может быть нашел героя, но данное значение отвечало за камеру. Т.е. если я эти две инструкции заменяю nop-ами то изменяя найденное значение - камера отвязывалась от персонажа и показывала другие области экрана

Спойлер

https://sun9-1.userapi.com/c857016/v857016650/bd1ef/Ese7erJrG4Y.jpg

 

Изменено пользователем ShaoShur
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, ShaoShur сказал:

камера отвязывалась от персонажа и показывала другие области экрана

а как камерой управлял? a и d?

 

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Garik66 сказал:

а как камерой управлял? a и d?

 

Там прилепил картинку. Повесил на "стрелочки" горячие клавиши, увеличивающие и уменьшающие позицию на 150) Я пока даже не пытался в скрипты

 

Если нужно - могу скинуть примерные значения камеры, для легкого поиска. Но ближайшие пару дней буду разбираться с тем что вы нашли)

Изменено пользователем ShaoShur
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ShaoShur сказал:

Там прилепил картинку. Повесил на "стрелочки" горячие клавиши, увеличивающие и уменьшающие позицию на 150) Я пока даже не пытался в скрипты

Понятно, просто нашел твою инструкцию, чтобы не искать координаты камеры, но она работает с Кило адресов,
А как искал координаты камеры?

Ссылка на комментарий
Поделиться на другие сайты

Только что, Garik66 сказал:

Понятно, просто нашел твою инструкцию, чтобы не искать координаты камеры, но она работает с Кило адресов,
А как искал координаты камеры?

 

Долго и муторно. Мол изменилось/не изменилось. Получилось 1300 значений. Ну и по половине отсеивал "замораживая" адреса) Муторно

Ссылка на комментарий
Поделиться на другие сайты

6 минут назад, ShaoShur сказал:

 

 Долго и муторно. Мол изменилось/не изменилось. Получилось 1300 значений. Ну и по половине отсеивал "замораживая" адреса) Муторно

Как в CE это делается понятно, что в игре делал?

Ссылка на комментарий
Поделиться на другие сайты

20 минут назад, Garik66 сказал:

Как в CE это делается понятно, что в игре делал?

 

Сдвигал камеру в правую сторону персонажа, при переключении через alt+tab камера фиксировалась в этом положении. Искал увеличенное значение. Потом центрировал на персонаже, и сдвигал влево.

Камера начинает "двигаться" если двигать мышку (право-лево), присесть - сдвигается в низ. Жать "W" - сдвигается вверх.

 

Спойлер

https://sun9-11.userapi.com/c857016/v857016650/bd2b1/x4Jl5V2ftAE.jpg

 

Это стартовая локация после "обучения". Если сидеть на лестнице, отцентировав камеру значение будет (по горизонтали) ~6990-7000. Максимальный сдвиг вправо (мышью) ~7329, влево ~6663.

По веритикали - если стоять где персонаж на картинке - 4593. Смотреть вверх - 4449, в низ 4910.

 

Как то так.

Изменено пользователем ShaoShur
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ShaoShur сказал:

 

Сдвигал камеру в правую сторону персонажа, при переключении через alt+tab камера фиксировалась в этом положении. Искал увеличенное значение. Потом центрировал на персонаже, и сдвигал влево.

Камера начинает "двигаться" если двигать мышку (право-лево), присесть - сдвигается в низ. Жать "W" - сдвигается вверх

алт таб - понятно.

Попробую помочь

 

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, Garik66 сказал:

черт долго 

 

Спойлер

https://sun9-23.userapi.com/c855136/v855136073/1da0ce/rHbO2RxDGaE.jpg

Это локация где вы телепортировались. Значение по горизонтали. Само значение очень близко к координатам (в плане адреса) да и по значению +- рядом.

Изменено пользователем ShaoShur
Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ShaoShur сказал:

Это

Да нашел уже

Все инструкции работают с большим количеством адресов = думаю пока как отделить.

Ссылка на комментарий
Поделиться на другие сайты

В 24.01.2020 в 15:05, ShaoShur сказал:

Пытаюсь сделать свободную камеру в игре DarkDevotion.

Видео: 

 

Скрипт "камера":

Спойлер

{ Game   : DarkDevotion.exe
  Version: 
  Date   : 2020-01-25
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(COORD_CAM,DarkDevotion.exe,8B 50 4C 8B 81 2C 05 00 00) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(p_CAM)
registersymbol(p_CAM)
registersymbol(COORD_CAM)

newmem:
  cmp [eax],80000091
  jne code
  lea edx,[eax+4C]
  mov [p_CAM],edx

code:
  mov edx,[eax+4C]
  mov eax,[ecx+0000052C]
  jmp return

p_CAM:
  dd 0

COORD_CAM:
  jmp newmem
  db 90 90 90 90
return:

[DISABLE]
COORD_CAM:
  db 8B 50 4C 8B 81 2C 05 00 00

unregistersymbol(CAM_flag)
unregistersymbol(COORD_CAM)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "DarkDevotion.exe"+23666

"DarkDevotion.exe"+23636: 8B 89 30 05 00 00     -  mov ecx,[ecx+00000530]
"DarkDevotion.exe"+2363C: E8 BF 44 05 00        -  call DarkDevotion.exe+77B00
"DarkDevotion.exe"+23641: 8B 0D 0C 3C 17 00     -  mov ecx,[DarkDevotion.exe+103C0C]
"DarkDevotion.exe"+23647: 85 C0                 -  test eax,eax
"DarkDevotion.exe"+23649: 75 1B                 -  jne DarkDevotion.exe+23666
"DarkDevotion.exe"+2364B: 8B 81 2C 05 00 00     -  mov eax,[ecx+0000052C]
"DarkDevotion.exe"+23651: 8B 84 81 34 05 00 00  -  mov eax,[ecx+eax*4+00000534]
"DarkDevotion.exe"+23658: C7 40 08 00 00 00 00  -  mov [eax+08],00000000
"DarkDevotion.exe"+2365F: C7 00 00 00 00 00     -  mov [eax],00000000
"DarkDevotion.exe"+23665: C3                    -  ret 
// ---------- INJECTING HERE ----------
"DarkDevotion.exe"+23666: 8B 50 4C              -  mov edx,[eax+4C]
"DarkDevotion.exe"+23669: 8B 81 2C 05 00 00     -  mov eax,[ecx+0000052C]
// ---------- DONE INJECTING  ----------
"DarkDevotion.exe"+2366F: 8B 84 81 34 05 00 00  -  mov eax,[ecx+eax*4+00000534]
"DarkDevotion.exe"+23676: 89 50 08              -  mov [eax+08],edx
"DarkDevotion.exe"+23679: C7 00 00 00 00 00     -  mov [eax],00000000
"DarkDevotion.exe"+2367F: C3                    -  ret 
"DarkDevotion.exe"+23680: 8B 0D 0C 3C 17 00     -  mov ecx,[DarkDevotion.exe+103C0C]
"DarkDevotion.exe"+23686: 8B 89 30 05 00 00     -  mov ecx,[ecx+00000530]
"DarkDevotion.exe"+2368C: E8 6F 44 05 00        -  call DarkDevotion.exe+77B00
"DarkDevotion.exe"+23691: 8B 0D 0C 3C 17 00     -  mov ecx,[DarkDevotion.exe+103C0C]
"DarkDevotion.exe"+23697: 85 C0                 -  test eax,eax
"DarkDevotion.exe"+23699: 75 1B                 -  jne DarkDevotion.exe+236B6
}

 

Скрипт "Привязка камеры к Герою":

Спойлер

{ Game   : DarkDevotion.exe
  Version: 
  Date   : 2020-01-25
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(CAM1,DarkDevotion.exe,89 7E 4C C7 86 6A 01 00 00 FF FF FF FF) // should be unique
registersymbol(CAM1)
CAM1:
  db 90 90 90

[DISABLE]
CAM1:
  db 89 7E 4C

unregistersymbol(CAM1)

{
// ORIGINAL CODE - INJECTION POINT: "DarkDevotion.exe"+1E4A2

"DarkDevotion.exe"+1E483: F2 0F 2C 78 08                 -  cvttsd2si edi,[eax+08]
"DarkDevotion.exe"+1E488: EB 03                          -  jmp DarkDevotion.exe+1E48D
"DarkDevotion.exe"+1E48A: 8B 78 08                       -  mov edi,[eax+08]
"DarkDevotion.exe"+1E48D: 8B 86 CC 00 00 00              -  mov eax,[esi+000000CC]
"DarkDevotion.exe"+1E493: 83 F8 05                       -  cmp eax,05
"DarkDevotion.exe"+1E496: 74 64                          -  je DarkDevotion.exe+1E4FC
"DarkDevotion.exe"+1E498: 83 F8 0E                       -  cmp eax,0E
"DarkDevotion.exe"+1E49B: 74 2B                          -  je DarkDevotion.exe+1E4C8
"DarkDevotion.exe"+1E49D: 39 7E 4C                       -  cmp [esi+4C],edi
"DarkDevotion.exe"+1E4A0: 74 17                          -  je DarkDevotion.exe+1E4B9
// ---------- INJECTING HERE ----------
"DarkDevotion.exe"+1E4A2: 89 7E 4C                       -  mov [esi+4C],edi
"DarkDevotion.exe"+1E4A5: C7 86 6A 01 00 00 FF FF FF FF  -  mov [esi+0000016A],FFFFFFFF
// ---------- DONE INJECTING  ----------
"DarkDevotion.exe"+1E4AF: C7 86 FC 00 00 00 01 00 00 00  -  mov [esi+000000FC],00000001
"DarkDevotion.exe"+1E4B9: 5F                             -  pop edi
"DarkDevotion.exe"+1E4BA: C7 86 00 01 00 00 01 00 00 00  -  mov [esi+00000100],00000001
"DarkDevotion.exe"+1E4C4: 5E                             -  pop esi
"DarkDevotion.exe"+1E4C5: 5B                             -  pop ebx
"DarkDevotion.exe"+1E4C6: 5D                             -  pop ebp
"DarkDevotion.exe"+1E4C7: C3                             -  ret 
"DarkDevotion.exe"+1E4C8: 8B 8E D0 00 00 00              -  mov ecx,[esi+000000D0]
"DarkDevotion.exe"+1E4CE: 85 C9                          -  test ecx,ecx
"DarkDevotion.exe"+1E4D0: 74 71                          -  je DarkDevotion.exe+1E543
}

 

табличку выложил - ТУТ

 

Ссылка на комментарий
Поделиться на другие сайты

 

9 минут назад, Garik66 сказал:

Видео: 

 

Скрипт "камера":

Скрипт "Привязка камеры к Герою":

 

 

 

Офигенно! Кстати, скрипт с телепортом можно оставить (я себе уже скопировал, но для будущих поколений). Он очень полезен (там есть баг с камнем портала, нашил когда спидранили, при смещении по горизонтали в момент входа в портал возвращения домой - все твои вещи сохраняются).

 

А можете в двух словах (если возможно)) описать как вы искали указатели статические? Я пока не совсем понимаю как у вас все это получилось. Выглядит очень круто, но как именно получилось выцепить статические указатель - не понятно. Т.е. я повторить такое сам не смогу) Только в скриптах покопаться

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, ShaoShur сказал:

Офигенно!

1. Цитировать весь пост не нужно - на первый раз устное предупреждение - перечитай правила форума.

2. Я всю табличку выложил телепорт там есть.

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, ShaoShur сказал:

А можете в двух словах (если возможно)) описать как вы искали указатели статические?

там нет статических указателей это на инструкциях скрипты - все это есть в видео уроках и статьях.

Ссылка на комментарий
Поделиться на другие сайты

14 минут назад, Garik66 сказал:

там нет статических указателей это на инструкциях скрипты - все это есть в видео уроках и статьях.

 

Понял, буду разбираться, спасибо!

Ссылка на комментарий
Поделиться на другие сайты

50 минут назад, Garik66 сказал:

А фильтр то у тебя работает?
Скрипт на камеру? 

Камера фиксируется при клике на привязку. Немного ломается интерфейс и управление.

 

Так выглядит указатель. Влево/право тоже не работеат.

Спойлер

https://sun9-42.userapi.com/c205828/v205828804/4b17c/cQm2Fq7PVAI.jpg

 

Ну мне чтобы разобраться что происходит необходимо куча времени))

 

p.s. Кстати, каким то образом "привязка камеры к герою" убирает темный экран. Зону, которая делает все мрачным.

Изменено пользователем ShaoShur
Ссылка на комментарий
Поделиться на другие сайты

3 минуты назад, ShaoShur сказал:

Камера

Нашел четыре указателя (с самым меньшим количеством уровней):

Проверь - у тебя работают?
 

DarkDevotion.CT

Ссылка на комментарий
Поделиться на другие сайты

5 минут назад, Garik66 сказал:

Проверь - у тебя работают?

Не  а, все так же. А вы на какой версии запускаете? М.б. версию игру поменять, проверить

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.