【问题标题】:How does the browser decode these obfuscated class names?浏览器如何解码这些混淆的类名?
【发布时间】:2020-05-25 09:23:34
【问题描述】:

This javascript file 似乎已被混淆,类名不是人类可读的,看起来像lt$nkqmr。然而,当浏览器运行 javascript 时,例如 herehere,浏览器显然会解码类名,因为控制台可以自动完成类名,例如 lt.ImageLoader。浏览器如何解码这些混淆的类名,我该怎么做?

【问题讨论】:

  • 它们是缩小文件
  • 这能回答你的问题吗? How to unminify the js files?
  • 您是否有一个 line:column 编号,其中这种混淆值直接用作对象的属性?快速查看这个脚本,他们做了很多garbled[ otherGarbled( yetOtherGarbled ) ] = moreGarble 可能otherGarbled() 函数返回人类可读的字符串。
  • @A.L 该问题的答案表明缩小是一个破坏性的过程,无法撤消。在我的情况下,浏览器能够以某种方式重建类名,所以有一种方法可以做到,我想知道如何。
  • 源地图。其中一位 cmet 给出了答案

标签: javascript obfuscation deobfuscation


【解决方案1】:

TL;DR:不,通常这是不可能的。


如果查看the linked page的来源,可以看到lt.ImageLoader函数定义如下:

lt[lt$tyopy(0x3ca)] = function() { /* function body */ }

如您所见,它的名字是评估lt$tyopy(0x3ca)的结果。

lt$tyopy函数,在执行了大量的函数调用和其他不可读的代码后,返回字符串'ImageLoader',函数名由此而来。

但是,例如,如果您检查 lt.ImageGroupLoader,您会注意到它的名称是由函数 lt$sarzm 以类似但不同的方式生成的。

而且,这些函数旨在仅重构“公共”函数的名称,并且由页面作者创建。

而且我们仍在讨论单个站点:其他具有其他混淆算法的站点可能会使用完全不同的方式来重构公共名称。


因此,除非您创建了混淆代码并留出了这样做的方法,否则无法重建被混淆的名称。

【讨论】:

  • 非常感谢。我没有意识到跳转到函数的定义是如此容易。在这种情况下,实际上并不难。有一个编码字符串数组 lta 和一个函数 ltb 用于解码特定字符串,因此您可以遍历这些字符串并将人类可读的名称映射到索引。
  • @JamieKitson 好吧,我没有分析那么远的代码......是的,这绝对是“显示声明”功能有用的情况!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2015-11-17
相关资源
最近更新 更多