шифрование lua

pon4ik1811

Новичок
Автор темы
16
0
Версия MoonLoader
.026-beta
Я понимаю что вопрос возможно тупой, но все же...

Вот смотрите, я хочу сделать автоматическую авторизацию. Пароль я храню в .ini-файле (не будем вдаваться в подробности его структуры)
В Imgui окне я просто отрисовываю Checkbox и InputText. Соответственно пароль из поля мне надо зашифровать и записать в инишник. При авторизации надо его считать из инишника ввести в диалог авторизации. И по хорошему закинуть в переменную чтобы потом если что редачить

Что я имею:
directory = "cfg.ini"
cfg = inicfg.load(inicfg.load({
    settings = {
        passacc = '',
        autojoin = false
    }
}, directory))
inicfg.save(cfg, directory)

local autojoin = imgui.ImBool(cfg.settings.autojoin)
local pass_acc = imgui.ImBuffer(u8(cfg.settings.passacc), 256)

function imgui.OnDrawFrame()
    if settings_script.v then
        sw, sh = getScreenResolution()
        btn_size = imgui.ImVec2(-0.1, 20)
        imgui.SetNextWindowPos(imgui.ImVec2(sw / 2, sh / 2), imgui.Cond.FirstUseEver, imgui.ImVec2(0.5, 0.5))
        imgui.SetNextWindowSize(imgui.ImVec2(650, 450), imgui.Cond.FirstUseEver)
        imgui.Begin(u8('Основные настройки скрипта'), settings_script, imgui.WindowFlags.NoCollapse + imgui.WindowFlags.NoResize)

        imgui.Separator()
        imgui.AlignTextToFramePadding();
        imgui.Checkbox("##AutoJoin2", autojoin)
        imgui.SameLine(30);
        imgui.Text(u8'Автоввод пароля');       
            
        if autojoin.v then
            imgui.AlignTextToFramePadding();
            imgui.Text(u8'Пароль от аккаунта');
            imgui.SameLine(135);
            imgui.InputText('##Text2', pass_acc, imgui.InputTextFlags.Password)
            --вот тут должна быть кнопка для сохранения которая запишет эти данные в ini в зашифрованном виде
        end
    end
end

function sampev.onShowDialog(dialogId, style, title, button1, button2, text)
    if title:find("Авторизация") and dialogId == 1 and autojoin.v then
        sampSendDialogResponse(1, 1, 0, ???) -- тут вопрос как передавать ароль, как его правильно считать из файла (чтобы дешифровался)
    end
end
 

Rice.

Известный
Модератор
1,756
1,622
В луа скрипте мало защиты такой. Тем более, если хочешь хранить пароль в INI. Единственное, что тебе может помочь - кастомная функция для шифровки/дешифровки, но для этого скрипт должен быть закрытый. Если не умеешь нормально закрывать скрипт - ничего не получится с твоей идеей. Есть гениальные люди даже на нашем форуме, которые вскроют всё что угодно. Если буду свободен, то накидаю тебе функцию (сам давно хотел).
 
  • Влюблен
  • Нравится
Реакции: kru_tin и pon4ik1811

pon4ik1811

Новичок
Автор темы
16
0
В луа скрипте мало защиты такой. Тем более, если хочешь хранить пароль в INI. Единственное, что тебе может помочь - кастомная функция для шифровки/дешифровки, но для этого скрипт должен быть закрытый. Если не умеешь нормально закрывать скрипт - ничего не получится с твоей идеей. Есть гениальные люди даже на нашем форуме, которые вскроют всё что угодно. Если буду свободен, то накидаю тебе функцию (сам давно хотел).
Код в любом случае будет закрытый (хоть и обычным компилятором, благо скрипт не особо в массы пойдет) В мыслях было использовать симметричное шифрование aes какой-нибудь. Но не знаю как это сделать :(

По сути надо:
Очистить поле для ввода
Считать из поля
Записать в файл

При авторизации:
Считать из файла
Кинуть в диалог
 

The Spark

Известный
662
700
Можешь использовать любой алгоритм шифрования с секретным ключом. (по запросу в гугле добавляй lua и всё)
Только тебе нужно будет сделать функции, отвечающие за шифрование, локальными, а так же раздробить ключ на части и спрятать его по скрипту.
Чтобы скрипт не декомпилировался в исходник, используй добавление мусора в код:
Lua:
-- в любой участок кода
if 1 == 2 then -- или if false then
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
    (""):†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()():†()
end

-- в конце кода
goto TAG
::TAG::

Защиты от проксирования:
Твой скрипт можно будет загрузить в игру через другой, так что добавь проверки не директорию запуска
Lua:
if debug.getinfo(2) then
 -- нас проксируют
end

if pcall(string.dump, downloadUrlToFile) then
  -- нас проксируют
end
Можешь делать дамп функций с помощью string.dump. Или значение дампа совпадает, значит функцию не подменили. Только нужно учесть, что могут подменить саму функцию string.dump :)

Обфускацию накинь. Единственное, что есть на бх - https://www.blast.hk/threads/46652/
Только он может код сломать, так что нужно будет подредактировать после.
Ну и это сделай https://www.blast.hk/threads/154693/#post-1223299
Тогда ты получишь максимальную паблик защиту на данный момент. (только скрипты @babulya_headdyson не используй, бога ради)
 

pon4ik1811

Новичок
Автор темы
16
0
Я забыл добавить... Основная проблема в том, что кодировка в imgui же utf-8, а диалоговое окно скорее всего принимает 1251... И вот я не знаю как зашифровать из строки имгуя в инишник при жто не накосячив с кодировками
 

AugustTN

Известный
1,369
470
Я забыл добавить... Основная проблема в том, что кодировка в imgui же utf-8, а диалоговое окно скорее всего принимает 1251... И вот я не знаю как зашифровать из строки имгуя в инишник при жто не накосячив с кодировками
u8:decode(buffer.v)?