逆向实战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呢?
这里呢,可以通过两种方式去解决了。
- 补环境
- 纯算
补环境 分析
这里滑到最上面

可以看到。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。
这里需要注意的是。分析全靠经验而言。
- 分析x1是md5。
1732584193、271733879、1732584194、271733878
上面的内容是需要大家熟记的内容,在解决MD5加密时能够给你带来不少的好处,节约大量的时间。 - 分析base64加密。这个就更简单了。常见的屁股后面==号。或者代码中带着
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=
这些。上述代码其实就是通过对于数组的移位生成的编码。 - 分析Des。不知道秘钥和IV没关系。尝试去插桩自吐出来的值扣除相应的iv或者key也能完成加密。
结语
这里江夏在星球也写了一份文章,底部有代码 感兴趣的可以看看
无论是补环境还是硬扣算法。其实都阔以得到正常结果。不同的是运行速度以及花费的精力的成本不同。
选择什么样的方法最后还是靠自己。
最后运行。两者都能得到结果

逆向实战31——xhs—xs算法分析的更多相关文章
- iOS逆向实战与工具使用(微信添加好友自动确认)
iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...
- 逆向实战干货,快速定位自动捡阳光Call,或者标志
逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...
- 逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复 首先我们要知道这个OD的Bug是什么. 我们调试一个UNICODE的窗口,看下其窗口过程. 一丶查看OllyDbg 的Bug 1.1spy++ ...
- 逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志
逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...
- 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.
32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...
- GIF Movie Gear逆向实战+注册代码+补丁
GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...
- Android apk逆向实战
简介 逆向Android apk其实是一个分析Android apk的一个过程,必须了解Android程序开发的流程.结构.语句分支.解密原理等等. 功能 破解一个注册验证程序(自写一个简单的注册验证 ...
- Android 逆向实战篇(加密数据包破解)
1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...
- 【iOS逆向】某茅台App算法分析还原
1.目标 某茅台软件的actParam算法分析还原. 2.使用工具 mac系统 frida-ios-dump:砸壳 已越狱iOS设备:脱壳及frida调试 IDA Pro:静态分析 Charles:抓 ...
- JS逆向实战8——某网实战(基于golang-colly)
其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...
随机推荐
- [转帖] Linux命令拾遗-网络抓包工具
https://www.cnblogs.com/codelogs/p/16060684.html 简介# Linux中有很多抓包工具,如ngrep.tcpdump与tshark等,它们有很多用法与使用 ...
- Linux 排除某些目录下 重复jar包的方法
Linux 排除某些目录下 取重复jar包的方法 find . -path ./runtime/java -prune -o -name '*.jar' -exec basename {} \;| s ...
- 《Javascript高级程序设计》读书笔记——构造函数与原型
构造函数与原型 构造函数模式 最简单的构造函数: function Person(name, age, job) { this.name = name; this.age = age; this.jo ...
- C# AsyncLocal 是如何实现 Thread 间传值
一:背景 1. 讲故事 这个问题的由来是在.NET高级调试训练营第十期分享ThreadStatic底层玩法的时候,有朋友提出了AsyncLocal是如何实现的,虽然做了口头上的表述,但总还是会不具体, ...
- 【构造,树】【Loj】Loj6669 Nauuo and Binary Tree
2023.7.3 Problem Link 交互库有一棵 \(n\) 个点的二叉树,你每次可以询问两个点之间的距离,猜出这棵二叉树.\(n\le 3000\),询问次数上限 \(30000\). 首先 ...
- dispaly结合背景图片会提升加载性能
1.display的常见现象 我们很多人都知道,display可以让元素实现隐藏或者显示. 或者让行级元素变成块级元素. 对它的认识也是比较准确的. 如果一个元素使用了display:none; 那么 ...
- 清空elementui让计数器input-number的默认值
<el-form-item label="考试时长:" prop="testTimeLong"> <el-input-number style ...
- Gin 框架介绍与快速入门
Gin 框架介绍与快速入门 目录 Gin 框架介绍与快速入门 一.Gin框架介绍 1. 快速和轻量级 2. 路由和中间件 3. JSON解析 4. 支持插件 5. Gin相关文档 二.基本使用 1.安 ...
- Win32汇编:各种语句的构造方式
整理复习汇编语言的知识点,以前在学习<Intel汇编语言程序设计 - 第五版>时没有很认真的整理笔记,主要因为当时是以学习理解为目的没有整理的很详细,这次是我第三次阅读此书,每一次阅读都会 ...
- Cygwin,在windows中使用linux命令
习惯了 linux 命令的快捷操作,使用 winodws 的 shell 感觉效率非常低下,于是开始搜寻工具支持. 刚开始搜到的是 GnuWin32,但是它已经停止更新维护了,于是找到了 Cygwin ...