js逆向实战之某网游登录参数password加密

news/2025/3/12 23:31:35/文章来源:https://www.cnblogs.com/sbhglqy/p/18508263

声明:本篇文章仅用于知识分享,不得用于其他用途
网址:https://www.37.com/

加密逻辑

  1. 访问网址,输入用户名和密码,看触发哪些数据包。
    image

注意:这里的流量包要选择all,如果选择fetch/XHR则看不到任何数据包。

  1. 明显看到password被加密了,先去搜索url中的关键字api/login.php
    image
    可以看到触发的数据包中有action=login,但是搜索出来的没有一个符合,所以这里搜索url关键字不太合适。
  2. 再看数据包中所传的参数有非常多,我们可以选择一个参数名比较不常见的,这样搜索出来的结果会少一点,容易筛选。经过测试,选择remember_me作为关键字搜索,只有一处。
    image
  3. remember_me处打断点,发现打不上,却在下面的一行代码打上了断点,说明可能逻辑在下面。
    image

image
5. 重新输入用户名和密码触发断点,变量b中有用户名和密码。
image
6. 单步调试,看执行到哪一步,密码发生了变化。执行到如下这行代码的时候,还是原来的密码。
image
再往下执行一步,等h.password = td(f)这行代码执行完,password被加密了,说明加密逻辑就在这行代码中。
image
7. 定位td函数,打断点,重新输入用户名和密码,让程序运行到td函数中。
image
8. 传给td函数的参数还是明文的密码,经过td函数的处理就变成了加密字符串。知道了加密的函数,就可以开始抠代码了。

function td(a) {var maxPos = ch.length - 2, w = [];for (i = 0; i < 15; i++) {w.push(ch.charAt(Math.floor(Math.random() * maxPos)));if (i === 7) {w.push(a.substr(0, 3))}if (i === 12) {w.push(a.substr(3))}}return __rsa(w.join(""))
}var a = "123456";
console.log(td(a));

运行报错,缺少ch
image
去原页面找。
image
复制出来,再运行,报错__rsa未定义。
image
再去原页面找。
image
都在同一个文件中,既然这样,就把整个页面的代码都复制出来。

var ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function __rsa(str) {var out, i, len;var c1, c2, c3;len = str.length;i = 0;out = "";while (i < len) {c1 = str.charCodeAt(i++) & 0xff;if (i == len) {out += ch.charAt(c1 >> 2);out += ch.charAt((c1 & 0x3) << 4);out += "==";break}c2 = str.charCodeAt(i++);if (i == len) {out += ch.charAt(c1 >> 2);out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));out += ch.charAt((c2 & 0xF) << 2);out += "=";break}c3 = str.charCodeAt(i++);out += ch.charAt(c1 >> 2);out += ch.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));out += ch.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));out += ch.charAt(c3 & 0x3F)}return out
}
function td(a) {var maxPos = ch.length - 2, w = [];for (i = 0; i < 15; i++) {w.push(ch.charAt(Math.floor(Math.random() * maxPos)));if (i === 7) {w.push(a.substr(0, 3))}if (i === 12) {w.push(a.substr(3))}}return __rsa(w.join(""))
}var a = "123456";
console.log(td(a));

运行,成功得到加密的字符串,且每一次的结果都不一样。
image
9. 编写python代码进行登录。

import requests
import execjslogin_account = input("请输入用户名:")
pwd = input("请输入密码:")file = open("encrypt.js", mode="r")
exec_js = file.read()
exec_code = execjs.compile(exec_js)
password = exec_code.call("td", pwd)url = "https://my.37.com/api/login.php?callback=jQuery183008257522373901449_1730007524424&action=login&login_account" \"={}&password={}&ajax=0&remember_me=1&save_state=1&ltype=1&tj_from=100&s=1&img_ver=1" \".0&tj_way=1&_=1730007546145".format(login_account, password)
headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/128.0.0.0 Safari/537.36"}
resp = requests.get(url, headers=headers)
print(resp.text.encode("utf-8").decode("unicode_escape"))

运行结果如下。
image
涉及到了验证码的滑块验证,还没学过,等学会了再回来补,暂时只能做到这里了。

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

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

相关文章

什么是循环神经网络(RNN)

