partoftheworlD Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 Ни у кого не завалялось статейки об устройстве и инициализации виртуальной машины LUA внутри другой программы? Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 Я мимо крокодил, потому что плаваю в этой тебе (сам почти не занимался таким), но попробую начать обсуждение. Ты хочешь просто создать отдельный lua-state и работать в нем или всё же использовать уже существующий? Потому что если хочешь использовать уже существующий, то самое главное - это найти уже существующий state (обычная структурка, если не ошибаюсь), а дальше просто передавать её в вызовы сишных lua-функций. В целом есть дока: https://www.lua.org/manual/5.3/manual.html#4 Но я бы еще порекоммендовал посмотреть код cheat-engine и его работы с lua, потому что это нагляднее Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 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] Ссылка на комментарий Поделиться на другие сайты Поделиться
srg91 Опубликовано 26 ноября, 2018 Поделиться Опубликовано 26 ноября, 2018 1 минуту назад, partoftheworlD сказал: Я хочу понять как виртуалка инициализируется, потому что в игре есть много строк, но в итоге найти вызов где начинает выполнение виртуалка не могу из-за цикличности, будто бы попал внутрь интерпретатора. Луа модулей не подгружается, в импорте тоже ничего нет от чего можно было оттолкнуться. спасибо за разъяснение, с такой магией вообще не сталкивался, поэтому отчаливаю Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 1 минуту назад, srg91 сказал: спасибо за разъяснение, с такой магией вообще не сталкивался, поэтому отчаливаю Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 26 ноября, 2018 Автор Поделиться Опубликовано 26 ноября, 2018 Так все, разобрался с этим lua, не нужно было лезть в vm вообще, оказалось там создается все так же как на обычном движке (ООП), просто все это не подписано и неизвестно как перебирать классы Спойлер поиск значений и брутфорс чтобы найти ближайшие адреса класс к найденному значению??? , и где они хранятся. Если в деталях, то после того как инициализировался интерфейс, надо обратится к адресу интерфейса на доступ, выбрать любую понравившуюся инструкцию и передать вызову функции по виртуальной таблицы любой индекс, так мы получим адрес на какой-то класс, после этого осталось просто найти в поиске значений, где используется этот адрес, так мы найдем к примеру все оружие на карте, обращаясь к классу CWeapon. А дальше, все как по учебнику, ищем какую-нибудь инструкцию работающую с массивами и использующую адрес оружия, и восстанавливаем смещения. Инициализация класса: Спойлер Класс: Спойлер Ах, да из проблем нашлось то, что наверное 60% функции декомпилируются не правильно, а от этого приходится декомпилировать все самому, снеговик и r2dec бесполезны. 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения