CSDumper.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import {soName} from "../config";
  2. import {Il2CppGlobalMetadataHeader} from "./struct/Il2CppGlobalMetadataHeader";
  3. import {log, log4AndroidE, LogColor, logColor, logHHex, logHHexLength} from "../logger";
  4. import {Il2cppMetadataRegistration} from "./struct/Il2cppMetadataRegistration";
  5. import {il2cppApi} from "./il2cppApi";
  6. import {Tprt} from "../mtp/tprt";
  7. import {on} from "../../_agent";
  8. import {strace} from "../mtp/strace";
  9. import {Il2CppClass} from "./struct/Il2CppClass";
  10. import {lolm} from "../lolm";
  11. let s_GlobalMetadataHeader=0xc98fec8
  12. let s_Il2CppMetadataRegistration=0xc98feb0
  13. let s_Il2CppCodeRegistration=0xc98fea8
  14. let il2cppHandler;
  15. let once=false;
  16. export let CSDumper ={
  17. loadApk:function (){
  18. loadApk();
  19. },
  20. init:function (){
  21. findIl2cppHandler();
  22. },
  23. start:function (){
  24. if (once){
  25. return
  26. }
  27. once=true
  28. //延迟一下吧
  29. setTimeout(function (){
  30. let module = Process.findModuleByName(soName);
  31. if (module!==null){
  32. log("加强版dumper开始工作")
  33. log("base:"+module.path);
  34. let nativePointer = module.base.add(s_GlobalMetadataHeader);
  35. let il2CppGlobalMetadataHeader = new Il2CppGlobalMetadataHeader(nativePointer.readPointer());
  36. log("il2CppGlobalMetadataHeader log ")
  37. logHHexLength(il2CppGlobalMetadataHeader,128)
  38. let nativePointer1 = module.base.add(s_Il2CppMetadataRegistration);
  39. let il2cppMetadataRegistration = new Il2cppMetadataRegistration(nativePointer1.readPointer());
  40. let il2CppCodeRegistration = module.base.add(s_Il2CppCodeRegistration).readPointer();
  41. let dumperSo = Module.load("/system/lib64/libcodec2_server.so");
  42. log("dumperSo "+dumperSo);
  43. let nativePointer2 = dumperSo.findExportByName("_ZN8CSDumper5startEPvS0_S0_S0_");
  44. let start_fun = new NativeFunction(nativePointer2,"void",['pointer','pointer','pointer','pointer']);
  45. log("il2CppGlobalMetadataHeader ");
  46. logHHex(il2CppGlobalMetadataHeader);
  47. start_fun(il2CppGlobalMetadataHeader,il2cppMetadataRegistration,il2CppCodeRegistration,il2cppHandler);
  48. }
  49. },10000);
  50. }
  51. }
  52. function findIl2cppHandler (){
  53. let dlopen = Module.findExportByName(null,"dlopen");
  54. if (dlopen != null) {
  55. log("fk dlopen");
  56. Interceptor.attach(dlopen, {
  57. onEnter: function (args) {
  58. let path = args[0].readCString();
  59. if (path!=null){
  60. if (path.indexOf(soName) !== -1) {
  61. this.hook = true;
  62. }
  63. }
  64. },
  65. onLeave: function (retval) {
  66. if (this.hook) {
  67. // Interceptor.detachAll();
  68. let s = retval.toString();
  69. log("got il2cpp Handler:"+s);
  70. il2cppHandler = new NativePointer(s);
  71. loadSO();
  72. }
  73. }
  74. })
  75. }
  76. }
  77. function loadApk(){
  78. let module = Module.load("/data/data/com.tencent.lolm/files/libbridge.so");
  79. // Java.perform(function (){
  80. // log("load apk")
  81. // // Module.load("/system/lib64/libcodec2_server.so");
  82. // // setTimeout(function (){
  83. // //
  84. // // },5000);
  85. //
  86. // })
  87. }
  88. function loadSO(){
  89. if (once){
  90. return
  91. }
  92. once=true;
  93. let id = Process.id;
  94. log(" id "+id);
  95. //loadAPK
  96. // setTimeout(function (){
  97. // let dumperSo = Module.load("/system/lib64/libcodec2_server.so");
  98. // log("dumperSo "+dumperSo);
  99. // // let lolStart = dumperSo.findExportByName("_ZN9LoLHelper5startEPv");
  100. // // let nativeFunction = new NativeFunction(lolStart,'void',['pointer']);
  101. // // nativeFunction(il2cppHandler);
  102. //
  103. // // strace.start(soName,0x4c6c8a0,18);
  104. // // let module = Process.findModuleByName(soName);
  105. // // Interceptor.attach(module.base.add(0x4c75730),{
  106. // // onEnter:function (args){
  107. // // this.self =args[0].readPointer();
  108. // // },
  109. // // onLeave:function (ret){
  110. // // let il2CppClass = new Il2CppClass(this.self);
  111. // // log(" onActorReborn ret call" +il2CppClass.name());
  112. // // }
  113. // // })
  114. // },3000);
  115. }