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

项目运行完整截图:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

玩转【Linux】--基本操作指令(二)

目录 一.指令的常见应用 1. 指令 "cd -" 2.指令"cd ~" 与指令"whoami" (1)指令"whoami" (2)指令"cd ~" 3.指令"alias " 4.指令"touch " 5.指令"mkdir -p" 6.指令"tree &q…

Linux/Networked

Enumeration nmap 网站更新之后有了一个引导模式&#xff0c;更利于学习了&#xff0c;之前看ippsec的视频&#xff0c;要不总是没有思路&#xff0c;现在出现的问题多了提示也更多了&#xff0c;还没有使用&#xff0c;一会用用再说 首先&#xff0c;第一个问题是“目标上正…

CNAS认可是什么?湖南长沙CNAS专业第三方软件检测机构有哪些?

CNAS是中国合格评定国家认可委员会(China National Accreditation Service for Conformity Assessment)的缩写&#xff0c;是专门负责评定和认可各类检验机构、实验室、认证机构和校验机构的国家认可机构。CNAS认可的好处在于&#xff0c;它证明了软件企业和软件产品具备严格的…

浅聊雷池社区版(WAF)的tengine

雷池社区版是一个开源的免费Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;专为保护Web应用免受各种网络攻击而设计。基于强大的Tengine&#xff0c;雷池社区版提供了一系列先进的安全功能&#xff0c;适用于中小企业和个人用户。 Tengine的故事始于2011年&#xff0c;…

Nginx前后端分离部署springboot和vue项目

Nginx前后端分离部署springboot和vue项目&#xff0c;其实用的比较多&#xff0c;有的小伙伴对其原理和配置还一知半解&#xff0c;现在就科普一下&#xff1a; 1、准备后端项目 后端工程无论是微服务还是单体&#xff0c;一般最终都是jar启动&#xff0c;关键点就是把后端服…

Rust之构建命令行程序(三):重构改进模块化和错误处理

开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 重构改进模块化和错误处理 为了改进我们的程序&#xff0c;我们将修复与程序结构及其处理潜在错误的方式有关的四个问题。首先&#xff0c;我们的main函数现在执行两项任务:解析参数和…

Midjourney 1 月 17 日官方版本补丁更新公告,可能于二月底或三月向公众开放

Midjourney专区&#xff1a;Midjourney-喜好儿aigc 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 功能更新和开发 修复/改变区域和缩小功能预计在本周或下周推出 测试一致的样式&#xff0c;强调样式而不是内容 常量字符功能正在开发中&#xff0c;但…

怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准

2023年12月27日&#xff0c;上海怿星电子科技有限公司测试实验室&#xff08;下称&#xff1a;EPT LABS&#xff09;通过CNAS实验室认可批准&#xff0c;并于2024年1月5日正式取得CNAS实验室认可证书&#xff08;注册号CNAS L19826&#xff09;&#xff0c;标志着怿星科技的实验…

Android CarService源码分析

文章目录 一、CarService的基本架构1.1、Android Automative整体框架1.2、Framework CarService1.3、目录结构1.3.1、CarService1.3.2、Car APP 二、CarService的启动流程2.1、系统启动后在SystemServer进程中启动CarServiceHelperService2.2、CarService启动 三、CarService源…

Ubuntu 安装Python3.8

安装Python3.8 一、安装环境 Ubuntu2004Python2.7 目标是将python版本从 2.7 更新到3.8 二、安装步骤 2.1 下载python3.8安装包 wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz2.2 安装 依次执行如下步骤&#xff1a; tar Jxf Python-3.8.0.tar.xz…

【控制篇 / 分流】(7.4) ❀ 03. 对国内和国际IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带用来上网&#xff0c;一条电信&#xff0c;一条IPLS国际专线&#xff0c;由于IPLS仅有2M&#xff0c;且价格昂贵&#xff0c;领导要求&#xff0c;访问国内IP走电信&#xff0c;国际IP走IPLS&#xff0c;那么应该怎么做&#xff1f; 国内IP地址组 我们已…