cookies的获取

  1. 首先拿到第一次访问原链接 拿到acw_tc的值,然后放到session中去
  2. 再用这个session再次访问原链接拿到js加载的加密的真实数据。用了一些反混淆。
  3. 最后获取这个数据中的args1,再通过js获取到正确cookies最终请求到数据

本文网站:aHR0cDovL3R6eG0uYWh6d2Z3Lmdvdi5jbi9wb3J0YWxvcGVuUHVibGljSW5mb3JtYXRpb24uZG8/bWV0aG9kPXF1ZXJ5RXhhbWluZUFsbA==

js代码如下


  1. var _0x5e8b26 = '3000176000856006061501533003690027800375'
  2. var getAcwScV2 = function (arg1) {
  3. String['prototype']['hexXor'] = function (_0x4e08d8) {
  4. var _0x5a5d3b = '';
  5. for (var _0xe89588 = 0x0; _0xe89588 < this['length'] && _0xe89588 < _0x4e08d8['length']; _0xe89588 += 0x2) {
  6. var _0x401af1 = parseInt(this['slice'](_0xe89588, _0xe89588 + 0x2), 0x10);
  7. var _0x105f59 = parseInt(_0x4e08d8['slice'](_0xe89588, _0xe89588 + 0x2), 0x10);
  8. var _0x189e2c = (_0x401af1 ^ _0x105f59)['toString'](0x10);
  9. if (_0x189e2c['length'] == 0x1) {
  10. _0x189e2c = '0' + _0x189e2c;
  11. }
  12. _0x5a5d3b += _0x189e2c;
  13. }
  14. return _0x5a5d3b;
  15. };
  16. String['prototype']['unsbox'] = function () {
  17. var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24];
  18. var _0x4da0dc = [];
  19. var _0x12605e = '';
  20. for (var _0x20a7bf = 0x0; _0x20a7bf < this['length']; _0x20a7bf++) {
  21. var _0x385ee3 = this[_0x20a7bf];
  22. for (var _0x217721 = 0x0; _0x217721 < _0x4b082b['length']; _0x217721++) {
  23. if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) {
  24. _0x4da0dc[_0x217721] = _0x385ee3;
  25. }
  26. }
  27. }
  28. _0x12605e = _0x4da0dc['join']('');
  29. return _0x12605e;
  30. };
  31. var _0x23a392 = arg1['unsbox']();
  32. arg2 = _0x23a392['hexXor'](_0x5e8b26);
  33. return arg2
  34. };

