【问题标题】:How does this obfuscated Perl script work?这个经过混淆的 Perl 脚本是如何工作的?
【发布时间】:2014-07-06 22:35:33
【问题描述】:

有人让我帮他去混淆以下 Perl 脚本 被发送给他,怀疑它正在连接到一些外部服务器 等等。但是,我不是 Perl 专家,所以我无法真正理解 这里发生的所有事情。

据他说,脚本应该处理一个 input.txt 文件并从中提取 生成和 HTML 文件,带有一些命令行参数A, B, C, ...。 所以你可以运行脚本:

MAGIC_NO_JAVASCRIPT=1 perl ./179252S0 gghkla5673lju-magic input.txt 1 A B C > output.html

经过混淆的 Perl 脚本 179252S0 仅包含以下行, 后跟大约 1 MB 的行,其中包含不同数量的空格和制表符 在每一行。我只会给出第一行,但你可以下载和 看全文here

第一行如下:

$_=<<'';y;\r\n;;d;$_=pack'b*',$_;$_=eval;$@&&die$@;$_

那是做什么的,我怎么理解它?

实际上,我通过将$_=eval 替换为 print $_,但该代码也被混淆了。

编辑:感谢 Slade 的分析和一些体力劳动,我可以得出结论,这个脚本的其余部分被 Acme::Floral 混淆了,使用如下:

perl -MAcme::Floral my_script.pl > floral_script.pl

并且网络调用被发送到:

  • a) 提供统计数据和内置页面计数器的 web 工具站点 到生成的*.html 页面。
  • b) 另一个网站抓取图像文件以进行 html 加载。

但是由于最后的混淆,我们不能完全排除其他事情正在发生,没有大量的额外工作。


PS。我留下了原始名称和神秘的“魔术”参数,因为我认为去混淆算法也依赖于此。

【问题讨论】:

  • 这里去掉了第一层混淆:link。变量和函数名称仍然是混淆的。这似乎至少是似是而非的良性,但很难说。
  • 谢谢,看起来比我得到的好多了。该代码一定是由混淆引擎生成的。有人认出哪个吗?
  • Acme::Floral 似乎已被用于生成混淆变量和子例程名称。不过,空格的东西看起来很特别,因为它不是一种特别强大的混淆手段。

标签: perl obfuscation


【解决方案1】:

让我们从清理第一行的混淆语法开始。 $_=&lt;&lt;'';变成了

$_ = <<'';

这只是一个没有分隔符的heredoc;它将行下的所有内容读入 $_ 变量。

y;\r\n;;d; 变为

tr/\r\n//d;

这只是使用分号作为分隔符的音译运算符和类似sed的y///形式,这与tr///的含义完全相同。 d 标志表示将删除没有替换的字符,而 tr 默认对 $_ 进行操作,因此该语句只是从 $_ 的内容中删除 DOS 样式的行尾。

$_=pack'b*',$_; 变为

$_ = pack('b*', $_);

它获取 $_ 的内容并将其视为位串,将所有空格转换为 Perl 代码的文本字符串。

$_=eval;$@&amp;&amp;die$@;$_ 变为

$_ = eval;
$@ && die $@;
$_

这里的第一行使用eval 的“字符串评估”形式。它将获取被音译和解包的代码,然后解析并执行它。

$@ &amp;&amp; die $@; 只是写die $@ if $@; 的愚蠢方式。 $@ 是 eval 错误变量;如果代码未能正确解析和执行,它将保存一个真值,因此如果有一个错误,脚本将因该错误而死。

之后唯一的$_ 将是解释器看到的最后一条语句。它被分配了 eval 语句的返回值,当且仅当给 eval 的代码解析成功时,它才会为真。 Perl 模块需要某个真值作为文件中的最后一条语句(通常只是一个1;)。如果反混淆出现问题,将$_ 放在这里将表明模块加载失败。

很难确定您的朋友是否正确连接到外部服务器。通过它进行的几次搜索似乎表明它没有导入任何网络模块(唯一的use 语句是use strict 'refs';,并且没有requires),而且它似乎没有使用任何可疑的内置函数(除了第一行的那个之外没有evals;除了可能用于处理输入文本文件的open 之外,没有与文件系统交互的函数;没有Perl 的内置网络函数(所有其中以 'set'、'get' 或 'end' 开头);并且没有 Perl 的套接字函数。

当然,不能保证它生成的 JavaScript 是良性的,但 Perl 脚本似乎没有访问网络。如果脚本在执行时没有做任何明显有害的事情,您的朋友可以尝试使用 Wireshark 之类的工具来查找任何恶意网络,否则这些网络需要经过艰苦的审核才能发现。

【讨论】:

  • 谢谢。超出了我的要求。 y/// 表格和 die 部分,当然还有所有的花,我大部分时间都感到困惑。
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 2012-03-24
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多