第107篇:国*攻防比赛中一个多层嵌套的java内存马的反混淆解密分析过程

555b7a24458cc7c7727b0713caecdd19.png

 Part1 前言 

大家好,我是ABC_123。一年一度的“大型攻防比赛”已经过去2、3个月了,在此期间陆续收到了多名网友发来的内存马样本,ABC_123一直在抽时间进行分析解密工作。现在很多的内存马都进行了加密混淆,而且一个比一个复杂;不禁感叹攻防都是相对的,道高一尺魔高一丈。对于内存马的解密分析,主要目的除了证明其是内存马代码之外,还要找到其流量特征,以备在安全设备中找到含有相应特征的流量,然后进行溯源分析,也可能发现完整的0day攻击链条。本篇文章中的内存马套了多层加密,ABC_123将完整解密过程分享给大家。

9bddc2062eb1034d56d19fab9ca08bbe.jpeg

 Part2 技术研究过程 

  • 第一层:JSP的Webshell内容分析

样本首先是一个jsp的webshell,初始内容如下:大体看了一下,发现是通过java反射编写的,将三段字符串合并然后base64解密,然后再进行加载,这样做会有一个很好的免杀效果。

c23d7b36f0f333eb969ef9d76a171f75.png

将上图中的三段字符串合并,然后base64解密得到如下xml形式的代码。

80155184718504f09ae5972887a6655c.png

将yv66vg开头的字符串进行base64解密,会得到一个class文件,然后反编译可以得到java代码。

  • 第二层:Java代码的反混淆和解密分析

将得到的java代码放到IDEA里格式化查看,发现代码多达几千行,并且进行了深度的加密混淆,同时还掺杂了大量的无意义冗余代码和无意义的注释代码。

67857ee2e1cd5af4a588a3262b64efd2.png

首先将代码中所有无用的调试输出代码冗余代码统一替换为空,如下图所示:

a061d2f576ac3766b6ea4ee7658c574b.png

然后使用正则表达式,将所有的注释内容替换为空。

63e6f8c8c0157bcdd8d5c4803835ae33.png

经过处理,代码行数由几千行变为800多行。经过大体分析查看,在这段加密混淆的java代码中,m63IIIIII方法被大量引用,所以对于该方法的解密是重中之重。

c4cb6889305480410f43cf49d4c375ba.png

于是编写java代码,通过import引用这个加密混淆的内存马代码,然后将内存马代码的private属性都改为public属性,这样我们可以直接调用其m63IIIIII方法。如下图所示,这段m63IIIIII代码代表的含义是parseBase64Binary

e0db6864b9ca707374fd3640d0fde9b6.png

然后我们提取出所有的m63IIIIII方法值,通过java反射调用的方式将所有m63IIIIII方法的加密值输出。这样做的目的是,可以直观看到这段java代码实现了哪些功能。

42b27cbf32174d9a24ed5d20906fbf1b.png

然后进一步编写正则表达式,将原有加密混淆后的内存马java代码中的m63IIIIII的方法替换为解密后的值。

0c1f27dc47350db1cf111cdc4b914954.png

最终还原出java代码如下:经过初步反混淆后,java内存马代码看起来清楚了不少。

5cbf9c5ac9b25dc21ab64de9f8ebc8ab.png

仔细重新分析分析代码,发现里面又套了一层加密文本。

75612304a70dbd49ec5172299270815d.png

  • 第三层加密的解密分析过程

接下来我们对上述H4sI开头的加密字符串进行base64与Gzip的解密,得到class文件后,反编译之后的java代码如下:代码进行了深度的代码混淆,有大量的冗余代码掺杂其中,接下来需要手工对代码报错的地方进行修复。

862817e0194ead39c5fcead0e187db8c.png

修复完成之后,代码不报错了。然后按照前面介绍的方法,将java代码中所有的注释内容和冗余代码清除。

e7a5400ff299b2f82f6e82efe74acbe5.png

此外还掺杂了大量的没有调用的方法,一并删除掉。最终经过一系列处理,java内存马代码由4000多行精简到到了300多行。

fad8ec61bff93ef05d31da1b8551a308.png

分析java内存马代码发现,大量的代码大量调用了m68IIIIIIIIIIIIII()方法,按照前面的方法,直接调用并解密得到如下字符串:

b53ad016eff4e4da191595e3efe0115d.png

经过分析,发现其构造方法传入了以下几个关键值。

d2e44e680426773bf8a20892401e4598.png

通过分析解密混淆的java代码发现,当header请求头“User-Agent”包含“.1.2.2”后,会走内存马webshell流程,至此流量特征找到!接下来可以按照这个特征去流量监控设备,或者从全流量设备中去溯源分析攻击者的行为。

52cf0c80fe658ce9b35efed5063b4993.png

 Part3 总结 

1.  内存马反编译的主要目的,还是为了找到内存马通信的流量特征,以备在流量监控设备中找到相应攻击者的流量,进行溯源分析。但是这方面的技术,很考验蓝队人员的代码功底。

2.  后续ABC_123会继续给大家分享Java内存马反编译的文章,敬请期待。

9c1170ce130b19aaba94e79b9aaead54.png

公众号专注于网络安全技术分享,包括APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,每周一篇,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com

