当前位置: 首页 > news >正文

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

在这里插入图片描述


文章目录

  • 一、资源推荐
  • 二、第一题 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 requestsclass 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 = 0def getParams(self, page):form_data = {'page': page,'count': 10,'_signature': self.js_obj.call("getSign")}return form_datadef 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.lryc.cn/news/22089.html

相关文章:

  • 前端基础之CSS扫盲
  • mysql组复制、mysql路由器、mysql的MHA高可用
  • 一篇搞懂springboot多数据源
  • Verilog 数据类型和数组简介
  • 【数据结构】时间复杂度和空间复杂度以及相关OJ题的详解分析
  • 31--Vue-前端开发-Vue语法
  • 这份IC设计必读书单,值得所有IC设计工程师一看!
  • Acwing 蓝桥杯 第一章 递归与递推
  • 模型部署笔记
  • 多线程之wait和notify
  • MVCC 当前读 快照读 RC read view RR下事务更新不会丢失
  • NCRE计算机等级考试Python真题(二)
  • 借助IBM Spectrum LSF为芯片行业大幅提升算力,预测未来
  • 力扣-换座位
  • DFT基本入门介绍
  • 做「增长」必须懂的6大关键指标
  • Linux:soft lockup 检测机制
  • 天线理论知识4——非频变天线
  • 基础架构组件选型及服务化
  • leetcode-每日一题-1247(中等,数学逻辑)
  • 前端面试题 —— 计算机网络(一)
  • 分布式-分布式缓存笔记
  • 【反序列化漏洞-01】为什么要序列化
  • 用c语言模拟实现常用字符串函数
  • 在 Flutter 中使用 webview_flutter 4.0 | 基础用法与事件处理
  • JavaWeb--Servlet
  • Linux启动过程
  • 面试资料整理——C++
  • 【ArcGIS Pro二次开发】(9):GeoProcessing工具和自定义工具的调用
  • 皕杰报表斜线单元格、图表里或导出pdf的中文显示小方块解决方案