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

[Fox Engine] Инициализация Lua виртуальной машины


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

Я мимо крокодил, потому что плаваю в этой тебе (сам почти не занимался таким), но попробую начать обсуждение.

Ты хочешь просто создать отдельный lua-state и работать в нем или всё же использовать уже существующий?

 

Потому что если хочешь использовать уже существующий, то самое главное - это найти уже существующий state (обычная структурка, если не ошибаюсь), а дальше просто передавать её в вызовы сишных lua-функций. В целом есть дока: https://www.lua.org/manual/5.3/manual.html#4

Но я бы еще порекоммендовал посмотреть код cheat-engine и его работы с lua, потому что это нагляднее :)

 

 

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

26 минут назад, srg91 сказал:

Ты хочешь просто создать отдельный lua-state и работать в нем или всё же использовать уже существующий?

 

Я хочу понять как виртуалка инициализируется, потому что в игре есть много строк, но в итоге найти вызов где начинает выполнение виртуалка не могу из-за цикличности, будто бы попал внутрь интерпретатора. Луа модулей не подгружается, в импорте тоже ничего нет от чего можно было оттолкнуться. Из всего что доступно это лишь адреса интерфейсов, которые выводят меня в цикл. Вот так, происходит взятие указатель на интерфейсы:

 

.rsrc:0000000143187C72                 lea     rcx, [r14+r14*2]     //индекс
.rsrc:0000000143187C76                 mov     rax, cs:array_0      //массив
.rsrc:0000000143187C7D                 mov     eax, [rax+rcx*8+0Ch] 

 

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

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

 

Я хочу понять как виртуалка инициализируется, потому что в игре есть много строк, но в итоге найти вызов где начинает выполнение виртуалка не могу из-за цикличности, будто бы попал внутрь интерпретатора. Луа модулей не подгружается, в импорте тоже ничего нет от чего можно было оттолкнуться.

 

спасибо за разъяснение, с такой магией вообще не сталкивался, поэтому отчаливаю

 

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

Так все, разобрался с этим lua, не нужно было лезть в vm вообще, оказалось там создается все так же как на обычном движке (ООП), просто все это не подписано и неизвестно как перебирать классы

Спойлер

поиск значений и брутфорс чтобы найти ближайшие адреса класс к найденному значению???

, и где они хранятся. Если в деталях, то после того как инициализировался интерфейс, надо обратится к адресу интерфейса на доступ, выбрать любую понравившуюся инструкцию и передать вызову функции по виртуальной таблицы любой индекс, так мы получим адрес на какой-то класс, после этого осталось просто найти в поиске значений, где используется этот адрес, так мы найдем к примеру все оружие на карте, обращаясь к классу CWeapon. А дальше, все как по учебнику, ищем какую-нибудь инструкцию работающую с массивами и использующую адрес оружия, и восстанавливаем смещения.

Инициализация класса:
 

Спойлер

image.thumb.png.91dbe8f7fd75913ca059f64d0c61adf6.png

 

Класс:

 

Спойлер

Untitled-1.thumb.png.c47c060891f6ee06946b9fbb28cd4756.png

 

Ах, да из проблем нашлось то, что наверное 60% функции декомпилируются не правильно, а от этого приходится декомпилировать все самому, снеговик и r2dec бесполезны.

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

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

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

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