Исходник ScriptEmu - Деобфускация луа скриптов путём трассировки.

Разработчик
Разработчик
Статус
Оффлайн
Регистрация
1 Сен 2018
Сообщения
1,665
Реакции
923
Всем привет, недавно я вспомнил о своей старой идее бороться с обфускацией в скриптах с помощью эмуляции и трассировки скрипта, и решил написать простенький proof of concept, поэтому представляю вам dev-build.
1674313327823.png

Что такое ScriptEmu?
Это программа, или даже библиотека которая полностью воссоздает среду чита, и позволяет трассировать каждую функцию, и выполнять каллбеки.

Зачем это нужно?
- Борьба с обфускацией в скриптах.
- Отладка ваших скриптов с максимально экстримальными значениями, которые сложно добиться в реальных условиях
- Проверка скриптов без запуска их в чите
есть и другие варианты для использования, всё зависит от вашей фантазии.

Пожалуйста, авторизуйтесь для просмотра ссылки.


Спасибо за моральную поддержку
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Есть несколько проблем:
1) Ты забыл подключить инклюды
2) Эта версия является сырым PoC, и не поддерживает полную эмуляцию поэтому она и называется дев версией, стоит подождать некоторое время пока я её допилю до окончательной версии ( около 3-7 дней)
 
Последнее редактирование:
Now this is very nice, but how do you deal with FFI stuff?
So far there is no support for this. as well as ideas on how to implement it, although it is possible to just rebuild the entire ffi for this, but it is too early to think about this.

А также вышло обновление:
- Добавил таблицу рендера
- Добавил колор
- Подправил структуру эмулятора
- Теперь оно даже работает...

Пример трассировки:
Lua:
Код:
Expand Collapse Copy
local function on_paint()
    renderer.rect_filled_fade(vec2_t.new(5, 5), vec2_t.new(20, 20), color_t.new(255, 0, 0, 255), color_t.new(255, 0, 0, 255), color_t.new(0, 0, 0, 255), color_t.new(0, 0, 0, 255))
end

client.register_callback("paint", on_paint)
Результат трассировки:

C++:
Expand Collapse Copy
    ScriptEmu alpha
Trace info | Event: Main | Client::RegisterCallBack ( paint )
Trace info | Event: paint | Render::RenderRectFilledFade ( Vector2(5.000000 , 5.000000), Vector2(20.000000 , 20.000000), Color(255.000000 , 0.000000 , 0.000000 , 255.000000), Color(255.000000 , 0.000000 , 0.000000 , 255.000000), Color(0.000000 , 0.000000 , 0.000000 , 255.000000), Color(0.000000 , 0.000000 , 0.000000 , 255.000000) )
 
Еще одно обновление, что было добавлено:
- добавил рейджбот таблицу
- добавил сурс утилс таблицу
- добавил енджин таблицу
- добавил плеер инфо юзертайп с параметрами как мета таблица
что-то еще, но я забыл

Еще в голову пришла идея в будущем расширить это под другие п2с, то есть допилить до полноценного нормального решения.

Опять пример трейсера, но с мета таблицами:
Lua:

Код:
Expand Collapse Copy
local local_info = engine.get_player_info(engine.get_local_player())
local shit = info.steam_id64

local_info.name = shit

Итог трейсинга:

C++:
Expand Collapse Copy
ScriptEmu alpha
Trace info | Event: Main | Engine::GetLocalPlayer()
Trace info | Event: Main | Engine::GetPlayerInfo ( 1 )
Trace info | Event: Main | PlayerInfo.Get(steam_id64)
Trace info | Event: Main | PlayerInfo.name = "black"
 
Залил решающий апдейт, который уже может нормально позволить протестировать этот PoC.
Что добавлено?
Usertypes:
- Game event
- UserCmd
- Convar
- Entity
- ViewSetup
- ShotInfo
- Trace
Tables:
- Entity List
- ClientState
- GlobalVars
- Trace
Добавлена поддержка всех каллбеков ( хотя путём костыля )

Чего еще нету?
- FFI support
- Поддержки UI таблицы ( она будет сделана немного позже, может даже в течении этого дня )
- Прохождение через все эвенты ( именно игровых )
Ну и стоит учитывать что это пруф оф концепт, и не является эталоном качества.

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

Пожалуйста, авторизуйтесь для просмотра ссылки.
 
На
Пожалуйста, авторизуйтесь для просмотра ссылки.
доступна версия с пользовательским интерфейсом. Для запуска трассировки просто перекиньте .lua файл в окно приложения.

1674911674435.png


Скачать скомпилированный исходник теперь можно на странице релизов на Github

Пожалуйста, авторизуйтесь для просмотра ссылки.
|
Пожалуйста, авторизуйтесь для просмотра ссылки.


Если есть предложения по улучшению или вам чего-то не хватает в интерфейсе - пишите сюда.
 
Назад
Сверху Снизу