kev*_*ner 45
这需要一些挖掘.samy.pl在此代码之上有几个级别的间接和混淆.它使用与JohanP发现的GitHub存储库不同的检测代码版本.与GitHub存储库不同,samy.pl中的代码可以在未停靠时检测到devtools.
它通过使用一个短脚本执行此操作,该脚本根据devtools是打开还是关闭而执行不同.
这是一个独立的例子; 在浏览器中打开它,注意输出在打开和关闭devtools时是如何变化的(无论是否停靠):
<!DOCTYPE html>
<html>
<body>
<pre id="output"></pre>
<script type="text/javascript">
var element = new Image;
var devtoolsOpen = false;
element.__defineGetter__("id", function() {
devtoolsOpen = true; // This only executes when devtools is open.
});
setInterval(function() {
devtoolsOpen = false;
console.log(element);
document.getElementById('output').innerHTML += (devtoolsOpen ? "dev tools is open\n" : "dev tools is closed\n");
}, 1000);
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
setInterval每秒执行一次.console.log始终执行,无论devtools是打开还是关闭:console始终定义对象.但是,该log方法仅在devtools打开时将输出写入控制台.如果关闭devtools,那console.log就是无操作.这是让您检测devtools是否打开的关键:检测日志操作是否为无操作.
在写入element控制台的过程中,它获取元素的id.这称为附带的功能__defineGetter__.因此,console.log(element)只有在devtools打开且console.log不是no-op 时才会运行的调用.该函数中设置了该标志,每秒为我们提供一个devtools状态的更新视图.
samy.pl使用一些额外的技巧来隐藏它:控制台也每秒都被清除,并且这个代码用空格(!)编码进行混淆.
| 归档时间: |
|
| 查看次数: |
8697 次 |
| 最近记录: |