byte-buddy icon indicating copy to clipboard operation
byte-buddy copied to clipboard

Error setting COMPUTE_FRAMES during JDBC bytecode modification

Open 1057105012 opened this issue 4 years ago • 1 comments

[2022-02-08 09:34:33] [34880:rasp-logger_deamon_task] DEBUG cn.a.a.i.c: onError(): { typeName=com.mysql.jdbc.StatementImpl, classLoader=ParallelWebappClassLoader context: vulns1_war delegate: false ----------> Parent Classloader: java.net.URLClassLoader@338494fa , module=null, loaded=false } Execption: java.lang.IllegalArgumentException: JSR/RET are not supported with computeFrames option at cn.a.a.thirdparty.net.bytebuddy.jar.asm.Frame.execute(SourceFile:1017) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.MethodWriter.visitJumpInsn(SourceFile:1145) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.MethodVisitor.visitJumpInsn(SourceFile:478) at cn.xmirror.rasp.thirdparty.net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ValidatingClassVisitor$ValidatingMethodVisitor.visitJumpInsn(SourceFile:3767) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.MethodVisitor.visitJumpInsn(SourceFile:478) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.ClassReader.readCode(SourceFile:2246) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.ClassReader.readMethod(SourceFile:1481) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.ClassReader.accept(SourceFile:711) at cn.a.a.thirdparty.net.bytebuddy.jar.asm.ClassReader.accept(SourceFile:394) at cn.a.a.thirdparty.net.bytebuddy.dynamic.scaffold.TypeWriter$Default$ForInlining.create(SourceFile:3892) at cn.a.a.thirdparty.net.bytebuddy.dynamic.scaffold.TypeWriter$Default.make(SourceFile:2166) at cn.a.a.thirdparty.net.bytebuddy.dynamic.scaffold.inline.RedefinitionDynamicTypeBuilder.make(SourceFile:224) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.doTransform(SourceFile:10371) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(SourceFile:10307) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.access$1600(SourceFile:10073) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(SourceFile:10692) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer$LegacyVmDispatcher.run(SourceFile:10639) at java.security.AccessController.doPrivileged(Native Method) at cn.a.a.thirdparty.net.bytebuddy.agent.builder.AgentBuilder$Default$ExecutingTransformer.transform(SourceFile:10230) at sun.instrument.TransformerManager.transform(TransformerManager.java:188) at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:428) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2478) at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:870) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1371) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2382) at com.mysql.jdbc.ConnectionImpl.createStatement(ConnectionImpl.java:2362) at com.mysql.jdbc.ConnectionImpl.getMetadataSafeStatement(ConnectionImpl.java:2994) at com.mysql.jdbc.ConnectionImpl.loadServerVariables(ConnectionImpl.java:3728) at com.mysql.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:3348) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2045) at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:718) at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:302) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:282) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:247) at org.apache.jsp._012_002djdbc_002dmysql_jsp.runQuery(_012_002djdbc_002dmysql_jsp.java:28) at org.apache.jsp._012_002djdbc_002dmysql_jsp._jspService(_012_002djdbc_002dmysql_jsp.java:288) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:466) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327) at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) I encountered an error when I used the following code, How can I fix it ForDeclaredMethods visitor = advice.on(methodMatcher) .readerFlags(ClassReader.SKIP_FRAMES) .writerFlags(ClassWriter.COMPUTE_FRAMES);

And I couldn't remove COMPUTE_FRAMES because the obfuscation would conflict with Bytebuddy . I want to know what causes it and I didn't use try catch but he still got an error . This error can be reproduced using a code sample with JDBC and appears without obfuscation

1057105012 avatar Feb 08 '22 01:02 1057105012

Byte Buddy should handle obfuscated code. Are you using the latest version?

Other than that, the exception states what it is: with legacy blocks, frame computation is not supported.

raphw avatar Feb 08 '22 07:02 raphw