soot-oss / soot

Soot - A Java optimization framework
GNU Lesser General Public License v2.1
2.85k stars 705 forks source link

RuntimeException: Trying to create interface invoke expression for non-interface type #1561

Open wh1t3p1g opened 3 years ago

wh1t3p1g commented 3 years ago

Hi, I am using Soot:4.2.1 to analyse the weblogic's wlthint3client.jar on JDK8u242. But when soot run packs, it throws a RuntimeException. Here is the detail:

java.lang.IllegalStateException: Failed to execute CommandLineRunner
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:798) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:779) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:322) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    at tabby.TabbyApplication.main(TabbyApplication.java:43) [classes!/:1.0.0-SNAPSHOT]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_242]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_242]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_242]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_242]
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49) [tabby-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:107) [tabby-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58) [tabby-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
    at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) [tabby-1.0.0-SNAPSHOT.jar:1.0.0-SNAPSHOT]
Caused by: java.lang.RuntimeException: Failed to convert <weblogic.jndi.WLInitialContextFactoryDelegate: weblogic.security.acl.internal.AuthenticatedSubject authenticateLocally(weblogic.security.acl.UserInfo)>
    at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2163) ~[soot-4.2.1.jar!/:na]
    at soot.SootMethod.retrieveActiveBody(SootMethod.java:402) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processNewMethod(OnFlyCallGraphBuilder.java:846) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.toolkits.callgraph.OnFlyCallGraphBuilder.processReachables(OnFlyCallGraphBuilder.java:313) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.toolkits.callgraph.CallGraphBuilder.build(CallGraphBuilder.java:111) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.toolkits.callgraph.CHATransformer.internalTransform(CHATransformer.java:51) ~[soot-4.2.1.jar!/:na]
    at soot.SceneTransformer.transform(SceneTransformer.java:36) ~[soot-4.2.1.jar!/:na]
    at soot.Transform.apply(Transform.java:102) ~[soot-4.2.1.jar!/:na]
    at soot.RadioScenePack.internalApply(RadioScenePack.java:68) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.toolkits.callgraph.CallGraphPack.internalApply(CallGraphPack.java:58) ~[soot-4.2.1.jar!/:na]
    at soot.Pack.apply(Pack.java:117) ~[soot-4.2.1.jar!/:na]
    at soot.PackManager.runWholeProgramPacks(PackManager.java:611) ~[soot-4.2.1.jar!/:na]
    at soot.PackManager.runPacksNormally(PackManager.java:495) ~[soot-4.2.1.jar!/:na]
    at soot.PackManager.runPacks(PackManager.java:419) ~[soot-4.2.1.jar!/:na]
    at tabby.core.Analyser.runSootAnalysis(Analyser.java:70) ~[classes!/:1.0.0-SNAPSHOT]
    at tabby.TabbyApplication.lambda$run$0(TabbyApplication.java:92) [classes!/:1.0.0-SNAPSHOT]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:795) [spring-boot-2.3.4.RELEASE.jar!/:2.3.4.RELEASE]
    ... 13 common frames omitted
Caused by: java.lang.RuntimeException: Trying to create interface invoke expression for non-interface type: weblogic.security.service.PrincipalAuthenticator Use JVirtualInvokeExpr or JSpecialInvokeExpr instead!
    at soot.jimple.internal.JInterfaceInvokeExpr.<init>(JInterfaceInvokeExpr.java:45) ~[soot-4.2.1.jar!/:na]
    at soot.jimple.Jimple.newInterfaceInvokeExpr(Jimple.java:491) ~[soot-4.2.1.jar!/:na]
    at soot.asm.AsmMethodSource.convertMethodInsn(AsmMethodSource.java:1398) ~[soot-4.2.1.jar!/:na]
    at soot.asm.AsmMethodSource.convert(AsmMethodSource.java:1907) ~[soot-4.2.1.jar!/:na]
    at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2161) ~[soot-4.2.1.jar!/:na]

The PrincipalAuthenticator class is actually a normal class, but soot try to create a interfaceInvoke. How can I deal with this exception? Is there a way to ignore this exception, so that I can continue to analyse the Jar? And you can download the jar from wlthint3client.jar

nercode commented 1 month ago

hi, I meet similar bug, Have you solved this problem?