AI摘要:文章介绍了如何解密一个CF鼠标宏的Lua代码。首先,作者发现代码通过异或操作加密,需要一个秘钥文件。秘钥文件中包含了秘钥“zuozhe_QQ”,作者使用Lua代码对加密的字节数组进行异或解密,得到了到期时间的代码。接着,作者用相同的方法解密了宏文件的代码,最终得到了完整的源代码。
有人发了个CF鼠标宏来,说看看能不能解密,我原本以为估计是字节码之类的,打开一看代码,有意思,原来只是通过各种异或操作来还原原本的代码
可以看到key是引用了C盘根目录的一个秘钥文件,打开秘钥文件看看.
看起来很乱,实际上也很乱,但是问题不大,zuozhe_QQ这个不就是秘钥吗
花里胡哨的,最终还是通过秘钥还原下面这串字节数组{80, 91, 64, 91, 92, 77, 21, 9, 21, 71, 93, 65, 65, 75, 92, 86, 82, 28, 114, 86, 70, 118, 84, 77, 80, 16, 23, 17, 108, 22, 95, 16, 28, 20, 7, 11, 4, 4, 28}
那就用魔法打败魔法吧,lua启动,可以看到他是标准的lua54位异或运算,上代码
local key = {80, 91, 64, 91, 92, 77, 21, 9, 21, 71, 93, 65, 65, 75, 92, 86, 82, 28, 114, 86, 70, 118, 84, 77, 80, 16, 23, 17, 108, 22, 95, 16, 28, 20, 7, 11, 4, 4, 28} --把字节数组掏出来
local xor_key_str = "2259585453" --秘钥文本就上zuozhe_QQ
-- 将密钥字符串转换为ASCII值数组
local xor_key = {}
for i = 1, #xor_key_str do
table.insert(xor_key, string.byte(xor_key_str, i))
end
-- 对key数组逐字节进行异或解密
local decrypted_bytes = {}
for i = 1, #key do
local key_byte = xor_key[((i - 1) % #xor_key) + 1]
decrypted_bytes[i] = key[i] ~ key_byte
end
-- 将解密后的字节转换为字符串
local decrypted_str = table.concat(
(function()
local t = {}
for i = 1, #decrypted_bytes do
t[i] = string.char(decrypted_bytes[i])
end
return t
end)(),
""
)
print(decrypted_str)--输出连接后的字符串
运行结果 :biubiu = tostring(GetDate("%Y%m")-2310)
OK秘钥的代码拿到了,其实就是到期时间,接下来看正主
那同样的代码,把字节数组替换成宏文件的字节数组,解密主文件的代码,结果如下:
这就跟秘钥的结构一样了,好家伙,可以看到zuozhe_QQ变成了0055,那就再替换字节数组,key_str改成"0055",继续运行
搞定 ,完整的源代码就出来了