hook_dex_dump.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. var savepath = "/sdcard/"
  2. function savedexfile(dexfileptr) {
  3. try {
  4. //将mCookie转换为对应的dexfile内存指针
  5. var dexfilebegin = ptr(dexfileptr).add(Process.pointerSize*1).readPointer(); //dex的初始指针
  6. var dexfilesize = ptr(dexfileptr).add(Process.pointerSize*2).readU32(); //dex的大小
  7. var dex = new File(savepath+"_"+dexfilesize+".dex","a");
  8. if(dex!=null){
  9. var content = ptr(dexfilebegin).readByteArray(dexfilesize);
  10. dex.write(content);
  11. dex.flush();
  12. dex.close();
  13. console.warn("[dumpdex]"+savepath+"_"+dexfilesize+".dex");
  14. }
  15. } catch (e) {
  16. }
  17. }
  18. function dumpDexBymCookie() {
  19. Java.perform(function () {
  20. var DexFileClass = Java.use("dalvik.system.DexFile");
  21. Java.choose("dalvik.system.DexFile",{
  22. onMatch:function (dexfile) {
  23. var mCookie = dexfile.mCookie.value;
  24. //获取类列表和dex路径
  25. // var classlist = DexFileClass.getClassNameList(mCookie);
  26. // classlist.forEach(function (classname) {
  27. // console.log(dexfile.mFileName.value+"->"+classname);
  28. // })
  29. //console.log(mCookie.$className);
  30. var Array = Java.use("java.lang.reflect.Array");
  31. var size = Array.getLength(mCookie);
  32. var i = 0;
  33. for(i=0;i<size;i++){
  34. //console.log(i+"->"+Array.getLong(mCookie,i));
  35. var longvalue = Array.getLong(mCookie,i);
  36. var dexfilestr = ptr(longvalue + "");
  37. //console.log(dexfilestr);
  38. savedexfile(dexfilestr)
  39. }
  40. },onComplete:function () {
  41. console.warn("Search DexFile over!");
  42. }
  43. })
  44. })
  45. }
  46. setImmediate(dumpDexBymCookie())