JS逆向实战案例2——某房地产token RSA加密

说明:仅供学习使用,请勿用于非法用途,若有侵权,请联系博主删除

作者:zhu6201976

一、 反爬分析

url1:aHR0cDovL3pmY2ouZ3ouZ292LmNuL3pmY2ovZnl4eC94a2I/c1Byb2plY3RJZD05MzBlMDQ0MmJjNjA0MTBkYTgzNzQ0MmQ5ZGRiN2UwMiZzUHJlU2VsbE5vPTIwMjQwMDA1

url2:aHR0cDovL3pmY2ouZ3ouZ292LmNuL3pmY2ovZnl4eC94bXhrYnh4Vmlldw==

浏览器访问url1得到销控表(楼栋列表),点击某一楼栋,下方展示房号列表:

但这一切只是在浏览器中发生的,中间所有的请求和过程,浏览器都帮我们完成了,我们感受不到中间到底发生了什么。真实情况是:我们访问url1,服务器只返回了上半部分内容,而下半部分房号列表信息是缺失的,需要我们POST请求url2,传递project_id、building_id、token等关键参数,才能拿到。然而,token参数是这样的:

到这里,我们可以非常明显的看到,网站做了核心数据的反爬。如果不能解决token参数的生成逻辑,想要协议模拟根本无法实现。

想想也非常正常,对于这个房地产网站,数据量最大,最具核心价值的资源,就在于房号信息。网站一方面为了保护核心数据的安全,另一方面为了防止爬虫程序的滥用,对服务器造成巨大压力,必须对网站进行反爬处理。

效果或许也非常明显,一些初级爬虫,看到这么一大串令人头疼的加密字符,估计已经第一时间放弃抵抗:抬走!

那么,它是如何实现的呢?采用了什么样的加密算法?

1. 首先,我们观察token值的特征,初步判断可能采用了现代密码学:RSA/AES/DES等。
 

iBVW+duWe26lZzi6HVffsw/foveymgr/3kAS3d/2c3TAg/6l1EqnJIXyIsiINANVjrNKzAHgsR80XaTJu2QX96FrVCrNHdCEONr0Iy4qTWHQ5w+Ddptv37bY0PLpX/UYYAAfltxpcCjnxDYGudT9QWqJqfqw2mOuO6rz74/lw8o=@QuZYt/TaVypfEAl0omOoYDP/p8Jn3V5RGz6Bh95bzztU2mEKTqKRY2HfPwgz2pUF9BnPW0BL1vsdvPc+ZHMSgt488Zg++hpXH3r/NcE1J4EofuvI4Ii8JgvtY8oZuR2FSjfwZkLZiwo7YxvcGb+C4J+TqoAyUSRrt9BOnTmS8LQ=@NsXfjXtuNeJX3D51rcd61cmWpTAYISPzw+a4P394pZiXw4TAMFlMwanMdGVLHprXJrv/64D0MIF0qZ+6IvpC7JRWSMUVwRACDTyWTBEyjQmn1YouboOtOr87PV34GUSbe9tXxNlcSVBff7n/3S+ZCHt4t4IDp6tB32ko8r7B3zw=@RENxFEgkEOsQlXZvsvOT4tz0LVzqJq+SwpP0rgbpfWc6KHRN/kpzwTd4563PPhDIY6ASoDVJPdxSZiggCM9jGq+EiaR3d2ZUV5xA7fcjVOC3MkjYoWYKKBAc97LuJ/JGUqpdHMawN6HBthf+iVXmeeeFSxGUzmduRziGfPLZw/g=@RdxwEZPC1HK2X1SxIB8cOQJ7CNX0irA+e76cQYRFRCwg3/Zth/KM6T3gQRdjwNSQ6p5DjnWrLuywSWA1UuXe7m55PXiQDnWIcWP9O46wQfhW7YTeqy1WrIr8THQ+OkfNK2QDj/CRX0wiuZugV5sVrwicqX15/mJv+WeBggoQHow=@FnosIVqEz6WFYIWTPlg/1V+S+ImqiCmv79yfdiQ+J9STWjG1uClgWOP72jkysPD15KxUX5MQA/+fOrNvQxG5ZePg3PbLALB89KIaUkrhFVTySV+FDpmtW/3H1pGC3y8eqQtYbLzKH9pKAA8GaS1gtcMl9tHovz8l8VlYtY3xqMo=@cEtL7FF07gSN8OJUBrDUDlEoAHaRL5S7jxcR2MTD7LfTa1b71upYmTd+xX4UKJ2K0Dpq0IVbiYEK/5JfGbLZ1ioJFXYQytWsJnry1S/Qw5MJ7SjEvDoAcy3w39h+4XQiEh6tedfRWNBeXaqJd0pPNN5tQ1JFkX0EqO6rpIpyFrM=

2. 其次,观察url1的返回document,很明显绑定了点击事件。

当我们点击具体楼栋时,会触发对应绑定的DoSearch函数,并执行对应JS逻辑,发送POST请求url2,获取对应楼栋房号列表信息。

