JS逆向无限debugger,混淆

文章探讨了JavaScript代码混淆、加密技术,包括接口加密、变量混淆、Emscripten和WebAssembly的应用,以及如何使用eval和调试工具进行代码操作。同时提及了浏览器指纹识别和反爬虫中的CSS技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先在api接口里看回来的数据有咩有混淆(启动器里看)

是一个类对象的方法  直接搜索decrypt(

设置-------代码折叠

浏览器指纹绕过

curl_cffi: 支持原生模拟浏览器 TLS/JA3 指纹的 Python 库_Resphalios的博客-优快云博客

无限debugger的解决方案

测试浏览器相等

(function () {}).constructor === Function   返回tucu的话就可以直接过dug

Function.prototype.constructor =function(){}

1,禁用所有的断点-----》开启所有断点不启用

2,禁用一处断点----》找到关键位置然后设置永不再此断

3,条件断点-------》也是在关键点找到后加一个条件 可以直接加fales让他不执行着

4,中间人工具替换特征字符串   feddler去写js替换
5,reres 替换本地修改过的文件

6,重写关键函数 -----》先把断点打在bug函数的下面,等断点出现后在控制台重写bug函数,让他置空

混淆

JavaScript 压缩
混淆 + 加密
1. 接口加密技术:
针对某些接口进行加密 -> url 参数 校验 编号 编码 (token sign 签名算法加密)

2. JavaScript压缩 混淆 加密技术:
JavaScript特点:
1. 客户端 ->必须要在用户浏览器加载并运行的
2. 公开透明的 浏览器获取JavaScript源代码

2.1 代码压缩:

2.2 代码混淆

2.3 代码加密 eval

3. 接口加密:
3.1 完全开放接口

3.2 接口参数加密:
接口校验方式 -> base64 Hex编码 MD5 AES DES RSA 等等 加密技术
sign -> 服务器和客户端校验 -> url path MD5加密 URL参数 base64编码 sign(aabbccvv)
-> request url 某个参数 请求头某个参数
服务器 -> 对比 客户端sign 服务器生成 sign 是否一致

www.baidu.com?word='xxxbbdbdd'(加密?)

提交?

4. JS混淆中混淆手段:
变量混淆:

字符串混淆

属性加密

僵尸代码

控制流平坦化(for  和 switch语句 )



多态变异

反格式化

特殊编码

静态图片 -> 假的 详情页 图片地址 https://www.img.com?abbcv假的sfhjasgfah
首页的图片里面 小图 图片地址 (xxxxxx/dasgasga/asfasfgas/sagfas.png)

JavaScript-obfuscator 对代码实现的混淆
https://obfuscator.io/ ES8 免费


npm init 初始化工作区域
npm install --save-dev javascript-obfuscator 下载混淆包


5. JavaScript 加密:
Emscripten:
asm.js
文本
WebAssembly:
二进制字节码

const code = `
let hello = '1' + 1
console.log('hello', hello)
`

const options = {
    compact: false,  // 是否压缩
    // mangled 变量名替换成普通的 简写字符
    // hexadecimal 替换为16进制字符串
//    identifierNamesGenerator: 'hexadecimal'
    // 代码体积变小
    // 拼接了前缀
//    identifiersPrefix: 'germey'
    // 指定是否混淆全局变量 或者函数名称
    renameGlobals: true
}

const obfuscator = require('javascript-obfuscator')
function obfuter(code, options){
    return obfuscator.obfuscate(code, options).getObfuscatedCode()
}
console.log(obfuter(code, options))


 

 eval:加密可以直接把这一串丢到控制台打印出结果也可以去掉eval再打印得到原来的代码

Emscripten :WebAssembly都是c或者c++重写

 JavaScript混淆-开源项目

UglifyJS:  https://github.com/mishoo/UglifyjS2

terser:   https://github.com/terser/terser

 javascript-obfuscator: https://github.com/javascript-obfuscator/javascript-obfuscator

jsfuck:   https://github.com/aemkei/jsfuck

AAEncode:   https://github.com/bprayudha/jquery.aaencode

JJEncode :  https://github.com/ay86/jEncrypt

加密分析步骤

颜文字类 

可以用请求里的一些字符打xhr断点,去堆站找最底下一条,找到混淆的代码,到控制台输出,若果有错就可以直接到里面去,如过没报错就先删除最后一个符号,让他报错,或者删除最后一个在.tostring

 

 eval打包类

 

还原代码

响应的加密

先全局搜索

1,decode

2,decry

3.JSON.pares  

4,写油猴脚本去hook JSON

css做的常见反爬

1.利用字体

应对措施:

(1)下载woff文件,转为tff文件

(2)用百度字体编辑器打开tff文件,确定其unicode与实际值的映射关系

  (3) 将下载的HTML内容按照映射关系替换

(4)解析HTML并获取正确的数据

注意tff文件的动态生成

2.背景

3.伪类

4利用元素定位

5.利用字符切割

<think>好的,我现在需要处理用户关于瑞数6绕过无限debugger方法的请求。首先,我得回顾一下用户提供的引用内容,看看有没有相关的信息。引用[1]提到瑞数使用了eval函数隐藏代码,难以定位debugger的位置,并且代码总在变化,绕过需要时间。用户现在特别询问瑞数6的绕过方法,所以需要针对这个版本的具体情况进行分析。 接下来,我需要考虑瑞数6可能使用的反调试机制。根据引用[3],瑞数可能通过eval函数动态执行代码,隐藏debugger的位置。传统的重写构造函数或断点绕过可能不够,因为瑞数的代码混淆和动态变化会让这些方法失效。引用[4]提到在Chrome开发者工具中设置“Never pause here”,但瑞数6可能频繁更换断点位置,使得手动设置不现实。 用户提供的引用[5]中的链接可能包含更详细的技术实现,但根据现有信息,我需要综合各引用来构建解决方案。可能的思路包括动态Hook关键函数、拦截eval执行、修改调试环境检测逻辑。例如,使用中间人攻击或浏览器插件来修改JS代码,或者在运行时动态替换关键函数,如setInterval或Function构造函数,以防止debugger触发。 另外,引用[2]提到绕过无限Debugger的方法,比如重写构造函数或使用Never pause here,但瑞数6可能需要更高级的方法,如自动化脚本处理动态生成的debugger语句,或利用浏览器内核定制,如引用[1]提到的定制Chromium来绕过检测。 还需要考虑瑞数6的代码混淆和自校验机制,可能需要AST级别的代码重构或动态Hook技术。引用[3]提到重写函数使debugger失效,但瑞数可能检测函数是否被篡改,所以需要更隐蔽的Hook方式,比如使用Proxy对象或修改原型链。 最后,用户可能需要具体的代码示例,比如使用Chrome插件或Puppeteer自动化来绕过debugger。例如,在Puppeteer中设置Chrome启动参数禁用调试,或者在页面加载前注入脚本覆盖关键函数。 总结,瑞数6的绕过需要结合动态Hook、代码拦截和环境伪装,同时处理代码混淆和动态变化带来的挑战。需要分步骤详细说明技术实现,并确保引用相关段落作为支持。</think>### 瑞数6绕过无限Debugger方法的技术实现 瑞数6的反调试机制通过动态混淆、`eval`函数执行及环境检测实现无限Debugger干扰逆向分析。以下是核心绕过思路及技术实现步骤: --- #### **1. 动态Hook关键函数** 瑞数6通过`eval`或`Function`构造函数动态生成含Debugger的代码[^1][^3]。可通过拦截`eval`和`Function`的执行,过滤或替换`debugger`关键字: ```javascript // Hook eval函数 const originalEval = window.eval; window.eval = function(code) { code = code.replace(/debugger/g, ''); return originalEval(code); }; // Hook Function构造函数 const originalFunction = window.Function; window.Function = function(...args) { const body = args.pop(); if (typeof body === 'string' && body.includes('debugger')) { args.push(body.replace(/debugger/g, '')); } return originalFunction(...args); }; ``` --- #### **2. 断点绕过与调试环境伪装** 瑞数6会检测调试工具(如Chrome DevTools)的存在[^4]。需通过以下方法伪装环境: - **禁用断点触发** 在Chrome开发者工具中,右键点击行号选择**Never pause here**,或通过`--auto-open-devtools-for-tabs`启动参数禁用调试器检测[^4][^5]。 - **修改环境属性** 覆盖`navigator.webdriver`、`window.chrome`等属性: ```javascript Object.defineProperty(navigator, 'webdriver', { get: () => false }); delete window.chrome; ``` --- #### **3. AST重构与代码动态修复** 针对瑞数6的代码混淆和自校验机制,需进行AST(抽象语法树)级别的代码解析与重构: - **使用工具解析动态代码** 利用`Babel`或`Esprima`解析`eval`执行的代码,定位并删除`debugger`语句。 - **动态注入Hook脚本** 在页面加载前注入代理脚本,覆盖`setInterval`、`setTimeout`等可能触发Debugger的函数: ```javascript const originalSetInterval = window.setInterval; window.setInterval = function(fn, delay) { if (fn.toString().includes('debugger')) return; return originalSetInterval(fn, delay); }; ``` --- #### **4. 浏览器内核定制(高级)** 对于深度防护场景(如动态更换Debugger位置),可定制Chromium内核: - **修改V8引擎行为** 通过修改V8源码中的`Debugger::Break`函数,跳过Debugger指令执行[^1]。 - **禁用调试协议** 编译浏览器时关闭`--enable-debugging`标志,阻断开发者工具与页面的通信。 --- #### **5. 自动化工具集成** 使用`Puppeteer`或`Selenium`自动化控制浏览器,结合上述方法: ```javascript const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: false, args: ['--disable-web-security', '--no-sandbox'] }); const page = await browser.newPage(); await page.evaluateOnNewDocument(() => { // 注入Hook脚本 window.eval = code => { ... }; }); await page.goto('目标网站'); })(); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值