python代码


  1. # -*- coding: utf-8 -*-
  2. # @Time : 2022/7/4 17:55
  3. # @Author : lzc
  4. # @Email : hybpjx@163.com
  5. # @File : AnHuiProvinceOnlineInvestPro.py
  6. # @Software: PyCharm
  7. import re
  8. import requests
  9. from execjs import compile
  10. from selenium import webdriver as uc
  11. from scrapy.selector import Selector
  12. from conf.diff_config import URL_DATA_INFO
  13. from pkg.Invoking import APIInvoke
  14. class AnHuiProvinceOnlineInvest:
  15. item = {}
  16. session = requests.session()
  17. url = "http://www.(为保护网站安全性)"
  18. API = APIInvoke()
  19. def get_cookie(self):
  20. js_source = """
  21. var _0x5e8b26 = '3000176000856006061501533003690027800375'
  22. var getAcwScV2 = function (arg1) {
  23. String['prototype']['hexXor'] = function (_0x4e08d8) {
  24. var _0x5a5d3b = '';
  25. for (var _0xe89588 = 0x0; _0xe89588 < this['length'] && _0xe89588 < _0x4e08d8['length']; _0xe89588 += 0x2) {
  26. var _0x401af1 = parseInt(this['slice'](_0xe89588, _0xe89588 + 0x2), 0x10);
  27. var _0x105f59 = parseInt(_0x4e08d8['slice'](_0xe89588, _0xe89588 + 0x2), 0x10);
  28. var _0x189e2c = (_0x401af1 ^ _0x105f59)['toString'](0x10);
  29. if (_0x189e2c['length'] == 0x1) {
  30. _0x189e2c = '0' + _0x189e2c;
  31. }
  32. _0x5a5d3b += _0x189e2c;
  33. }
  34. return _0x5a5d3b;
  35. };
  36. String['prototype']['unsbox'] = function () {
  37. var _0x4b082b = [0xf, 0x23, 0x1d, 0x18, 0x21, 0x10, 0x1, 0x26, 0xa, 0x9, 0x13, 0x1f, 0x28, 0x1b, 0x16, 0x17, 0x19, 0xd, 0x6, 0xb, 0x27, 0x12, 0x14, 0x8, 0xe, 0x15, 0x20, 0x1a, 0x2, 0x1e, 0x7, 0x4, 0x11, 0x5, 0x3, 0x1c, 0x22, 0x25, 0xc, 0x24];
  38. var _0x4da0dc = [];
  39. var _0x12605e = '';
  40. for (var _0x20a7bf = 0x0; _0x20a7bf < this['length']; _0x20a7bf++) {
  41. var _0x385ee3 = this[_0x20a7bf];
  42. for (var _0x217721 = 0x0; _0x217721 < _0x4b082b['length']; _0x217721++) {
  43. if (_0x4b082b[_0x217721] == _0x20a7bf + 0x1) {
  44. _0x4da0dc[_0x217721] = _0x385ee3;
  45. }
  46. }
  47. }
  48. _0x12605e = _0x4da0dc['join']('');
  49. return _0x12605e;
  50. };
  51. var _0x23a392 = arg1['unsbox']();
  52. arg2 = _0x23a392['hexXor'](_0x5e8b26);
  53. return arg2
  54. };
  55. """
  56. html = self.session.get(self.url).text
  57. arg1 = re.search(r"var arg1='(.*)';", html).group(1)
  58. ctx = compile(js_source)
  59. acw_sc__v2 = ctx.call("getAcwScV2", arg1)
  60. return acw_sc__v2
  61. def main(self):
  62. # 获取cookie
  63. headers = {
  64. "Cookie": f"acw_sc__v2={self.get_cookie()};",
  65. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'
  66. }
  67. # 拿到主页面
  68. response = self.session.post(url=self.url, data={
  69. "pageSize": "20",
  70. "pageNo": "1",
  71. "apply_project_name": "",
  72. "projectInfo.areaDetialCode": "",
  73. "projectInfo.projectAddress": "",
  74. "projectInfo.areaDetial": "",
  75. "projectInfo.industryId": "",
  76. "projectInfo.industry": "",
  77. }, headers=headers, verify=False)
  78. # 使用scrapy 的selector对象解析 一定要指定 text 不然会报错
  79. selector = Selector(text=response.text)
  80. for tr in selector.css("#publicInformationForm tr"):
  81. onclick = tr.css("td a::attr(onclick)").get()
  82. # 正则匹配
  83. pattern = re.match("window\.open\(\'(.*?)\'\)", onclick)
  84. if pattern is None:
  85. continue
  86. self.item['title_url'] = "http://www.(为保护网站安全性)" + str(pattern.group(1))
  87. self.item['title_name'] = tr.css("td a::text").get()
  88. self.item['title_date'] = tr.css("td:nth-child(5)::text").get()
  89. # 拿到详情页的数据
  90. detail_response = self.session.get(self.item['title_url'], headers=headers)
  91. detail_selector = Selector(text=detail_response.text)
  92. self.item['content_html'] = detail_selector.css(".content_main").get()
  93. # 执行写入数据库操作
  94. ...
  95. self.close_session()
  96. def close_session(self):
  97. self.session.close()
  98. if __name__ == '__main__':
  99. AnHuiProvinceOnlineInvest().main()

如想单独测试 网站 可关注我的GitHub或评论