(replace # with @)

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

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

相关文章

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令,添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令,添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“会员制医疗预约服务管理信息系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 医院信息界面图…

从0开始linux(21)——文件(2)文件重定向

欢迎来到博主的专栏:从0开始linux 博主ID:代码小豪 文章目录 设备文件文件缓冲区重新认识文件描述符重定向 设备文件 在前一篇文章博主提到,当一个c/c进程运行时,会默认打开三个文件流,分别是stdin,stdout…

Claude 3.5 新功能 支持对 100 页的PDF 图像、图表和图形进行可视化分析

Claude 3.5 Sonnet发布PDF图像预览新功能,允许用户分析长度不超过100页的PDF中的视觉内容。 此功能使用户能够轻松上传文档并提取信息,特别适用于包含图表、图形和其他视觉元素的研究论文和技术文档。 视觉PDF分析:用户现在可以从包含各种视觉…

【SQL server】数据库远程连接配置

SQL server远程连接配置 1、数据库远程配置1.身份验证2. 建立入站规则3. SQLServer服务的启动 1、数据库远程配置 1.身份验证 所以在安装过程中需要注意涉及到的的身份验证中,要使用混合模式,并设置密码。2. 建立入站规则 在控制面板中的防火墙管理中…

【Vue 全家桶】5、Vuex(更新中)

目录 概念何时使用搭建vuex环境基本使用getter的使用四个map方法的使用vuex模块化命名空间 概念 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。使用 Vuex 可…

首推!AI大模型课程2024年最新版!从零基础到入行大模型算法工程师,看完这一篇就够了,学完来找我内推!

“ 技术学习无非涵盖三个方面,理论,实践和应用**”** 大模型技术爆火至今已经有两年的时间了,而且大模型技术的发展潜力也不言而喻。因此,很多人打算学习大模型,但又不知道该怎么入手,因此今天就来了解一下…

一站式搭建线上线下交友平台/全开源码交付前后端安装说明

功能亮点 灵魂匹配:基于个人喜好和兴趣,为你推荐最合适的交友对象。 真实认证:所有用户都经过严格认证,确保交友环境真实可靠。 隐私保护:强大的隐私设置,让你轻松掌控个人信息和交友动态。 互动便捷&…

基于数组实现的Huffman树和Huffman编码

一、Huffman树简介 1、定义 树的带权路径长度,就是树中所有的叶节点的权值乘上其到根节点的路径长度。 在含有n 个带权叶子结点的二叉树中,其中带权路径长度(Weighted Path Length, WPL)最小的二叉树称为哈夫曼树, 也…

图说复变函数论重大错误:将无穷多各异平面误为同一面

黄小宁 医学若将前所未知的“新冠”病毒误为已熟知的流感病毒,后果...;数学将前所未知的点集误为已熟知的集就会引出一连串的重大错误。 h定理:点集AB的必要条件是A≌B。 证:(1)任何图≌自己是几何学最起码…

SDL简介和初次尝试

文章目录 SDL的用途和概念SDL下载 SDL的用途和概念 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台开发库 ,使用C语言写成,SDL提供了数种 操作 图像 ,声音输入输出的函数,让开发者使用 相识的代码 就能够开发出跨平台的…

WiFi一直获取不到IP地址是怎么回事?

在当今这个信息化时代,WiFi已成为我们日常生活中不可或缺的一部分。无论是家庭、办公室还是公共场所,WiFi都为我们提供了便捷的无线互联网接入。然而,有时我们可能会遇到WiFi连接后无法获取IP地址的问题,这不仅影响了我们的网络使…

【车道线检测】一、传统车道线检测:基于霍夫变换的车道线检测史诗级详细教程

1、定义图像显示函数 首先定义一个函数,函数的作用是通过plt库显示两幅图,为后续实验做准备。该函数的主要功能是: 从指定路径加载图像显示图像的基本信息将图像从BGR格式转换为RGB格式并在一个图形窗口中显示两幅图像进行对比 import nump…

Ftrans数据跨境传输方案:保护隐私与促进合作

数据跨境传输是指在不同国家、地区和法律框架下进行的数据交换和传输,数据跨境传输流程周期是数据产生--数据传输--数据接收,而困境来源也来自这3个环节: 1.本地合规限制 数据出口国(数据输出国)的法律对于数据收集的…

Mybatis学习笔记(三)

十、MyBatis的逆向工程 (一)逆向工程介绍 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么如果表太多的话,难免会很麻烦,所以mybatis官方提供了一个逆向工程,可以针对单表自动生成mybatis执行所需要的代码(包…

Github 2024-11-08Java开源项目日报 Top9

根据Github Trendings的统计,今日(2024-11-08统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9Vue项目1经验丰富的Java(后端)开发人员核心面试问题和答案 | 互联网Java工程师进阶知识完全扫盲 创建周期:2085 天开发语言:Java协议…

【新闻文本分类识别】Python+CNN卷积神经网络算法+深度学习+人工智能+机器学习+文本处理

一、介绍 文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集(“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”),然…

数据结构 ——— 链式二叉树的前中后序遍历递归实现

目录 前言 链式二叉树示意图​编辑 手搓一个链式二叉树 链式二叉树的前序遍历 链式二叉树的中序遍历 链式二叉树的后序遍历 前言 在上一章学习了链式二叉树的前中后序遍历的解析 数据结构 ——— 链式二叉树的前中后序遍历解析-CSDN博客 接下来要学习的是代码实现链式…

<项目代码>YOLOv8 pcb板缺陷检测<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

yarn报错`warning ..\..\package.json: No license field`:已解决

出现这个报错有两个原因 1、项目中没有配置许可证 在项目根目录package.json添加 {"name": "next-starter","version": "1.0.0",# 添加这一行"license": "MIT", }或者配置私有防止发布到外部仓库 {"priv…