我需要任何能够解码“Luraph Obfuscator”的人[关闭]
Posted
技术标签:
【中文标题】我需要任何能够解码“Luraph Obfuscator”的人[关闭]【英文标题】:I need anyone that can, decode "Luraph Obfuscator" [closed] 【发布时间】:2020-03-26 00:57:57 【问题描述】:我向一个不受信任的开发人员支付了一个脚本的费用。我以为他骗了我。他确实给我发了代码,但他混淆了脚本。这是一款使用 Lua 的名为“Roblox”的游戏,代码如下。据我运行它可以看出,它可能会起作用。但我需要更改脚本才能使其正常工作。有谁知道解码混淆?
https://pastebin.com/B8SZmZGE
local ilIillllII1i1lliliI = assert local II1ll1iliIIIIillIli = select local lIlillIlIi11I1lIIi11I = tonumber local i1li1IIIII1IIilIil1 = unpack local iIl1IIlI11i1il1ilII = pcall local lIlI1IiiIlIl1i11ll1Il = setfenv local iIIlilIlllIliiIili1 = setmetatable local ii1Iiill11ii1IIIill = type local lIll1I1ll1lliilII1Il1 = getfenv local IiIi1llliiIIllllI1i = tostring local Ii1IIill1ilI1lilIiI = error local iilli1lIi11lllIli1l = string.sub local lIlI1li1ll1lliliIlI = string.byte local lIli1Ill1liIlilIIIiiI = string.char local I1ii1iIIl1lI1Iii1iI = string.rep local iiiIiI11IIllIiliI1I = string.gsub local illlIIIllliill1l1ll = string.match local iIi1l1liili1I11l1II = 1 local function lIll1iillI1ll1iiIiIll(IIiiiIiiIllIl1i1i1I, iIililIlliIII11illi) local i1iiI1I1iII1iiIiil1 IIiiiIiiIllIl1i1i1I = iiiIiI11IIllIiliI1I(iilli1lIi11lllIli1l(IIiiiIiiIllIl1i1i1I, 5), "..", function(llii1Ii11lI1llilill) if lIlI1li1ll1lliliIlI(llii1Ii11lI1llilill, 2) == 71 then i1iiI1I1iII1iiIiil1 = lIlillIlIi11I1lIIi11I(iilli1lIi11lllIli1l(llii1Ii11lI1llilill, 1, 1)) return
【问题讨论】:
deobfuscated @EgorSkriptunoff 您是否碰巧拥有 Luraph 的自定义字节码或 Luraph 反混淆器? @Taazar - 我没有反混淆器。但是 Luraph 手动去混淆并不是很难。它的自定义字节码每次都不一样,所以你应该查看VM代码,而不仅仅是字节码。 @EgorSkriptunoff 我会在周末研究它,应该是一个很好的研究项目。你有什么推荐我开始的地方吗? @Taazar - 从查看this 项目开始。 Luraph 只是 lbi 的修改版本。 【参考方案1】:好的,所以我是 turtsis,我看到人们一直在窃取我的答案并将其发布在 v3rmillion 上。所以我会发布另一个答案,但这次是关于如何实际获取它的内容的更好的答案。因此,基本上,如果您没有阅读我的其他答案,请不要阅读此答案:
Luraph 是一个自定义的 lbi,它是一个 lua 字节码解释器。如果你做 string.dump(function) 你会得到 luaQ 作为输出。这就是为什么人们使用 unluaC 或 luadec 来获取这些转储的来源。这称为字节码,它与 string:byte() 不同,因为它在 lua 5.1 及更高版本中是不可读的 lua 格式。为了能够使用这些编码的字符串/函数,您需要一个 lbi。 lbi 所做的是解释这些位并反序列化它们。下面是一个常用lbi的例子https://github.com/JustAPerson/lbi/blob/master/src/lbi.lua
好的,现在到您获取它的内容的部分。
在 lua(和其他编码语言)中有一种叫做操作码的东西。操作码控制 lua 的基础,其中有很多。以下是一些最常见和最有用的:
LOADK - 加载一个常量到寄存器 LOADBOOL - 加载一个布尔值到寄存器 LOADNIL - 将 nil 加载到寄存器中 JMP——跳跃 ADD - 向寄存器添加新事物 SUB - 从寄存器中减去一些东西
还有很多,但这些是我们将重点关注的主要内容。
好的,要正常获取这些,您需要一个名为 unluac 或 luadec 的外部程序,但为此我们将在基本 lua 中进行。我建议使用 repl.it 来运行代码。
所以我们需要的主要是 LOADK,因为它会加载一个常量
常量是一个变量或任何真正不会改变的东西例如:local value = 1
现在不是恒定的东西是变化的。
现在你可能听说过 Iron brew 和 synapse xen 两者都是由 3ds 和 Defcon42 创建的非常知名的 lua 混淆器
Iron brew 和 xen 有一些共同点(以及基础),它们不是 lbis,因此您通常不会从它们那里获得操作码。但是他们有一个包含所有常量的表(xen 是加密的)来获取这些表有一个完整的过程 table.concat 和 global 但这不是 luraph 而是其他混淆器。 Luraph 是不同的,因为它是一个 lbi,所以不需要一个包含所有常量的表。为了获取常量,我们需要一种从脚本中获取指令的方法。操作码是指令。它们是指令,因为操作码告诉 lua 如何处理代码。好的,那么我们如何获得这些说明?
这是一篇关于操作码和指令的文章: http://luaforge.net/docman/83/98/ANoFrillsIntroToLua51VMInstructions.pdf
所以他们都有签名: “sBx” “一种” “A”、“B” “A”、“Bx” “A”、“C” “A”、“sBx” “A”、“B”、“C” 您可以从这些说明中获得操作码 args。 现在不同的混淆器有不同的操作码指令,所以对于 luraph,你必须找到它们。好的,所以使用反汇编器或自己制作,但这是我朋友制作的反汇编器: https://github.com/op0x59/reddisassembler
您需要进入 repl.it 并创建一个 repo,然后添加代码并使用设置对其进行格式化等。在设置中有操作码的地方,您需要从 luraph 手动获取这些操作码。
所以你去吧,这就是你可以做到的。如果您需要更多关于不和谐的帮助,请联系我: 乌龟#6969 要么 turtsis#2785
还有谁在此处窃取我的答案并将其发布在 V3RMILLION 上而不给我信用,请停止或给我信用。
【讨论】:
【参考方案2】:基本上它使用字节码 (\144\22\99\88),但它有一个自定义解释器和一个自定义字节码 vm,使其具有如下字节码:
LPH|3EE5491D2B1A00192574A22B510A02002GE5E7E9E42GE5F53GE5F53GE5CD3GE5FDE42GE5C13GE5F934B71
因此,您需要将变量和函数重命名为 variable1
、variable2
之类的名称,以便您能够阅读。然后找到像
function 1iiii1i1i(i1i1ijj1jijij)
local 1j1j1jj1j1jijijij = (((10*2)/2)-3/9)
end
1iiii1i1i(90, 0)
这是完全没用的,旨在欺骗反编译器循环随机数函数。检查是否有类似的东西:iIi1l1liili1I11l1II = iIi1l1liili1I11l1II + 4 return Ii1IiI1I111I1II1IIi * 16777216 + iIII1iIiI1l1IlIIlii * 65536 + IIill111lli111ll1li * 256
这些是垃圾代码,只需在其余代码中查找它(使用ctrl+F
)并查看它是否有用。如果是,则检查该用途是否有用途,依此类推,直到找到它是否是 vm 的一部分。问题是它可能会多次加载另一个加载字符串,直到反编译需要很长时间。因此,如果您真的需要消息来源,请通过 discord 联系我,我可以联系您 (turtsis#2785) 或花几个小时完成此操作
使用 Lua 美化器可以使其更易于理解。
如:[http://blackmiaool.com/lua-beautify/][1]
(https://github.com/blackmiaool/lua-beautify)
【讨论】:
【参考方案3】:这个问题已经 5 个月大了,但无论如何你都可以去:
local L3_0, L4_1, L5_2, L6_3, L7_4
L3_0 = "rebel alience"
L4_1 = "Wasp"
L5_2 = "Bottom Small Mining Laser"
L6_3 = "Adamantite Ore"
for _FORV_7_ = 1, 10 do
workspace.Ships[L3_0][L4_1][L5_2].RemoteFireCommand:InvokeServer(CFrame.new(0, 0, 0,0.996030748, -7.7674794E-4, 0.0890064985, 0, 0.999961913, 0.00872653536, -0.0890098885,-0.00869189762, 0.995992839), workspace.Asteroids[L6_3],workspace.Asteroids[L6_3], workspace.Asteroids[L6_3].CenterPoint)
wait(3)
end
这是一个简单的远程事件。
您可以在此处找到使用的工具,它是开源的: https://github.com/TheGreatSageEqualToHeaven/LuraphDeobfuscator
【讨论】:
【参考方案4】:脚本是
local L0, L1, L2, L3, L4, L5, L6, L7, L8, L9, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22
L0 = "rebel alience"
L1 = "Wasp"
L2 = "Bottom Small Mining Laser"
L3 = "Adamantite Ore"
for L7 = L4, L5, L6 do
L8 = Workspace
L8 = L8.Ships
L8 = L8[L0]
L8 = L8[L1]
L8 = L8[L2]
L8 = L8.RemoteFireCommand
L9 = L8
L8 = L8.InvokeServer
L10 = CFrame
L10 = L10.new
L11 = 0
L12 = 0
L13 = 0
L14 = 0.996030748
L15 = -7.7674794E-4
L16 = 0.0890064985
L17 = 0
L18 = 0.999961913
L19 = 0.00872653536
L20 = -0.0890098885
L21 = -0.00869189762
L22 = 0.995992839
L10 = L10(L11, L12, L13, L14, L15, L16, L17, L18, L19, L20, L21, L22)
L11 = Workspace
L11 = L11.Asteroids
L11 = L11[L3]
L12 = Workspace
L12 = L12.Asteroids
L12 = L12[L3]
L13 = Workspace
L13 = L13.Asteroids
L13 = L13[L3]
L13 = L13.CenterPoint
L8(L9, L10, L11, L12, L13)
L8 = wait
L9 = 3
L8(L9)
end
这些变量不是普通变量,因为我使用的是自动反混淆器,所以它可能看起来有点混乱
【讨论】:
说我想得到这个自动反混淆器,我应该给谁发消息?【参考方案5】:我可能会迟到,但是
-
反叛异化
黄蜂
底部小型采矿激光器
精金矿
1
10
工作区
船舶
远程消防命令
调用服务器
CFrame
新
0
0.996030748
-0.00077674794
0.0890064985
0.999961913
0.00872653536
-0.0890098885
-0.00869189762
0.995992839
小行星
中心点
等一下
3
1337
【讨论】:
【参考方案6】:我有一个 luraph 转储程序,该脚本的转储版本仅显示一个变量“1337”我希望这会有所帮助!
【讨论】:
请添加更多/相关细节。你的回答完全没有意义。【参考方案7】:最简单的事情之一是创建一个脚本来销毁所有 Luraph 的脚本。删除那些垃圾代码仍然是一个更好的选择,但这会在一段时间内发挥作用。
它的作用是,它基本上永远地破坏了这些脚本。最有趣的事情之一是它甚至不必永远摧毁它们。 Luraph 脚本的数量有限,它们可以乘以多少次才能使 Luraph 的脚本崩溃。
local condition = true
local Oofer = workspace.Camera
while condition do
workspace.Camera:ClearAl1Children ()
wait (2)
end
【讨论】:
请以非图片格式的文本上传您的代码。以上是关于我需要任何能够解码“Luraph Obfuscator”的人[关闭]的主要内容,如果未能解决你的问题,请参考以下文章