注:本人作者原创,电鸭首发。请勿转载。
另:作者本人全职远程开发者,接各种前后端外包、兼职、全职工作。欢迎加v,来电。联系方式请充电查看。
我们经常性会碰到一些需要破解目标网站js的时候。有时候为了模仿使用,有时候可能是需要进行一些爬虫任务等等。
但是一般的网站js都会做一些混淆加密。主要是一些字符串,变量的混淆。但是如果不进行反解的话,这种js就足以让我们完全的看不懂,摸不着脉络了。
今天以SOJSON.V5这种混淆算法为例。给大家分析分析,怎么样能够顺利的反解这种混淆。
1、首先,打开这种混淆过的js,通常是没有任何格式的,只有一行代码。完全无法阅读。所以首先要对他进行美化处理。百度一下“js 美化”。有很多这种在线工具,可以帮助实现js的显示美化。
2、美化(格式化)处理后的代码好看多了。但是变量名和字符串,都是全部被混淆处理过的。经过分析,我们可以知道,一般这种代码混淆的反解函数,就在这个js内部。SOJSON.V5的混淆解析函数,就是定义的第一个函数。所以,这里面所有调用这个函数的部分,都要给他替换为该函数的执行结果。
替换可以用php操作。读取这个js文件。然后用preg_match_all,刺探出这个文件内所有符合该函数调用的格式的部分。把匹配到的部分,全部替换为对应的这个函数调用执行结果(就是一个字符串)。那么怎么得到这个函数的执行结果呢。因为这个函数毕竟是文件里的js定义的。这样就需要用到php的一个扩展V8JS。
V8JS引擎,让PHP可以解析js的代码。PHP解析这个文件后,V8JS的环境中就有了该函数的定义。这样,然后通过$v8js->executeString()方法,就可以调用匹配到的代码,从而执行函数调用,获得结果。把获得的结果,替换匹配到的字符串,就实现了反混淆。
总体上的思路还是比较清晰的。以下是我的处理代码
这里呢,其实还可以引申一下(这部分我没做)。
因为这个上面的处理,还涉及到很多人工处理的部分。比如调用美化工具实现代码美化,以及编写反解代码。(实际上代码还要复杂一些,因为还涉及到子函数的反解)
实际上,我们可以写一个php方法,既自动实现代码的美化,又自动可以判断反解析函数是哪一个(原理很简单,哪个函数执行次数最多,通常就是那个函数没跑的)。同时自动实现代码的反混淆。由于我工作中,需要破解的文件就那几个,我于是都手工处理了。
如果涉及到需要批量处理大量的文件,建议完全可以写一个全自动执行反混淆工作的PHP方法。
支持原创,这个头像。。。我在外面看到还以为是广告贴呢😂