Python突破JS加密限制,进行逆向解密

本文介绍了如何使用Python进行JS加密的逆向工程,通过分析某7网游登录过程,抓包获取接口,逆向主要参数,特别是加密后的密码。利用Python模块execjs运行JS代码,解析出RSA加密的密码,从而实现登录的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

嗨喽~大家好呀,这里是魔王呐 ❤ ~!

开发环境:

  • Python 3.8

  • Pycharm

模块使用:

  • time >>> 时间模块,属于内置,无需安装

  • re >>> 用于生成随机数,属于内置,无需安装

  • requests >>> 主要用来发 送 HTTP 请求,属于内置,无需安装

  • execjs >>> 用来在python中运行js代码的库,第三方,需要安装

第三方模块安装:

win + R 输入cmd 输入安装命令 或 在pycharm中点击Terminal(终端) 输入安装命令

如果出现爆红, 可能是因为 网络连接超时, 可切换国内镜像源,命令如下:

pip install -i https://pypi.doubanio.com/simple/ requests

逆向目标

目标:某 7 网游登录

主页:aHR0cHM6Ly93d3cuMzcuY29tLw==

接口:aHR0cHM6Ly9teS4zNy5jb20vYXBpL2xvZ2luLnBocA==

逆向参数:Query String Parameters:password: SlVEOThrcjgzNDNjaUYxOTQzNDM0eVM=

逆向过程

抓包分析

来到某 7 网游首页,随便输入一个账号密码,点击登陆,

抓包定位到登录接口为 aHR0cHM6Ly9teS4zNy5jb20vYXBpL2xvZ2luLnBocA== ,GET 请求:

分析一下 Query String Parameters 里的主要参数:

callback 是一个回调参数,这个参数的值不影响请求结果,它的格式为 jQuery + 20位数字 + _ + 13位时间戳,使用 Python 很容易构建:

import time
import random

timestamp = str(int(time.time() * 1000))
jsonp = ''
for _ in range(20):
    jsonp += str(random.randint(0, 9))
callback = 'jQuery' + jsonp + '_' + timestamp
print(callback)

login_account 是登录的账户名;

password 是加密后的密码;

_ 是13位时间戳。

参数逆向

需要我们逆向的参数就只有一个 password,

我们尝试直接全局搜索此关键字,会发现出来的结果非常多,不利于分析,

这里就有一个小技巧,加个等号,搜索 password=,这样就极大地缩短了查找范围,当然也可以搜索 password:,

也可以在关键字和符号之间加个空格,还可以搜索 var password 等,这些都是可以尝试的,要具体情况具体分析,一种没有结果就换另一种。

在本案例中,我们搜索 password=,在 sq.login2015.js 文件里可以看到语句 h.password = td(f),

疑似密码加密的地方,在此处埋下断点进行调试,可以看到返回的值确实是加密后的密码:


继续跟进 td 函数,可以看到是用到了一个自写的 RSA 加密,很简单明了,我们直接将其复制下来使用 Python 调用即可:

完整代码直接文末名片自取即可

参数 JS 加密关键代码

var ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function __rsa(str) {
   
    var out, i, len;
    var c1, c2, c3;
    len = str.length
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值