JAVA代码审计之四大框架学习

java三大框架之间的关系

1.Struts:基于MVC的充当了其中的视图层和控制器;

2.Hibernate:做持久化的,对JDBC轻量级的封装,使得我们能过面向对象的操作数据库;

3.Spring: 采用了控制反转的技术,管理Bean,降低了各层之间的耦合。

4.Shiro:  验证权限的框架 常和其他框架组合使用

一.Struts框架

struts.xml

//这个文件的核心作用
//个人理解:可以理解为tp框架中的定义路由

//处理方法,8种
1.date-sources元素
配置应用程序所需要的数据源。
<data-source key="a"  type="org.apached.commons.dbcp.BasicDataSource">
..</data-source>

2.form-beans元素
配置表单验证的类

3.global-exceptions元素
配置异常处理,exceptions处理全局的异常配置

4.global-forwards元素
用来声明全局的转发关系-->forward标签中的即表示转发。

5.action-mappings元素
特定的请求对应的路径转发关系,这里的转发是局部的转发。

6.controller元素
配置ActionServlet,不是很懂这玩意是完全干啥的。


7.message-resources元素
配置本地消息文本

8.plugin-in元素
配置strtus的差距元素

struts-config.xml配置文件

二.hibernate框架

三.Springboot框架

四.Shiro框架

存在的漏洞
①反序列化漏洞
②shiro权限绕过漏洞-->核心是拦截可绕且springboot解析的匹配模式不同

shiro权限绕过漏洞

综合分析

jsp的唯一不同就是框架

①meta-inf 
//相当于一个信息包,目录中的文件和目录获得Java 2平台的认可与解释,用来配置应用程序、扩展程序、类加载器和服务。其中的 manifest.mf文件,在用jar打包时自动生成。对审计而言没啥意义
②web-inf
java环境的安全目录 是java配置的核心

在这里插入图片描述

在这里插入图片描述
在web-inf下有个文件很重要
在这里插入图片描述

web.xml

//对于代码审计而言这个文件的核心是过滤机制
常用
<filter-mapping><url-pattern>
//如 即当是以.action为结尾的请求时 都会调用这个过滤机制
<filter-mapping>
<filter-name>struts2</filter-name>//这个就是过滤器的名字
<filter-class>dckj.c.a</filter-class>//即对应过滤器的java文件
<url-pattern>*.action</url-pattern>
</filter-mapping>


//其余补充
①关闭不安全的http方法用<security-constraint>进行配置
	<!-- 关闭不安全的HTTP方法   -->  
		<security-constraint>  
			<web-resource-collection>  
				<web-resource-name>任意名称</web-resource-name>  
				<url-pattern>/*</url-pattern>  #这里是配置哪些请求会经过该服务的
				<http-method>PUT</http-method>  
				<http-method>DELETE</http-method>  
				<http-method>HEAD</http-method>  
				<http-method>OPTIONS</http-method>  
				<http-method>TRACE</http-method>
				<http-method>PROPFIND</http-method>
				<http-method>COPY</http-method>
				<http-method>PATCH</http-method>
				<http-method>MOVE</http-method>
				<http-method>SEARCH</http-method>
				<http-method>MKCOL</http-method>
				<http-method>LOCK</http-method>
				<http-method>UNLOCK</http-method>
				<http-method>PROPPATCH</http-method>
			</web-resource-collection>  
			<auth-constraint></auth-constraint>  
		</security-constraint>(这里是添加用来注释的*/

②listern请求
Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应。   
常用的Web事件的监听接口如下:
ServletContextListener:用于监听Web的启动及关闭
ServletContextAttributeListener:用于监听ServletContext范围内属性的改变
ServletRequestListener:用于监听用户请求
ServletRequestAttributeListener:用于监听ServletRequest范围属性的改变
HttpSessionListener:用于监听用户session的开始及结束
HttpSessionAttributeListener:用于监听HttpSession范围内的属性改变

			<listener>
			<listener-class>
				com.tp.cas.client.logout.SingleSignOutHttpSessionListener
			</listener-class>
		</listener> 
