也许对于js玩得比较溜的朋友,会有更多的调试分析方法,但是,本文描述这种方法算是别开生面,奇思妙想吧,想吐槽就吐槽,觉得还可以就点赞,哈哈~
限制条件:
js文件是从独立的域名加载得来,跟页面打开的域名不一样
(加此条件是因为同域情况下,会需要考虑更多因素,如代理下载+内容替换,这里只讲比较特例的情况,读者学其思想,举一反三运用即可)
远程数据本地分析法的原理:
1、下载需要分析的文件
2、利用hosts文件将远程数据本地化
3、利用远程代理将不需要分析的文件代理下载
4、修改本地文件进行调试
下面以本人今天解析成功的内容作为示例进行分析。
加密示例地址:http://demo.zjmainstay.cn/remoteDataLocalAnalyse
js加载地址:http://test.zjmainstay.cn/remoteDataLocalAnalyse/encrypted.js
1、下载需要分析的文件
下载http://test.zjmainstay.cn/remoteDataLocalAnalyse/encrypted.js
2、利用hosts文件将远程数据本地化
这个实际就是修改hosts文件,把需要分析的js文件所用域名给本地化了,如:
127.0.0.1 test.zjmainstay.cn
Windows下hosts文件位于:C:\Windows\System32\drivers\etc\hosts
Linux下hosts文件位于:/etc/hosts
3、利用远程代理将不需要分析的文件代理下载
本人利用Apache的重定向功能,实现如下:
RewriteEngine On
RewriteCond %{HTTP_HOST} test\.zjmainstay\.cn [NC]
#只有文件不存在才代理下载(被分析文件存在,不代理)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ http://test.com/remoteDataLocalAnalyse/download.php?file=$1 [L]
注意了,由于你本地访问test.zjmainstay.cn
已经被重定向了,因此要借助别的电脑(如线上服务器),上面使用http://test.com
做代理下载。
代理下载的程序为:
<?php
/**
* @author Zjmainstay
* @website http://www.zjmainstay.cn
* download proxy
* @filename download.php
*/
if(empty($_GET['file'])) {
exit('Deny!');
}
echo file_get_contents('http://test.zjmainstay.cn/'.$_GET['file']);
完成上面步骤,则你实现了对http://test.zjmainstay.cn
域名下js的本地化调用,接下来把上面下载的http://test.zjmainstay.cn/remoteDataLocalAnalyse/encrypted.js
对应放置好本地路径,则它在页面访问时就用的本地文件了。
http://test.zjmainstay.cn/remoteDataLocalAnalyse/encrypted.js
==>
http://test.zjmainstay.cn 请求的路径为:127.0.0.1 所在目录,我的是:
D:\xampp\htdocs\
因此,整个文件的路径是:
D:\xampp\htdocs\remoteDataLocalAnalyse\encrypted.js
4、修改本地文件进行调试
4.1 放置好之后刷新页面重新请求,此时,可以看到远程ip地址为本地127.0.0.1,如图(一)所示:
4.2 看到调用本地文件之后,我们便可以对其进行调试,查看源码实现原理,如图(二),追加调试语句:
4.3 加好之后,再刷新页面,可以看到控制台打印了调试信息,如图(三)所示:
4.4 通过观察控制台调试结果,可以发现,加密内容被按照单个字符解析了,然后判断是否特殊字符或者纯字母数字,如果是则直接返回,都在,则对当前字符的ASCII码做35次方处理后返回(解密结果),最后连接起来即可。
至此,解密方法得到。
(完)
未经同意禁止转载!
转载请附带本文原文地址:远程数据本地分析法,首发自 Zjmainstay学习笔记