Java网站重构指南:深入JAR文件分析与修改技巧

admin 2024年1月28日19:55:55评论15 views字数 4362阅读14分32秒阅读模式

前言

网站重构作为帮助我们更直观了解网站运作模式的手段,是取证人员的一门必修课。而相比于其它类型的网站(如PHP、ASP等),使用JAVA编写的网站涉及到对JAR文件的修改,JAR文件中的代码是经过编译的,修改过程相对更复杂。本文中,我们将以实际案例,剖析JAR文件的结构,分享网站重构过程中JAR文件修改的经验。

本例中涉及到对JAR文件的分析、修改,因此需要使用到的工具有:Java开发环境IDEA和解压缩工具WinRAR。

01

JAR文件结构介绍

在开始介绍前,我们首先需要对JAR文件的目录结构有一定了解。JAR文件的目录结构没有统一的规定,在本例中,由于使用的是Spring Boot框架,其目录结构如下:

Java网站重构指南:深入JAR文件分析与修改技巧

根目录下包含3个目录:BOOT-INF目录、org目录和META-INF目录。

BOOT-INF目录:这是Spring Boot特有的目录,包含了应用程序的所有依赖项和类文件。该目录下通常有2个目录:classes目录和lib目录。

BOOT-INF目录下的classes目录:包含应用程序的编译后的类文件(.class)和application文件(.yml或.properties)。yml文件是Spring Boot应用程序的配置文件,用于配置应用程序的属性和行为。

BOOT-INF目录下的lib目录:包含应用程序的所有依赖的JAR文件。

org目录:这是Java包结构的根目录,用于存放应用程序的自定义类文件。通常按照应用程序的包结构进行组织。

META-INF目录:与标准JAR文件相同,包含JAR文件的元数据信息。其中最重要的文件是MANIFEST.MF,它指定了JAR文件的主要属性和入口点。

02

网站拓扑图

通过对检材服务器镜像的分析,我们绘制出了该网站的拓扑图:

Java网站重构指南:深入JAR文件分析与修改技巧

03

JAR文件中配置文件的修改

网站中涉及多个服务,从头搭建会花费大量时间,我们选择了使用仿真的方式进行仿真重构。

由于重构环境与原环境的差异,需要修改各个服务之间连接的配置,使它们之间可以重新进行交互。

本例中Redis服务配置于本地,配置文件不需要修改。但由于网站本身是站库分离的,服务器内没有安装MySQL环境,在其原本的数据库连接配置文件中可以看出,其连接的是另一台服务器中的数据库,因此我们另外搭建了MySQL环境,并将数据库导入。

然后,我们需要修改连接数据库的配置文件,修改其原本的数据库连接,使其连接至我们搭建的数据库中。而数据库连接的配置文件即在JAR文件中。用WinRAR打开该文件,可以直接将“/BOOT-INF/classes/application-prod.yml”解压至指定目录。

Java网站重构指南:深入JAR文件分析与修改技巧

该文件为文本文件,可直接使用文本编辑器打开并修改,将原本的数据库连接信息修改为我们搭建好的数据库。

Java网站重构指南:深入JAR文件分析与修改技巧

修改并保存后,通过WinRAR,将该文件直接拖入相应的目录下覆盖原文件即可。

Java网站重构指南:深入JAR文件分析与修改技巧

然后,将修改后的JAR文件重新上传至仿真服务器中并覆盖原文件,即可正常启动Java服务。

修改本地的hosts文件,使得本地访问上述相关的网站域名时解析至仿真虚拟机中启动的网站。修改后,用浏览器访问“admin.xx.com”,发现跳转至“admin-api.xx.com”,可以获取到页面内容。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

04

 JAR文件中代码的修改

想要进入网站后台,还需要处理JAR文件中的登录验证。

