九、灌爆 console另一個有趣的 side-channel 是透過大量寫入各種資訊並衡量所需時間 。
以前有一種方法是,不斷地建立新的 DOM element,並計算所需時間,如果所需時間太長,可能就是 DevTools 有開啟,因為當 DevTools 開啟時若 DOM tree 有改變則會需要在 DevTools 中標示出改變,這個動作很吃效能,會導致新增 DOM element 的速度變慢 。然而這方法已經不能用了 。
現在有另一個方法是,不斷寫資料到 console 並計算所需時間,如果所需時間過長,可能就是瀏覽器忙著把資料輸出到 DevTools,代表 DevTools 有開啟 。
1 2 3 4 5 6 7 8 9101112function measure() {const start = performance.now();for (let i = 0; i < 100; i++) {console.log(i);console.clear();}const time = performance.now() - start;if (time > threshold) {// DevTools are open.}}setInterval(measure, 1000); 這個方法的一個缺陷是,如果使用者電腦太慢,可能會導致 false positive 或是拖垮網頁效能 。後記以上總共討論了九種 anti-debugging 的方法 。方法與 code 主要出自 U Can’t Debug This: Detecting JavaScript Anti-Debugging Techniques in the Wild,除了少數幾個範例為了呈現品質而有調整 。另外我也參考了這篇 Stackoverflow 問題 。如果想對這議題有更多了解,例如該怎麼偵測 anti-debugging techniques、哪些方法被廣泛使用之類的,可以看看原始論文 。
- Author: Allen Chou
- Link: https://blog.allenchou.cc/post/js-anti-debugging/
推荐阅读
- 工厂模式:将对象的创建与使用分离,提高程序可维护性和可扩展性
- 从不同维度分析:Linux与Windows的区别
- 你应该知道的18个Python函数
- 周冬雨|周冬雨戛纳造型惨遭网友嫌弃,网友言语粗鄙,但说的好有道理!
- 自驾318川藏线,有哪些值得推荐的景点?我选了这5个地方
- 如何更好的选择白酒?
- 松茸和姬松茸的区别您知道多少
- 刚从街道办事处辞职,我来告诉你们事业编的真实工资
- 自动挡上的P、R、N、D、S、L和M,表示什么意思?一句口诀教会你
- 车险的5种买法,优缺点对比,看看哪种更适合您
