总览:JS逆向技巧总结

总的来说,JavaScript 逆向可以分为三大部分:寻找入口、调试分析和模拟执行。下面分别进行介绍。

一,寻找入口

一个网站加载了很多 JavaScript 文件,那么怎么从这么多 JavaScript 里面找到关键的位置,那就是一个关键问题。这就是寻找入口。

但开始寻找前,建议先做以下工作:

  • 判断参数是否需要逆向,可不可以直接复制参数

  • 加密参数是否由之前的请求返回

  • 按加密字符串的特征进行尝试,也许会有意外收获

下面介绍寻找入口时常用的手段。

1.1 巧用搜索

搜索是有一定技巧的,比如加密关键词是 signature,可以搜索 signature、“signature”、signature=、signature: 、sign
还可以搜索URL中的某些关键字、headers[ 等。
若遇到请求参数或者响应加密的情况,但通过跟栈找不到明文,有可能加密是在拦截器中处理的(请求拦截器Vt.interceptors.request、响应拦截器Vt.interceptors.response),因此可以搜索interceptors关键字。

PS:
在已有的页面链接中寻找其他页面的连接(从银行的详情页中搜索列表页链接):

  • 搜索关键字寻找
  • 搜索现有的url的某一部分关键字,有很大可能这些关键字会放在一起
  • 在这里插入图片描述

1.2 Ajax断点+调用栈

它可以在发生 Ajax 请求的时候触发断点。要设置断点,就要先观察 Ajax 请求,假设请求的 URL 为:https://spa2.scrape.center/api/movie/?limit=xxx&page=99

可以看到,URL 中包含 /api/movie ,因此可以填写 /api/movie ,当 Ajax 请求的 URL 包含填写的内容时,就会进入断点停止。

在这里插入图片描述

1.3 Initiator call stack

Initiator 主要是为了监听请求是怎样发起的,通过它可以快速定位到调用栈中。栈的调用顺序为从下到上。

在这里插入图片描述

1.4 事件监听+调用栈

有的时候找不到参数位置,但是知道它的触发条件,此时可以使用事件监听器进行断点。然后结合调用栈进行定位。

1.5 Hook 关键方法

Hook 技术又叫钩子技术,指在程序运行的过程中,对其中的某个方法进行重写,在原先的方法前后加入我们自定义的代码。相当于在系统没有调用该函数之前,钩子程序就先捕获该消息,得到控制权,这时钩子函数既可以加工处理该函数的执行行为,也可以强制结束消息的传递。

要对 JavaScript 代码进行 Hook 操作,就需要额外在页面中执行一些有关 Hook 逻辑的自定义代码,这里推荐一个浏览器插件,叫做 Tampermonkey,中文叫 油猴,利用它,可以在浏览器加载页面时自动执行某些 JavaScript 脚本。由于执行的是 JavaScript ,所以我们几乎可以在网页中完成任何我们想实现的效果,如自动爬虫、自动修改页面、自动响应事件等。

下面以 https://login1.scrape.center/ 网址为例,进行 base64 方法的 hook,以下为油猴中的脚本:

// ==UserScript==
// @name         HookBase64
// @namespace    https://login1.scrape.center/
// @version      0.1
// @description  Hook Base64 encode function
// @author       Vahan
// @match        https://login1.scrape.center/
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// ==/UserScript==

(function() {
   
    'use strict';
    function hook(object, attr){
   
        var func = object[attr]
        object[attr] = function(){
   
            console.log('hooked',object,attr)
            var ret = func.apply(object,arguments)
            debugger
            return ret
        }
    }
    hook(window,'btoa')
})();

如果观察出一些门道,可以多使用这种方法来尝试,如 Hook encode 方法,decode 方法,stringify 方法,log 方法,alert 方法等。

还可以利用浏览器中的snippet来进行hook, 当创建好一个 Snippet 片段后,可以从任何页面访问和运行它们(浏览器会一直保存创建的snippet)。当你运行一个片段,它从当前打开页面的上下文中执行(即使这个页面中的链接变化也依然生效)。
如何创建一个 Snippet 片段?
先打开开发者工具,进入到 Sources (源代码)面板,在导航栏里面选中 Snippets(代码段),点击 “New snippet(新建一个代码块)” ,输入你的代码,按Ctrl+S保存,run运行。

在这里插入图片描述

这两种方

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值