前言

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

公众号链接

目标网站

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

无论是补环境还是硬扣算法。其实都阔以得到正常结果。不同的是运行速度以及花费的精力的成本不同。

选择什么样的方法最后还是靠自己。

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

公众号链接

星球链接

逆向实战31——xhs—xs算法分析的更多相关文章

  1. iOS逆向实战与工具使用(微信添加好友自动确认)

    iOS逆向实战与工具使用(微信添加好友自动确认) 原文链接 源码地址 WeChatPlugin-iOS Mac OS 版微信小助手(远程控制.消息防撤回.自动回复.微信多开) 一.前言 本篇主要实现在 ...

  2. 逆向实战干货,快速定位自动捡阳光Call,或者标志

    逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...

  3. 逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复

    逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复 首先我们要知道这个OD的Bug是什么. 我们调试一个UNICODE的窗口,看下其窗口过程. 一丶查看OllyDbg 的Bug 1.1spy++ ...

  4. 逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志

    逆向实战干货,快速定位自动捡阳光Call,或者标志 注意: 关于CE和OD的使用,这里不再多说,快速定位,默认大家已经有了CE基础,或者OD基础. 第一种方法,找Call 第一步,打开CE,搜索阳光值 ...

  5. 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.

    32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...

  6. GIF Movie Gear逆向实战+注册代码+补丁

    GIF Movie Gear逆向实战+注册代码+补丁 准备 我是在windows 8.1 x64上进行的操作.有不足之处,还望大虾指出. 获取资源 网站下载:http://www.gamani.com ...

  7. Android apk逆向实战

    简介 逆向Android apk其实是一个分析Android apk的一个过程,必须了解Android程序开发的流程.结构.语句分支.解密原理等等. 功能 破解一个注册验证程序(自写一个简单的注册验证 ...

  8. Android 逆向实战篇(加密数据包破解)

    1. 实战背景由于工作需要,要爬取某款App的数据,App的具体名称此处不便透露,避免他们发现并修改加密逻辑我就得重新破解了. 爬取这款App时发现,抓包抓到的数据是加密过的,如图1所示(原数据较长, ...

  9. 【iOS逆向】某茅台App算法分析还原

    1.目标 某茅台软件的actParam算法分析还原. 2.使用工具 mac系统 frida-ios-dump:砸壳 已越狱iOS设备:脱壳及frida调试 IDA Pro:静态分析 Charles:抓 ...

  10. JS逆向实战8——某网实战(基于golang-colly)

    其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...

随机推荐

  1. [转帖]网卡多队列:RPS、RFS、RSS、Flow Director(DPDK支持)

    Table of Contents 多队列简介 RPS介绍(Receive Packet Steering) RFS介绍(Receive flow steering) RSS介绍(receive si ...

  2. Stress-ng 的简单学习

    背景 想研究一下国产和不同架构,不通型号CPU的算力 也作为后续生产交付的基线准备. 学习各种不同工具进行简要测试. 安装 git clone https://github.com/ColinIanK ...

  3. [翻译]-hugePage的简要说明--部分内容

    hugePage的简要说明 本篇文档的主旨给linux内核支持的大页内存做一个简要的概述. 大页内存的实现是建立在大多数现代架构所都支持的多级页大小的特性之上的. 举例: x86架构下大部署CPU 的 ...

  4. ELK运维文档

    Logstash 目录 Logstash Monitoring API Node Info API Plugins Info API Node Stats API Hot Threads API lo ...

  5. vue3中context.emit遇见的坑

    场景描述 今天遇见一个问题 ,子组件向上抛出去的事件. 被执行了两次,原因是 context.emit('click', item.id) 你的事件名是click 将click更改为其他事件名称,就可 ...

  6. 同步存储读取vuex中store中的值

    main.js import store from "./store"; Vue.prototype.$store = store; 在 store中的index.js中 impo ...

  7. ClickHouse(06)ClickHouse建表语句DDL详细解析

    目录 当前服务器上创建表(单节点) 语法形式 使用显式架构 从相同结构的表复制创建 从表函数创建 从选择查询创建 分布式集群创建表 临时表 分区表 创建表语句关键字解析 空值或非空修饰符 默认值表达式 ...

  8. 三线表制作(word)

    三线表制作 转载:https://blog.csdn.net/zaishuiyifangxym/article/details/81668886

  9. 在IntelliJ IDEA中,开发一个摸鱼看书插件

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/R8qvoSNyedVM95Ty8sbhgg 沉淀.分享.成长,让自己和他人都能 ...

  10. Qt信号槽原理

    1.说明 使用Qt已经好几年了,一直以为自己懂Qt,熟悉Qt,使用起来很是熟练,无论什么项目,都喜欢用Qt编写.但真正去看Qt的源码,去理解Qt的思想也就近两年的事. 本次就着重介绍一下Qt的核心功能 ...