Это Луа из какой-то игры. Я хотел бы изменить и использовать это. Но это запутано.
Вот структура, которую я понял:
Например, вход в чат вызывает следующий файл Lua.
return function (self,type,message) _G["\u{5F}\u{49}\u{06B}\u{49}\u{6B}\u{6B}\u{6C}\u{06B}\u{49}\u{069}\u{6B}\u{69}\u{006C}\u{6C}\u{049}\u{0069}\u{06C}\u{6C}\u{006B}\u{69}\u{6C}\u{06B}\u{06C}\u{49}\u{6B}\u{0069}\u{06C}\u{0069}\u{49}\u{006B}\u{0069}\u{6C}\u{69}"]["\u{049}\u{0069}\u{6B}\u{69}\u{049}\u{6B}\u{049}\u{006C}\u{69}\u{6B}\u{006C}\u{69}\u{06C}\u{6B}\u{6B}\u{69}\u{6C}\u{6C}\u{0069}\u{06B}\u{6B}\u{6B}\u{006C}\u{69}\u{6C}\u{06C}\u{49}\u{006C}\u{049}\u{49}\u{49}\u{6C}"][(530247052)-(442715560)+(417474590)](self,type,message) end
Код вызывает неизвестную глобальную переменную. Я также нашел файл со многими определенными нечитаемыми глобальными переменными.
Сначала я выполнил следующий расчет (530247052)-(442715560)+(417474590). Результат: 505006082.
Похожий шаблон был в файле chunk.lua, где были определены глобальные переменные. Вот некоторые из них:
[(1437643653)+(1949875078)-(2882512649)]=function(__a0,__a1,__a2)local ikiikkiKKk=223266510;ikiikkiKKk+=1811079080;(function(_iI0l1liIioIl,_o01ilio0oI00,_io0l1lioiIo1)local _1o0iIi1o1lo1=_iI0l1liIioIl[_G["\u{5F}\u{6C}\u{6B}\u{6B}\u{049}\u{006C}\u{49}\u{06B}\u{6B}\u{049}\u{06B}\u{49}\u{69}\u{0069}\u{006B}\u{6B}\u{049}\u{0049}\u{6C}\u{6B}\u{49}\u{49}\u{6C}\u{6C}\u{69}\u{69}\u{049}\u{0049}\u{049}\u{06C}\u{0069}\u{069}\u{6C}"]["\u{69}\u{06C}\u{6C}\u{6C}\u{069}\u{006C}\u{49}\u{69}\u{6B}\u{0049}\u{69}\u{06B}\u{0049}\u{6C}\u{6C}\u{69}\u{69}\u{49}\u{006B}\u{006B}\u{06C}\u{006B}\u{69}\u{069}\u{0049}\u{06B}\u{069}\u{049}\u{06B}\u{0049}\u{69}\u{049}"][(1155173479)+(1577632519)-(1688057523)]][_G[_G["\u{05F}\u{0049}\u{6C}\u{69}\u{06B}\u{49}\u{49}\u{6C}\u{006C}\u{69}\u{6B}\u{49}\u{6B}\u{6C}\u{006B}\u{0049}\u{69}\u{69}\u{49}\u{6C}\u{0069}\u{69}\u{06C}\u{6C}\u{06B}\u{049}\u{69}\u{006C}\u{6C}\u{0049}\u{49}\u{006C}\u{0069}"]["\u{06C}\u{006C}\u{6C}\u{6C}\u{006B}\u{0069}\u{49}\u{49}\u{6C}\u{69}\u{6C}\u{0049}\u{49}\u{6C}\u{6C}\u{6C}\u{6C}\u{69}\u{0069}\u{49}\u{0069}\u{6C}\u{6B}\u{6C}\u{6C}\u{49}\u{0049}\u{6C}\u{6C}\u{6B}\u{06B}\u{69}"][(1334598761)+(865866175)-(2122149422)]][_G["\u{005F}\u{006C}\u{006B}\u{06B}\u{49}\u{6C}\u{49}\u{006B}\u{6B}\u{49}\u{6B}\u{49}\u{069}\u{0069}\u{6B}\u{6B}\u{49}\u{0049}\u{6C}\u{6B}\u{0049}\u{49}\u{06C}\u{006C}\u{0069}\u{0069}\u{049}\u{49}\u{49}\u{6C}\u{69}\u{69}\u{06C}"]["\u{69}\u{6C}\u{006C}\u{06C}\u{0069}\u{6C}\u{49}\u{0069}\u{6B}\u{49}\u{69}\u{06B}\u{49}\u{6C}\u{6C}\u{69}\u{69}\u{49}\u{06B}\u{006B}\u{006C}\u{06B}\u{69}\u{69}\u{49}\u{6B}\u{0069}\u{49}\u{6B}\u{0049}\u{069}\u{49}"][(475540248)+(1474562382)-(1625698704)]]]local _1oiI0I1o1l0i = {}for _1l0IoI1l1ioi=1,10000 do _1oiI0I1o1l0i[_1l0IoI1l1ioi]=_G["\u{5F}\u{06C}\u{06B}\u{006B}\u{049}\u{6C}\u{49}\u{006B}\u{6B}\u{049}\u{06B}\u{0049}\u{069}\u{069}\u{06B}\u{006B}\u{49}\u{49}\u{6C}\u{6B}\u{049}\u{49}\u{6C}\u{6C}\u{69}\u{0069}\u{49}\u{49}\u{0049}\u{006C}\u{0069}\u{69}\u{6C}"]["\u{69}\u{6C}\u{06C}\u{6C}\u{69}\u{6C}\u{49}\u{0069}\u{06B}\u{49}\u{069}\u{006B}\u{0049}\u{006C}\u{06C}\u{0069}\u{0069}\u{049}\u{6B}\u{6B}\u{6C}\u{006B}\u{69}\u{0069}\u{49}\u{6B}\u{069}\u{49}\u{06B}\u{49}\u{069}\u{49}"][(460084513)+(758444488)-(-873305452)]end
(1437643653)+(1949875078)-(2882512649) Функция определяется в глобальной переменной. Причина, по которой я импортировал эту часть, заключается в том, что результат (1437643653)+(1949875078)-(2882512649) совпадает с результатом «505006082», рассчитанным в файле выше. И у него те же три параметра.
Но я не знаю, как действовать дальше.
Что мне попробовать дальше? и приближает ли то, что я сейчас пытаюсь, к ответу?
Все описано выше. Мне нужен инструмент или кто-то, кто знает, как это решить.
@Dai Я пытаюсь перейти к следующей строке, но не знаю, что это значит. :(
Я мог бы предложить вам сначала попытаться выполнить только этап шестнадцатеричного декодирования, иначе вы продолжите сталкиваться с идентификаторами, которых раньше не видели.





Это \u{xxx} символы в кодировке UTF-8, вы можете просто распечатать их с помощью lua, чтобы получить исходное значение, например
print("\u{5F}\u{49}\u{06B}\u{49}\u{6B}\u{6B}\u{6C}\u{06B}\u{49}\u{069}\u{6B}\u{69}\u{006C}\u{6C}\u{049}\u{0069}\u{06C}\u{6C}\u{006B}\u{69}\u{6C}\u{06B}\u{06C}\u{49}\u{6B}\u{0069}\u{06C}\u{0069}\u{49}\u{006B}\u{0069}\u{6C}\u{69}")
Вы получите _IkIkklkIikillIillkilklIkiliIkili. Продолжайте конвертировать все эти похожие строки, например. первую функцию можно деобфусцировать до:
return function (self,type,message)
_G["_IkIkklkIikillIillkilklIkiliIkili"]["IikiIkIliklilkkillikkklillIlIIIl"][505006082](self,type,message)
end
Очевидно, что эти ключи и имена переменных также запутаны. В дальнейшем можно заменить их короткими именами, так будет проще искать нужную информацию в коде.
Я попробовал это. Однако в коде Unicode {06B} и {6B} указывают на одну и ту же строку, поэтому мне интересно, правильный ли это шаг. И даже если вы преобразуете его в строку, вы все равно не поймете, что это значит.
Они одинаковые. И это только первый шаг, нужно обработать весь код, затем постепенно заменять обфусцированные части известными.
Например, вы можете наконец получить _G["_IoioIooIOOIo"] = print, тогда вы знаете, что _IoioIooIOOIo соответствует print. Но это будет утомительный процесс.
«Но я не знаю, как действовать дальше». - Ты продолжаешь, не останавливаясь. Попробуйте выполнять по одной строке за раз, но продолжайте в том же духе, и в конце концов все сложится, и появится более полная картина программы.