<think>好的,用户想了解Java逆向工程和安卓逆向工程的区别及联系。我需要先回顾一下已有的引用内容,看看有没有相关的信息。引用[1]提到安卓逆向工程涉及APK逆向,而引用[5]则讨论了Android反编译工具,将APK转为Java代码。这说明安卓逆向和Java逆向可能有联系,但具体区别在哪里呢? 首先,Java逆向通常针对的是标准的Java应用程序,比如JAR或WAR文件,而安卓应用虽然用Java或Kotlin编写,但最终打包成APK,里面包含的是DEX文件。安卓逆向需要处理DEX转换为Smali或Java代码的过程,这可能比普通的Java逆向多一个步骤。例如,引用[2]提到将APK转为Smali工程,这可能涉及到反编译工具的不同。 然后,工具链方面,Java逆向可能用JD-GUI、FernFlower等,而安卓逆向可能需要dex2jar、Apktool、Jadx等,如引用[5]所述。这说明两者的工具不同,但可能有重叠的部分,比如都使用反编译工具。 另外,安卓应用的结构更复杂,包含资源文件、XML配置、Native代码(如SO库),而普通Java应用可能结构更简单。安卓逆向可能需要处理资源解密、Manifest分析等,这在Java逆向中可能不常见。引用[4]提到逆向实验涉及Smali代码注入,这可能也是安卓特有的。 联系方面,两者都涉及反编译和分析代码逻辑,可能都需要理解Java字节码。安卓逆向的基础可能建立在Java逆向之上,但需要额外处理安卓特有的组件和格式。比如,引用[5]指出APK反编译后得到Java代码,但中间步骤需要处理DEX文件。 用户可能想知道学习Java逆向是否有助于安卓逆向,或者两者的应用场景有何不同。比如,安卓逆向更多用于移动应用安全分析,而Java逆向可能用于服务器应用或桌面程序。同时,用户可能关心法律和道德问题,引用[1]和[5]都强调了合法使用的重要性。 总结区别点:目标文件格式不同(APK vs JAR)、工具链不同、处理步骤(DEX转换)、应用组件分析(四大组件)、资源处理。联系则是基础技术相似,都需要Java知识,反编译和代码分析的方法共通。 需要确保回答结构清晰,分点说明区别和联系,并引用提供的资料。例如,引用[2]提到Smali工程,引用[5]提到反编译工具,引用[4]涉及代码注入,这些都可以作为例子支持回答。</think>### Java逆向工程与安卓逆向工程的区别及联系 #### **一、核心区别** 1. **目标文件格式不同** - **Java逆向**:主要针对标准Java程序(如`.jar`或`.war`文件),直接处理Java字节码(`.class`文件)。 - **安卓逆向**:处理APK文件,其核心代码是经过优化的DEX字节码(`.dex`文件),需转换为Smali或Java代码后才能分析[^5]。 2. **工具链差异** - **Java逆向**:常用工具如JD-GUI、FernFlower、Procyon等,直接反编译`.class`文件为Java源码。 - **安卓逆向**:需多步骤工具链,例如: - 使用`Apktool`解包APK,提取资源文件和Smali代码[^2]; - 通过`dex2jar`将`.dex`转为`.jar`,再用Java逆向工具分析[^5]; - 专用工具如Jadx可直接反编译DEX为Java代码[^5]。 3. **代码结构与运行环境** - **Java逆向**:分析标准JVM环境下的逻辑,如类加载、多线程等。 - **安卓逆向**:需理解安卓特有组件(如Activity、Service)及框架(如Binder通信、资源管理)[^1][^4]。 4. **资源处理复杂度** - 安卓APK包含XML布局、图片等资源文件,需解密或重构(如反编译`AndroidManifest.xml`),而Java逆向较少涉及此类操作。 --- #### **二、核心联系** 1. **基础技术共通** 两者均依赖反编译、代码分析及调试技术。例如,安卓逆向中DEX转Java后,分析方法与Java逆向类似。 2. **代码逻辑分析相似性** 无论是Java还是安卓逆向,均需理解代码控制流、算法实现及第三方库调用逻辑。例如,逆向分析加密算法时,步骤基本一致[^4]。 3. **工具的部分重叠** 部分工具(如Jadx)支持同时处理Java和安卓逆向场景,且Smali代码与Java字节码有对应关系。 --- #### **三、典型应用场景对比** | **场景** | Java逆向工程 | 安卓逆向工程 | |------------------|----------------------------------|----------------------------------| | **安全审计** | 分析服务器端漏洞、加密逻辑 | 检测恶意行为、权限滥用 | | **代码复用** | 提取通用算法或工具类 | 借鉴UI实现或SDK功能 | | **调试优化** | 定位JVM性能问题 | 分析ANR崩溃、内存泄漏 | | **法律风险** | 需遵守软件许可协议 | 额外考虑移动端隐私法规 | --- #### **四、示例:逆向流程对比** **Java逆向流程** ```plaintext .jar文件 → JD-GUI反编译 → Java源码 → 分析逻辑 → 修改.class → 重新打包 ``` **安卓逆向流程** ```plaintext APK文件 → Apktool解包 → Smali代码修改 → 回编APK → 签名安装 或 APK → Jadx反编译 → Java源码 → 分析逻辑 → 修改Smali → 回编 ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

goddemon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值