js加密参数定位

article/2025/11/7 10:05:03

当我们抓取网页端数据时,经常被加密参数、加密数据所困扰,如何快速定位这些加解密函数,尤为重要。本片文章是我逆向js时一些技巧的总结,如有遗漏,欢迎补充。

所需环境:Chrome浏览器

1. 搜索

1.1 全局搜索

适用于根据关键词快速定位关键文件及代码

当前页面右键->检查,弹出检查工具

搜索支持 关键词、正则表达式

1.2 代码内搜索

适用于根据关键词快速定位关键代码

点击代码,然后按ctrl+f 或 command+f 调出搜索框。搜索支持 关键词、css表达式、xpath

2. debug

2.1 常规debug

适用于分析关键函数代码逻辑
  1. 埋下断点

  1. 调试


如图所示,我标记了1到6,下面分别介绍其含义
1.执行到下一个端点 2.执行下一步,不会进入所调用的函数内部 3.进入所调用的函数内部 4.跳出函数内部 5.一步步执行代码,遇到有函数调用,则进入函数 6.Call Stack 为代码调用的堆栈信息,代码执行顺序为由下至上,这对于着关键函数前后调用关系很有帮助

2.2 XHR debug

匹配url中关键词,匹配到则跳转到参数生成处,适用于url中的加密参数全局搜索搜不到,可采用这种方式拦截

2.3 行为debug

适用于点击按钮时,分析代码执行逻辑

如图所示,可快速定位点击探索按钮后,所执行的js。

3 查看请求调用的堆栈

可以在 Network 选项卡下,该请求的 Initiator 列里看到它的调用栈,调用顺序由上而下:

4. 执行堆内存中的函数

当debug到某一个函数时,我们想主动调用,比如传递下自定义的参数,这时可以在检查工具里的console里调用

此处要注意,只有debug打这个函数时,控制台里才可以调用。如果想保留这个函数,可使用this.xxx=xxx 的方式。之后调用时无需debug到xxx函数,直接使用http://this.xxx 即可。

5. 修改堆栈中的参数值

6. 写js代码

7. 打印windows对象的值

在console中输入如下代码,如只打印_$开头的变量值

for (var p in window) {if (p.substr(0, 2) !== "_$") continue;console.log(p + " >>> " + eval(p))
}

8. 勾子

以chrome插件的方式,在匹配到关键词处插入断点

8.1 cookie钩子