JS逆向实战2--cookie-AcwScV2加密—某招标信息网的更多相关文章

  1. 兄弟,别再爬妹子图了整点JS逆向吧--陆金所密码加密破解

    好久没有写爬虫文章了,今晚上得空看了一下陆金所登录密码加密,这个网站js加密代码不难,适合练手,篇幅有限,完整js代码我放在了这里从今天开始种树,不废话,直接开整. 前戏热身 打开陆金所网站,点击到登 ...

  2. JS逆向实战5--JWT TOKEN x_sign参数

    什么是JWT JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式).它是在Web环境下 ...

  3. JS逆向实战4--cookie——__jsl_clearance_s 生成

    分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...

  4. JS逆向实战3——AESCBC 模式解密

    爬取某省公共资源交易中心 通过抓包数据可知 这个data是我们所需要的数据,但是已经通过加密隐藏起来了 分析 首先这是个json文件,我们可以用请求参数一个一个搜 但是由于我们已经知道了这是个json ...

  5. JS逆向实战6-- x轴 y轴 过点触验证码

    点触验证码是一种常见的反爬手段 解决方案有两种:一种是直接解决,这需要深度学习机器学习等图像处理技术,以大量的数据训练识别模型,最终达到模型足矣识别图片中的文字提示和应该点击的区域之间的对应关系. 这 ...

  6. JS逆向实战1——某省阳光采购服务平台

    分析 其实这个网站基本没有用到过什么逆向,就是简单的图片base64加密 然后把连接变成2进制存成文件 然后用ocr去识别即可 !! 注意 在获取图片连接 和对列表页发起请求时一定要用一个请求,也就是 ...

  7. JS逆向实战8——某网实战(基于golang-colly)

    其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...

  8. JS逆向实战7-- 某省在线审批网站params 随机生成

    参数分析 我们首先通过抓包 发现这个就是我们所需要的数据 然后我们通过fidder 发起请求 结果: 通过我们反复测试 发现这个params的参数是每次请求中都会变化的 断点查找 我们通过 这个t参数 ...

  9. 爬虫05 /js加密/js逆向、常用抓包工具、移动端数据爬取

    爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 目录 爬虫05 /js加密/js逆向.常用抓包工具.移动端数据爬取 1. js加密.js逆向:案例1 2. js加密.js逆向:案例2 3 ...

随机推荐

  1. 【AGC】如何快速部署Serverless Url缩短模板

    使用场景 Serverless短URL生成模板实现您将在云数据库服务中URL缩短的诉求.使用此模板后,仅需在云数据库服务侧配置长URL值.Serverless短URL生成模板会在后台与Bitly AP ...

  2. JCEF 初体验,window系统构建jar包

    前言 本文记录如何通过jcef源代码去构建自己所需要的jar包,此文章构建的为windows64位jcef 的 jar 包,若需要构建 32 位的 jar 包,则需要按照文章将相关准备软件设置为 32 ...

  3. springboot配置(yami配置文件,JSR303数据校验,多环境配置)

    yami配置文件 YAML是 "YAML Ain't a Markup Language" (YAML不是一种标记语言)的递归缩写.在开发的这种语言时,YAML 的意思其实是:&q ...

  4. Windows如何创存储虚拟机并制作存储虚拟化LUN的映射

    创建虚拟机 只能设置为8G,不能多也不能少 选择仅主机模式 选择使用现有磁盘 浏览选择自己的vmdk文件 选择保存现有格式 点击完成 点击编辑虚拟机设置 添加一个40G的硬盘 修改为40G并选择存储为 ...

  5. Homework6

    1.问:阅读和了解什么是形式化方法? 答:形式化方法在逻辑科学中是指分析.研究思维形式结构的方法.是把各种具有不同内容的思维形式(主要是命题和推理)加以比较,找出各个部分相互联结的方式,抽取出共同的形 ...

  6. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

  7. KingbaseES 与 Oracle 用户口令管理与资源管理

    一.概述 KingbaseES可以对用户口令与用户占用资源进行必要的管理.其管理方式,在这里与Oracle数据库进行参考比较. KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资 ...

  8. KDB_Database_Link 使用介绍

    kdb_database_link 是 KingbaseES 为了兼容oracle 语法而开发的跨数据库访问扩展,可用于访问KingbaseES, Postgresql , Oracle .以下分别介 ...

  9. docker-compose部署elastiflow

    docker-compose导入导出命令 涉及的命令有export.import.save.load save 命令 docker save [options] images [images...] ...

  10. 若依代码生成的一个大坑 You have an error in your SQL syntax; check the manual that corresponds to your MySQL s

    报错如下所示:显示我的xml文件的SQL语句有错 ### Error querying database. Cause: java.sql.SQLSyntaxErrorException: You h ...