浏览器加载一个js脚本,会在devtools中留下各种痕迹,elements中的script元素,console中的日志,source中的代码,network中的网络请求等
前端30K面试准备,最完整面试真题分享!
elements
这个比较简单,插入js的时候设置好id,在js中删掉自身就好了
对于引用js
对于动态加载的js也是一样的
或者也可以这样
虽然看起来很奇怪,但a.js确实能执行,似乎是加载a.js时阻塞了脚本执行,执行完a.js之后再remove
console
clear就好了
source
直接引用和动态加载都会在source中出现
这样都是不行的,经过测试发现动态插入js代码时不会被记录在source中
这样a.js就不会出现在source里了
network
常规HTTP/WebSocket都会被记录,无法绕过,但是WebRTC不会,WebRTC可以基于UDP/TCP传输,WebRTC提供createDataChannel API,可以用于传输文本,那么就可以实现network隐藏加载
考虑WebRTC需要传递offer和icecandidate,还是得通过HTTP/WebSocket传输,而且复杂网络环境下还需要使用或部署STUN/TURN服务器,稳定性有待考虑
WebRTC技术可以参考学习我最近看的几篇文章透明日报20200801期
其他的方法我还没有找到,技术不行就社会工程
一个思路是可以伪装成其他流量混过去,比如png
然后在delvtools里也看不出来
另外一个思路是devtools目前只在打开的时候记录network数据,那么只要在devtools关闭的时候加载资源,打开就不加载,这样就不会出现在network里了
新的问题又出现了,如何检测devtools的状态,网上已经有不少公开技巧了
https://github.com/sindresorhus/devtools-detect
https://github.com/AEPKILL/devtools-detector
最后
还可以在哪里找到加载和执行痕迹呢
还有什么方法可以隐藏这些痕迹呢
前端30K面试准备,最完整面试真题分享!