循环神经网络(Recurrent Neural Network,RNN)是一种深度学习模型,专门设计用于处理序列数据和时间序列问题。它具有一种独特的结构,允许信息在网络内部进行循环传递,以处理前后相关性和时序性。RNN的关键特性是它具有内部循环结构,可以接受来自上一个时间步的输出作为当…

只需初中数学知识就能理解人工智能大语言模型51

全面解释人工智能LLM模型的真实工作原理(一) 人工智能 #大语言模型LLM #机器学习ML #深度学习 #数据挖掘序言:为了帮助更多人理解,我们将分成若干小节来讲解大型语言模型(LLM)的真实工作原理,从零开始,不需额外知识储备,只需初中数学基础(懂加法和乘法就行)。本文包…

gitee如何上传大文件 ​

上传大文件到gitee需遵循以下步骤:1.了解gitee对文件大小的限制;2.利用Git LFS(Large File Storage)工具;3.配置git属性文件;4.提交大文件到仓库;5.推送改动到gitee。开始上传大文件前,首先要对gitee的文件大小限制有所了解。1.了解gitee对文件大小的限制 在使用gitee时…

如何进行机器人导航?

机器人导航的核心是确保机器人能在环境中有效、安全地移动。这包括以下步骤:1.使用传感器获取环境信息;2.地图生成与更新;3.确定机器人的位置和方向;4.规划路径;5.避障策略。首先,你需要确保机器人拥有准确的传感器和硬件。1.使用传感器获取环境信息 每种机器人都需要对其…

回溯法解决图着色问题

此为课题组所指导本科生和低年级硕士生学习组合优化问题汇报 所用教材:北京大学屈婉玲教授《算法设计与分析》 课程资料:https://www.icourse163.org/course/PKU-1002525003 承诺不用于任何商业用途,仅用于学术交流和分享更多内容请关注许志伟课题组官方中文主页:https://J…

纳米芯片和微型芯片有什么区别

随着半导体技术的不断进步,纳米芯片和微型芯片已经成为电子设备中不可或缺的组成部分。尽管两者在外观上可能难以区分,但在制造工艺、性能、应用领域以及未来发展趋势等方面,它们展现出了各自的特点和差异。本文深入探讨了纳米芯片与微型芯片的区别:1.尺寸和制造精度;2.电…

高级语言程序设计作业第四次

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第四次作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13293 学号:072303426 姓名:王子博 按照老师要求的题目顺序展示截图感悟:老师的作业,让我对C语言有了更加深刻的理解…

Coding和Github有什么区别

Coding和Github的区别主要体现在:1.来源和发展背景不同;2.功能特性不同;3.使用者群体不同;4.可用资源不同;5.服务区域和语言支持不同。总的来说,Coding更侧重于团队协作和项目管理,有更多针对中国市场的本土化服务,而Github作为全球最大的开源社区,拥有丰富的开源项目…

sentry 的作用和使用场景是什么

Sentry的作用:1. 实时监控应用程序错误;2. 收集并记录错误信息;3. 提供错误信息的可视化和分析工具;4. 实现错误追踪和溯源等。Sentry的使用场景:1. 实时监控生产环境错误;2. 追踪和调试异常情况;3. 优化应用程序性能;4. 提高团队协作效率等。Sentry主要用于实时监控生…

煤矿ai智能监控系统

煤矿ai智能监控系统利用智能视频分析技术和YOLO深度学习技术,煤矿ai智能监控系统可以对煤矿现场进行全方位的监测和分析。煤矿ai智能监控系统能够精确识别和分析皮带锚杆、矸石、木板、堆煤等运输设备和物料的运行状态,同时也可以识别煤量的大小以及非法运人等异常情况。此外…

(一)TypeScript开发入门

Nest.js是一个渐进式 Node.js 框架,用于构建高效、可靠且可扩展的服务器端应用程序。 官网地址:https://ezdoc.cn/docs/nestjs/ 一,Nodejs环境搭建 1,在windows环境下安装node.js和npm,下载地址:https://nodejs.org/en/ 2,查看安装路径,环境变量(会自动添加)和版本3,…

变电站设备状态识别无人值守巡检系统

变电站设备状态识别无人值守巡检系统基于智能视频分析技术和深度学习技术,变电站设备状态识别无人值守巡检系统通过现场已经装好的监控摄像机实时对变电站的设备状态进行监测识别,例如,对隔离开关的分合状态进行实时检测、识别开关柜刀闸的位置和状态、识别鸟巢等外来物体、…