绕过密码验证的方式有两种:一种是找到网站用户密码的加密的方式,使用其加密方式对明文密码进行加密,得到密码密文后替换至数据库中,并用明文密码登录;另一种是修改其密码验证的代码,改变登录密码的验证方式,使得我们已有的信息足够登录到网站中,达到绕过密码验证的目的。

第一种方式不需要修改网站的代码,相对比较容易,但是适用范围小,比如对短信验证码认证就无能为力了;第二种方式涉及到代码的修改,比较麻烦,但普适性更强。

由于本例中的涉及到短信验证码认证,因此我们需要使用第二种方式,以下是以第二种方式解决登录认证的详细过程,过程中我们也会对第一种方式做简单的介绍。

JAR文件中的代码都被编译成了“.class”文件,放在“/BOOT-INF/classes/”目录下。“.class”文件是编译后的二进制文件,因此无法通过文本编辑器直接打开修改,我们需要用到工具IDEA。

打开IDEA,新建project,项目使用的JDK需要与源JAR文件一致。源JAR文件的JDK版本可以在“/META-INF/MANIFEST.MF”中找到。

Java网站重构指南:深入JAR文件分析与修改技巧

这里源JAR文件的JDK版本为1.8,选择对应的JDK版本。

打开“Project Structure”——“Library”,将源JAR文件导入。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

导入后,我们可以在“External Libraries”中看到源JAR文件内部的目录结构及文件内容,原本的二进制文件“.class”已经被反编译为Java代码了。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

“/BOOT-INF/lib/”为源JAR文件所有依赖的JAR文件的目录,为配置其原本的编译环境,可以将整个目录拷贝至项目中的lib目录下,并在“Project Structure”——“Library”中添加目录下所有文件。

环境配置完成后,需要找到登录验证相关的代码。利用浏览器抓包,可以得到后台登录时请求的接口为“/api/admin/login”。

Java网站重构指南:深入JAR文件分析与修改技巧

在控制器“AdminLoginController.class”中找到该接口对应的方法“SystemAdminLogin”。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

该方法在实现时,调用了“AdminLoginService”类的“login”方法。查看“AdminLoginService”类中“login”方法的定义。

Java网站重构指南:深入JAR文件分析与修改技巧

该类为接口类,转到其对应的实现类“AdminLoginServiceImpl”,查看方法“login”。

Java网站重构指南:深入JAR文件分析与修改技巧

在该文件中找到手机验证码认证和图形验证码认证的代码,也就是我们需要修改绕过的部分,而登录密码认证则是通过“AuthenticationManager”类实现的。

确认需要修改的文件AdminLoginServiceImpl.class后,我们在项目中新建与源文件路径相同的package和class。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

将源class文件的代码复制到项目中的class文件内,复制后,红色部分表示报错。由于在准备阶段我们已经将依赖的JAR文件导入,因此大部分类都被正常导入了,而报错部分是由于我们没有在本地项目中导入该class所依赖的源JAR文件中的类。

Java网站重构指南:深入JAR文件分析与修改技巧

这时,我们需要根据路径将源JAR文件中用到的类逐一导入,若导入的类同样遇到缺少依赖类的情况,则同样需要将对应的类导入,直到没有报错为止。

当报错全部消失时,项目的结构如下:

Java网站重构指南:深入JAR文件分析与修改技巧

这时,我们可以着手修改AdminLoginServiceImpl中的代码逻辑,绕过验证码认证。

Java网站重构指南:深入JAR文件分析与修改技巧

这里我们直接将相关代码全部注释,直接跳过了验证码认证。

修改后,选择“Build Module xx”,对代码进行编译。

Java网站重构指南:深入JAR文件分析与修改技巧

编译成功后,可以在target目录下找到结果文件。

Java网站重构指南:深入JAR文件分析与修改技巧

只需要将改动过的class文件拖入源JAR文件对应目录覆盖,其余class文件不需要修改。

Java网站重构指南:深入JAR文件分析与修改技巧