用于定位cookie中关键参数生成位置
var code = function(){var org = document.cookie.__lookupSetter__('cookie');document.__defineSetter__("cookie",function(cookie){if(cookie.indexOf('TSdc75a61a')>-1){debugger;}org = cookie;});document.__defineGetter__("cookie",function(){return org;});
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

当cookie中匹配到了 TSdc75a61a, 则插入断点。

8.2 请求钩子

用于定位请求中关键参数生成位置
var code = function(){
var open = window.XMLHttpRequest.prototype.open;
window.XMLHttpRequest.prototype.open = function (method, url, async){if (url.indexOf("MmEwMD")>-1){debugger;}return open.apply(this, arguments);
};
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

当请求的url里包含MmEwMD时,则插入断点

8.3 header钩子

用于定位header中关键参数生成位置
var code = function(){
var org = window.XMLHttpRequest.prototype.setRequestHeader;
window.XMLHttpRequest.prototype.setRequestHeader = function(key,value){if(key=='Authorization'){debugger;}return org.apply(this,arguments);
}
}
var script = document.createElement('script');
script.textContent = '(' + code + ')()';
(document.head||document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

当header中包含Authorization时,则插入断点

8.4 manifest.json

插件的配置文件
{"name": "Injection","version": "2.0","description": "RequestHeader钩子","manifest_version": 2,"content_scripts": [{"matches": ["<all_urls>"],"js": ["inject.js"],"all_frames": true,"permissions": ["tabs"],"run_at": "document_start"}]
}

使用方法

  1. 如图所示,创建一个文件夹,文件夹中创建一个钩子函数文件inject.js 及 插件的配置文件 manifest.json 即可

  1. 打开chrome 的扩展程序, 加载已解压的扩展程序,选择步骤1创建的文件夹即可

  1. 切换回原网页,刷新页面,若钩子函数关键词匹配到了,则触发debug

9. 破解无限debugger防调试

如果你打开chrome的检查工具,发现自动断到了如下的位置,那么这种手段为常用的反调试手段

对应的破解手段如下:

9.1 方法置空

从原函数中可以看到这是一个无限递归的函数,目的就是当你开启了检查工具时,出现无数次debug,阻止你debug调试。那么我们重写这个函数就可以了,在Console 一栏中使用匿名函数给本函数重新赋值,这样就把_0x355d23函数变为了一个空函数,达到了破解无限debugger的目的

9.2 干掉定时器

适用于定时器类触发的debug

for (var i = 1; i < 99999; i++)window.clearInterval(i);

9.3 中间人拦截替换无限debug函数

推荐使用mitmproxy拦截

10. console中使用xpath或css

xpath: $x("your_xpath_selector")
css: $$("css_selector")

11. Network下 Filters(过滤器)

筛选框可以实现很多定制化的筛选,比如字符串匹配,关键词筛选等,其中关键词筛选主要有如下几种(输入-显示全部):

  1. domain:仅显示来自指定域的资源。您可以使用通配符()来包括多个域。例如,.com显示以.com结尾的所有域名中的资源。 DevTools会在自动完成下拉菜单中自动填充它遇到的所有域。
  2. has-response-header:显示包含指定HTTP响应头信息的资源。 DevTools会在自动完成下拉菜单中自动填充它遇到的所有响应头。
  3. is:通过is:running找出WebSocket请求。
  4. larger-than(大于) :显示大于指定大小的资源(以字节为单位)。设置值1000等效于设置值1k。
  5. method(方法) :显示通过指定的HTTP方法类型检索的资源。DevTools使用它遇到的所有HTTP方法填充下拉列表。
  6. mime-type(mime类型:显示指定MIME类型的资源。 DevTools使用它遇到的所有MIME类型填充下拉列表。
  7. mixed-content(混合内容:显示所有混合内容资源(mixed-content:all)或仅显示当前显示的内容(mixed-content:displayed)。
  8. Scheme(协议):显示通过不受保护的HTTP(scheme:http)或受保护的HTTPS(scheme:https)检索的资源。
  9. set-cookie-domain(cookie域):显示具有Set-Cookie头,并且其Domain属性与指定值匹配的资源。DevTools会在自动完成下拉菜单中自动填充它遇到的所有Cookie域。
  10. set-cookie-name(cookie名):显示具有Set-Cookie头,并且名称与指定值匹配的资源。DevTools会在自动完成下拉菜单中自动填充它遇到的所有Cookie名。
  11. set-cookie-value(cookie值):显示具有Set-Cookie头,并且值与指定值匹配的资源。DevTools会在自动完成下拉菜单中自动填充它遇到的所有cookie值。
  12. status-code(状态码):仅显示其HTTP状态代码与指定代码匹配的资源。DevTools会在自动完成下拉菜单中自动填充它遇到的所有状态码。

http://chatgpt.dhexx.cn/article/1If3UTej.shtml

相关文章

【APP 逆向百例】Frida 初体验,root 检测与加密字符串定位

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

巴斯勒相机acA1300-60gm

Basler acA1300-60gm GigE 相机配有 e2v EV76C560 CMOS 感光芯片&#xff0c;每秒 60 帧图像&#xff0c;130 万像素分辨率。

如何选择合适的工业相机

如何选择合适的工业相机 目录 如何选择合适的工业相机简洁具体**多相机检测****工业相机的白平衡知识**工业相机的参数工业数字相机常见问题解决方案参考文献 简洁 工业相机有许多项参数&#xff0c;选择合适的工业相机既要考虑工业相机的参数&#xff0c;也要考虑到项目的精度…

巴斯勒BASLER GIGE相机程序调试报错后需要拔网线

巴斯勒BASLER GIGE相机程序调试报错后需要拔网线的个人解决方案 根据SDK的用户手册提示&#xff0c;在相机连接后&#xff0c;直接执行以下程序。 camera.Parameters[PLTransportLayer.HeartbeatTimeout].TrySetValue(1000,IntegerValueCorrection.Nearest); // 1000 ms time…

机器视觉_工业相机及相关配件选型

文章目录 工业相机一、 概述二、 相机参数1. 传感器芯片1.1. CCD&CMOS1.2. CCD1.3. CMOS1.4. 靶面1.5. 传感器芯片选型 2. 黑白or彩色3. 帧数⭐4. 接口类型4.1. POE供电 三、相关硬件⭐1. 镜头1.1. 焦距⭐1.2. 视野⭐1.3. 物距1.4. 景深⭐1.5. 调焦1.6. 镜头的一些理论小知…

Ubuntu环境下配置巴斯勒相机及相机测试

Ubuntu环境下配置巴斯勒相机及相机测试 Ubuntu配置巴斯勒相机及相机测试软硬件要求Ubuntu虚拟系统安装安装c编译器安装Sublime Text 3及配置C运行环境配置巴斯勒相机SDK及代码测试 Ubuntu配置巴斯勒相机及相机测试 软硬件要求 软件 我们对Markdown编辑器进行了一些功能拓展与…

Python之OpenCV 005 工业相机Basler之图像采集

工业机器视觉系统2D应用用到Basler&#xff08;德国&#xff09;&#xff0c;Baumer&#xff08;瑞士&#xff09;&#xff0c;ImageSource&#xff08;台湾&#xff09;&#xff0c;大恒和海康等等牌子工业相机。 Basler&#xff08;巴斯勒&#xff09;是比较常用的&#xff…

机器视觉 · 工业相机

文章目录 工业相机 面阵相机工业相机 线阵相机工业相机 光场相机工业相机 棱镜相机工业相机 多光谱/高光谱工业相机 偏振相机工业相机 传感器 CCD工业相机 传感器 ICCD工业相机 传感器 EMCCD工业相机 传感器 CMOS工业相机 传感器 sCMOS工业相机 传感器 红外探…

BASLER巴斯勒线扫相机使用流程

(Q有答疑)康耐视智能相机Insight-OCR读取案例 1、相机连接—线缆连接 将相机电源线、网线与相机连接,网线另一端连接电脑 无编码器触发时,只需连接网线、电源线即可 2、修改电脑IP 3、修改相机IP 4、相机连接—软件连接 连接相机有两种方式: 1、双击该相机型号进行连接;…

basler工业相机使用经验小记

1&#xff0c;windows10的系统&#xff0c;要用&#xff15;以上的&#xff53;&#xff44;&#xff4b;不然打不开相机。 &#xff12;&#xff0c;如果用&#xff4f;&#xff50;&#xff45;&#xff4e;&#xff43;&#xff56;或&#xff56;&#xff53;程序打开忘记…

国内工业相机十大排名

国内智能相机十大排名&#xff0c;我们今天先不从视觉检测解决方案的角度出发&#xff0c;而是从ccd视觉检测产品的角度来评选出机器视觉龙头企业。众所周知&#xff0c;整个视觉系统我们所用到的软硬件产品有&#xff1a;光源、镜头、工业相机、视觉软件等&#xff0c;那么在这…

工业相机厂家十大排名

我们今天先不从视觉检测解决方案的角度出发&#xff0c;而是从ccd视觉检测产品的角度来评选出机器视觉龙头企业。众所周知&#xff0c;整个视觉系统我们所用到的软硬件产品有&#xff1a;光源、镜头、工业相机、视觉软件等&#xff0c;那么在这些领域哪些公司做的比较好呢&…

机器视觉-工业相机篇

机器视觉-工业相机篇 工业相机又俗称摄像机&#xff0c;相比于传统的民用相机&#xff08;摄像机&#xff09;而言&#xff0c;它具有高的图像稳定性、高传输能力和高抗干扰能力等优点。目前市面上工业相机大多是基于 CCD &#xff08; Charge Coupled Device &#xff09;或 …

丝贝视像的工业相机系列介绍

目前&#xff0c;丝贝视像的主要工业相机型号如下表所示&#xff0c; 型号分辨率最大帧率可采用备注SVV034-USB2752X48060单色全局快门 SVM001-USB21280x102415单色有少量彩色型号SVM001-USB31280x102430单色有少量彩色型号SVP001-USB32560x192015彩色可定购单色 对大多数普…

巴斯勒相机SDK全代码

本文已参与「新人创作礼」活动&#xff0c;一起开启掘金创作之路。 js using Basler.Pylon; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.T…

机器视觉 工业相机

一、工业相机的结构 工业相机一般由镜头接口、滤光片、图像传感器、驱动电路、数字图像处理模块、转换电路、相机的供电/控制信号接口、图像数据传输组成接口。 二、工业相机的分类 1、按照相机芯片分类 按照芯片工艺分类CCDCMOS曝光方式一般为全局曝光卷帘/全局曝光灵敏…

linux-巴斯勒相机 GigE通信配置步骤

环境&#xff1a;ubuntu18.04 交换机&#xff1a;8端口千兆-带PoE供电功能的交换机 问题&#xff1a;1、始终显示没有设备(no device found)&#xff0c;可能是因为使用了扩展坞&#xff0c;也可能本身就存在这个问题&#xff1b; 2、显示端口冲突。 问题1解决方案&#xff…

Qt调用工业相机之巴斯勒相机

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 开发环境 操作系统&#xff1a;Windows 10 1903 18362.778 相机型号&#xff1a;BASLER acA 1300-60gm 相机软件&#xff1a;pylon_Run…

W25QXX使用教程

W25QXX是华邦公司生产的一块FLASH储存芯片 那W25Q256为例&#xff1a;驱动方式&#xff1a;单路双路四路SPI、QSPI&#xff1b; 擦写周期&#xff1a;10W次 支持电压&#xff1a;2.7~3.6V 频率&#xff1a;单路最大104Mhz、双路208Mhz、四路416Mhz 容量&#xff1a;容量为32M字…

flash spi w25q128 w25q64 w25q32 w25q16 verilog fpga程序代码

flash spi w25q128 w25q64 w25q32 w25q16 verilog fpga程序代码 fpga w25q128/64/32/16 verilog代码 资料包清单&#xff1a; 1.w25qxx_code_uart_top&#xff1a;altera工程代码&#xff0c;可移植ise&#xff0c;后续会出&#xff0c;需要的话提前加好友 2.功能说明书 注1&a…