首页 > 其他分享 >JS逆向实战26——某店ua模拟登陆

JS逆向实战26——某店ua模拟登陆

时间:2023-11-16 17:14:15浏览次数:33  
标签:混淆 26 加密 某店 代码 JS 参数 encrypt ua

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

目标

目标网站

aHR0cHM6Ly9kLndlaWRpYW4uY29tL3dlaWRpYW4tcGMvbG9naW4=

目标
获取登录接口 UA 参数加密,UA参数经过了OB混淆加密
其他
本文更新于2023/11/13
本文原文地址:https://mp.weixin.qq.com/s/FIoMpllRK8FXI1XBkVD4Nw

与之前版本不太一样的是增加了phone和password 以及CountryCode的加密。
ps: 上一次发的文章中有个错误。我的账号和密码加密没有添加公钥 导致请求失败。
还有的就是对ua的某些值的校验。

其他参数加密

如上图所示:除了ua是我们本文需要研究的。还有几个参数也是需要我们给逆向逆出来的。
分别为:

  • phone
  • countryCode
  • password
  • wdtoken

我们直接搜索 countryCode

如上图所示。这里就直接显示出了加密的位置。后面就一直跟栈一直扣就行了。很简单。

跟到这个地方。把这一整个JSEncrypt 文件保存下来。然后简单补两个环境。

具体代码如下:
JSEncrypt.js

window = global;
navigator={
    appName:'Netscape'
}
...

login_encrypt.js

window = global;

var JSEncrypt =require("./JSEncrypt.js")
var v = new JSEncrypt()

_encrypt = function (e) {
    return e ? v.encrypt(e + "") : ""
}

getCountryCode = function (e) {
    return Number(e.split("-")[0])
}


function encrypt_up(t){
    return _encrypt(t)
}

function encrypt_CountryCode(){
    return _encrypt(getCountryCode("86-Z"))
}

// i = window.getUa()
// phone = _encrypt(17772231096)
// countryCode = _encrypt(getCountryCode("86-Z"))
// password = _encrypt("1323123213")
//
// console.log(phone,countryCode,password)

至于wdtoken
其实是通过某个请求set_cookie得来的。

抓包分析

研究完其他参数。我们可以来搞UA了。
在刚刚的抓包过程中。我们已经找到了加密位置。

可以看到 ua加密赋值给了i 。i最后再通过URL编码。得到了网页上呈现的UA。
进栈之后

可以看到 这就是个标准的OB混淆啊。至于什么是OB混淆,自己搜搜资料。这里贴一个官网地址: https://obfuscator.io/#upload
简单来说就是一个免费且高效的 JavaScript 混淆器。使代码更难复制,并防止其他人窃取代码。
可以通过AST的方式。或者是工具的方法去给解混淆。
这里我通过
https://tool.yuanrenxue.cn/decode_obfuscator
模式2 的方式去解混淆。

代码分析

解混淆后的主要代码如下

确实到这边已经一目了然了。
这里简单来看看 _0x2e98dd 和 _0x420004

_0x2e98dd:

_0x420004:

如此一来。可以得到一下如此结论

UA参数由三部分组成。最后通过gzip压缩然后btoa(base64)加密。

  1. _0x7dfc34 这个值很简单。通过JS生成的时间戳
  2. _0x1722c3(_0x2e98dd) 这部分是浏览器的环境代码
  3. _0x1722c3(_0x420004) 这部分是鼠标轨迹以及一些是否点击的鼠标环境。
  4. 最后通过gzip压缩 然后base64 加密。
var _0x261229 = _0x1722c3(_0x2e98dd) + "|" + _0x1722c3(_0x420004) + "|" + _0x7dfc34["toString"](16);

_0x261229 = btoa(_0x570bef["gzip"](_0x261229, {
  "to": "string"
}));

参数分析

这里扣代码其实很简单。因为已经脱混淆了。缺什么补什么就行了
这里需要注意的是最后通过zip压缩 然后base64加密的那部分函数代码。

这里可以通过两种方法去补全。

  1. 扣代码(最稳定且最容易出正确结果的)
  2. 因为是gzip压缩算法,可以直接套库。

代码

我们把所有值带入

