首页 > 编程语言 >逆向实战31——xhs—xs算法分析

逆向实战31——xhs—xs算法分析

时间:2024-02-27 10:24:04浏览次数:26  
标签:stringify 加密 这里 ace 31 xhs ._ xs 插桩

前言

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

目标网站

aHR0cHM6Ly93d3cueGlhb2hvbmdzaHUuY29tLw==

逆向分析

打开网站

这里 eyj这种开头的,做过正向的应该很熟悉。这明显是{ 大括号的base64编码啊。
那这里我们尝试以下base64解码

如上图 得到json值。
通过hook json.Stringify() 定位加密点。

(function() {
    var stringify = JSON.stringify;
    JSON.stringify = function(params) {
        console.log("Hook JSON.stringify ——> ", params);
        debugger;
        return stringify(params);
    }
})();
//或者下一个//
(function () {
    var stringify = JSON.stringify;
    JSON.stringify = function () {
        if (arguments[0] && arguments[0]['payload']){
            debugger;
        }
        let temp = stringify.apply(this, arguments)
        return temp
    }
})();

然后我们需要注入到浏览器中去
这里可以通过油猴脚本。或者手动注入。
这里建议手动注入在发包之前注入。
这里直接走第一个堆栈 跳过两个栈既可。


然后往上找堆栈。


l = (a && void 0 !== window._webmsxyw ? window._webmsxyw : encrypt_sign)(s, i) || {};

这里可以看到这里有个三元表达式。
调用 window._webmsxyw 传值 s和 i
s: url切割的链接
i: 传值的参数(get的undefined,post为data)

然后继续往下面的栈走

发现到了这个地方 可以发现这个文件是个jsvmp。
那我们如何去解决这个JSVMP呢?
这里呢,可以通过两种方式去解决了。

  1. 补环境
  2. 纯算

补环境 分析

这里滑到最上面

可以看到。JSVMP是个自执行函数。那是不是代表。我们把这一整段代码。放到浏览器中可以正常运行呢?
我们试试。


可以看到可以正常运行。那后面就很简单了。
把代码放到js中运行即可。
这里直接运行。

定义window。

window = global;


ok 又少createElement。

document.createElement=function createElement(x) {
        return {}
    }

这里简单的补完之后。

好了又开始报缺少apply函数了。
那我们就知道了 原来这个地方就是JSVMP所有指令集执行的地方。
那这个点我们可以暂时记下来。虽然没什么用。但是在后续做纯算的时候可以做插桩。
其实到这里包括后续的getAttribute 找起来很麻烦需要自己手动浏览器打断点。非常的麻烦。
这里建议挂个proxy框架来补。
这里不带着大家补了。
最后补出来大概一百多行。
包含canvas。regex校验等。

纯算分析

这里对于纯算的手撸和还原 可以看看志远佬的视频。真是让人收获颇丰。
这里整体说一下完整算法呢,还是比较简单的、
在手撸xs算法之前 先来了解一下什么是插桩。

何为插桩

有些时候我们想获取某个变量的值,看其如何变化!但是又不想每次都是断点之后再在控制台打印,
那么有没有什么简便的办法呢?那就是插桩!
插桩的主要应用场景就是在面对一个复杂的控制流时,可以通过插桩实现环境自吐。
通过如下手段进行浏览器插桩。

插桩查找

这里在这个地方插桩。至于为什么上文补环境的时候已经说了。

_ace_1ae3c(_ace_8712.apply(typeof _ace_25a6._ace_936 == "undefined" ? _ace_4752e : _ace_25a6._ace_936, _ace_bdcc), _ace_be07c, _ace_be07c, 0);

这个地方插桩可以透露出很多的信息。因为这个地方是调用函数的地方。
所以我们可以打印出一些内容。

console.log(_ace_8712,_ace_25a6._ace_936,_ace_bdcc);false;

这里是一个条件表达式。最后返回值是false。这是什么意思呢?
意思是 在我们断住这个断点的时候需要执行一段JS。但是这个js不会因为什么情况而断住。
好 然后我们放开断点。

可以看到打印出了很多信息。这些信息大部分都是返回值。
我们可以通过返回值得到很多有用的信息。
这里我们从明文开始加密的地方开始断点。然后在刚刚打条件表达式的时候再打上一次断点。
明文密文都有了。就可以分析加密的过程了。

插桩分析


如上图所示。打印出来大概2w多行代码。
我们通过其中的逻辑(这里分析忽略)可知。
传参得到payload的函数的传参由x1,x2,x3,x4拼接而成。
x1为md5,
x2为环境检测函数后函数的返回值可以写死。
x3为cookie中的a1
x4为时间戳。

到这里。我们来捋一下整个的流程。
目标:

x-s 解密base64=> 得到 一段Json=> Json中Payload是我们需要加密的值。

结果:

由x1链接。x2定值。x3 cookie中的a1 以及x4时间戳拼接出来的字符串base64加密。再进行3des加密得到Payload。

这里需要注意的是。分析全靠经验而言。

  1. 分析x1是md5。1732584193、271733879、1732584194、271733878
    上面的内容是需要大家熟记的内容,在解决MD5加密时能够给你带来不少的好处,节约大量的时间。
  2. 分析base64加密。这个就更简单了。常见的屁股后面==号。或者代码中带着 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
    这些。上述代码其实就是通过对于数组的移位生成的编码。
  3. 分析Des。不知道秘钥和IV没关系。尝试去插桩自吐出来的值扣除相应的iv或者key也能完成加密。

结语

这里江夏在星球也写了一份文章,底部有代码 感兴趣的可以看看

https://articles.zsxq.com/id_qe1og69f8wa9.html

无论是补环境还是硬扣算法。其实都阔以得到正常结果。不同的是运行速度以及花费的精力的成本不同。
选择什么样的方法最后还是靠自己。

最后运行。两者都能得到结果

公众号链接
星球链接

标签:stringify,加密,这里,ace,31,xhs,._,xs,插桩
From: https://www.cnblogs.com/zichliang/p/18029666

相关文章

  • P3157 (cdq分治思想)
    难度2eeeeeeeee比较有意思的一道题目。一开始看到删除,有一个很经典的trick,就是将删除变成插入,倒序处理。然后发现不会做了。然后巨佬lyc说可以用cdq分治,将时间变为第三个关键字,这样也就不用倒序处理了。考虑求出删除某个数后对逆序对个数产生的贡献,在加入了时间戳之后i,j为逆序对......
  • [ABC314Ex] Disk and Segments题解(退火实现)
    一到比较水的退火题(虽然也调了3h)题意在平面直角坐标系中,有\(n\)条线段,第\(i\)条的端点是\((a_i,b_i)\)和$(c_i,d_i)$,任意线段不共点。(这里笔者为了方便会默认\(a_i<c_i\))你要在平面上画一个圆,使得任意一条线段都和圆周或圆内部有至少一个公共点,求满足条件的圆的最小......
  • vue3+vite使用vue-pdf-embed或者pdf-vue3预览 PDF 文件(能躲避 XSS 攻击,需要 pdf 文件
    1.使用vue-pdf-embed1.npm安装所需插件[email protected]@0.1.62.封装组件(创建pdfPriview.index文件)<template><divclass="pdf-preview"> <vue-pdf-embed :source="state.source" v-for="pageinstate......
  • DVWA-XSS(Stored)存储型跨站脚本攻击
    DVWA-XSS(Stored)存储型XSS是一种持久型XSS,与DOM型和Reflected型区别在于将恶意脚本注入到网站的某个存储区域,如数据库或其他文件类型中。每当访问网站时,服务器在生成页面时,将含有恶意脚本当做有效内容插入到页面中,并响应给用户。浏览器就会执行页面中的恶意脚本,从而对访问者造成攻......
  • NanoFramework操作ESP32(一)_基础元器件篇(四十二)_ KYY-031敲击传感器
    一、元器件介绍  本开关在静止时为开路(OFF)状态,当受到外力碰触而达到适当震动力时,或移动速度达到适当离(偏)心力时,导电接脚会发生瞬间导通(ON)状态,使电气特性改变,而当外力消失时电气特性恢复开路(0FF)状态。可使用数字信号接收。1、针脚用途编号名称功能1GND电......
  • 1.31
    传递静态或动态Prop可以像这样给 prop 传入一个静态的值: <blog-posttitle="MyjourneywithVue"></blog-post>复制代码可以通过 v-bind 动态赋值 <!--动态赋予一个变量的值--> <blog-postv-bind:title="post.title"></blog-post> <!--包含该p......
  • 代码随想录算法训练营第二十六天| 39. 组合总和 40.组合总和II 131.分割回文串
    组合总和题目链接:39.组合总和-力扣(LeetCode)思路:依然一是套用回溯模板,但是我们这里用回溯的是i而不是i+1,因为元素可以重复使用,注意for循环里if(sum(path)<=target)的等号不能少。classSolution{public:vector<int>path;vector<vector<int>>result;intsu......
  • 【mysql系列】mysql安装和卸载详细教程 mysql-8.0.31-winx64
    【mysql系列】mysql安装和卸载详细教程mysql-8.0.31-winx64......
  • XSS-Cross Site Scripting
    一、XSS简介与危害简介跨站脚本攻击XSS(CrossSiteScripting),为了不和层叠样式表CSS(CascadingStyleSheets)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。......
  • weblogic CVE-2024-20931分析
    weblogic12.2.1.4.0安装我的环境:ubuntu22.04+weblogic12.2.1.4.0+jdk8(注:weblogic不支持OpenJDK)jdk下载安装:https://www.oracle.com/cn/java/technologies/downloads/archive/weblogic下载安装:https://www.oracle.com/middleware/technologies/weblogic-server-install......