gpt4 book ai didi

java - 如何使用 Soot 在 APK 中创建和添加 Java 类?

转载 作者:行者123 更新时间:2023-11-30 05:30:51 25 4
gpt4 key购买 nike

我想检测 APK 来计算其回调方法的执行次数(类似于此 SO post )。

为此,我想从头开始创建一个静态类(类似于 link )来保留计数。然后将该类添加到APK中,最后在回调方法的开头进行检测以调用该静态类的方法(类似于此 link )。

我能够对 Java 应用程序执行类似的操作,但无法对 APK 执行此操作。以下是生成新 SootClass 并将其添加到 Scene 的代码部分:

SootClass staticCls = generateClass("StaticCounter");
Scene.v().addClass(staticCls);
Scene.v().addBasicClass("StaticCounter", SootClass.SIGNATURES);
Scene.v().loadNecessaryClasses();

generateClass 改编自 here 。但是当我检查修改后的 APK 时,没有 StaticCounter 类的迹象。此外,我安装并运行修改后的APK并收到此错误:

08-21 14:15:45.936 19917 19917 E AndroidRuntime:
Caused by: java.lang.ClassNotFoundException:
Didn't find class "StaticCounter" on path:
DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/APKNAME-RdhHiJzxKyyUHh_KCi6RUA==/base.apk"],nativeLibraryDirectories=[/data/app/APKNAME-RdhHiJzxKyyUHh_KCi6RUA==/lib/x86, /system/lib]]

这只是表明生成的类不在 APK 内。

这个问题有解决办法吗?

最佳答案

您可能需要提供它所需的依赖项:

android {
useLibrary "org.apache.http.legacy"
}

它无法构建的原因可能是,StaticCounter 在编译时是未知的 - 因为它可能从应用程序包中引用,这不知道。看看这个blog post ,显然来自 Soot 作者...驱动程序类可能是成功的关键:

//prefer Android APK files// -src-prec apk
Options.v().set_src_prec(Options.src_prec_apk);

//output as APK, too//-f J
Options.v().set_output_format(Options.output_format_dex);

// resolve the PrintStream and System soot-classes
Scene.v().addBasicClass("java.io.PrintStream", SootClass.SIGNATURES);
Scene.v().addBasicClass("java.lang.System", SootClass.SIGNATURES);

这是整个示例:AndroidInstrument.java

关于java - 如何使用 Soot 在 APK 中创建和添加 Java 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57599380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com