jsvmp逆向实战X-Bogus篇,算法还原

news2024/9/28 16:34:58

jsvmp逆向实战X-Bogus篇,算法还原

  • 前言
    • X-Bogus算法逻辑
    • 寻找log插桩位置
    • 第四步
    • 第三步

前言

看过很多大佬关于X-Bogus算法还原的文章,都是通过log插桩,分析日志信息再结合动态调试一步步抽丝剥茧,最终还原算法,但是不同的插桩点带来的工作量是完全不同的。
经过我的不断摸索,找到了一个更加简单高效的逆向方法。jsvmp的特性除了压缩、混淆、大循环之外,还有一个重要的特征,就是通过apply的方式调用方法,那么我们只需要在大循环的代码里面找到apply并打上日志断点,就可以直接在日志里面分析算法逻辑了,而不是依赖大量的动态调试。

X-Bogus算法逻辑

X-Bogus算法的生成过程我把它分为以下四个大步骤,我们实际分析是反正来,从第四步开始逐步分析到第一步。

步骤操作
生成canvas,params、data、user-agent转为数组
将第一步生成的canvas和三个数组通过一些位移、&运算并加入时间戳合并成一个数组
将第二步生成的数组转为乱码,乱码再经过多次处理,生成最终的乱码
将乱码经过一系列运算生成X-Bogus

寻找log插桩位置

打开某音网址,随便找个视频点个赞,然后查看点赞请求的调用堆栈。
在这里插入图片描述
点击图中标红位置,直接就会调到第一个apply,前后观察以下,发现这个apply就是在一个大循环中,先在这个apply打上日志断点,这个地方打断点需要注意一下。
在这里插入图片描述
断点内容:"function:",_0xc26b5e,"args:",_0x1f1790,"result:",_0x2458f0['apply'](_0xc26b5e, _0x1f1790),"_0x2458f0:",_0x2458f0
搜索一下看看大循环里面还有没有别的apply,这里是还有一个的,找到它,并打上断点。
在这里插入图片描述
断点内容:"function:",_0xc26b5e,"args:",_0x1f1790,"result:", _0x2458f0['apply'](_0xc26b5e, _0x1f1790),"_0x2458f0:",_0x2458f0
接下来就可以清空控制台,取消点赞,然后就可以在控制台分析日志了。

第四步

找到日志中第一次出现X-Bogus的位置,下图第一个红框这里调用了一个方法,参数是乱码字符串,生成了X-Bogus,下面的日志是具体的生成过程。
在这里插入图片描述
日志简单明了,function里面的乱码调用了charCodeAt方法,传入args生成了result,我们可以在控制台验证一下,如下图所示,传入参数和结果都能对上。
在这里插入图片描述
接着往下看,function的字符串、args参数、调用方法都变了,生成的结果也是最终X-Bogus的单个字符,"Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=".charAt()控制台验证一下,都能对上,唯一不知道的就是0、47、60、45这几个参数哪来的,猜测肯定跟上一步生成的2、255、45有关,中间进行了哪些操作日志中并没有,这里就需要动态调试一下了,动态调试的过程就不说了,太麻烦。
在这里插入图片描述
动态调试需要改一下log日志,把整个循环的方法抠出来,折叠一下代码,然后仔细观察一下就会发现,通过_0xf24f2b、_0x3eb330、_0x217611、_0x2458f0,_0xf24f2b就能控制走到哪个分支,我们在前面的日志里面加上这几个参数,这样就知道怎么打条件断点了。
在这里插入图片描述
直接给出第四步的代码,传入乱码字符串验证一下

function get_x_bogus(lm){
    var pub_key = "Dkdpgh4ZKsQB80/Mfvw36XI1R25-WUAlEi7NLboqYTOPuzmFjJnryx9HVGcaStCe=";
    var x_bogus="";
    for (let i = 0; i < lm.length; i += 3) {
        var a = lm.charCodeAt(i);
        var b = lm.charCodeAt(i+1);
        var c = lm.charCodeAt(i+2);
        const baseNum = c | (b << 8) | (a << 16);

        const str1 = pub_key[(baseNum & 0xfc0000) >>> 18];
        const str2 = pub_key[(baseNum & 0x3f000) >>> 12];
        const str3 = pub_key[(baseNum & 0xfc0) >>> 6];
        const str4 = pub_key[(baseNum & 0x3f)];
        x_bogus += `${str1}${str2}${str3}${str4}`;
    }
    return x_bogus 
}

在这里插入图片描述
可以看到结果和控制台的一模一样。

第三步

第三步就是生成第四步用到的乱码字符串,往上翻日志,如图所示标红位置就是乱码的生成过程,参数,方法都有,这一步是最简单的,直接控制台验证。
在这里插入图片描述

在这里插入图片描述
可以看到,结果跟控制台是一样的,接下来就得分析这个数组是怎么来的。第二步的逻辑现在的日志完全看不到,需要打条件断点动态调试,这里就不细讲了,两个apply断点就能把第一步、第三步的逻辑还原处理,第四步也需要动态调试。我是先把能还原的先还原,然后再动态调试把整个加密逻辑串联起来。如果你根据文章提示操作到这里,基本上就有了继续下去的动力,不会一头雾水了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1538185.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第1篇:Mysql数据库表结构导出字段到Excel(一个sheet中)

