Commit 26e356d7 authored by 王进波's avatar 王进波

update

parent eb19d2ae
......@@ -48,4 +48,42 @@
JS加载使用了动态注入的方式,在第一次请求时,将压缩混淆的 js 字符串保存在浏览器的 `localStorage` 中,然后用 `eval()` 函数将 js 字符串注入到环境中。
动态注入的 js 会被丢到 Chrome Debugger 的 vm 中,难于调试
\ No newline at end of file
动态注入的 js 会被丢到 Chrome Debugger 的 vm 中,难于调试。
## 思路
由于代码经过压缩和混淆,难于调试,需要想办法将代码转义成语义化的代码,可以将 js 请求的响应保存为本地文件,然后使用 Fiddler 将 js 请求拦截下来,用保存在本地的问题替换服务器响应,这样,可以持续修改本地文件,来不断深入分析代码。
这里,拦截工具,我使用了 Charles ,按道理,Fiddler 也可以实现,而且更加强大,不过由于一开始遇到坑时,我就换了 Charles ,然后在 Charles 上走通了,我就没有再尝试 Fiddler了。
按照这种思路,当我们替换请求响应为保存在本地的文件时,清理缓存后刷新页面,会出现跨域的错误
![1545723994973](E:\Codes\CityGit\SVN-To-Git\doc\分析高德地图行政区注记数据\1545723994973.png)
出现错误的请求,正是被我将响应替换为本地文件的那个请求。
根据错误提示,原因很明显,是因为请求的响应头中没有出现 `Access-Control-Allow-Origin` 头部, https://kinboy.wang 这个域名访问这个资源是跨域请求,不被浏览器允许。
当我关闭拦截,让请求正常发送到服务器时,可以看到,正常请求的响应头中是包含了 `Access-Control-Allow-Origin` 相关的头部的。
![1545724379976](E:\Codes\CityGit\SVN-To-Git\doc\分析高德地图行政区注记数据\1545724379976.png)
再看看拦截请求的情况下 ,Charles 中生成的响应的头部,可以看到,被 Charles 拦截后,生成的响应中的确不包含 `Access-Control-Allow-Origin` 头部,不出意外,应该加上相应头部就可以解决问题。
![1545724639347](E:\Codes\CityGit\SVN-To-Git\doc\分析高德地图行政区注记数据\1545724639347.png)
一般这样的代理工具都有自定义 HTTP 请求的功能,这是基础功能。在 Charles 中,这个功能叫作 `rewrite`
我用 `rewrite` 功能把需要拦截的几个请求分别自定义设置了响应头,按照正常响应的头部来设置,然后完美解决问题,Charles 截获请求后,将指定好的本地文件作为请求的响应返回给浏览器了,并且没有报错。
那么接下来就可以继续分析代码了。。
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment