unidbg文件IO重定向

短命女 2023-09-26 16:31 94阅读 0赞
  1. package com.dta.lesson25;
  2. import com.github.unidbg.AndroidEmulator;
  3. import com.github.unidbg.Emulator;
  4. import com.github.unidbg.Module;
  5. import com.github.unidbg.arm.HookStatus;
  6. import com.github.unidbg.arm.backend.Backend;
  7. import com.github.unidbg.file.FileIO;
  8. import com.github.unidbg.file.FileResult;
  9. import com.github.unidbg.file.IOResolver;
  10. import com.github.unidbg.file.linux.AndroidFileIO;
  11. import com.github.unidbg.file.linux.StatStructure;
  12. import com.github.unidbg.hook.HookContext;
  13. import com.github.unidbg.hook.ReplaceCallback;
  14. import com.github.unidbg.hook.hookzz.HookZz;
  15. import com.github.unidbg.linux.ARM32SyscallHandler;
  16. import com.github.unidbg.linux.android.AndroidEmulatorBuilder;
  17. import com.github.unidbg.linux.android.AndroidResolver;
  18. import com.github.unidbg.linux.android.dvm.DalvikModule;
  19. import com.github.unidbg.linux.android.dvm.DvmObject;
  20. import com.github.unidbg.linux.android.dvm.VM;
  21. import com.github.unidbg.linux.android.dvm.jni.ProxyDvmObject;
  22. import com.github.unidbg.linux.file.SimpleFileIO;
  23. import com.github.unidbg.linux.struct.StatFS;
  24. import com.github.unidbg.memory.Memory;
  25. import com.github.unidbg.pointer.UnidbgPointer;
  26. import com.sun.jna.Pointer;
  27. import keystone.Keystone;
  28. import keystone.KeystoneArchitecture;
  29. import keystone.KeystoneMode;
  30. import org.apache.log4j.Level;
  31. import org.apache.log4j.Logger;
  32. import unicorn.Unicorn;
  33. import java.io.File;
  34. import java.io.IOException;
  35. public class MainActivity implements IOResolver<AndroidFileIO> {
  36. private final AndroidEmulator emulator;
  37. private final VM vm;
  38. private final Memory memory;
  39. private final Module module;
  40. public MainActivity(){
  41. emulator = AndroidEmulatorBuilder
  42. .for32Bit()
  43. //.setRootDir(new File("target/rootfs/default"))
  44. //.addBackendFactory(new DynarmicFactory(true))
  45. .build();
  46. memory = emulator.getMemory();
  47. memory.setLibraryResolver(new AndroidResolver(23));
  48. emulator.getSyscallHandler().addIOResolver(this);
  49. vm = emulator.createDalvikVM();
  50. vm.setVerbose(true);
  51. DalvikModule dalvikModule = vm.loadLibrary(new File("unidbg-android/src/test/java/com/dta/lesson25/libmyjni.so"), true);
  52. module = dalvikModule.getModule();
  53. vm.callJNI_OnLoad(emulator,module);
  54. emulator.attach().addBreakPoint(module,0x1256);
  55. }
  56. static {
  57. Logger.getLogger(ARM32SyscallHandler.class).setLevel(Level.INFO);
  58. }
  59. public static void main(String[] args) {
  60. long start = System.currentTimeMillis();
  61. MainActivity mainActivity = new MainActivity();
  62. System.out.println("load the vm "+( System.currentTimeMillis() - start )+ "ms");
  63. mainActivity.saveSN();
  64. }
  65. private void saveSN() {
  66. DvmObject<?> dvmObject = vm.resolveClass("com/gdufs/xman/MyApp").newObject(null);
  67. String arg = "EoPAoY62@ElRD";
  68. dvmObject.callJniMethod(emulator, "saveSN(Ljava/lang/String;)V",arg);
  69. }
  70. @Override
  71. public FileResult<AndroidFileIO> resolve(Emulator<AndroidFileIO> emulator, String pathname, int oflags) {
  72. if (pathname.equals("/sdcard/reg.dat")){
  73. File reg = new File("unidbg-android/src/test/java/com/dta/lesson25/reg.dat");
  74. return FileResult.<AndroidFileIO>success(new SimpleFileIO(oflags,reg,pathname));
  75. }
  76. return null;
  77. }
  78. }

发表评论

表情:
评论列表 (有 0 条评论,94人围观)

还没有评论,来说两句吧...

相关阅读