Python逆向进阶教程笔记(1)

news2024/9/20 5:50:57

视频地址:Day1初识JS逆向 混淆与无混淆数据加密方案解析实战-36Kr数据加密解析 (AES数据逆向)_哔哩哔哩_bilibili

未完待续

一、排错

1.1) 目的:抓页面借口,简单请求会被拦截

1.2) 网址:乌海市公共资源交易中心  的http://www.whggzy.com/front/search/category

1.3) 视频位置:9:30~29:30

1.4) 问题重现:用request.post方法,直接请求会得到“系统出错,请稍后重试”,说明服务端有过滤

1.5) 解决:找到post的data数据真实格式、header真实需要。

(1) 开发者模式中找到“source”(chrome第三个,Firefox第三个叫调试器), 右侧XHR断点,添加“/front/search/category”, 刷新页面,中间区域js会断点,此时点击下方的{} 可以美化js代码

 刷新页面可能会比较卡。

找到headers,即为请求头所需的变量参数。找到data, 即为请求内容

1.6) 思考:能否直接使用network上看到的信息? requestHeaders可以,但是请求payload是一个json串,直接把它当做字典传入data参数就会失败,而在options.data里明确显示成一个字符串。

二、加密解密

1.1) 目的:接口返回简单的密文,需要知道加密解密方法

1.2)网址:交易列表 - 福建省公共资源交易电子公共服务平台  的https://ggzyfw.fujian.gov.cn/FwPortalApi/Trade/TradeInfo

1.3) 视频位置:31:30~1:13:30

1.4) 问题解决: 解密

1.4.1) 搜索decrypt关键字,找到是哪个js文件执行了解密方法

 1.4.2)对着app.js文件右键 在源码面板打开,搜索decrypt找到调用函数

1.4.3)简单调试确定函数功能是我们所需,函数保存下来并处理其中各变量(中间复杂过程略过)

 

1.5)工具插曲:Convert curl commands to code

可以用来将请求信息以curl格式(右键对准接口 复制 -> curl(bash) )转换为python代码

 代码可以直接运行。

1.6)加密

 1.6.1) 上一步的请求可以看出data结构

猜测ts应该是时间戳。通过js文件找到ts确实是通过new Date()生成的。

 1.6.2) 如果改变ts的值,整个服务器会认为这是恶意请求,

  因此猜测app.js对整个json_data进行了签名,通过headers中的portal-sign传给服务器校验

 1.6.3)查找 portal-sign签名方法

同样是搜索“portal-sign” 确定只有app.js文件包含,并查找“portal-sign”字符串,发现这个值是通过方法生成的,可以看到getSign(e)的参数e正好是json_data(断点第三次的e才是)。

 找到getSign函数是:

里面又包括r['d']常量、 l 函数和s函数... l 函数可以继续找,s函数最后是MD5

引入相应库、解决代码中的变量....

1.7)代码最后通过pyexecjs 把代码执行(需要本地有js解释引擎)可以参考下面的方法

Pyexecjs-使用python执行JavaScript_狄鸠的博客-CSDN博客_pyexecjs

 

小结:

逆向爬虫很大程度工作就在重现服务器投放到浏览器的js的运行逻辑,一步步抠代码,如果想简单一点可以用无头浏览器,但是效率会低不少。

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

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

相关文章

OSPF-MGRE实验(1.3)