至此,验证码认证已被我们绕过。

登录密码认证的绕过过程与上文类似。定位到登录密码认证的代码文件“CustomAuthenticationProvider.class”。

Java网站重构指南:深入JAR文件分析与修改技巧

可以看到,这段代码是通过调用CrmebUtil类的equalsPwd方法判断登录密码的正确性的,传入的参数分别是数据库中的密码、用户名和用户输入的密码。我们可以直接将其注释,使得网站直接跳过登录认证;也可以修改判断的逻辑,比如将判断条件取反,使得我们可以使用任意错误密码登录网站。后续编译过程类似,从略。

这里再介绍一种方式,我们可以找到网站中加密密码的方法,通过调用加密函数,使用自定义密码生成密码密文,将生成的密码密文替换至数据库中的密码字段内,再使用自定义密码登录,完成登录认证。

查看“CrmebUtil”类的定义,该类中定义了三个方法“encryptPassword”、“equalsPwd”和“decryptPassword”,作用分别是加密、判断是否相等和解密。

我们可以调用加密方法,得到自定义密码的密文,方法如下:

在项目中新建类,导入需要调用的类,构建main函数调用该类,根据前面的分析分别传入参数(自定义密码和用户名),执行代码并输出结果。

Java网站重构指南:深入JAR文件分析与修改技巧
Java网站重构指南:深入JAR文件分析与修改技巧

输出的结果即我们的自定义密码加密后的密文,我们可以把输出的结果替换至数据库中的pwd字段,使用对应的用户名和自定义密码“123456”即可登录。

将修改后的JAR文件重新上传至仿真服务器中,启动JAVA服务。

在浏览器中访问后台,输入用户名和任意密码及验证码即可成功登录。

Java网站重构指南:深入JAR文件分析与修改技巧

至此,网站重构全部完成,为后续我们登录至网站后台对网站进行全面深入的分析打下了坚实的基础。

结语

本文首先介绍了JAR文件的结构,并提供了网站重构过程中,修改JAR文件中的配置和代码的方法。过程看似复杂,但在掌握原理后,问题也就迎刃而解了。

Java网站重构指南:深入JAR文件分析与修改技巧

Java网站重构指南:深入JAR文件分析与修改技巧

奇安信集团旗下有北京、上海、西安三家司法鉴定所:北京网神洞鉴科技有限公司司法鉴定所、盘石软件(上海)有限公司计算机司法鉴定所与陕西洞鉴云侦科技有限公司司法鉴定所(筹)。其中,上海所是上海第一家通过 CNAS 认证认可的民营计算机类司法鉴定机构。三所均通过了CMA资质认定,是目前国内少数能够通过自主研发软件进行取证与分析的电子数据司法鉴定机构,具有独立的实验室场所,其中包括:案件受理区、数据恢复区、手机取证区、计算机取证区、屏蔽室、无尘工作间和物证室,并配备多种国内外先进的技术设备检验及辅助设备。经过多年的时间积累和发展,现拥有一批胜任鉴定工作的专业技术人员,以专业的技能和丰富的经验,来开展电子数据司法鉴定工作。开展的鉴定服务范围包括:电子数据司法鉴定、计算机证据固定和获取、手机终端取证与分析、数据恢复、密码破解以及涉及电子设备的民事调查等。

鉴定热线&地址:

010-56509288(北京)

北京市西城区西直门外南路26号院1号-奇安信安全中心B1

021-52658848(上海)

上海市闵行区合川路2555号科技绿洲三期五-3号楼4层

029-86196688(西安)

陕西省西安市经济技术开发区凤城二路1幢经发大厦B座10607室

原文始发于微信公众号(网络安全与取证研究):Java网站重构指南:深入JAR文件分析与修改技巧

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月28日19:55:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java网站重构指南:深入JAR文件分析与修改技巧http://cn-sec.com/archives/2438908.html

发表评论

匿名网友 填写信息