文章目录

  • 声明
  • 逆向目标
  • 逆向过程
    • 抓包分析
    • 参数逆向
  • 完整代码
    • fang_encrypt.js
    • fang_login.py

声明

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

逆向目标

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

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

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

  • 逆向参数:

    Form Data:

    pwd: 044b527dba64d1e82657668beae1d61e4d86643d231792c78d5c538461a146b01c8e28d98b14915a11758deb6095aba16688a07427150434681949529f02e808e8891e1f90b5c91d42058a83f2c6902bd69825577dc4efb993f1aa4c9bb43a2bbe1acad5781a8738614ddafbda3cca99a0c03fb634d8e1001f25bca59a8d421b`
    

逆向过程

抓包分析

随便输入一个账号密码,点击登陆,抓包定位到登录接口为 https://passport.fang.com/login.api ,POST 请求,Form Data 里,密码 pwd 被加密处理了。

参数逆向

加密参数只有一个 pwd,直接全局搜索,出现一个 loginbypassword.js,很明显就是加密的 JS,这个 JS 贴心的写上了中文注释,直接来到登录模块,埋下断点:

uid: that.username.val(),
pwd: encryptedString(key_to_encode, that.password.val()),
Service: that.service.val(),
AutoLogin: that.autoLogin.val()

encryptedString 这个函数可以看到在一个叫做 RSA.min.js 的加密 JS 里,很明显的 RSA 加密,直接 copy 下来就好了,key_to_encode 这个参数可以直接在首页搜到,可以看到是向 RSAKeyPair 函数传入参数得到的:

完整代码

以下只演示部分关键代码,完整代码可在 GitHub 下载:https://github.com/kgepachong/crawler

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()

【JS 逆向百例】房天下登录接口参数逆向相关推荐

  1. 【JS 逆向百例】百度翻译接口参数逆向

    文章目录 逆向目标 逆向过程 抓包分析 获取 token 获取 sign 完整代码 baidu_encrypt.js baidufanyi.py 逆向目标 目标:百度翻译接口参数 主页:https:/ ...

  2. 【JS 逆向百例】37网游登录接口参数逆向

    文章目录 声明 逆向目标 逆向过程 抓包分析 参数逆向 完整代码 37_encrypt.js 37_login.py 声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切 ...

  3. 【JS 逆向百例】当乐网登录接口参数逆向

    文章目录 声明 逆向目标 逆向过程 抓包分析 参数逆向 完整代码 d_cn_encrypt.js d_cn_login.py 声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产 ...

  4. 最新房天下登录接口(RSA)JS逆向分析

    目标网址:房天下-登录 重要说明:文章教程仅供参考学习,请勿用于非法用途,否则后果自负. 目录 ​ 1.接口参数分析 2.全局搜索pwd

  5. 【JS 逆向百例】webpack 改写实战,G 某游戏 RSA 加密

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...

  6. 【JS逆向百例】某音乐网分离式 webpack 非 IIFE 改写实战

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 逆向过程 抓包分析 参数逆向 webpack 改写 IIFE 传数组 ...

  7. 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 抓包分析 加密查找 参数逆向 完整代码 JavaScript 加密代码 Python 测试代码 声明 ...

  8. 【JS 逆向百例】Fiddler 插件 Hook 实战,某创帮登录逆向

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途 ...

  9. 【JS 逆向百例】XHR 断点调试,Steam 登录逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:Steam ...

最新文章

  1. 不好意思,食言而肥了
  2. 【Caffe实践】基于Caffe的人脸检测实现
  3. f12控制台如何查看consul_Consul初探-从安装到运行
  4. CF467C George and Job
  5. Python中几个操作列表的内置函数filter(),map(),reduce(),lambda
  6. 敏捷开发生态系统系列之三:计划跟踪II(需求优先级排序-迭代期内无变更-团队承诺)...
  7. sqlserver2008秘钥
  8. java工具方法1(数组)
  9. 如何获得查询的执行计划?(一)
  10. 结合源码探讨Android系统的启动流程
  11. Eclipse修改svn地址
  12. Java库 学习笔记 - POI 在Word文档中查找指定关键字并设置背景色
  13. Onvif协议:什么是Onvif
  14. 【王道考研】信号量机制
  15. 方法(Method)
  16. 【复杂网络社团发现】Gephi绘制网络图
  17. Wsus更新失败错误代码:0x80244022故障排除
  18. 产品学习:智能生产调度管理系统
  19. 同时拥有多个子域名和主域名?推荐申请GlobalSign SANs SSL证书
  20. mac os x使用Git简易入门教程

热门文章

  1. 《avascript 高级程序设计(第三版)》 ---第三章 基本概念
  2. JavaWeb高性能开发(一)
  3. 使用SqlCommandBuilder
  4. [Leedcode][JAVA][第990题][等式方程的可满足性][并查集]
  5. Leetcode 1559二维网格图中探测环 技巧DFS|剪枝
  6. git连接jenkins_开普勒云平台:如何配置gitlab与Jenkins
  7. 拆包--缓冲区查找包头及包尾偏移
  8. 801. 二进制中1的个数
  9. mysql memcache redis_redis,mysql,memcache的區別與比較,redis兩種數據存儲持久化方式
  10. c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数