Как думаете, чем так закодировали?

Рейтинг: 0Ответов: 1Опубликовано: 07.10.2014
local function f(c) return string.char(tonumber(c, 16)) end; local function from(m) return string.gsub(m, "(..)", f) end; loadstring(from("1b4c756150010404040608090908b6099368e7f57d41080000003d286e6f6e652900000000000000007a0000000000000000000000000a0000000407000000737472696e6700040500000063686172000407000000666f726d6174000405000000677375620004040000007375620004050000006d6174680004040000006d6f640003000000000000f03f0300000000000000400300000000000008402400000000000000080000002000002000000000000000000000000000000000000000002200000003800f0008800f1f08000f1e08800e1d08000e1c08800d1b08000d1a08800c1908000c1808800b1708000b1608800a1508000a14088009130800091208800811080008100880070f0800070e0880060d0800060c0880050b0800050a088004090800040808800307080003060880020508000204088001030800010208800001080000001b800000000000000e0000001f00001f00000000000000000000000000000000000000002100000003000f0008000f1e08800e1d08000e1c08800d1b08000d1a08800c1908000c1808800b1708000b1608800a1508000a14088009130800091208800811080008100880070f0800070e088006..

Ответы

▲ 4

В вышеприведённом коде явно видно, как происходит декодирование.

  1. Из входной строки последовательно берётся по два символа — string.gsub(m, "(..)", f).
  2. Полученные два символа, представляющие собой запись числа в шестнадцатиричной системе счисления, конвертируются в число в десятичной системе счисления — tonumber(c, 16).
  3. Полученное число есть ни что иное, как код символа. Вызов string.char(…) получает символ по его коду.
  4. Совокупность символов, полученных на п. 3 и есть результат декодирования входной строки.

Зная последовательность действий для декодирования, алгоритм кодирования становится очевидным.

После декодирования исходной строки получаем некий бинарный контент, который, при детальном рассмотрении, оказывается скомпилированным байт-кодом Lua. Об этом свидетельствует сигнатура *LuaR* в заголовке бинарного контента. В общем-то, это вполне ожидаемо, поскольку loadstring принимает либо непосредственно Lua-скрипт, либо скомпилированный Lua-chunk.