源码分析

阅读: 评论:0

源码分析

源码分析

前言

IAST JAVA agent方法调用链,污点值传播等信息的采集功能的实现很大程度上依赖着AOP,IAST JAVA agent是怎么实现AOP的呢,请继续往下看。

源码分析

首先我们来看一下 ENGINEENTRYPOINTCLASS 即 com.AgentEngine这个类。

install方法通过反射被调用,入参里的Instrumentation inst对AOP功能的实现十分重要,我们继续跟着inst看下去。agentEngine.init(mode, propertiesFilePath, inst);方法分别调用了各个引擎的init方法,其中的TransformEngine明显和AOP有关。

inst通过init方法传给了TransformEngine类的成员变量,在调用start方法时又传给了IastClassFileTransformer.init这个静态方法。

如图添加了iastClassFileTransformer到inst中,用它来执行字节码转换。类的字节码在载入JVM之前会调用ClassFileTransformer的transform方法。

而IastClassFileTransformer实现了ClassFileTransformer接口。这块代码很多,重点在下图。

ClassVisitor和ClassWriter是ASM框架中常用的类。这里先是创建了ClassWriter,之后通过PLUGINS.initial方法返回合适的ClassVisitor,cr.accept修改字节码。

随意查看一个继承自ClassVisitor的类。这里重写了visitMethod方法,添加了判断的逻辑,这个方法在访问类里的每个方法时都会被调用,在适当的时候会返回ServletDispatcherAdviceAdapter的实例。而这个类正是实现AOP的关键。

由图可见,ServletDispatcherAdviceAdapter继承了AbstractAdviceAdapter。而AbstractAdviceAdapter最终继承了MethodVistor,同时实现AsmTypes和 AsmMethods这两个接口。搞清楚继承关系后,我们继续看ServletDispatcherAdviceAdapter的源码。

ServletDispatcherAdviceAdapter重写了AbstractAdviceAdapter的before和after方法,将代码插入到方法前后。这里调用了ASM框架的API给方法添加了try-catch结构并插入AsmMethods里的方法以实现污点值传播的追踪。为什么重写这两个方法能实现插入代码呢。继续看AbstractAdviceAdapter。

这里用abstract关键字修饰了这两个方法,然后onMethodEnter和onMethodExit分别又调用了这两个方法。

这几个类都重写了这两个方法,可见后续如果要适配新的web框架,只需要添加一个继承自AbstractAdviceAdapter同时重写这两个方法的类就行了。继续看它的父类。

这个类由ASM提供,方便我们插入代码。实际上这个类也是重写了MethodVisitor的visitCode等方法,最终实现了AOP。

总结

通过 -javaagent参数指定IAST JAVA agent来启动Instrumentation,并加载IastClassFileTransformer利用ASM实现修改类文件的功能。同时也实现了插件化,方便后续开发。 本周六快手联合火线 举办线下「观火」白帽沙龙活动 ↓扫描二维码火速了解

【火线Zone】

火线Zone是[火线安全平台]运营的封闭式社区,社区成员必须在[火线安全平台]提交有效漏洞才能申请免费加入,符合要求的白帽子可联系[火小表妹]免费加入~

我们不希望出现劣币驱逐良币的结果,我们不希望一个技术社区变成一个水区!

欢迎具备分享精神的白帽子加入火线Zone,共建一个有技术氛围的优质社区!

本文发布于:2024-01-28 02:11:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/17063790984046.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:源码
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23