Web Spider案例 网洛者 第一题 JS混淆加密 - 反hook操作 练习(五)

news2024/11/18 19:26:44

在这里插入图片描述


文章目录

  • 一、资源推荐
  • 二、第一题 JS混淆加密 - 反hook操作
    • 2.1 过控制台反调试(debugger)
    • 2.2 开始逆向分析
  • 三、python具体实现代码
  • 四、记录一下,execjs调用混淆JS报错的问题
  • 总结


提示:以下是本篇文章正文内容,下面案例可供参考

一、资源推荐

Web Spider Fiddler - JS Hook 基本使用:https://blog.csdn.net/EXIxiaozhou/article/details/128794705
网洛者 - 反反爬虫训练平台网址:https://wangluozhe.com/

二、第一题 JS混淆加密 - 反hook操作

2.1 过控制台反调试(debugger)

注意,可以创建一个新的对象,保存原来的function,再给原来的对象赋值新的hook function
1、构造函数调用,Js Hook代码
在这里插入图片描述

Function.prototype.constructor_ = Function.prototype.constructor;
Function.prototype.constructor = function(x){
    if(x == "debugger"){
        return function(){}  // 如果传入的参数为debugger,则返回一个空方法; 
    }
    return Function.prototype.constructor_(x);  // 否则返回原来的处理方法;
}

2、hook setInterval(定时器),debugger;
在这里插入图片描述

window.setInterval_ = setInterval;
setInterval = function(x, x2){
    if (x2 != 0x7d0){
        return window.setInterval_(x, x2);  // 执行原来的方法; 
    }
}

3、通过fiddler工具引入hook代码
在这里插入图片描述

2.2 开始逆向分析

1、接口,参数分析
post:https://wangluozhe.com/challenge/api/1
在这里插入图片描述
2、通过接口进入代码段,寻找定义处;在这里插入图片描述
3、_signature参数代码生成处定位成功;在这里插入图片描述
4、本地调试遇见debugger可以通过调用堆栈删除或注释代码
在这里插入图片描述
在这里插入图片描述
5、报错window._signature = window.byted_acrawlers(window.signs()),进行debugger;
在这里插入图片描述
通过浏览器控制台打印可以发现,此处对进行了检测window,document,location,availHeight进行了检测需要定义一下;
在这里插入图片描述
补充一下代码检测的环境对象;

var window = {
    "document": {
        "location": {
            "href": "http://spider.wangluozhe.com/challenge/1"
        }
    },
}
var screen = {
    "availHeight": 1040
}

6、报错return IIl1llI1(sign());ReferenceError: sign is not defined,修改代码;
通过浏览器控制台调试可以发现,sign()方法是获取时间戳,并且对document进行了检测;
在这里插入图片描述
将本地获取时间戳的代码修改一下即可;
在这里插入图片描述
7、来到时间戳加密处,可以发现此处对userAgent进行了检测,需要再定义一下userAgent;在这里插入图片描述
补充 navigator[“userAgent”]

var navigator = {
     'userAgent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}

8、再次debugger,即可调试成功;
在这里插入图片描述

三、python具体实现代码

import time
import execjs
import requests


class Spider(object):
    def __init__(self):
        with open(file='encode.js', mode='r', encoding='utf-8') as fis:
            js_code = fis.read()  # 读取JS代码文件
        self.js_obj = execjs.compile(js_code)  # 激将JS代码传入
        self.headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                          'Chrome/110.0.0.0 Safari/537.36',
            'Cookie': '自己账户的cookie'
        }
        self.url = 'https://wangluozhe.com/challenge/api/1'
        self.count_number = 0

    def getParams(self, page):
        form_data = {
            'page': page,
            'count': 10,
            '_signature': self.js_obj.call("getSign")
        }
        return form_data

    def request_server(self, page):
        form_data = self.getParams(page)
        print("当前参数:", form_data)
        response = requests.post(url=self.url, headers=self.headers, data=form_data)
        for items in response.json()['data']:
            print(f"当前值:{self.count_number} + {items['value']} = {self.count_number+items['value']}")
            self.count_number += items['value']

    def runs(self):
        for page in range(1, 100+1):
            self.request_server(page=page)
            time.sleep(1)
        print(f"100页的所有数据并加和:{self.count_number}")


