【爬虫】网站反debugger、内存爆破以及网站限制开辟者工具
【爬虫】网站反debugger、内存爆破以及网站直接限制开辟者工具声明:本文中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切结果均与作者无关!
常见情形
如今网站反爬手段有很多,好比:网站反debugger、内存爆破、限制开辟者工具等
环境一:debugger(右键不在此停止)
[*]问题: 有部门网站做了反debugger处理,当我们打开开辟者工具的时候会直接断点停在某个位置。
https://i-blog.csdnimg.cn/direct/7c451c7dca5c4cb587ecea8ee2bd0f3d.png
[*]解决办法:右键点击,选择永不在此停止。然后放过断点,即可继承调试。
前提:该debugger构造函数需要没有内容。如果网站开辟者自定义的debugger构造函数背面有内容,是在写入数据的话(不断写入空列表、其他字符等),我们跳过断点会导致连续写入,导致内存溢出,页面卡死。
https://i-blog.csdnimg.cn/direct/c27582f9ebe94d8094fc3c088762b556.png
环境二:内存爆破
绝大多数网站反debugger会更加高深,会使用到内存爆破以及混淆技能。导致我们通过简单的右键不在此停止无法破解。
我们使用右键不在此停止,并且跳过断点后,会导致浏览器卡死。
环境三:右键被管理员禁用
部门网站会直接限制我们使用开辟者工具,我们右键大概F12打开均无效,都被禁用。
我们想右键,打开开辟者工具时,发现被禁用。
https://i-blog.csdnimg.cn/direct/19855d56a4c94eebb5b32ad481c709f3.png
环境四:监测函数实行时间
https://i-blog.csdnimg.cn/direct/8b96bffb01224116930c24b20fdd9923.png
我们通过快捷键逼迫打开开辟者工具,发现页面提示非法调试。
我们进入debug断点分析,点击单步实行,查看页面js逻辑。
https://i-blog.csdnimg.cn/direct/60ef7c22f1694b52aec6a6970d4aab7a.png
https://i-blog.csdnimg.cn/direct/be3a26857565404d9d1e9afbdc69d82c.png
最终发现页面是通过判断当前window大小以及函数运行时间来确认是否存在非法调试。
解决办法
方法一:控制台-右键不再此停止
如果我们打开开辟者工具后,发现自动进入断点。
[*]首先尝试,鼠标右击永不在此停止
[*]放过该断点,即可继承调试
方法二:当地注入JS,覆盖之前老的JS
如果方法一无效:放过断点后会导致浏览器页面卡死。即可使用当地注入JS方法,将debugger构造器置空,覆盖之前的JS。
[*]分析浏览器卡死原因:网站开辟者自定义的debugger构造器不为空,在连续写入数据。
[*]当地注入JS不能革新网站,否则会导致我们当地注入的JS失效。
分析原因:浏览器卡死原因
我们单步实行断点,发现进入了VM虚拟环境,并且该JS是进行了混淆的。
https://i-blog.csdnimg.cn/direct/2c8a994254f840cd9839dcbf1e5000db.png
下面这种有特殊字符+数字+字母的,根本就是进行过JS混淆的:
https://i-blog.csdnimg.cn/direct/bd30c0f0d19e43c297efd69ac7a3b912.png
对于这种混淆过的JS代码,我们需要对其进行还原:
还原方法:复制JS代码,然后在控制台实行即可
//我们需要进行分段还原,否则一次性全部执行,会报not a function
(r(r, r))(r);
https://i-blog.csdnimg.cn/direct/88c489bece0c4315ac883ebba91ad6a4.png
还原后JS代码:‘constructor’ apply stateObject => 可以推测出,该自定义构造函数在初始化时,还做了加载某个对象的利用。及时我们右键点击了不再此停止,放过断点,但是依然会有源源不断的对象进行加载,末了导致浏览器卡死。
解决办法:当地注入JS
我们已经定位到了浏览器卡死是因为自定义的debugger构造器不断注入对象导致,那么我们就可以当地实行代码,替换该JS片段,让debugger构造器返回空,无法实现注入对象。
[*]新建代码片段
https://i-blog.csdnimg.cn/direct/1eeaf383422e403f9feb21d0ad9bd553.png
// 将debugger构造函数替换置空,防止内存爆破
// 1. after_debugger_handle 接收我们的构造器
// 2. 判断构造器如果构造了一个debugger的东西,我们就将其置空
after_debugger_handle = Function.prototype.constructor;
Function.prototype.constructor = function(a){
if (a == "debugger") {
return function(){};
}
return after_debugger_handle(a);
};
[*]点击下方的实行按钮,实行代码片段
https://i-blog.csdnimg.cn/direct/122b010385714882b78f266a9c836f9b.png
控制台未报错,表明注入乐成,此时我们放过断点,发现浏览器不再卡死,即可继承调试。
注意:
[*]注入后不能革新页面,否则页面重新加载会导致之前的注入失效。
https://i-blog.csdnimg.cn/direct/70c81987d4794eb39464a7cf23b518d4.png
[*]注入需要等网页数据全部加载完成后再进行,否则大概会报注入失败,JS函数找不到。
拓展:JS混淆(对网页的JS代码进行处理加密)
概念
网站开辟者为了防止我们对网站进行调试大概逆向分析,会对JS代码进行处理、保护。
[*]实际就是对JS代码进行编码、加密处理等。
JS压缩混淆:删除无用空白、收缩变量名
JavaScript 压缩混淆主要通过删除无用的空白字符、解释、收缩变量名等方式减小代码体积。压缩混淆不但可以减少文件大小,还能在一定程度上增长代码阅读难度。
OB混淆:插入不透明谓词(函数逻辑)
OB 混淆(Opaque Predicate Obfuscation)是一种复杂的混淆技能,通过插入不透明谓词来掩盖代码的真实逻辑,使逆向工程师难以理解代码的实际功能。
原始代码:
if (x > 10) {
console.log("x is greater than 10");
}
OB混淆后:
function isTrue() {
return Math.random() > 0.5;// 不透明谓词
}
if (isTrue() || x > 10) {
console.log("x is greater than 10");
}
在这个示例中,isTrue 函数的返回值是随机的,不透明谓词使得控制流变得更加难以预测。逆向工程师必须理解 isTrue 函数的实现才能准确分析代码逻辑。
变量混淆:重定名函数方法,改为a、b、c等
变量混淆通过重定名变量和函数名来增长代码的阅读难度,使得代码更难以理解。混淆后的变量名通常是偶尔义的短字符,如 a、b、c 等。
字符串混淆:对字符串进行编码和转换
字符串混淆通过对字符串进行编码和转换,使得字符串的真实内容难以直接查看。常用的字符串混淆技能包罗 Base64 编码和字符替换。
属性加密:对部门字段,如:用户名、年龄等进行加密
属性加密通过对对象属性进行加密,保护对象的内部数据。常用的加密方法包罗简单的 XOR 利用和更复杂的加密算法。
控制流平坦化:引入虚拟机+状态机,加大代码逻辑复杂度
控制流平坦化通过重构代码的控制流,使得代码逻辑更加复杂和难以理解。平坦化技能常用于保护步伐的实行流程。控制流平坦化通过引入虚拟机和状态机来重构代码的控制流。
案例:原始的条件语句被转换为一个状态机,控制流被重构成一系列状态和转换。这种方法使得代码的控制流更加复杂,增长了理解和分析的难度。
原始代码:
if (x > 10) {
console.log("x is greater than 10");
}
else { console.log("x is 10 or less");} 控制流平坦化处理后代码:
const states = ;
let state = 0;
function execute() {
switch (state) {
case 0:
if (x > 10) {
state = 2;
return;
} else {
state = 3;
return;
}
case 1:
console.log("x is greater than 10");
state = 4;
return;
case 2:
console.log("x is 10 or less");
state = 4;
return;
case 4:
// end state
return;
}
}
while (state !== 4) {
execute();
}
案例
可以看到下方对有一串字母以及数字,这种环境一般就是JS混淆,让我们无法知晓他JS源代码是什么样子。
https://i-blog.csdnimg.cn/direct/1eb99b70df694c7cabb0c771dc5ba7dc.png
解决办法:
[*]如果该网站使用的是开源的JS混淆代码,我们可以通过工具进行还原。
[*]如果网站使用的是自定义的混淆逻辑,我们只有手动通过控制台进行处理还原(直接复制混淆代码,然后放入控制台,回车即可进行还原。)
https://i-blog.csdnimg.cn/direct/5da259b4be3d4f4099c3ef6257cb542f.png
参考文章:https://blog.csdn.net/weixin_52392194/article/details/141159872
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]