Java Web 应用程序解密与逆向工程实践

21CTO社区导读:在本篇文章,我们向您演示如何从WAR文件中提取源文件,并恢复用Java编写的Web项目结构的方法。


1.jpeg

 
现在我们做一个假设,你是一个软件开发团队,现在客户的需求发生了变化。这可了不得了,而且你还不能再访问生产机上的应用程序源代码。
 
你要重新开始写吗?然后再考虑这些需求变更?也许可以不用。
 
这样的事情真的可以发生,以下是我和团队最近完成的逆向工程的实例。
 
面临的挑战
 
我们一直在用Java开发Web应用程序。此应用通过REST接口为提供PDF报表。使用了Spring做为核心应用程序框架,Spring MVC通过REST通过其它应用接受请求,从MySQL中取得数据生成PDF格式的报告。
 
客户希望使用该应用程序,还想再加上一些特性以增强实用性,但是没有源代码。现在只有Web应用程序包(WAR)可用,并且部署在了生产服务器上。因此,我们的工程师需要恢复Web应用程序的结构。
 
接下来我们就开始尝试有效地解决这个问题。
 
第一优先级:获取应用程序的源代码
 
首先,我们需要取得生产服务器WAR文件的目录和文件结构。我们重绘了Web应用程序的结构并将其恢复,以便下一步开发Web应用程序的框架。
 
接下来,我们将源代码和目录结构整合在一起,以便修改和改进并能运行该应用程序。
 
 
第二优先级:WAR逆向工程
 
有几个实用工具可以将Java字节码反编译为Java源代码。
 
给大家介绍以下几个工具:
 
Bytecode Viewer
https://github.com/konloch/bytecode-viewer
 Java Decompiler
https://github.com/java-decompiler
 Fernflower
https://github.com/fesh0r/fernflower
 Procyon
https://bitbucket.org/mstrobel/procyon/src
 
为了解决以上任务,我们选择了Bytecode Viewer。这是一个免费的工具,它还提供了一个优秀GUI界面,使开发者能够专注于项目的结构。
 
Bytecode Viewer支持JAR格式做为输入文件。WAR和JAR本质上都是压缩格式的文件,因此,我们需要将.war 扩展名更改为.jar。
 
下面图片是我们逆向工程的输出结果。
 

2.jpeg

 
第三优先级:恢复 Web应用程序结构
 
接下来,我们需要了掌握Web应用的目录结构。刚才我们已经重命名了WAR到jar扩展名。现在我们可以直接将它解压缩并查看它的结构。
 
目标结构如下:
 

ys.JPG


我们看到,WAR文件包包含了pom.xml,可以把它复制粘贴到我们的项目里去。
 
根据Maven Web 项目结构,应该把所有位于WEB-INF/classes文件平中的配置文件放到src/main/resources目录中。图片,模板以及index.jsp放在src/main/webapp目录中;把WEB-INF目录下的web.xm放进src/main/java/webapp/WEB-INF中。
 
以上所以这些文件的重组均是基于Maven Web框架目录架构和Web归档包规则进行处理的。
 
为此,我们已经恢复了 WAR 的原始目录结构。如下所示:
 
 
第四优先级:把它们加在一起
 
现在,我们已经有了第一、第二阶段的源代码以及作为第三阶段恢复结果的Web项目结构。
 
所有获得的Java源代码将保存在src/main/java目录中。
 
该Web项目现在包含如下的文件与目录结构:
 
2.jpg

 
最后,该项目可以用 mvnclean install  命令进行打包。
 
最后成果
 
值得庆贺,我们的主要目录已经实现。我们把生产环境中运行的Web应用程序之源代码交给了客户。
因为有源程序,要改进和解决问题就容易多了,接下来就可以为客户维护和定制Web应用程序。
 
在这个例子,我们给大家演示了如何从Java WAR包文件中提了源代码并恢复Web项目文件和结构的方法。
 
我希望您永远不会遇到这样的情况。但是,如果发生了这种情况也不用着急,希望本篇文章会对您有用! :)

作者:老王
编辑:21CTO社区花花


0 个评论

要回复文章请先登录注册