mitmproxy消息拦截-突破瑞数js加密验证
老规矩先上效果图 :
mitproxy_1.gif一 先介绍 mitmproxy :
>>请移步到官网: https://www.mitmproxy.org/
二 反爬思考:
当需求网站js加密混淆, 动态cookies, 加密参数级别太高直接破解难度极高时
此时实现需求绕过反爬的方式有如下几种:
-
selenium 模拟浏览器驱动
image.png -
fiddler 抓包软件内部脚本
image.png -
谷歌-油猴编写 js hook插件 将加密参数通过sokect发送至后台
-
其他终端模拟程序 如:PyAutoGUI,PyUserInput 等
-
使用mitmproxy抓包拦截 原理可类比fiddler 支持三种模式 其中Python-API是神器
image.png
三 python-api mitmdump 使用
1 实用范围:
几乎支持网络传输生命中的所有event事件处理:
插件通过事件与mitmproxy的内部机制挂钩。这些是在插件上作为一组众所周知的名称的方法实现的。许多事件接收流对象作为参数—通过修改这些对象,插件可以动态地改变流量。例如,这里是一个插件,添加了一个响应头的计数,响应的数量看到:
2 主要应用的三大事件:
1 HTTP Events;2 WebSocket Events; TCP Events 来源 >> https://docs.mitmproxy.org/stable/addons-events/
简单使用示例:
** HTTP Events **
在http请求流程中的各个阶段如 http_connect,request,responseheaders, response 都可以进行自定义消息处理
Example:
from mitmproxy import http
def request(flow: http.HTTPFlow) -> None:
# 拦截指定站点链接 - 修改返回响应
if flow.request.pretty_url == "http://example.com/path":
# 自定义响应
flow.response = http.HTTPResponse.make(
200, # (optional) status code
b"Hello World", # (optional) content
{"Content-Type": "text/html"} # (optional) headers
)
# 获取响应cookie
cookies = flow.response.cookies
print(cookies)
# 修改响应内容
js_script = '''<script> console.log('消息注入成功') </script> \n\r'''
flow.response.text = js_script + flow.response.text
# '''''''
基于如上的例子 这样就能在消息返回阶段做很多事情了
如:注入js代码(很多外挂就是这么干的);拦截获取cookies;直接保存响应html源码 等等
这样js,cookies ,动态加密等问题就浏览器环境直接帮我们做了 我们拦截拿现成的参数结果就行
四 最后代码
附上完整代码: 湖北省发改委 瑞数反爬虫
> Github地址 : https://github.com/Forbilly/ruishu_untispider
作者:Silva
网友评论