if __name__ == '__main__':
    Spider().runs()

在这里插入图片描述

四、记录一下,execjs调用混淆JS报错的问题

1、报错提示:execjs._exceptions.ProcessExitedWithNonZeroStatus
在这里插入图片描述
JS混淆后的部分代码
在这里插入图片描述
2、修改文件代码, File “C:\xxx\Python\Python37\lib\site-packages\execjs_external_runtime.py”,增加encoding="utf-8"即可;
在这里插入图片描述


总结

推荐:JS 混淆加密,反 Hook 操作博文:https://blog.csdn.net/kdl_csdn/article/details/121832967

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Echarts 实现电池效果的柱状图

第022个点击查看专栏目录本示例是解决显示电池电量状态的柱状图,具体的核心代码请参考源代码。 文章目录示例效果示例源代码(共102行)相关资料参考专栏介绍示例效果 示例源代码(共102行) /* * Author: 还是大剑师兰特…

aws ecs 使用application autoscaling自动扩缩ecs服务

参考资料 https://aws.amazon.com/cn/blogs/china/microservices-on-amazon-ecs-1/ https://aws.amazon.com/cn/blogs/china/microservices-on-amazon-ecs-2/ https://zhuanlan.zhihu.com/p/355383555 https://docs.amazonaws.cn/en_us/AmazonECS/latest/developerguide/ser…

YOOV人事管理|2023年面临7大职场趋势,关系到管理者和HR

各种停摆浪潮席卷了2022年的职场生态,对于人力资源工作者来说,无论是判断员工的意向,或是组织面对的挑战,都愈来愈复杂。YOOV人事管理针对2023年,提出了7项观察,提醒雇主和HR应留意的未来工作趋势。 1.安静…

95.【操作系统-第一章】

操作系统(一)、操作系统概述1.1_操作系统的概念、功能和目标(1).操作系统的定义(2).操作系统的功能和目标——作为系统资源的管理者(3).操作系统的功能和目标——向上层提供方便易用的服务(4).操作系统的功能和目标--作为用户和计算机硬件之间的接口(5).操作系统的功能和目标—…

腾讯前端二面常考vue面试题(附答案)

虚拟DOM真的比真实DOM性能好吗 首次渲染大量DOM时,由于多了一层虚拟DOM的计算,会比innerHTML插入慢。正如它能保证性能下限,在真实DOM操作的时候进行针对性的优化时,还是更快的。 MVVM的优缺点? 优点: 分离视图(V…

PowerCommand康明斯发电机控制屏维修HMI211

康明斯柴油发电机的监控系统分为普通机组控制屏和智能化机组控制界面。普通操作界面实用于普通的康明斯柴油发电机的控制,康明斯柴油发电机的起动与停止、供电与断电、状态调整等均由手动操作;自动化康明斯柴油发电机控制系统适合于智能化康明斯柴油发电…

JavaWeb 基本概念

JavaWeb Java Web 1、基本概念 1.1、前言 web开发: web,网页的意思 , www.baidu.com静态web html,css提供给所有人看的数据始终不会发生变化! 动态web 淘宝,几乎是所有的网站;提供给所有人…

ActiveMQ RabbitMQ Kafka RocketMQ

消息中间件的作用 1.正向作用 应用解耦/事件驱动 异步通信 流量削峰 2.反向作用 系统可用性降低 系统复杂性提高 一致性问题 ---------------------------------------------------------------------------------------------------------…

C语言数据结构(3)----无头单向非循环链表

目录 1. 链表的概念及结构 2. 链表的分类 3. 无头单向非循环链表的实现(下面称为单链表) 3.1 SListNode* BuySListNode(SLTDateType x) 的实现 3.2 void SListPrint(SListNode* plist) 的实现 3.3 void SListPushBack(SListNode** pplist, SLTDateType x) 的实现 3.4 voi…

【分布式】分布式场景下的稳定性保障

文章目录1、什么是稳定性保障2、明确稳定性保障目标2.1、明确一级目标2.2、拆解二级目标3、如何进行稳定性保障3.1、全链路梳理3.2、全链路压测3.3、集群扩容3.4、服务限流3.5、提前预案3.6、紧急预案3.7、系统监控4、大促稳定性保障4.1、制定大促计划4.2、大促准备4.3、大促值…

kubeadm方式安装k8s高可用集群(版本1.26x)

K8S官网:https://kubernetes.io/docs/setup/ 高可用Kubernetes集群规划 配置备注系统版本CentOS 7.9Docker版本20.10.xPod网段172.16.0.0/12Service网段10.103.10.0/16 主机IP说明k8s-master01 ~ 03192.168.77.101 ~ 103master节点 * 3k8s-master-lb192.168.77.2…

Tina_Linux配网开发指南

OpenRemoved_Tina_Linux_配网_开发指南 1 概述 1.1 编写目的 介绍Allwinner 平台上基于wifimanager-v2.0 的WiFi 配网方式,包括softap(WiFi ap 模式热点配网),soundwave(声波配网),BLE(蓝牙低功耗配网)。 1.2 适用范围 • allwinner 软件平台tina v5.0 版本及以…

锁相环的组成和原理及应用

一.锁相环的基本组成 许多电子设备要正常工作,通常需要外部的输入信号与内部的振荡信号同步,利用锁相环路就可以实现这个目的。 锁相环路是一种反馈控制电路,简称锁相环(PLL)。锁相环的特点是:利用外部输入的参考信号控制环路内…

Java查漏补缺(04)IDEA安装设置、JDK相关设置、详细设置、工程与模块管理、代码模板的使用、快捷键的使用、DEBUG断点调试、常用插件

Java查漏补缺(04)IDEA安装设置、JDK相关设置、详细设置、工程与模块管理、代码模板的使用、快捷键的使用、DEBUG断点调试、常用插件本章专题与脉络1. 认识IntelliJ IDEA1.1 JetBrains 公司介绍1.2 IntelliJ IDEA 介绍1.3 IDEA的主要优势:(vs …

Ubuntu下不能切换中文,qt creator无法输入中文,sogo输入法(详细步骤)

目录:1、解决ubuntu 不支持切换中文,并安装sogo输入法步骤;2、解决Qt Creator不支持中文输入:详细步骤:一、解决ubuntu 不支持切换中文,并安装sogo输入法步骤:1、如果在键盘输入法系统中&#x…

Scala面向对象

与java的区别和联系 类的定义: class Person{ var name "scala" def sayHello(){ println("Hello,"name) } def getName name } 注意:如果在定义方法的时候指定了(),那么在调用的时候()可写可不写,如果在定…

【并发编程学习篇】深入理解CountDownLatch

一、CountDownLatch介绍 CountDownLatch(闭锁)是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。await方法会阻塞直到当前的计数值被coun…

【分布式缓存学习篇】Redis数据结构

一、Redis的数据结构 二、String 数据结构 2.1 字符串常用操作 //存入字符串键值对 SET key value //批量存储字符串键值对 MSET key value [key value ...] //存入一个不存在的字符串键值对 SETNX key value //获取一个字符串键值 GET ke…

[C++]继承

🥁作者: 华丞臧 📕​​​​专栏:【C】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉LeetCode 文章目录一、继承…

C/C++每日一练(20230227)

目录 1. 按要求排序数组 ★ 2. Z 字形变换 ★★ 3. 下一个排列 ★★ 1. 按要求排序数组 给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中,数字 1 的数目升序排序。 如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小…