Encryption 需要了解如何使用gsub和tonumber对lua源代码进行编码的帮助吗?
我是LUA的新手,但我发现gsub是一个全局替换函数,而tonumber是一个转换函数。我不明白的是这两个函数是如何一起用来生成编码字符串的 我已经试过阅读部分PIL(Lua编程)和参考手册,但仍然有点困惑Encryption 需要了解如何使用gsub和tonumber对lua源代码进行编码的帮助吗?,encryption,encoding,lua,Encryption,Encoding,Lua,我是LUA的新手,但我发现gsub是一个全局替换函数,而tonumber是一个转换函数。我不明白的是这两个函数是如何一起用来生成编码字符串的 我已经试过阅读部分PIL(Lua编程)和参考手册,但仍然有点困惑 local L0_0, L1_1 function L0_0(A0_2) return (A0_2:gsub("..", function(A0_3) return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) %
local L0_0, L1_1
function L0_0(A0_2)
return (A0_2:gsub("..", function(A0_3)
return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
end))
end
encodes = L0_0
L0_0 = gg
L0_0 = L0_0.toast
L1_1 = "__loading__\226\128\166"
L0_0(L1_1)
L0_0 = encodes
L1_1 = --"The Encoded String"
L0_0 = L0_0(L1_1)
L1_1 = load
L1_1 = L1_1(L0_0)
pcall(L1_1)
由于注释的长度,我删除了放置注释的编码字符串。如果需要,我也可以上传编码字符串。
gsub
用于获取A0_2
的两位数部分。这意味着字符串A0_3
是一个2位十六进制数,但它不是数字格式,因此我们无法对该值进行数学运算A0_3
是一个十六进制数,可以根据tonubmer
的使用方式来推断
t编号
from:
尝试将其参数转换为数字。如果参数已经是一个数字或可转换为数字的字符串,则tonumber返回该数字;否则,它返回nil
可选参数指定解释数字的基数。基数可以是2到36之间的任何整数(包括2和36)。在10以上的基数中,字母“A”(大写或小写)表示10,“B”表示11,以此类推,“Z”表示35。以10为基数(默认值),数字可以有小数部分,也可以有可选的指数部分(见§2.1)。在其他基中,只接受无符号整数
所以tonumber(A0_3,16)
意味着我们期望A0_3
是一个基数为16的数字(十六进制)。
一旦我们得到了A0_3
的数值,我们就进行一些数学运算,最后将其转换为一个字符
function L0_0(A0_2)
return (A0_2:gsub("..", function(A0_3)
return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
end))
end
这段代码接受一个十六进制数字字符串并将其转换为字符。tonumber用于允许对值进行操作
下面是一个示例,演示了如何使用Hello World
:
local str = "Hello World"
local hex_str = ''
for i = 1, #str do
hex_string = hex_string .. string.format("%x", str:byte(i,i))
end
function L0_0(A0_2)
return (A0_2:gsub("..", function(A0_3)
return string.char((tonumber(A0_3, 16) + 256 - 13 + 255999744) % 256)
end))
end
local encoded = L0_0(hex_str)
print(encoded)
输出
);X_uuubjbe_uw
并将其返回到原始字符串:
function decode(A0_2)
return (A0_2:gsub("..", function(A0_3)
return string.char((tonumber(A0_3, 16) + 13) % 256)
end))
end
hex_string = ''
for i = 1, #encoded do
hex_string = hex_string .. string.format("%x", encoded:byte(i,i))
end
print(decode(hex_string))