美文网首页
逆向万例|No.00002【登录篇】喜某拉某web端登录接口逆向

逆向万例|No.00002【登录篇】喜某拉某web端登录接口逆向

作者: 逆向扬 | 来源:发表于2023-03-05 19:23 被阅读0次

声明:本文仅供学习交流用途,切勿用于非法行为,否则由此产生的一切后果均与作者本人无关。未经授权禁止转载本文。如有侵权,请及时通过本人公众号「逆向扬」联系删除。

0x1 开始之前

网站地址:YUhSMGNITTZMeTkzZDNjdWVHbHRZV3hoZVdFdVkyOXRMdz09(提示:两次)

本文目标:逆向该网站登录接口

前面我们聊完了如何逆向喜某拉某的登录滑块,现在我们来完成剩下的工作——逆向该网站登录接口。

0x2 密码加密分析

首先找到加密位置,依然是通过跟踪请求调用栈的方式(现在这种方法用着比较顺手,不过用这个方式找这个案例的加密位置效率有些低),定位到 v1 请求的下图方法中可以看到请求参数:

可以看到跟到图中这个位置,密码已经加密了,因此咱们继续往上跟栈,最后可以找到密码其实是在这里加密的:

那么就直接进到这个加密方法的定义中,看看其中的加密逻辑:

那么大一串写死的公钥,盲猜是 RSA 加密,结果验证下来还真是。因此这个加密方式的复现就很简单了,可以用 js 复现,可以把网站的这个加密算法扣下来,也可以用 python 复现,在这里我用 python 复现的方式。

复现的代码如下,供大家参考:

from Cryptodome.PublicKey import RSA
from Cryptodome.Cipher import PKCS1_v1_5

def encrypt_password(pwd):
    public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVhaR3Or7suUlwHUl2Ly36uVmboZ3+HhovogDjLgRE9CbaUokS2eqGaVFfbxAUxFThNDuXq/fBD+SdUgppmcZrIw4HMMP4AtE2qJJQH/KxPWmbXH7Lv+9CisNtPYOlvWJ/GHRqf9x3TBKjjeJ2CjuVxlPBDX63+Ecil2JR9klVawIDAQAB"
    rsa_key = RSA.import_key(base64.b64decode(public_key))  # 导入读取到的公钥
    cipher = PKCS1_v1_5.new(rsa_key)  # 生成对象
    encrypted_password = base64.b64encode(cipher.encrypt(pwd.encode(encoding="utf-8")))
    return encrypted_password

那么到这里,密码的加密就分析完了。

0x3 signature 参数生成分析

下面来分析最后一个参数:signature

通过分析代码发现 signature 参数的生成和密码加密在同一处地方。可以看到这个参数是通过 F 方法生成的,传入的是个对象,对象的属性值分别为 accountpasswordnonce

那么就来看看这个 F 方法内部的逻辑:

在这里u.xmAddress.SECURITY_KEY其实是个固定值,之后写代码时直接写死就行。getQueryStringsign 这两个方法咱们可以直接扣下来,然后用 execjs 执行就行。

在这里我放一张我扣下来的代码的截图,给大家提供一个思路,就不把所有代码扣下来的代码贴出来了,如果有困难的小伙伴可以在我的公众号发送ximoulamou获取完整的 js 代码:

到这里 signture 参数也分析完了。

最后贴上登录接口的逆向代码:

def encrypt_password(pwd):
    public_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVhaR3Or7suUlwHUl2Ly36uVmboZ3+HhovogDjLgRE9CbaUokS2eqGaVFfbxAUxFThNDuXq/fBD+SdUgppmcZrIw4HMMP4AtE2qJJQH/KxPWmbXH7Lv+9CisNtPYOlvWJ/GHRqf9x3TBKjjeJ2CjuVxlPBDX63+Ecil2JR9klVawIDAQAB"
    rsa_key = RSA.import_key(base64.b64decode(public_key))  # 导入读取到的公钥
    cipher = PKCS1_v1_5.new(rsa_key)  # 生成对象
    encrypted_password = base64.b64encode(cipher.encrypt(pwd.encode(encoding="utf-8")))
    return encrypted_password


def get_signature(account, password, nonce):
    return js_complied.call("get_signature", account, password, nonce)


def login():
    account = "your account"
    pwd = "your password"
    encrypted_password = encrypt_password(pwd).decode()
    print(encrypted_password)
    nonce = verify_slide()
    login_payload = {
        "account": account,
        "password": encrypted_password,
        "nonce": nonce,
        "signature": get_signature(account, encrypted_password, nonce),
        "rememberMe": False
    }
    print(login_payload)
    time.sleep(1.5)
    login_r = requests.post("https://passport.ximalaya.com/web/login/pwd/v1",
                            headers=headers,
                            json=login_payload,
                            cookies=cookie)
    print(login_r.text)
    print(login_r.cookies)

0x4 验证

执行我们的脚本,模拟登录成功:

最后

本文介绍了喜某马某的登录接口逆向,总体来说还是比较简单的。但我没有直接把扣下来的 js 代码放出来,希望大家能够自己实践一下。如果大家读后有收获的话,记得点个赞哈。咱们下一篇文章再见。

相关文章

  • 某度登录js逆向

    如有侵权,请联系我删除 1、引言 本文章只做分析,不提供源码 2、分析 首先看一下登录链接和需要什...

  • 某126邮箱,登录js逆向★

    前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 网址:aHR0cHM...

  • 某蘑菇街登录,Js逆向:★

    前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以...

  • 某新商盟登录,js逆向:★★

    前言 可以关注我哟,一起学习,主页有更多练习例子 如果哪个练习我没有写清楚,可以留言我会补充 如果有加密的网站可以...

  • 【JS 逆向百例】某7网游登录接口参数逆向

    声明 本文章中所有内容仅供学习交流,敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一...

  • 某App接口逆向过程

    以下均由http://api.baidu.com[http://api.baidu.com]代替真实的api域名,...

  • 使用Okhttp/Retrofit中实现 Cookie 持久化管

    前言:今天在逆向一个App的登录接口时候,然后拿到了请求地址以及请求参数,但是发现登录接口一直有问题,调用了发送短...

  • iOS逆向 代码注入+Hook

    本文涉及内容无风险,但某信有检测BundId机制,建议不要大号登录 本文是建立在应用重签名的基础上 iOS逆向 应...

  • 【JS 逆向百例】DOM事件断点调试,某商盟登录逆向

    声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由...

  • 记录一个bug的解决过程

    还原 web依赖的某服务重启后,web登录不上,该服务负责web的登录逻辑 重启该服务,发现端口被占用 杀死该服务...

网友评论

      本文标题:逆向万例|No.00002【登录篇】喜某拉某web端登录接口逆向

      本文链接:https://www.haomeiwen.com/subject/xxkpldtx.html