房天下登录接口JS逆向

声明
本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
逆向目标

  • 目标:房天下账号密码登录

  • 主页:https://passport.fang.com/

  • 接口:https://passport.fang.com/login.api

  • 逆向参数:

pwd: 1ecd3a3921bd0a70e1114ebc0f00b0d1aa88c7b9948ba4d9da5eafe2c52bae3fd43172ee55b6532e921756a822520873bae8a5380b386ed532e1b11fedc82b217d6946970b713b962e2678acfd07bac04d933939279e6fb94712b9f169634bca25342d478ba778a1915cce225313cca4f8fc7dd3a5860c88110b7373c60ea097

逆向过程
抓包分析
随便输入一个账号密码,点击登陆,抓包定位到登录接口为 https://passport.fang.com/login.api ,POST 请求,Form Data 里,密码 pwd 被加密处理了。
在这里插入图片描述
加密参数只有一个 pwd,直接全局搜索,出现一个 loginbypassword.js,很明显就是加密的 JS,这个 JS 贴心的写上了中文注释,直接来到登录模块,埋下断点:
在这里插入图片描述
分析得到加密函数是encryptedString,这个函数可以看到在一个叫做 RSA.min.js 的加密 JS 里,很明显的 RSA 加密,直接 copy 下来就好了,
key_to_encode 这个参数可以直接在首页搜到,可以看到是向 RSAKeyPair 函数传入参数得到的:
在这里插入图片描述
部分关键完整代碼
fang_encrypt.js

function setMaxDigits(n) {}function BigInt(n) {}function biFromDecimal(n) {}// 此处省略 N 个函数function twoDigit(n) {}function encryptedString(n, t) {}function decryptedString(n, t) {}var biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1,biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998, maxDigits, ZERO_ARRAY,bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks;
setMaxDigits(20);
dpl10 = 15;
lr10 = biFromNumber(1e15);
hexatrigesimalToChar = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
hexToChar = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
highBitMasks = [0, 32768, 49152, 57344, 61440, 63488, 64512, 65024, 65280, 65408, 65472, 65504, 65520, 65528, 65532, 65534, 65535];
lowBitMasks = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535];
setMaxDigits(129);function getEncryptedPassword(pwd, n, i, t) {var key_to_encode = new RSAKeyPair(n, i, t);return encryptedString(key_to_encode, pwd)
}// 测试样例
// console.log(getEncryptedPassword("16521689404", "010001", "", "978C0A92D2173439707498F0944AA476B1B62595877DD6FA87F6E2AC6DCB3D0BF0B82857439C99B5091192BC134889DFF60C562EC54EFBA4FF2F9D55ADBCCEA4A2FBA80CB398ED501280A007C83AF30C3D1A142D6133C63012B90AB26AC60C898FB66EDC3192C3EC4FF66925A64003B72496099F4F09A9FB72A2CF9E4D770C41"))

