我正在分析一个恶意JavaScript。代码以某种方式编码和混淆,我什至无法部分消除混淆,并且充满了长字符串。为了简化任务,我将代码放入JShint。根据该工具,有82个未使用的变量:


考虑到上下文,可以安全地假设存在这些变量的原因很可能会增加混淆效果,但是不执行任何操作?删除这些变量的声明并使用较短的代码是否合理?

评论

是的,这是完全合理的。无论如何,你要失去什么?如果分析失败,请放回原处。

#1 楼

可能确实是这些变量只是添加到混淆分析中而已,但是请记住,在Javascript中,有许多种访问变量的方法,我会从自动化工具中获取些许信息。

这可能是对的,但也可能是该代码使用了对这82个变量的非直接访问。
re = 'testing a variable';
alert(window['re']);


JSHint会告诉您该变量未使用,但已使用。 eval将是棉短绒可能会错过的间接用法的另一个示例。

#2 楼

通常,只有在执行第一个反混淆步骤之后,才会使用未使用的变量。

第一次运行后,您会看到一些代码使用了这些变量,例如使用了eval。这是因为混淆的上一步使var看起来像未使用的,只是因为在(再次)上一步中混淆了它们在代码中的使用。

例如。您可以使用eval和base64编码来隐藏一段代码的使用。

在像您这样的情况下,我倾向于使用IDE工具删除看似未使用的代码,然后,如果代码仍在工作,则可以确保我从代码中删除了无用的模糊。

个人意见:当JavaScript编码混乱时,JsHint就会检测到二手车...使用窗口对象访问变量的警报使JsHint变得盲目。对于此特定目的不是一个很好的帮助。

当您尝试使用恶意代码时,显然您需要运行各种沙箱,sw和hw隔离以及仿真。

#3 楼

这有点题外话了,但是如果您要将恶意软件作为日常工作进行分析,则会发现自己处于没有时间去混淆每个偶然发现的脚本的情况。 >我强烈建议您使自己熟悉-例如-SpiderMonkey(https://blog.didierstevens.com/programs/spidermonkey/)。

还可以看看如何对这样模糊的JavaScript文件进行模糊处理?可能会引导您朝正确的方向前进。