- 网络安全
- 后端
【免费下载链接】r4ven
Track the GPS location of the user's smartphone or PC and capture a picture of the target, along with IP and device information.
📷R4ven是一款基于浏览器的安全研究工具,其摄像头模块(cam)会在目标点击链接并授权后,每 1.5 秒自动截取一张前置摄像头画面并回传至 Discord。本文从源码层面拆解 R4ven 摄像头连拍的实现原理,并分析该机制对设备性能的实际影响,帮助新手理解浏览器摄像头权限滥用的风险。
一、R4ven 摄像头模块是做什么的?
R4ven 提供 4 种运行模式(GPS 定位、摄像头截图、IP 抓取、全功能),其中摄像头模式对应 cam/index.html 这个页面。整个流程可以概括为三步:
| 步骤 | 发生位置 | 动作 |
|---|---|---|
| 1 | 本地 Flask 服务器 | 向目标提供伪装网页,内嵌 iframe 吸引注意力 |
| 2 | 目标浏览器 | 请求getUserMedia前置摄像头权限,持续截图 |
| 3 | 本地服务器 | 接收图片、落盘保存并推送到 Discord Webhook |
端口转发(Serveo / Cloudflare / Ngrok)由 port_forward.py 完成,让局域网内的 Flask 服务对外可访问:
⚠️ R4ven 官方定位是安全教育与授权渗透测试工具,请勿用于未经授权的用途(详见 README.md 中的使用边界说明)。
二、1.5 秒连拍机制:核心代码拆解
连拍的核心隐藏在 cam/index.html 的handleSuccess函数中,逻辑非常直接:
- 申请摄像头:
getUserMedia({video: {facingMode: "user"}})专门请求前置摄像头,拿到一条持续的视频流; - 准备画布:页面中有一个隐藏的
<video>播放视频流,以及一个640×480 分辨率的隐藏<canvas>; - 定时截图:通过
setInterval每1500 毫秒(1.5 秒)执行一次——先把当前视频帧drawImage画到画布上,再用canvas.toBlob(..., 'image/jpeg')压缩成 JPEG 图片,最后调用postFile函数发起上传。
也就是说,所谓"1.5 秒间隔截图"并不是系统截屏,而是浏览器对摄像头视频流逐帧采样:每隔 1.5 秒从视频流里"抠"出一帧,压成 JPEG 就发走一张。页面全程隐藏(hidden属性),用户看到的只是 iframe 里的正常网页。
上传地址是怎么来的?
截图的上传目标并非写死,cam/index.html 会先请求本地服务的/get_target接口拿到目标地址(由启动参数-t指定,默认http://localhost:8000/image),随后用FormData以image字段 POST 过去。
三、图片回传链路:落盘 + Webhook 双通道
服务端/image路由定义在 port_forward.py,收到图片后做了两件事:
- 按时间戳落盘:文件名格式为
%Y%m%d-%H%M%S.jpeg(如20261011-125133.jpeg),保存在当前工作目录,便于事后取证; - 即时推送到 Discord:通过 Webhook 把图片发到 Discord 频道,配合 utils.py 的
update_webhook完成通知。
最终效果就是 Discord 频道里像"弹幕"一样不断滚入截图,同时设备信息、IP 与 GPS 数据也以 Embed 消息形式推送(见 snapshots/dasdas.png 类似的数据卡片):
四、性能影响分析:这套连拍有多"费"?
🖥️ CPU 与内存:持续占用,难以空闲
- 解码不中断:
getUserMedia拿到的视频流会一直解码渲染,即使<video>是隐藏的,浏览器仍维持完整管线; - 每秒约 0.67 次编码:
toBlob('image/jpeg')每 1.5 秒触发一次 640×480 的 JPEG 压缩,单次开销不大,但永不停歇——比"拍一张就走"的恶意页面消耗高出一个量级; - 老旧手机或低端笔记本在后台长时间挂着该页面时,可能出现发烫、帧率下降。
🔋 电量:最直观的影响因素
摄像头 + 屏幕 + 网络三者同时工作,是典型的耗电组合。按 1.5 秒一张估算:
| 指标 | 数值 |
|---|---|
| 截图频率 | ≈ 40 张 / 分钟 |
| 每小时上传量 | ≈ 2400 张 JPEG |
| 单张体积(640×480 JPEG) | 约 20~50 KB |
| 每小时上行流量 | 约 50~120 MB |
对电池 5000mAh 左右的手机,长时间(数小时)保持该页面开启,电量消耗可达正常刷网页的 2~3 倍,摄像头指示灯(如有)也会常亮——这其实是用户可感知的重要泄露信号。
🌐 网络与隐蔽性:setInterval 的"隐患"
这里有一个值得注意的实现细节:代码用的是setInterval而不是"上传完成后再排下一次"的递归setTimeout。这意味着定时器不关心上传是否成功或完成——弱网环境下请求会排队堆积,可能造成:
- 上传队列膨胀,CPU/网络瞬时压力上升;
- 部分浏览器对同源并发 XHR 有限制,过快的请求反而被节流,形成"网络指纹"异常,不利于隐蔽。
反过来看,1.5 秒这个间隔是在取证密度(足够还原用户行为轨迹)与流量/电量成本之间做的折中,属于攻击者视角下的"性价比"选择。
五、如何防范这类摄像头权限滥用?
- 🔍认准摄像头指示灯与权限弹窗:任何网页请求摄像头权限时,先问一句"这个网站真的需要吗?"——聊天/视频类站点才合理;
- 🔒默认拦截权限:在 Chrome/Edge 中把"摄像头"权限设为"询问并默认拒绝",Safari 和 Brave 本身就更严格(README 也提到这类浏览器会自动拦截);
- 🧹定期清理已授权站点:浏览器设置 → 网站设置 → 摄像头,删除不认识的条目;
- ⚡发现异常耗电立即关页:若某页面在后台持续耗电发热,关闭标签页即可终止视频流。
六、总结
R4ven 的摄像头连拍机制看似复杂,核心其实只有三行关键逻辑:getUserMedia拿流 → 隐藏 canvas 逐帧采样 →setInterval(1500)定时压图上传。它以极低的代码成本实现了持续性的摄像头监控,代价则是设备 CPU、电量与上行带宽的长期消耗——这也正是它作为安全意识教学工具的价值所在:让你亲眼看到,一次轻率的"允许",换来的是一段永不停歇的视频流。
📁 延伸阅读:cam/index.html(连拍前端逻辑)、port_forward.py(
/image接收接口)、r4ven.py(主入口与模式选择)
- 网络安全
- 后端
【免费下载链接】r4ven
Track the GPS location of the user's smartphone or PC and capture a picture of the target, along with IP and device information.
相关推荐
终极指南:如何动态调整虚拟摄像头分辨率并优化性能影响
终极指南:如何动态调整虚拟摄像头分辨率并优化性能影响 在当今远程协作与内容创作的时代,虚拟摄像头工具已成为不可或缺的生产力助手。Captura作为一款功能全面的
桌面应用屏幕录制音视频Z-Anime与其他AI绘图模型横向对比:为什么它是动漫创作的首选?
Z Anime与其他AI绘图模型横向对比:为什么它是动漫创作的首选? 在AI绘图领域,动漫风格创作一直是热门方向。Z Anime作为基于Z Image Base
R4ven摄像头模块代码逐行解析:getUserMedia到canvas截图上传的4个关键步骤
R4ven摄像头模块代码逐行解析:getUserMedia到canvas截图上传的4个关键步骤 R4ven 是一款面向安全研究与隐私意识教育的工具,其中摄像头模
网络安全后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考