package com;
import com.github.unidbg.AndroidEmulator;
import com.github.unidbg.Emulator;
import com.github.unidbg.LibraryResolver;
import com.github.unidbg.Module;
import com.github.unidbg.arm.backend.Unicorn2Factory;
import com.github.unidbg.debugger.Debugger;
import com.github.unidbg.file.FileResult;
import com.github.unidbg.file.IOResolver;
import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
import com.github.unidbg.linux.android.AndroidResolver;
import com.github.unidbg.linux.android.dvm.*;
import com.github.unidbg.memory.Memory;
import com.github.unidbg.virtualmodule.android.AndroidModule;
import com.github.unidbg.virtualmodule.android.JniGraphics;
import com.github.unidbg.virtualmodule.android.MediaNdkModule;
import com.github.unidbg.virtualmodule.android.SystemProperties;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class 模板 extends AbstractJni implements IOResolver {
private static final String PackName = "APP 包名";
private static final String AppPath = "传入 APP路径";
private static final String[] SoName = {"SO名字或外部路径"};
private final AndroidEmulator emulator;
private final VM vm;
private final Module module;
final Memory memory;
@Override
public FileResult resolve(Emulator emulator, String pathname, int oflags) {
System.out.println("Load File: " + pathname);
return null;
}
private static LibraryResolver createLibraryResolver() {
return new AndroidResolver(23);
}
private static AndroidEmulator createARMEmulator() {
return AndroidEmulatorBuilder.for64Bit()
.setProcessName(PackName)
.addBackendFactory(new Unicorn2Factory(false))
.build();
}
模板 () {
emulator = createARMEmulator();
emulator.getSyscallHandler().addIOResolver(this);
memory = emulator.getMemory();
memory.setLibraryResolver(createLibraryResolver());
vm = emulator.createDalvikVM(new File(AppPath));
new AndroidModule(emulator,vm).register(memory);
new MediaNdkModule(emulator,vm).register(memory);
new JniGraphics(emulator,vm).register(memory);
vm.setJni(this);
vm.setVerbose(true);
DalvikModule dm = vm.loadLibrary(SoName[0], true);
module = dm.getModule();
dm.callJNI_OnLoad(emulator);
};
public static void main(String[] args) {
模板 action = new 模板();
action.Call();
}
public void Call_64() {
List<Object> list = new ArrayList<>(10);
list.add(vm.getJNIEnv());
DvmObject<?> thiz = vm.resolveClass("com/kuaishou/android/security/internal/dispatch/JNICLibrary").newObject(null);
list.add(vm.addLocalObject(thiz));
DvmObject<?> context = vm.resolveClass("com/yxcorp/gifshow/App").newObject(null);
list.add(10418);
StringObject urlObj = new StringObject(vm, "123456");
ArrayObject arrayObject = new ArrayObject(urlObj);
StringObject appkey = new StringObject(vm, "d7b7d042-d4f2-4012-be60-d97ff2429c17");
DvmInteger intergetobj = DvmInteger.valueOf(vm, -1);
DvmBoolean boolobj = DvmBoolean.valueOf(vm, false);
DvmBoolean boolobj1 = DvmBoolean.valueOf(vm, true);
StringObject appkey2 = new StringObject(vm, "7e46b28a-8c93-4940-8238-4c60e64e3c81");
list.add(vm.addLocalObject(new ArrayObject(arrayObject, appkey, intergetobj, boolobj, context, DvmInteger.valueOf(vm, 0),boolobj1, appkey2)));
Number numbers = module.callFunction(emulator, 0x40cd4, list.toArray());
System.out.println("numbers:" + numbers);
DvmObject<?> object = vm.getObject(numbers.intValue());
String result = (String) object.getValue();
System.out.println("result:" + result);
}
}