3. 最后,DoSearch函数具体实现在哪?如何快速定位?

在JS逆向中,快速定位很重要。Python之父Guido van Rossum 曾说过:人生苦短,我用Python。那么,我想请问:此处用Python,对我们快速定位有帮助吗?

怎么快怎么来吧,投机取巧一把,全搜搜索 DoSearch 关键词,如果代码没有混淆,肯定是能找到的。果然不出所料,非常轻易的追踪定位到了,上边ak是RSA公钥,说明果然是RSA加密,这也太简单了吧?

二、扣取代码,模拟执行

既然token加密函数DoSearch已定位,那么,我已经迫不及待想扣取代码执行看看效果了。废话不多说,直接完整扣取,放到NodeJS中尝试执行:

function DoSearch(ak, sProjectId, buildingId, houseFunctionId, unitType, houseStatusId, totalAreaId, inAreaId) {
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(ak);
    var token = encrypt.encrypt(sProjectId) + "@" + encrypt.encrypt(buildingId) + "@" + encrypt.encrypt(houseFunctionId) + "@" + encrypt.encrypt(unitType) + "@" + encrypt.encrypt(houseStatusId) + "@" + encrypt.encrypt(totalAreaId) + "@" + encrypt.encrypt(inAreaId);
    return token;
}

var ak = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC1nflpr8o4Jh74z0KPEIBSt+Q4+eCkz6LdyxGZESFgpiQcdIBbWXujhczBCpGO8n1Mo+purvzyxWJIM/I41wjY9JHQSKZF2FL0IfSP8d+V3knz9MA4QHiIzwtrQEpq5U2VmzvSrLsIcPILFPQLZHgaEdQkGVu0NGAzclsMxYmNSQIDAQAB';
var sProjectId = '930e0442bc60410da837442d9ddb7e02';
var buildingId = '63097ed0eb04496b8f9306fc408fe554';
var houseFunctionId = '0';
var unitType = '';
var houseStatusId = '0';
var totalAreaId = '0';
var inAreaId = '0';

var ret = DoSearch(ak, sProjectId, buildingId, houseFunctionId, unitType, houseStatusId, totalAreaId, inAreaId);
console.log(ret);

报错:ReferenceError: JSEncrypt is not defined

通过调试,发现JSEncrypt在文件jsencrypt.min.js中定义,行数大概2700,非常明显的RSA加密工具,直接扣取,再次尝试运行:

报错:ReferenceError: navigator is not defined

尝试补环境头:

var Navigator = function Navigator(){

}
Navigator.prototype.appName = 'Netscape';
var navigator = new Navigator();

再次运行:

报错:ReferenceError: window is not defined

尝试补环境头:

window = global;

成功出值!

PostMan测试生成的token是否可用,成功拿到正确结果:

三、 完整代码

项目已开源,请访问github获取,期待你的一键三连、star、交流。

github项目地址:https://github.com/zhu6201976/zfcj20240111

项目运行完整截图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

将PDF转换为二维码,实现手机端无缝分享的新体验

在移动互联网时代,手机已经成为我们日常生活和工作中不可或缺的工具。然而,直接在手机上分享PDF文件可能会面临格式兼容性、文件大小限制以及传输速度慢等问题。为此,Maifile.cn提供了一种创新的解决方案——将PDF转换为二维码,让…

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement 题解(SPJ!!!)

[ICPC2021 Nanjing R] Klee in Solitary Confinement 题面翻译 给定 n , k n,k n,k 和一个长为 n n n 的序列,你可以选择对区间 [ l , r ] [l, r] [l,r] 的数整体加上 k k k,也可以不加。最大化众数出现次数并输出。 题目描述 Since the travele…

Python密码本连接wifi

有时候我们会忘记自己的Wi-Fi密码,或者需要连接某个Wi-Fi网络以满足合法需求。本文将介绍如何使用Python编程语言编写一个简单的连接Wi-Fi的程序。 一、密码本准备 在进行wifi猜测时,其实就是列出各种可能的密码,用来尝试去访问目标wifi&…

学习k8s的应用(三)

一、k8s部署ngnix 1、一些查看命令 1-1、所有命令空间 kubectl get pod --all-namespaces kubectl get svc --all-namespaces1-2、指定命令空间 kubectl get pod -n yabin kubectl get svc -n yabin2、单节点集群兼容 # 因为目前只有一个master节点,默认安装后…

Mac python爬虫学习

首先推荐几个 必须要掌握的类库 Requests: HTTP for Humans 它是以这么一句话介绍自己的,为人类使用的HTTP库 http://docs.python-requests.org/zh_CN/latest/user/quickstart.html 中文文档 Beautifulsoup 用Beautiful Soup解析网站源代码 代替正则 https://…

【计算机网络】第七,八,九章摘要重点

第七章网络管理 1.计算机网络面临的两大威胁? 恶意程序有:计算机病毒,计算机蠕虫,特洛伊木马,逻辑炸弹,后门入侵和流氓软件。 2.安全的计算机网络四个目标: 机密性,端点鉴别&…