要求: 1、首先为每个路由器配置接口ip和环回ip实现第一个目标 r1: [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip add 16.1.1.1 24 [r1-GigabitEthernet0/0/0]int gi0/0/1 [r1-GigabitEthernet0/0/1]ip add 61.1.1.1 24 [r1-Gigab…

java File类详细

目录 File创建 1.File(String pathname) 2. File(String parent,String child) 3.File(File f,String child) file类的使用 基本操作: 文件夹的操作 File创建 1.File(String pathname) …

一起快速了解单片机入门知识吧!

从事计算机和电子信息技术行业的都熟知单片机一词,但是你真的了解单片机吗?单片机的种类有哪些?单片机有什么特点?单片机的工作原理是什么?下面一起来了解单片机知识吧!在学习单片机知识前,我们…

多数据库学习之SQL Server查询表自增主键字段信息SQL

多数据库学习之SQL Server查询表自增主键字段信息SQL前言概念SQL样例方式一:系统内置存储过程查找方式二:通过INFORMATION_SCHEMA模式下系统视图获取方式三:通过sys模式下系统视图获取参考链接前言 Microsoft SQL Server简介 Microsoft SQL S…

Zookeeper详解(三)——开源客户端curator

开源客户端curator (true re de) curator是Netflix公司开源的一个zookeeper客户端,后捐献给apache,curator框架在zookeeper原生API接口上进行了包装,解决了很多zooKeeper客户端非常底层的细节开发。提供zooKeeper各种应用场景(比如&#xf…

CSS3 动画案例

文章目录变形效果案例照片墙过渡效果案例鼠标移动显示内容图片文字滑动效果白光闪过效果手风琴效果动画案例脉冲动画loading效果灯光闪烁动画代码变形效果案例 照片墙 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>&…

ESP IDF:观察者Observer用例实现

ESP IDF:观察者 Observer用例实现 #include <stdio.h> // #include #include // using namespace std; //抽象的英雄 抽象的观察者 Observer class AbstractHero { public: virtual void Update() 0; }; std::list<AbstractHero*> mlist; std::list<Abstr…

Linux:vim工具

文章目录一.vim简单介绍1.1vim使用1.2vim常见的模式二.vim中的指令2.1set nu/set nonu(调出/取消行号)先导&#xff1a;下面这些命令都是在命令模式下运行2.2yy/p(复制/粘贴)2.3dd(剪切)2.4u/ctrl r(撤销/把撤销撤销)2.5shift g/g g(光标定位末尾/光标定位第一行)2.6shift 4/sh…

Docker高级篇_mysql主从复制、redis集群

目录Docker复杂安装详说安装mysql主从复制安装redis集群3主3从Redis集群&#xff08;基于哈希槽分区&#xff09;主从容错切换迁移主从扩容主从缩容Docker复杂安装详说 安装mysql主从复制 1.新建主服务容器3307 docker run -d -p 3307:3306 --privilegedtrue -v /zhoujmi/my…

Spring Framwork_01

Core Container(核心容器):管理对象的技术 1.Beans 2.Core 3.Context 4.SpEL Core&#xff1a;核心工具包&#xff0c;包括字节码操作cglib、asm&#xff0c;资源的抽象Resource&#xff0c;对象实例化化工具等等。 Beans&#xff1a;Bean 的定义、Bean 的创建以及对 Bean 的解…

【自学Java】Java循环结构

Java循环结构 Java while教程 在 Java 语言 中&#xff0c;关键字 whie 用于判断一个判断条件&#xff0c;如果返回值都是 true&#xff0c;那么它会一直执行。与 if 不同之处在于&#xff0c;if 只会执行一次&#xff0c;而 while 中&#xff0c;只要条件满足&#xff0c;会…

【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动

前言 最近为了深入研究 嵌入式Linux 的开发&#xff0c;把【迅为iMX6Q】开发板 找了出来&#xff0c;重新搭建了开发编译环境 【迅为iMX6Q】开发板 的 u-boot&#xff0c;放在了 android 源码中&#xff0c;可以从 【迅为iMX6Q】开发板 网盘资料里&#xff0c;下载 iTOP-iMX6_…

Windows下redis环境搭建(可查看源码及Debug调试进入源码)及简易使用

Windows下redis环境搭建&#xff08;可查看源码及Debug调试进入源码&#xff09;及简易使用 在我们使用redis进行学习的过程中&#xff0c;在Windows平台上进行学习是一个非常高效的选择&#xff0c;因此下面介绍如何在Windows环境下搭建一个redis环境&#xff08;即可Debug调试…

数据结构之入门二叉树

文章目录前言1.二叉树的知识铺垫2.二叉树的具体实现1.递归实现前中后序遍历2.其它相关接口的实现1.求二叉树的节点个数2.求叶子节点个数3.二叉树查找值为x的节点3.求树高度4.求k层节点的个数5.层序遍历6.判断二叉树是否是完全二插树3.总结前言 之前用数组实现了一种特殊的完全…

解决word写论文改成两栏时mathtype的公式无法居中的问题

想要的格式 投论文的时候&#xff0c;有很多期刊的要求是两栏排版&#xff0c;比如中国电机工程学报 理论上&#xff0c;用mathtype输入的公式&#xff0c;会根据word的格式自动地调整自己的缩进量&#xff08;更确切地说&#xff0c;是会自动调整制表位&#xff09;。比如下…

新手入门指南之玩转蓝桥云课(线上运行虚拟机,c++,Java,Javaweb,python环境,以及如何成功利用命令行运行这些环境)

目录 你好&#xff0c;蓝桥云课 &#x1f44b; &#x1f332;欢迎来到蓝桥云课&#x1f332; 为什么要用 Linux 实验精神 蓝桥云课课程 加入课程 开始实验 实验环境 讨论发帖 实验报告 有效学习时间 我们的目标是星辰大海 &#x1f350;Linux 桌面环境使用指南&…

【C++ Primer】阅读笔记(4):string

目录 简介初始化string对象初始化方法直接初始化与拷贝初始化string对象上的操作操作方式读取string对象(cin>>s、cout<<s)getline(is,s)empty()size()string对象的比较(>、<、<=、>=)两个string对象相加(s1+s2)字面值与string对象相加遍历string对象参…

Jenkins复制和导出导入job

一、同一个Jenkins中复制job如果是同一个Jenkins复制job&#xff0c;只需要在创建Job时&#xff0c;选择Copy from一个已有的job即可。也就是在下方上面的红框中输入你新建job的名称&#xff0c;在下面的红框中输入你想要复制的job(已经建好的job)&#xff0c;然后点击确定。这…

【C初阶】实用调试技巧

实用调试技巧前言一、什么是bug&#xff1f;二、调试是什么&#xff1f;&#xff08;一&#xff09;调试&#xff08;二&#xff09;调试的基本步骤&#xff08;三&#xff09;Debug和Release的介绍。1.简单介绍三、Windows环境调试介绍&#xff08;一&#xff09;调试环境的准…

【SAP Abap】SAP ALV开发(REUSE_ALV_GRID_DISPLAY_LVC)全网最详细 DEMO

SAP ALV开发&#xff08;REUSE_ALV_GRID_DISPLAY_LVC&#xff09;全网最详细 DEMO1、ALV 简介2、演示程序1、ALV 简介 ALV 报表程序&#xff0c;是我们在 SAP 项目中最常开发的程序类型。 SAP 系统提供了三种 ALV 实现方式&#xff0c;分别是&#xff1a; FM ALV&#xff0c;…