诶 发现为什么是参数错误呢?
哦我的天哪。好像并没有看上去那么简单。经过我无间断的测试。我发现ua确实是没问题的。
而真正出问题的是 phone 和password 这个rsa加密。
我们网上去找。
按步骤去跟栈 最后发现在初始化V的时候。还有个地方设置了个公钥。我并没有发现。所以导致请求的时候 老是参数错误。

设置完公钥后。重新请求。
然后就可以了。搞的时候感觉很难。真正写出来。感觉好简单。。。

本文原文地址:https://mp.weixin.qq.com/s/FIoMpllRK8FXI1XBkVD4Nw
可以关注我的微信公众号。
某些文章,核心代码,以及提前更新都在微信公众号上。

标签:混淆,26,加密,某店,代码,JS,参数,encrypt,ua
From: https://www.cnblogs.com/zichliang/p/17836747.html

相关文章

  • nodejs敲门
    前言node.js是在电脑上,给js一个可以脱离浏览器运行的环境。功能上像jdk,操作为命令行。现在演化为可以做web服务器使用,拥有许多成熟的项目和插件。本文简单讲讲它,以及它的两个小用途(TS和WebApi服务器)。谈不上入门,只能算是“敲门”。  安装:nodejs官网和中文网都可以下载安......
  • 修改/etc/docker/daemon.json中的log-opts配置发现无效 docker 限制日志大小
    https://colobu.com/2018/10/22/no-space-left-on-device-for-docker/在/etc/docker/daemon.json中修改或添加log-opts参数"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"3"}网上很......
  • 从头开始一个vtk.js项目
    从头开始一个vtk.js项目初始化项目mkdirmy-vtkjs-appcdmy-vtkjs-appnpminit安装@kitware/vtk.js依赖npminstall@kitware/vtk.js对于这个例子,我们将使用webpack来构建我们的应用程序。npminstall-Dwebpack-cliwebpackwebpack-dev-server项目脚手架我们......
  • 使用js写一个音乐音谱图
    我们经常看到在听乐音的时候,会有音谱图随着音乐的节奏不断变化给人视觉上的享受,那么我们通过js来实现以下这个效果,下面是简单的效果图 首先我们需要有一个绘制音频的函数functiondraw(){//请求下一帧动画animationId=requestAnimationFrame(draw);//获取......
  • Vue3实战 - 第一章 node.js/npm安装、配置
    一、node.js 安装(windows)1、下载并安装nodehttps://nodejs.org/en安装到 D:\Java\nodes 路径2、配置环境变量检查是否安装成功3、配置全局包存放目录和缓存目录npmconfigsetprefix"D:\nodejs\node_global"npmconfigsetcache"D:\nodejs\node_cache"4、安......
  • js获取抖音弹幕
    functiondom(){   //创建一个MutationObserver实例   letmutationObserver=newMutationObserver(function(mutationsList,observer){     for(varmutationofmutationsList){       console.log("用户:",mutation.target.las......
  • python3 json.dumps(OrderDict类型) 报错:TypeError: Object of type datetime is not
    chatgpt给出的解决方案,在json.dumps()函数调用中传入default参数来指定如何处理datetime对象importjsonfromdatetimeimportdatetimedefdatetime_handler(obj):ifisinstance(obj,datetime):returnobj.__str__()#另一种处理,转换为自定义格式化字符串......
  • 网页调试(css,html,js)获取资源链接等
    进入调试模式F12或者右键检查在元素栏点击相应的组件可以查看html源码,图片视频音频链接等,或者点击组件右键检查还可以查看组件css布局变化html元素源码可以看到class类名,触发事件以及style样式在css上的改变是实时的,刷新页面会失效html的改变需要双击,同样刷新页面......
  • js中判断obj中是否含有某个属性的方法
    一般而言,比较常用的有in,hasOwnProperty,比较undefined。首先我们先定义一个对象letobj={a:1,b:2,d:undefined}hasOwnProperty()表明它查看对象自身的属性console.log(obj.hasOwnProperty('a'))//......
  • nodejs "Client does not support authentication protocol requested by server; con
    登录mysql输入以下命令:--选择mysql数据库:usemysql--laremehpe是登录用户名ALTERUSER'laremehpe'@'localhost'IDENTIFIEDBY'password'PASSWORDEXPIRENEVER;--laremehpe->用户名,123456->密码ALTERUSER'laremehpe'@'localhos......