「JS 逆向百例」房天下登录接口参数逆向(房天下端口怎么用)

「JS 逆向百例」房天下登录接口参数逆向(房天下端口怎么用)

声明

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

逆向目标

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

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

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

  • 逆向参数:

    Form Data:

    pwd: 044b527dba64d1e82657668beae1d61e4d86643d231792c78d5c538461a146b01c8e28d98b14915a11758deb6095aba16688a07427150434681949529f02e808e8891e1f90b5c91d42058a83f2c6902bd69825577dc4efb993f1aa4c9bb43a2bbe1acad5781a8738614ddafbda3cca99a0c03fb634d8e1001f25bca59a8d421b`

逆向过程

抓包分析

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

「JS 逆向百例」房天下登录接口参数逆向(房天下端口怎么用)

参数逆向

加密参数只有一个 pwd,直接全局搜索,出现一个 loginbypassword.js,很明显就是加密的 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 函数传入参数得到的:

「JS 逆向百例」房天下登录接口参数逆向(房天下端口怎么用)

完整代码

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

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 execjsimport 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://my.fang.com/', '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(): # 16521689404 uid = 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 逆向百例」房天下登录接口参数逆向(房天下端口怎么用)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年12月1日 上午10:11
下一篇 2023年12月1日 上午10:21

相关推荐

  • 健康小站最前线|行动不方便,养老机构里的老人如何做核酸?这个卫生服务中心隔天上门采样

    钱江晚报·小时新闻 通讯员 农凤连 自杭州市开展常态化核酸检测以来,杭州市上城区南星街道千方百计出妙计,怎么方便居民采样怎么来。近两日,上城区南星街道组织社区卫生服务中心医护人员,…

    2022年6月9日
    265
  • 主数据标准化分发对接说明(数据对接接口方案)

    公司项目类型共分为两类,第一种为产品加交付类项目,需要公司内部出实施人员进行项目交付,而另一种为产品加培训类项目,需要合作商或者客户自身进行项目的开发相关工作,由我方提供产品的培训…

    科研百科 2022年12月12日
    708
  • 服务合同管理

    服务合同管理 随着市场经济的发展和竞争的加剧,企业之间的服务合同管理已经成为企业运营中不可或缺的一部分。服务合同管理不仅仅是合同的签订和履行,更是对合同进行管理和优化的过程,其目的…

    科研百科 2024年8月30日
    31
  • 淮安市项目管理系统

    淮安市项目管理系统 随着现代项目管理的不断进步,淮安市的项目管理系统也在不断升级和完善。作为一个现代化的项目管理工具,淮安市项目管理系统为项目经理和项目团队提供了更加高效和可靠的工…

    科研百科 2025年1月12日
    0
  • 【解惑】你以为这里奉行“丛林法则”,其实监狱的管理是这样的

    交出这个话题 源于许多网友对监狱工作的关心和好奇 “有关系有背景,有钱有本事的, 在监狱里都混得不错。” “抢劫犯、杀人犯那些拳头硬, 别人都怕挨打不敢惹。” //傅老大、余小二此…

    科研百科 2024年1月16日
    178
  • 巡察整改 总结材料雷同

    巡察整改总结材料雷同 巡察是一种重要的政治监督方式,旨在加强党的政治建设,提高党的领导水平和执政水平。然而,在巡察过程中,也存在一些雷同现象,即巡察整改总结材料中存在类似的内容。这…

    科研百科 2024年11月26日
    83
  • 什么叫外协项目

    外协项目是指由第三方公司或组织承担项目开发或管理任务的项目。这些第三方公司或组织通常拥有专业的技术团队、良好的信誉和丰富的项目管理经验,可以为项目提供技术支持、项目管理和咨询服务等…

    科研百科 2024年10月14日
    4
  • 工程施工进度管理措施

    工程施工进度管理措施 随着工程进展的不断加快,施工进度管理已经成为了施工项目中至关重要的一部分。为了确保工程进度符合预期,必须采取一系列管理措施,以确保施工进度的顺利推进。本文将介…

    科研百科 2024年5月26日
    108
  • 公司采购内控管理制度三篇(公司采购内控管理制度三篇内容)

    关注【本头条号】更多关于制度、流程、体系、岗位、模板、方案、工具、案例、故事、图书、文案、报告、技能、职场等内容,采购供应链俱乐部积累免费与您分享! 篇一:公司采购内控管理制度 1…

    科研百科 2024年7月10日
    59
  • 促进科研项目管理

    科研项目管理是一个关系到科技进步和经济发展的重要问题。随着科技的快速发展,科研项目管理也在不断地改进和完善。本文旨在探讨如何促进科研项目管理,提高科研项目的质量和效率,为科技创新和…

    科研百科 2025年1月30日
    1