fang_login.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import reimport execjs
import requestsindex_url = 'https://passport.fang.com/'
login_url = 'https://passport.fang.com/login.api'
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36'
session = requests.session()def get_key_to_encode():headers = {'User-Agent': user_agent}response = session.get(url=index_url, headers=headers)key_to_encode = re.findall(r'RSAKeyPair\((.*)\);', response.text)[0].replace('"', '').split(', ')return key_to_encodedef get_encrypted_password(key_to_encode, pwd):n, i, t = key_to_encode[0], key_to_encode[1], key_to_encode[2]with open('fang_encrypt.js', 'r', encoding='utf-8') as f:fang_js = f.read()encrypted_pwd = execjs.compile(fang_js).call('getEncryptedPassword', pwd, n, i, t)return encrypted_pwddef login(encrypted_password, uid):headers = {'User-Agent': user_agent,'X-Requested-With': 'XMLHttpRequest','Host': 'passport.fang.com','Origin': 'https://passport.fang.com','Referer': 'https://passport.fang.com/?backurl=http%3a%2f%2fmy.fang.com%2f','sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"','Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}data = {'uid': uid,'pwd': encrypted_password,'Service': 'soufun-passport-web','AutoLogin': 1}response = session.post(url=login_url, data=data, headers=headers)print(response.json())def main():# 16521689404uid = input('请输入登录账号:')pwd = input('请输入登录密码:')rsa_key = get_key_to_encode()encrypted_pwd = get_encrypted_password(rsa_key, pwd)login(encrypted_pwd, uid)if __name__ == '__main__':main()

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

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

相关文章

HarmonyOS NEXT应用开发—自定义日历选择器

介绍 本示例介绍通过CustomDialogController类显示自定义日历选择器。 效果图预览 使用说明 加载完成后显示主界面,点当前日期后会弹出日历选择器,选择日期后会关闭弹窗,主页面日期会变成选定的日期。 实现思路 获取当前月和下个月的日期…

《网络安全法》关于数据出境的条款

《中华人民共和国网络安全法》于2016年11月7日通过,自2017年6月1日起施行。 在网络安全法中,第三章“网络运行安全”第二节“关键信息基础设施的运行安全”中的第三十七条规定: “关键信息基础设施的运营者在中华人民共和国境内运营中收集和产生的个人信…

html5cssjs代码 021 实体字符参考

html5&css&js代码 021 实体字符参考 一、代码二、解释 HTML实体是一种用于表示特殊字符的编码方式。在HTML中&#xff0c;有一些字符具有特殊的含义&#xff0c;如小于号 (<) 和大于号 (>) 是用于标签的起始和结束&#xff0c;如果直接在HTML文档中使用这些字符&…

webshell流量特征

webshell工具流量特征 - i苏沐辰 - 博客园 (cnblogs.com) 菜刀 作为老牌 Webshell 管理神器&#xff0c;中国菜刀的攻击流量特征明显&#xff0c;容易被各类安全设备检测&#xff0c;实际场景中越来越少使用&#xff0c;加密 Webshell 正变得日趋流行。 UA字段 通常为百度&…

WIFI 7技术的应用前景

随着WIFI 7技术的不断成熟和普及&#xff08;如果对WIFI 7技术不太了解的&#xff0c;可以点击链接去查看一下这篇文章WIFI7&#xff1a;开启无线通信新纪元 &#xff09;&#xff0c;我们正迎来一个数字连接的全新时代。WIFI 7作为新一代无线网络标准&#xff0c;将极大的改变…

Selenium 是什么?简单了解Selenium

Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具&#xff0c;是一款 自动化测试 工具&#xff0c;使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing&#xff0c;各种支持如下列表&#xff1a; UI 元素的支持与管理&#xff1a;自写代码实现浏览器支…

【Qt】用Qt开发需要购买授权吗?——关于(L)GPL证书的详解

目录 Qt证书体系开源证书解读Qt官方对(L)GPL的描述自由度要求 GPL vs. LGPL完整条款 总结参考 Qt证书体系 你在用Qt开发应用的过程中&#xff0c;是否也担心过授权问题&#xff1f; 按照官方说法 The Qt framework is dual-licensed, available under both commercial and op…

Leetcode 3.15

Leetcode hot100 二叉树1.二叉搜索树中第K小的元素2.二叉树展开为链表3.从前序与中序遍历序列构造二叉树 二叉树 1.二叉搜索树中第K小的元素 二叉搜索树中第K小的元素 最重要的知识点&#xff1a;二叉树搜索树的中序遍历是升序的。 方法一&#xff1a;我们只需存储升序遍历&…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:ListItemGroup)

该组件用来展示列表item分组&#xff0c;宽度默认充满List组件&#xff0c;必须配合List组件来使用。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。该组件的父组件只能是List。 使用说明 当List…

Docker使用(四)Docker常见问题分析和解决收集整理

Docker使用(四)Docker常见问题分析和解决收集整理 五、常见问题 1、 启动异常 【描述】&#xff1a; 【分析】&#xff1a;[rootlocalhost ~]# systemctl status docker 【解决】&#xff1a; &#xff08;1&#xff09;卸载后重新安装&#xff0c;不能解决这个问题。 …

Android cmdline tools安装

打开AS 进入SDK Tools 看到了吗?那个打着勾的就是

如何将图片无损放大?

如何将图片无损放大&#xff1f; 在处理图片时&#xff0c;我们经常会遇到需要放大图像而又不损失图像质量的情况。这种操作被称为“图片无损放大”&#xff0c;它可以帮助我们保持图像的清晰度和细节&#xff0c;同时满足对更大尺寸图像的需求。传统的图像放大方法往往会导致…

重要表格比较多 不想被别人查阅 怎样批量加密?excel批量加密

批量给Excel工作表加密是一个既实用又具挑战性的任务。对于需要在多个工作表中保护敏感信息的用户来说&#xff0c;掌握这一技能尤为重要。下面&#xff0c;我们将详细介绍如何批量给Excel工作表加密 首先&#xff0c;我们要选择合适的加密方法&#xff0c;在这里小编给大家推荐…

ASP.NET-WebFoms常见前后端交互方式

在 ASP.NET Web Forms 中&#xff0c;实现前后端交互是开发 Web 应用程序的重要部分。通过合适的数据传递方式&#xff0c;前端页面能够与后端进行有效的通信&#xff0c;并实现数据的传递、处理和展示。本文介绍了ASP.NET Web Forms开发中常见的前后端交互方式&#xff0c;包括…

Reactor,Proactor,Actor网络模型

Reactor&#xff0c;Proactor&#xff0c;Actor_reactor actor-CSDN博客 Actor模型是一种并发编程模型&#xff0c;它定义了计算单元的行为&#xff0c;这些计算单元被称为Actors。Actors通过消息传递进行通信&#xff0c;它们之间相互隔离&#xff0c;不共享内存。Actors…

Spring MVC(一)— DispatcherServlet

DispatcherServlet 是Spring MVC框架的HTTP 请求处理器的中央调度器。它具有以下的功能&#xff1a; 1&#xff09;基于IoC容器JavaBean配置机制。 2&#xff09;使用HandlerMappingl来实现请求到处理器的路由映射。 3&#xff09;使用HandlerAdapter 来处理不同的处理器。 …

Go 构建高效的二叉搜索树联系簿

引言 树是一种重要的数据结构&#xff0c;而二叉搜索树&#xff08;BST&#xff09;则是树的一种常见形式。在本文中&#xff0c;我们将学习如何构建一个高效的二叉搜索树联系簿&#xff0c;以便快速插入、搜索和删除联系人信息。 介绍二叉搜索树 二叉搜索树是一种有序的二叉…

探索SOCKS5代理、代理IP、HTTP与网络安全

在这个数字化时代&#xff0c;网络安全已成为我们日常生活中不可或缺的一部分。作为一名软件工程师&#xff0c;深入理解网络通信的核心技术&#xff0c;如SOCKS5代理、代理IP、HTTP协议&#xff0c;以及它们在网络安全中的应用&#xff0c;对于设计和实施安全的网络应用至关重…

uni-app 安卓手机判断是否开启相机相册权限

// 安卓相机权限 androidCameraPermiss(index){ plus.android.requestPermissions([android.permission.CAMERA],(e) > { if (e.deniedAlways.length > 0) { this.androidAuthCamera false …

【自动驾驶可视化工具】

自动驾驶可视化工具 自动驾驶可视化工具1.百度Apollo的Dreamview:2.Cruise的Worldview:3.Uber的AVS:4.Fglovex Studio: 自动驾驶可视化工具 介绍一下当前主流的自动驾驶可视化工具。 1.百度Apollo的Dreamview: Dreamview是百度Apollo平台开发的一种可视化工具&#xff0c;用…