Сейчас на форуме: igorcauret, Rio (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Помогите найти адрес переменной в игре "Скайрим" |
Посл.ответ | Сообщение |
|
Создано: 06 апреля 2015 16:25 · Личное сообщение · #1 Добрый день. Нужна помощь в анализе кода игры. В первую очередь хотелось бы узнать у знающих людей сам алгоритм анализа и какими инструментами пользоваться. С чего нужно начать в первую очередь. Есть игрушка - Скайрим. Для неё мод-мейкерами написана специальная программа, называемая SKSE, которая позволяет подгружать свои DLL-ки в игру, добавляя таким образом новые функции или меняя поведение самого движка. У меня сейчас есть такая DLL-ка, которая меняет скорость падения персонажа (99,9% её кода не мои, я просто случайно наткнулся на исходники, делающие почти то, что мне было нужно, и вставил там несколько строк своего кода). Моя цель: прочитать в своей DLL переменную самой игры, и в зависимости от её значения менять скорость падения. Задача же состоит в том, чтобы найти адрес этой переменной, имеющей имя "fJumpHeightMin", который можно было бы использовать в качестве указателя из моей DLL, для получения её значения. Не бейте больно сразу, описал как мог. Думаю в данном случае ЕХЕ-шник Скайрима прикладывать не нужно. Просто я раньше никогда не занимался анализом других программ, но сейчас очень захотелось в это вникнуть. ![]() |
|
Создано: 06 апреля 2015 17:04 · Личное сообщение · #2 |
|
Создано: 06 апреля 2015 17:06 · Личное сообщение · #3 |
|
Создано: 06 апреля 2015 17:08 · Личное сообщение · #4 |
|
Создано: 06 апреля 2015 19:47 · Поправил: Anton01 · Личное сообщение · #5 reversecode: Программировать умею, но чужие программки практически не разбирал. Когда то пробовал SoftIce осваивать, но как то не пригодилось и забылось. unknownproject: CheatEngine это типа ArtMoney ? А найденный адрес можно будет прямо указать в своей DLL ? В моём случае значение этой переменной не меняется динамически, но я её могу поменять игровым скриптом. Что собственно и делаю. А моя DLL-ка должна отследить это изменение и включить пониженную скорость падения (типо уменьшения гравитации). reversecode: Не не не, переменная храниться в коде игры (TesV.exe). Я сейчас открыл этот ЕХЕ файл просмотрщиком и по поиску нашёл её имя внутри. Будет просто чудесно, если IDA сможет сразу, по имени, найти мне её адрес. ![]() |
|
Создано: 06 апреля 2015 19:59 · Личное сообщение · #6 |
|
Создано: 06 апреля 2015 20:55 · Поправил: unknownproject · Личное сообщение · #7 Anton01 пишет: CheatEngine это типа ArtMoney ? В разы лучше и бесплатный абсолютно + имеется встроенный дизассемблер, анализатор структур и скриптовый язык.Есть поиск многоуровневых указателелей, возможность установки бряка на доступ или запись (отладочные функции). А вообще у скайрима модкит есть.Все никак не дойдут руки ни пройти игру, ни глянусь, что он из себя представляет. ----- TEST YOUR MIGHT ![]() |
|
Создано: 07 апреля 2015 13:17 · Личное сообщение · #8 |
|
Создано: 07 апреля 2015 13:38 · Поправил: unknownproject · Личное сообщение · #9 |
|
Создано: 07 апреля 2015 14:28 · Личное сообщение · #10 unknownproject пишет: Все никак не дойдут руки ни пройти игру, ни глянусь, что он из себя представляет. А что вы понимаете под пройти что-то с серии TES? ))) Там же есть простые бесконечные задания. Я в свое время наиграл более 300 часов в скайрим, основные сюжетные линии проходятся быстро, но я их откладывал на потом и проходил минорные квесты. После того как больше не мог найти новых квестов тупо бегал и открывал всю карту за это и люблю игры с большим открытым миром. ))) ----- Лучше быть одиноким, но свободным © $me ![]() |
|
Создано: 07 апреля 2015 16:09 · Поправил: Kindly · Личное сообщение · #11 |
|
Создано: 08 апреля 2015 00:09 · Личное сообщение · #12 unknownproject Вы имени в виду переменную ? (я переменную искал). Но мне нужно получить значение этой переменной в своей DLL, подгружаемой через SKSE к "TesV.exe", тут Creation Kit не помощник (или я чего то не понимаю ?). Я тут почитал немного, выходит план моих действий должен быть таким: 1. Запустить CheatEngine и найти значение, которое хранит эта переменная (должно быть 300.0f) 2. Полученный адрес памяти записать (например адрес=0х112233), и потом обратиться к этой памяти из своей DLL следующим образом: float JumpHeight = (float *)(0х112233). Что скажете, я на верном пути ? ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Помогите найти адрес переменной в игре "Скайрим" |