关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1.需求
有个购买星球的兄弟问静态的混淆js可以还原后替换,但是动态的混淆js还原后就不知道怎么弄了。所以决定写篇文章来探讨一下。
2.目标地址
这次要拿捏的网站是这个:
https://www.flyscoot.com/en
它加密参数所在的混淆js是动态的,但是url地址是不变的:
https://www.flyscoot.com/g-Then-And-meeting-beding-O-Scena-Quarre-allowt-
如何使用 mitmproxy 库和设置本地代理,请参考这篇文章:
设置好以后,修改main.py 如下:
import os
import mitmproxy.http
print('脚本初始化成功')
def request(flow: mitmproxy.http.HTTPFlow):
pass
def response(flow: mitmproxy.http.HTTPFlow):
if flow.request.method == "GET" and "g-Then-And" in flow.request.url:
with open("ob.js","w",encoding = "utf-8") as fp:
fp.write(flow.response.text)
os.system("node main.js ob.js ok.js")
with open("ok.js","r",encoding = "utf-8") as fp:
flow.response.text = fp.read();
经过分析后得知,网站其实请求了两次 上面的混淆url,一次GET,一次是POST,因此需要在脚本中进行判断。
代码中的main.js,来自星球:
https://t.zsxq.com/19eQmMHZZ
并加了一行代码:
ast.program.body.unshift(types.DebuggerStatement());
即在代码的最开头加一个debugger;这样方便我们查看是否替换成功。
注意,main.js 和 main.py需要放在同一目录内。
3.运行
在进行替换前,建议先将该网站的所有 缓存,cookie 清空。打开cmder,输入:
mitmdump -q -p 8888 -s main.py
进行监听。再打开该网站,我们发现有替换的操作了:
并且,网站停在了debugger的位置:
这个时候,搜"p",定位到代码位置并打断点:
上面的debugger运行后,停到断点的位置:
可以直接看到 pD 的值,再运行,抓下一个混淆js的包:
这样直接就定位到 加密参数 p 的位置了。
3.源码获取
完整的代码我放星球了,有需要的自取:
https://t.zsxq.com/XPyFs
今天的文章就分享到这里,感谢大家的阅读!
欢迎加入知识星球,学习更多AST和爬虫技巧。