принимать деобфузацию кода

Недавно я загрузил некоторый код lua, и то, что я нашел внутри, было некоторой запутанной строкой. Это заставило меня задуматься, какая там была техника обфускации. У кого-нибудь есть идея?

local code='277611797811444864646758928511510111411592651081011209268101115107116111112'
loadstring(code)()

EDIT: еще один (зашифрованный?) Код.

« 196 2 28 66 0 1 198 193 194 2 25 128 129 3 22 64 14 128 197 193 0 0 198 193 195 3 6 2 196 2 220 129 0 1 218'

lua,deobfuscation,

1

Ответов: 4


2 принят

Не выглядит зашифрованным вообще. Похоже, это всего лишь последовательность байтов. Каждая обратная косая черта представляет символ с его байтовым кодом.

27 - побег, 76 - «L», 117 - «u», 97 - «a» и т. Д.

Запуск его через короткий скрипт дает мне эту строку (символы - специальные символы, такие как escape, начало заголовка и null):

Вы можете искать байты в таблице ascii .

Обновление: немного исследований сказал мне, что LuaQ означает, что это предварительно скомпилированный скрипт или что-то в этом роде. Я мог бы быть далеко.


4

Сложная часть состоит в том, что loadstringи связанные функции принимают как код lua, так и lua-байтовый код. Этот вызов loadstringпросто передается байт, скомпилированный lua, а не исходный код lua.

Вы можете легко получить байт, скомпилированный lua. Вы можете получить такой пример

  • Создайте два файла.
  • Скомпилируйте его с помощью luac для создания lauc.out
  • Посмотрите на содержимое файла с помощью шестнадцатеричного просмотра.

Для пустого файла lua я получаю:

0000000: 1b4c 7561 5100 0104 0804 0800 0900 0000  .LuaQ...........
0000010: 0000 0000 4066 6f6f 2e6c 7561 0000 0000  ....@foo.lua....
0000020: 0000 0000 0000 0002 0201 0000 001e 0080  ................
0000030: 0000 0000 0000 0000 0001 0000 0001 0000  ................
0000040: 0000 0000 0000 0000 00                   .........

Перевод первых 8 байтов в десятичный:

27, 76, 117, 97, 81, 0, 1, 4

Что соответствует экранированным символам в вашей строке.

Если вы хотите получить более подробную информацию о том, какой код в блоке вам потребуется, напишите фрагмент файла и используйте инструмент декомпиляции lua для исследования. ChunkSpy , luadec15 и unluac упоминаются на странице инструментов wiki wiki .

Недостаточно содержания в куске, который вы предоставили мне, чтобы принять его дальше, я предполагаю, что он усечен?


0

Если у него есть loadstring, простой способ, который может не всегда работать, - это просто добавить

loadstring = print;

в начале


0

Вместо того, чтобы просто дать вам простой ответ, я хотел бы сообщить вам некоторые вещи, чтобы узнать, встретите ли вы такие вещи на этом пути.

Этот тип обфускации не очень безопасен и фактически является таблицей ASCII. Как правило, эти виды obfuscations сделаны в Lua 5.1 и могут быть легко сделаны с :byteи table.concat. Вы можете просто отменить этот код с более мощной версией объяснений Трои, которые могут обойти большую безопасность вокруг него:

function loadstring(input)
   print(input)
end

Поэтому я надеюсь, вы получите представление о том, как это работает. Как указано выше, это можно реплицировать с использованием :byteи table.concatиспользованием.

принять деобфускации,
Похожие вопросы