package com.xx.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.sql.*; import java.io.*;public class DatabaseToExcel {public static void main(String[] args) throws Exception {// 数据库连接配置String u…

基于SpringBoot和HeatMap的全球地震热力图可视化实践

目录 前言 一、关于热力图 1、HeatMap简介 2、属性和方法介绍 二、全球地震热力图反演 1、地震信息查询开发 2、前端地图开发 三、地震带反演成果 1、三大地震带反演 2、地震区域分析 总结 前言 众所周知&#xff0c;全球的地震带主要可以分为三处地震带——环太平洋地…

利用API打造卓越的用户体验

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 1. 数据驱动的设计 2. 功能扩展与整合 3. 实时性与响应性 4. 个性化推荐与定制化服务 结语 我的其他博客 正文 随着数字化时代的…

我的电脑win11系统安装了谷歌浏览器,桌面的快捷方式打不开

安装好浏览器以后双击打不开右键打开文件位置也弹窗报错提示 但是我发现开始栏里面可以打开 说明我的软件应该是没有问题的&#xff0c;研究了一下 我实际的安装目录在&#xff1a;C:\Program Files\Google\Chrome\Application 桌面的快捷方式右键查看属性显示的地址却不对&a…

js生成笛卡尔集合

let arr[[黑, 金, 白],[16G, 32G],[电信, 移动, 联通], ]let listarr.reduce((a, b) > { return a.flatMap(x > b.map(y > [...x, y]))}, [[]] )console.log(list)生成结果

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…

(MATLAB)第二十一章 Simulink仿真设计初步

Simulink是MATLAB的重要组成部分&#xff0c;可以非常容易地实现可视化建模&#xff0c;并把理论研究和工程实践有机地结合在一起&#xff0c;不需要书写大量程序&#xff0c;只需要使用鼠标和键盘对已有模块进行简单的操作和设置。 21.1 Simulink简介 Simulink是MATLAB软件的…

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客&#xff0c;解了OEM面临新的电子电气架构下的集成难点&#xff0c;引入了hypervisor以及VM调度机制…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境&#xff0c;没法使用互联网上有中继服务器的远程协助工具&#xff0c;如teamviewer、todesk、向日癸等&#xff1b;在内网进行远程维护可以自己搭建中继服务…

缤纷浏览器 —— 一键换肤,个性随心换(H5实现浏览器换肤效果)

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

新版仿蓝奏网盘|城通网盘|百度网盘|闪客网盘|网盘源码系统,个人网盘系统

(购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源) 这是一款仿蓝奏网盘、城通网盘、百…

BGP4+简介

定义 BGP是一种用于自治系统AS&#xff08;Autonomous System&#xff09;之间的动态路由协议&#xff0c;常用版本是BGP-4&#xff0c;BGP-4只能传递IPv4路由。针对IPv6的BGP4扩展&#xff0c;通常称为BGP4。 目的 BGP4用于在AS之间传递路由信息&#xff0c;并不是所有情况…

自媒体用ChatGPT批量洗稿软件V5.9环境配置/软件设置教程【汇总】

大家好&#xff0c;我是淘小白~ 首先&#xff0c;感谢大家的支持~~ ChatGPT采集洗稿软件V5.9版本更新&#xff0c;此次版本更新修改增加了一些内容&#xff1a; 1、自定义多条指令&#xff0c;软件自动判断指令条数&#xff0c;进行输入 2、增加谷歌浏览多账号轮询&#xf…

Orbit 使用指南 07 | 创建强化学习环境 | Isaac Sim | Omniverse |

如是我闻 在谈论了如何创建基础环境后&#xff0c;我们现在将探索如何为强化学习创建任务环境。 基础环境被设计为一个感知-行动环境&#xff08;sense-act environment&#xff09;&#xff0c;代理&#xff08;agent&#xff09;可以向环境发送命令并从环境接收观测。这种最…

Meta 推出SceneScript,一种全新的3D场景重建方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

高项-案例分析练习(范围管理)

案例一 公司在2014年初承接了一个医疗信息系统项目&#xff0c;要求2014年底完成该项目研发任务并进行试运行&#xff0c;2015年负责项目全年的运行维护&#xff0c;运行稳定后甲方验收合格项目才能结束。由于张工具有多年的医疗系统开发管理经验&#xff0c;公司领导任命他为项…

用BSP优化3D渲染

3D渲染引擎设计者面临的最大问题之一是可见性计算&#xff1a;只必须绘制可见的墙壁和物体&#xff0c;并且必须以正确的顺序绘制它们&#xff08;应该在远处的墙壁前面绘制近墙&#xff09; 。 更重要的是&#xff0c;对于游戏等应用程序来说&#xff0c;开发能够快速渲染场景…

Flutter动画(一)Ticker、Animate 原理

在任何系统的UI框架中&#xff0c;动画原理都是类似的&#xff0c;即&#xff1a;在一段时间内&#xff0c;快速地多次改变UI外观&#xff1b;由于人眼会产生视觉暂留&#xff0c;所以最终看到的就是一个“连续”的动画。 Flutter中对动画进行了抽象&#xff0c;主要涉及 Anim…

2.6、媒体查询(mediaquery)

概述 媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景: 针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。当屏幕发生动态改变时(比如分屏…

2016年认证杯SPSSPRO杯数学建模B题(第二阶段)多帧图像的复原与融合全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 多帧图像的复原与融合 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#x…