File.mkdir与File.mkdirs区别String.replace方法返回值

1、File.mkdir与File.mkdirs区别 File fnew File("C:\\a\\b"); mkdir 只创建最后一级目录 f.mkdir();只会创建b 若没有a 创建失败 mkdirs如上所述 创建a,b 当不确定目录是否存在时,最好用mkdirs 判断文件是否存在 文件夹是否存在 2、String.replace…

保送阿里云的云原生学习路线

近期好多人都有咨询学习云原生有什么资料。与其说提供资料不如先说一说应该如何学习云原生。 Linux基础知识:云原生技术通常在Linux环境中运行,因此建议首先掌握Linux的基础知识,包括命令行操作、文件系统、权限管理等。 容器化技术&#x…

Vue-24、Vue过滤器

1、效果 2、过滤器实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>过滤器</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.…

二叉树的遍历 Java

二叉树的遍历 递归法前序遍历中序遍历后序遍历改进 迭代法前序、后序遍历中序遍历 二叉树的统一迭代法(未完成)Java 中 null、NULL、nullptr 区别 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(in…

大数据技术原理与应用期末复习(林子雨)

大数据技术原理与应用期末复习&#xff08;林子雨&#xff09; Hadoop的特性HBase编程实践NoSQL的四大类型键值数据库优点&#xff1a;缺点&#xff1a; 列族数据库优点&#xff1a;缺点&#xff1a; 文档数据库优点&#xff1a;缺点&#xff1a; 图数据库优点&#xff1a;缺点…

模拟瑞幸小程序购物车

是根据渡一袁老师的大师课写的&#xff0c;如有什么地方存在问题&#xff0c;还请大家指出来哟ど⁰̷̴͈꒨⁰̷̴͈う♡&#xff5e; index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-e…

新增PostgreSQL数据库管理功能,1Panel开源面板v1.9.3发布

2024年1月15日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.9.3版本。 在这一版本中&#xff0c;1Panel新增了PostgreSQL数据库管理功能&#xff0c;并且支持设置PHP运行环境扩展模版。此外&#xff0c;我们进行了30多项功能更新和问题修复。1Panel应用…

如何应对Android面试官->RecyclerView回收复用LayoutManager,实战探探划一下

前言 上章我们讲了右半部分&#xff0c;本章我们讲解左半部分&#xff1b; 如何复用原理 我们在滑动的时候&#xff0c;才会触发 RecyclerView 的回收复用&#xff0c;所以我们从 RecyclerView 的 onTouchEvent 方法入手&#xff1b;我们来看下滑动的时候&#xff0c;是怎么…

SQL实践:利用tag检索文件的多种情况讨论(二)

在上一篇文章SQL实践&#xff1a;利用tag检索文件的多种情况讨论中&#xff0c;我们介绍了在使用外键的方式为数据关联tag后&#xff0c;如何筛选&#xff1a; 如何筛选包含某一个tag的数据如何筛选包含且只包含某一个tag的数据如何筛选包含多个指定tag的数据 这篇文章主要是…

LiveGBS流媒体平台GB/T28181功能-基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码

LiveGBS基础配置接入控制白名单黑名单配置控制设备安全接入设备单独配置接入密码 1、白名单配置应用场景2、接入控制2.1、白名单2.2、黑名单 3、搭建GB28181视频直播平台 1、白名单配置应用场景 LiveGBS国标流媒体服务&#xff0c;支持白名单配置。 可在设备注册前&#xff0…

机器学习_梯度下降

文章目录 什么是梯度梯度下降梯度下降有什么用 什么是梯度 计算梯度向量其几何意义&#xff0c;就是函数变化的方向&#xff0c;而且是变化最快的方向。对于函数f(x)&#xff0c;在点(xo,yo)&#xff0c;梯度向量的方向也就是y值增加最快的方向。也就是说&#xff0c;沿着梯度…

使用 Elasticsearch 和 LlamaIndex 进行高级文本检索:句子窗口检索

2023 年是检索增强生成 (RAG) 的一年&#xff0c;人们探索了许多用例&#xff0c;并使用该技术开发了数百种产品。 从 Q/A 聊天机器人到基于上下文的代理&#xff0c;RAG 的使用一直是 LLM 申请快速增长的主要因素。 支持不断发展的社区以及 Langchain 和 LlamaIndex 等强大框架…

Controller层自定义注解拦截request请求校验

一、背景 笔者工作中遇到一个需求&#xff0c;需要开发一个注解&#xff0c;放在controller层的类或者方法上&#xff0c;用以校验请求参数中(不管是url还是body体内&#xff0c;都要检查&#xff0c;有token参数&#xff0c;且符合校验规则就放行)是否传了一个token的参数&am…

Java工具类汇总

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; ExcelUtils public class ExcelUtils {/*** 注入的具有排序功能的handle*/private static final SortRowWriteHandler SORT_ROW_WRITE_HANDLER new SortRowWriteHan…