大家好,今天我们来讲一个js混淆的手工分析还原思路。
它长这样
经过测试,他直接扣出来也能跑,不过我们看下他这个奇怪的混淆思路,我们分析然后记下来,方便我们以后写混淆工具的时候作为其中一种方式,为我们所用。
因为他是一个闭包,所以我们直接看最后
最后会执行一个V函数然后第一个传一堆字符乱码,第二个很明显传了一堆浏览器自带的对象函数,这种混淆属实有点问题,把关键函数这么玩我们直接替换掉就ok。
我们分析一下他这个v入口在哪里
把这个闭包拷贝出来然后执行
然后点这个,就可以定位到v函数位置
跳到了这里,这里就是V的入口,至于他怎么解密那个字符串乱码我们不关心,暂时代码能跑没什么暗桩不需要分析,那我们看下他开头的结构
可以看到V申明是在这里,我们看下,首先从中间开始分析
我们可以通过括号来确定范围,鼠标单击一下谷歌这个开发者工具会高亮对应的
实际上js这个()里面的并不是{}作用域他只会返回最后一个对象,所以
这一大段只返回i这个函数
通过上个规则我们知道()中间的他只会返回最后一个(1,2,3,4)只会返回4也就是最后一个,我们接下来看下一个s
s是空数组,下一个
他所有的都是这个规律就不一一看了,我们知道,()括号无论有多少个只会返回一个,我们看开头
鼠标点第一个看下他结尾
他最后是一个Z也就是说V这个函数,这一大段执行完会返回一个Z
那我们看一下Z这个函数在哪里
艾
Z是这里,返回最后一个是这里,是不是很眼熟
我们开头直接定位到的就是这里,这样我们就完整的分析了他这个混淆,现在看来是不是没那么难了。