Added lua-side for decode and load model in MTA

Signed-off-by: Lev Rusanov <30170278+JDM170@users.noreply.github.com>
This commit is contained in:
2022-06-02 23:23:05 +07:00
parent f8e8986507
commit a359b47b84
4 changed files with 71 additions and 44 deletions

View File

@@ -1,40 +0,0 @@
local pass = nil
local function loadFile(path)
local file = fileOpen(path)
if not file then
return error("No such file ".. path)
end
local data = fileRead(file, fileGetSize(file))
fileClose(file)
return data
end
function include(file_name)
local file = loadFile(file_name)
return assert(loadstring(file))
end
function decodeLoadTXD(filename)
return engineLoadTXD(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
end
function decodeLoadDFF(filename)
return engineLoadDFF(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
end
function decodeLoadCOL(filename)
return engineLoadCOL(decodeString("tea", loadFile(filename .. 'c'), {key = pass}))
end
addEvent("setPass", true)
addEventHandler("setPass", resourceRoot, function(new_pass)
pass = new_pass
--CLIENT CONTENT HERE
end)
triggerServerEvent("requestPass", resourceRoot)
addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})

View File

@@ -1,4 +0,0 @@
addEvent("requestPass", true)
addEventHandler("requestPass", resourceRoot, function()
triggerClientEvent(client, "setPass", resourceRoot, sha256(get("pass")))
end)

9
lua/meta.xml Normal file
View File

@@ -0,0 +1,9 @@
<meta>
<info author="JDM17" name="Decoder for XaskeL's locked cars" type="script" />
<min_mta_version client="1.5.6-9.18728" />
<script src="stub.lua" type="client" cache="false" />
<export function="fileDecode" type="client" />
<export function="safetyDelete" type="client" />
</meta>

62
lua/stub.lua Normal file
View File

@@ -0,0 +1,62 @@
local blockSize = 12
local encodeSize = 3000 * blockSize
local symbolsTable = {}
for i=48, 122 do
if (i <= 57) or (i >= 65) and (i <= 90) or (i >= 97) then
table.insert(symbolsTable, string.char(i))
end
end
local function lFileDecode(path, password, useRAM)
if not fileExists(path) then
return false, "File not found"
end
local encodedFile = fileOpen(path)
if (not encodedFile) then
return false, "File corrupted"
end
local encodedData = fileRead(encodedFile, encodeSize)
fileSetPos(encodedFile, encodeSize)
local origData = fileRead(encodedFile, fileGetSize(encodedFile) - encodeSize)
fileClose(encodedFile)
local truePassword = string.sub(utf8.lower(md5(password)), 1, 16)
local block
local decoded = ""
for i = 1, encodeSize, blockSize do
block = teaDecode(string.sub(encodedData, i, i + blockSize), truePassword)
if type(tonumber(block)) ~= "number" then
return false, "Wrong password"
end
decoded = decoded..string.char(block)
end
if (not useRAM) then
local decodedFileName = ""
for i = 1, 64 do
decodedFileName = decodedFileName..symbolsTable[math.random(#symbolsTable)]
end
local decodedFile = fileCreate(decodedFileName)
fileWrite(decodedFile, decoded..origData)
fileClose(decodedFile)
return true, string.format(":%s/%s", getResourceName(getThisResource()), decodedFileName)
else
return true, decoded..origData
end
end
local function lSafetyDelete(path)
local file = fileCreate(path)
fileWrite(file, "PROTECTED BY XASKEL")
fileClose(file)
setTimer(fileDelete, 100, 1, path)
end
-- Экспортные функции
function fileDecode(pt, ps, rm)
return lFileDecode(pt, ps, rm)
end
function safetyDelete(pt)
lSafetyDelete(pt)
end
addDebugHook("preFunction", function(_, _, _, _, _, ...) return "skip" end, {"addDebugHook"})