浏览器如何解码这些混淆的 class 名称?

How does the browser decode these obfuscated class names?

This javascript file appears to have been obfuscated and the class names are not human readable, looking like lt$nkqmr. However when a browser runs the javascript, for example here or here,浏览器显然解码了 class 名称,因为控制台可以自动完成 class 名称,例如 lt.ImageLoader。浏览器如何解码这些混淆的 class 名称,我该怎么做?

TL;DR: 不,一般来说是不可能的。


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

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

如你所见,它的名字是计算lt$tyopy(0x3ca)的结果。

lt$tyopy 函数,在执行了大量的函数调用和其他不可读的代码之后,returns 字符串 'ImageLoader',因此函数的名称。

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

并且,这些函数仅用于重构 "public" 函数的名称,并且由页面作者创建。

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


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