首页 > 其他分享 >js逆向实战之某网游登录参数password加密

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

时间:2024-10-27 13:58:35浏览次数:1  
标签:ch 加密 charAt js td password out

声明:本篇文章仅用于知识分享,不得用于其他用途
网址: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 execjs

login_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
涉及到了验证码的滑块验证,还没学过,等学会了再回来补,暂时只能做到这里了。

标签:ch,加密,charAt,js,td,password,out
From: https://www.cnblogs.com/sbhglqy/p/18508263

相关文章

  • Nuxt.js 应用中的 imports:sources 事件钩子详解
    title:Nuxt.js应用中的imports:sources事件钩子详解date:2024/10/27updated:2024/10/27author:cmdragonexcerpt:imports:sources是Nuxt.js的一个生命周期钩子,用于在模块设置过程中执行。开发者可以利用这个钩子来扩展模块的源,方便地管理依赖和模块化配置。......
  • CesiumJS 案例 P7:添加指定长宽的图片图层(原点分别为图片图层的中心点、左上角顶点、右
    CesiumJSCesiumJSAPI:https://cesium.com/learn/cesiumjs/ref-doc/index.htmlCesiumJS是一个开源的JavaScript库,它用于在网页中创建和控制3D地球仪(地图)一、添加指定长宽的图片图层(原点为图片图层的中心点)<!DOCTYPEhtml><htmllang="en"><head>......
  • 怎样在Vue.js中使用Vuex进行状态管理
    标题:怎样在Vue.js中使用Vuex进行状态管理摘要:状态管理是任何复杂应用不可或缺的环节。使用Vuex进行状态管理可保持组件间数据同步性与可预测性。通过以下几点进行说明:1、Vuex基本理论;2、Vuex状态树设计;3、实施Vuex的步骤;4、高阶功能及最佳实践。在Vuex基本理论中,即以‘单一状态树......
  • Python 爬虫如何获取 JS 生成的 URL 和网页内容
    Python爬虫获取JS生成的URL和网页内容需要掌握1、网络请求分析、2、Selenium与浏览器驱动使用、3、动态数据抓取策略。以网络请求分析为例,首先,使用开发者工具监控网络请求,抓取和解析JavaScript发出的实际请求。一、网络请求分析在提取JavaScript生成的URL时,分析是关键步骤。开启......
  • 557.清新的化妆品响应式网页 大学生期末大作业 Web前端网页制作 html+css+js
    目录一、网页概述二、网页文件 三、网页效果四、代码展示1.html2.CSS3.JS五、总结1.简洁实用2.使用方便3.整体性好4.形象突出5.交互式强六、更多推荐欢迎光临仙女的网页世界!这里有各行各业的Web前端网页制作的案例,样式齐全新颖,并持续更新!感谢CSDN,提供了这......
  • js调用datasnap rest server
    场景:有嵌套的多层json数据结构的变量,js通过post调用datasnaprestserver,会出现问题:varjson=[{stcd:system.sn,dateTime:dateTimeStr,stnm:system.stnm,lgtd:system.lgtd,lttd:system.lttd,stlc:system.stlc,mydata:{"test_key":"test_value......
  • js逆向实战之某天下登陆参数pwd加密逻辑
    声明:本篇文章仅用于知识分享,不得用于其它用途网址:https://passport.fang.com/加密逻辑随便输入用户名和密码,看触发的数据包。可以看到pwd明显被加密了,全局搜索url中的关键字loginwithpwdStrong.api。只有两处,全部打上断点,重新登录一次,看触发哪个。触发了jquery这里,并且......
  • 基于MATLAB的混沌序列图像加密程序
    设计目的图像信息生动形象,它已成为人类表达信息的重要手段之一,网络上的图像数据很多是要求发送方和接受都要进行加密通信,信息的安全与保密显得尤为重要,因此我想运用异或运算将数据进行隐藏,连续使用同一数据对图像数据两次异或运算图像的数据不发生改变,利用这一特性对图像信息......
  • 使用opencvjs提取图片中的红色印章
    首先看下效果:首先对于纯红色的印章提取,也就是通过提取红色的像素然后得到印章的结果,然后通过在红色的图像中寻找圆圈检测来进行圈定印章的位置源码位置:https://github.com/xxss0903/extractstamp第一步是提取红色内容functionextractStampWithColorToOpencvMat(img,......
  • jsp ssm 校园新闻管理系统 新闻发布系统 news 项目源码 web java
    一、项目简介本项目是一套基于SSM的校园新闻管理系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。包含:项目源码、数据库脚本、软件工具等。项目都经过严格调试,确保可以运行!二、技术实现​后端技术:Spring、SpringMVC、MyBatis前端技术:JSP、HTML、CSS、Ja......