首页 > 解决方案 > 我试图弄清楚如何反编译这个混淆的 Lua 脚本

问题描述

所以我一直试图弄清楚如何反编译 dll、java 和 Lua 文件,但是一旦遇到这个文件,我就被难住了。

有人对我如何反编译有任何想法吗?

由于脚本太大,我把它放在一个 pastebin 链接中。https://pastebin.com/UsdWEHnmIlIIl1liIllIi1II1Ii.lIl1llIllIii1111lIIIii = lIli1IlI11lIlI1il11i1() lIli1IlI11lIlI1il11i1() lIli1IlI11lIlI1il11i1() local ll1ili1i1Ii1II111li = lIlIlll1Ill1illiliIiI() for i1IiIili111iI1lil1l = lIliI1iii11lilII1IIil, ll1ili1i1Ii1II111li do IlIIl1liIllIi1II1Ii.l111II111Il1IiIII11i[i1IiIili111iI1lil1l] = lIlIlll1Ill1illiliIiI() end lIlIlll1Ill1illiliIiI() lIli1IlI11lIlI1il11i1() lIli1IlI11lIlI1il11i1() lIlIlll1Ill1illiliIiI() lIlIlll1Ill1illiliIiI() lIlIlll1Ill1illiliIiI() lIli1IlI11lIlI1il11i1() local ll1ili1i1Ii1II111li = lIlIlll1Ill1illiliIiI() - (#{ 91625, 31274, 132907, 128929, 89879, 28353, 85846, 63662, 120975, 94604, 40073, 120271, 29175, 126728, 55753, 31423, 118592, 112751, 123563, 26653 } + 49 - 22 - 12 + 24 + 10 + 32 - 27 + 22 - 35 + 41 + 25 + 29 + 18 + 33 + 32 + 133485) for i1IiIili111iI1lil1l = lIliI1iii11lilII1IIil, ll1ili1i1Ii1II111li do local l1iI1Illil1i1il1iII = {} local lIlill1IIIlli1iII1ill = lIlIllI1i111lilIi1ilI(i1iIIIii1liiIillilI) l1iI1Illil1i1il1iII.il1li1iilIii1iIll11l = iiIlIlilIlIll1l1l1l(lIlill1IIIlli1iII1ill, #{ 19814, 81950, 109054, 18321, 117777, 126276, 941, 40833, 27393, 25354, 106568, 58140, 73781, 28751, 110509, 42721, 118305, 94680, 18166, 4591 } + 26 - 9 + 9 - 4 - 48 - 2 + 24 + 47 - 35 - 8 - 31 - 1 + 39, #{ 34453, 33661, 37020, 5461, 3935, 7245, 90253, 30010, 122438, 78286, 50375, 62446, 101176, 126539, 91679, 59085, 67167, 93133, 73148, 54067, 13807 } + 29 - 46 - 15 + 41 + 32 - 26 + 6 - 6 + 27 - 43 + 12 - 17 + 11 + 6) l1iI1Illil1i1il1iII.lIlilIilillll11iil1li1 = iiIlIlilIlIll1l1l1l(lIlill1IIIlli1iII1ill, #{ 59738, 38876, 31250, 75801, 96293, 27832, 11774, 9098, 31230, 80836, 129303, 101680, 12689, 60836 } - 3 + 38 + 32 - 43 + 21 - 10 + 5 - 32 + 14 - 8 + 7 - 15 - 19, #{ 37073, 70137, 113242, 21765, 129309, 86407, 33113, 85980, 105005, 59356, 53236, 100694, 61483, 55175, 85902, 33351, 70969, 133357, 55705, 74121, 116292, 132529 } - 13 - 4 - 47 - 36 - 29 + 17 - 49 + 43 - 48 - 42 - 4 - 18 + 16 + 201) l1iI1Illil1i1il1iII.I1i1IiiIlIIl1II11IiI = iiIlIlilIlIll1l1l1l(lIlill1IIIlli1iII1ill, #{ 129902, 68496, 976, 73113, 19012, 12350, 23326, 93845, 88636, 103236, 52249, 70226, 40074,

这是一个非常非常非常小的样本,总共有 40,000 个字符。

标签: luadecompilingrobloxdeobfuscation

解决方案


您可以做一些不同的事情来帮助摆脱代码中的混淆。

1. 使用正确的变量和函数名称

一种方法是查找所有不同的变量和函数名称并将其替换为比“I1lili1”等更独特的名称。这将使您更容易地遵循代码,并防止您将任何变量相互混淆。

2.缩进代码

另一种方法是查找“if”、“while”、“function”和“end”关键字,然后开始缩进代码以使其更具可读性并且更易于理解。

3. 解决基础数学

上面的代码经常使用长度函数 (#),因为它使用大多数列表作为另一种表示正常数字并防止人们轻易看到实际数字的方式。例如:

#{ 10, 372, 67298, 2287, 694, 1, 5039 }

会变成:

7

当您执行长度功能时。如果您将所有这些列表更改为实际数字,然后在您可以摆脱几乎所有数字之后求解简单的加法和减法方程。

当然,这样做会花费很多时间,但这毕竟是混淆代码的重点。如果您不想花几个小时浏览所有代码以消除混淆,您可以使用我之前准备的这个版本:https ://pastebin.com/Amtt8UMP我已经使用了上述所有方法来获取摆脱代码中的一些混淆,但是您仍然需要跟踪程序以找到所有函数的输出。

然而,正如 Egor Skriptunoff 评论的那样,所有这段代码很可能会激活一个加载字符串。加载字符串中的这段代码也可能会被混淆,所以实际上这段代码对你毫无用处。

希望这可以帮助!


推荐阅读