我现在要用unidbg 调用 aapk中的 tesso 中的 sign方法他有6个参数第一个是app context后面的是string类型。写一个示例
以下是使用unidbg调用tes.so中的sign方法的示例代码:
import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.LibraryResolver;
import com.github.unidbg.Module;
import com.github.unidbg.arm.ARMEmulatorBuilder;
import com.github.unidbg.file.FileSystem;
import com.github.unidbg.file.FileSystemBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.memory.Memory;
import java.io.File;
public class TesSoDemo {
private final AndroidEmulator emulator;
private final VM vm;
private final DvmClass testSoClass;
private TesSoDemo() {
emulator = new ARMEmulatorBuilder().build();
final Memory memory = emulator.getMemory();
final FileSystem fileSystem = FileSystemBuilder.createFileSystem(emulator, new File("src/test/resources/app.apk"));
final LibraryResolver resolver = new AndroidResolver(23);
emulator.getSyscallHandler().addIOResolver(resolver);
memory.setLibraryResolver(resolver);
vm = emulator.createDalvikVM(fileSystem.getFile("classes.dex"));
vm.setVerbose(true);
vm.setJni(new ProxyJni());
DalvikModule dm = vm.loadLibrary("tes", false);
dm.callJNI_OnLoad(emulator);
testSoClass = vm.resolveClass("com/tencent/smtt/utils/Tes");
}
private void test() {
DvmObject<?> context = VMStack.getCallingContextObject(vm);
String param1 = "test1";
String param2 = "test2";
String param3 = "test3";
String param4 = "test4";
String param5 = "test5";
String param6 = "test6";
DvmObject<?>[] args = new DvmObject<?>[]{
context,
new StringObject(vm, param1),
new StringObject(vm, param2),
new StringObject(vm, param3),
new StringObject(vm, param4),
new StringObject(vm, param5),
new StringObject(vm, param6)
};
DvmObject<?> result = testSoClass.callStaticJniMethodObject(emulator, "sign", "([Ljava/lang/Object;)Ljava/lang/Object;", args);
System.out.println(result.getValue());
}
public static void main(String[] args) {
TesSoDemo demo = new TesSoDemo();
demo.test();
}
}
说明:
- 创建一个AndroidEmulator实例,设置文件系统和库解析器。
- 创建一个DalvikVM实例,加载classes.dex。
- 加载tes.so库,并调用JNI_OnLoad()方法。
- 通过DalvikVM实例获取Tes类的DvmClass对象。
- 调用Tes类的静态方法sign,传入6个参数,其中第一个参数为当前应用程序的Context对象,其余5个参数为String类型。
- 获取方法返回值并输出。
注意:需要将app.apk和tes.so放在同一目录下,并在代码中指定app.apk的路径。
原文地址: http://www.cveoy.top/t/topic/bnff 著作权归作者所有。请勿转载和采集!