首页 > 其他分享 >js逆向技巧

js逆向技巧

时间:2022-09-06 21:33:56浏览次数:74  
标签:逆向 技巧 script js var cookie debug document

一、总结

  1. 搜索:全局搜索、代码内搜索
  2. debug:常规debug、XHR debug、行为debug
  3. 查看请求调用的堆栈
  4. 执行堆内存中的函数
  5. 修改堆栈中的参数值
  6. 写js代码
  7. 打印windows对象的值
  8. 勾子:cookie钩子、请求钩子、header钩子

二、js逆向技巧

博客对应课程的视频位置:

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

所需环境:Chrome浏览器

1. 搜索

1.1 全局搜索
适用于根据关键词快速定位关键文件及代码

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

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

1.2 代码内搜索
适用于根据关键词快速定位关键代码

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

2. debug

2.1 常规debug
适用于分析关键函数代码逻辑

a、埋下断点

b、调试

如图所示,我标记了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函数,直接使用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"
}
]
}
使用方法
a、如图所示,创建一个文件夹,文件夹中创建一个钩子函数文件inject.js 及 插件的配置文件 mainfest.json 即可

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

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

标签:逆向,技巧,script,js,var,cookie,debug,document
From: https://www.cnblogs.com/gqv2009/p/16663386.html

相关文章

  • JS数组方法大全
    1. at()方法   Array.prototype.at()at() 方法接收一个整数值并返回该索引的项目,允许正数和负数。负整数从数组中的最后一个项目开始倒数。constarray1=[5,12......
  • 前端JS-Day21
    client系列:获得可视区域的相关信息clientWidth和offsetWidth区别:clientWidth只包含内容和padding,offsetWidth包含内容和内外边框。  立即执行函数:无需调用,直接执行......
  • 【前端】JS json、字符串互转
    1、json字符串转json对象JSON.parse    2、json对象转json字符串JSON.stringify  ......
  • three.js实现简单的3D中国省份立体板块地图
    源码资料获取:https://github.com/huangchun0121/3D-example/tree/main/省份立体板块实现代码:点击查看代码<!DOCTYPEhtml><htmllang="en"><head><metacharse......
  • jsp大文件上传解决方案支持分片断点上传
    ​前言:因自己负责的项目(jetty内嵌启动的SpringMvc)中需要实现文件上传,而自己对java文件上传这一块未接触过,且对Http协议较模糊,故这次采用渐进的方式来学习文件上传的原......
  • Js学习之------如何判断对象为空?
    1、JSON.stringify()JSON.stringify()可以把json对象转为json字符串只需要判断序列化后的对象是否全等于字符串“{}”即可2、Object.keys()ES6中Object.keys()方法,会把对象中......
  • 关于nodejs的一些笔记
    node.js和JavaScript还是有一定的渊源的简单来说,Nodejs就是运行在服务端的JavaScript浏览器有一个引擎比如谷歌的chrome里的叫做V8这个引擎可以翻译JavaScript脚本,然......
  • python requests.post() 请求中 json 和 data 的区别
    requests.post()请求中json和data的区别post请求中,可以使用data传递参数,也可以使用json传递参数。那么,两种方式有什么区别?1.如果参数为JSON数据,可以直接传入json参......
  • js之三级联动省市县
    1<!DOCTYPEhtml>2<htmllang="en">34<head>5<metacharset="UTF-8">6<metahttp-equiv="X-UA-Compatible"content="IE=edge">7......
  • 前端不缓存,ajax不缓存,js操作cookie
    前端不缓存,ajax不缓存,js操作cookie 今天实现网站注销功能时,需要清除cookie缓存,开始在网上搜索的是“js清除缓存”,发现很多都是预先防患缓存存储的内容,千篇一律,不过也......