{"id":4680,"date":"2021-09-03T10:13:56","date_gmt":"2021-09-03T02:13:56","guid":{"rendered":"http:\/\/122.152.205.50\/wordpress\/?p=4680"},"modified":"2021-09-03T10:13:56","modified_gmt":"2021-09-03T02:13:56","slug":"%e4%b8%80%e7%a7%8d%e5%8f%af%e8%83%bd%e5%8f%af%e8%a1%8c%e7%9a%84%e4%bf%ae%e6%94%b9%e6%ba%90%e7%a0%81dump-dex%e7%9a%84%e6%96%b9%e6%a1%88%e8%87%aa%e7%a0%94","status":"publish","type":"post","link":"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680","title":{"rendered":"\u4e00\u79cd\u53ef\u80fd\u53ef\u884c\u7684\u4fee\u6539\u6e90\u7801dump dex\u7684\u65b9\u6848(\u81ea\u7814)"},"content":{"rendered":"<p>\u672c\u6765\u60f3\u901a\u8fc7<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/qq1084283172\/article\/details\/78003184\">https:\/\/blog.csdn.net\/qq1084283172\/article\/details\/78003184<\/a>\u8fd9\u7bc7\u6587\u7ae0\u6765dump\u51fadex\uff0c\u540e\u6765\u5931\u8d25\u4e86\u3002<\/p>\n<p>\u53ef\u4ee5\u77e5\u9053Dalvik\u6a21\u5f0f\u7684\u8bbe\u5907\uff0c\u53ef\u4ee5\u4eceDvmDex.cpp\u7684dvmDexFileOpenPartial\u65b9\u6cd5\u5c06dex dump\u51fa\u6765\u3002\u4f46\u662f\u6709\u4e00\u4e2a\u95ee\u9898\uff1a<strong>\u7cfb\u7edf\u90a3\u4e48\u591aapk\u90fd\u4f1a\u8d70\u8fd9\u4e2a\u65b9\u6cd5\uff0c\u5982\u4f55\u786e\u5b9a\u6267\u884c\u5f53\u524d\u65b9\u6cd5\u7684\u5e94\u7528\u662f\u6211\u60f3\u8981\u7684\u5e94\u7528\uff1f<\/strong><br \/>\n\u6211\u60f3\u5230\u4e86\u4e00\u79cd\u529e\u6cd5\uff1a\u5728dvmDexFileOpenPartial\u83b7\u53d6\u8c03\u7528\u5f53\u524d\u65b9\u6cd5\u7684\u8fdb\u7a0bid\u548c\u5305\u540d\uff0c\u4f46\u662f\u53d1\u73b0\u6709\u5f88\u5927\u56f0\u96be\uff0c\u800c\u4e14<br \/>\n\u8c03\u7528\u5f53\u524d\u65b9\u6cd5\u7684\u8fdb\u7a0b\u4e5f\u5e76\u4e0d\u662fapk\u5bf9\u5e94\u7684\u8fdb\u7a0b\uff0c\u6240\u4ee5\u6b64\u65b9\u6cd5\u4e0d\u53ef\u884c\u3002<\/p>\n<p>\u540e\u6765\u76d1\u542c\u65e5\u5fd7\uff08adb logcat > logcat.txt\u4f1a\u76d1\u542c\u5230\u6240\u6709\u65e5\u5fd7\uff09\u53d1\u73b0\u201cRunning dexopt on \u5305\u540d\"\uff0c\u7d27\u63a5\u7740\u5c31\u4f1a\u6267\u884cdvmDexFileOpenPartial\u65b9\u6cd5\u3002\u6e90\u7801\u641c\u7d22\"Running dexopt on\u201c(\u53c2\u7167\u6211\u7684\u53e6\u5916\u4e00\u7bc7\u535a\u5ba2<a class=\"wp-editor-md-post-content-link\" href=\"http:\/\/xinyiworld.top\/wordpress\/?p=4567\">http:\/\/xinyiworld.top\/wordpress\/?p=4567<\/a>),\u627e\u5230\u65e5\u5fd7\u8f93\u51fa\u7684\u6587\u4ef6\u4f4d\u7f6e\uff1a<strong>PackageManagerService.java<\/strong><br \/>\n<img src=\"https:\/\/upload-images.jianshu.io\/upload_images\/18328858-7432e5865b2af5ff.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" alt=\"image.png\" \/><\/p>\n<p><img src=\"https:\/\/upload-images.jianshu.io\/upload_images\/18328858-71e0f3945f556015.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" alt=\"image.png\" \/><\/p>\n<p>\u6240\u4ee5\u6211\u8bde\u751f\u4e00\u79cd\u601d\u8def\uff1a<\/p>\n<blockquote><p>\n  <strong>\u5728PackageManagerService.java\u7684\"Running dexopt on\"\u5c06\u5305\u540d\u8bb0\u5f55\u8d77\u6765\uff0c\u7136\u540e\u5728dvmDexFileOpenPartial\u83b7\u53d6\u5305\u540d\uff0c\u5982\u679c\u662f\u60f3\u8981\u7684\u5305\u540d\u5c31\u5c06dex\u5199\u5165\u5230\u6587\u4ef6\u3002<\/strong>\n<\/p><\/blockquote>\n<p>\u8fd9\u79cd\u65b9\u6848\u5c31\u6d89\u53ca\u5230PackageManagerService.java\u548cDvmDex.cpp\u4e4b\u95f4\u7684\u4e00\u4e2a\u901a\u8baf\u7684\u95ee\u9898\u4e86\uff0c\u6211\u5c1d\u8bd5\u4e862\u79cd\u65b9\u6848\uff0c\u90fd\u9047\u5230\u4e86\u56f0\u96be\u3002<\/p>\n<ul>\n<li>\u901a\u8fc7JNI<br \/>\n\u65e2\u7136\u6d89\u53ca\u5230C\u548cJava\u6587\u4ef6\u7684\u4ea4\u4e92\uff0c\u81ea\u7136\u4f1a\u60f3\u5230JNI\u6280\u672f\u3002\u6211\u7684\u8bbe\u60f3\u662f\u8fd9\u6837\u7684\uff1a<strong>\u5728PackageManagerService.java\u4f7f\u7528\u4e00\u4e2a\u9759\u6001\u5e38\u91cf\uff0c\u8bb0\u4f4f\u5305\u540d\u3002\u7136\u540eDvmDex.cpp\u8c03\u7528PackageManagerService.java\u7684\u4e00\u4e2a\u65b9\u6cd5\u83b7\u53d6\u5305\u540d\u3002<\/strong><br \/>\n\u4f46\u662fPackageManagerService.java\u5c5e\u4e8e\u201cframeworks\/base\/services\/java\u201d\u6a21\u5757\uff0c\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684Android.mk\u6587\u4ef6\u3002\u800cDvmDex.cpp\u4f4d\u4e8e\u201cdalvik\/vm\u201d\u6a21\u5757\uff0c\u6709\u4e00\u4e2a\u5bf9\u5e94\u7684Android.mk\u6587\u4ef6\u3002\u4f7f\u7528\u8fc7Eclipse\u5e94\u7528JNI\u7684\u90fd\u77e5\u9053\uff0c\u901a\u8fc7JNI\u5173\u8054\u7684C\u548cJava\u5c5e\u4e8e\u540c\u4e00\u4e2a\u5de5\u7a0b\uff0c\u6709\u7740\u76f8\u540c\u7684Android.mk\u6587\u4ef6\u3002<br \/>\n\u6240\u4ee5\u4e0a\u9762\u7684PackageManagerService.java\u548cDvmDex.cpp\u4e4b\u95f4\u7684\u901a\u8baf\u5e76\u975e\u7b80\u5355\u7684JNI\u6280\u672f\u5373\u53ef\u89e3\u51b3\u3002<\/p>\n<\/li>\n<li>\n<p>\u6587\u4ef6\u5171\u4eab<br \/>\n\u9009\u62e9\u5bf9\u201c\/data\/local\/tmp\u201d\u76ee\u5f55\u521b\u5efa\u4e00\u4e2a\u6587\u4ef6\u6765\u8bb0\u5f55\u5305\u540d\uff0c\u4e3a\u4ec0\u4e48\u4f7f\u7528\u8fd9\u4e2a\u76ee\u5f55\uff1f<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/weixin_30787531\/article\/details\/95132119\">https:\/\/blog.csdn.net\/weixin_30787531\/article\/details\/95132119<\/a><\/p>\n<\/li>\n<\/ul>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_16 counter-hierarchy counter-decimal ez-toc-grey\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\">\u76ee\u5f55<\/p>\n<span class=\"ez-toc-title-toggle\"><a class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" style=\"display: none;\"><i class=\"ez-toc-glyphicon ez-toc-icon-toggle\"><\/i><\/a><\/span><\/div>\n<nav><ul class=\"ez-toc-list ez-toc-list-level-1\"><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-1\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#PackageManagerServicejava%E6%BA%90%E7%A0%81%EF%BC%8844%EF%BC%89%E4%BF%AE%E6%94%B9\" title=\"PackageManagerService.java\u6e90\u7801\uff084.4\uff09\u4fee\u6539\">PackageManagerService.java\u6e90\u7801\uff084.4\uff09\u4fee\u6539<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-2\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#DvmDexcpp%E6%BA%90%E7%A0%81%EF%BC%8844%EF%BC%89%E4%BF%AE%E6%94%B9\" title=\"DvmDex.cpp\u6e90\u7801\uff084.4\uff09\u4fee\u6539\">DvmDex.cpp\u6e90\u7801\uff084.4\uff09\u4fee\u6539<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-2\"><a class=\"ez-toc-link ez-toc-heading-3\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#%E5%BC%80%E5%A7%8Bdump\" title=\"\u5f00\u59cbdump\">\u5f00\u59cbdump<\/a><ul class=\"ez-toc-list-level-3\"><li class=\"ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-4\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#1%E7%BC%96%E8%BE%91%E5%B9%B6%E6%8E%A8%E9%80%81%E7%94%A8%E6%88%B7dump%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6\" title=\"1.\u7f16\u8f91\u5e76\u63a8\u9001\u7528\u6237dump\u914d\u7f6e\u6587\u4ef6\">1.\u7f16\u8f91\u5e76\u63a8\u9001\u7528\u6237dump\u914d\u7f6e\u6587\u4ef6<\/a><ul class=\"ez-toc-list-level-4\"><li class=\"ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-5\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#%E7%BC%96%E8%BE%91%E6%96%87%E4%BB%B6\" title=\"\u7f16\u8f91\u6587\u4ef6\">\u7f16\u8f91\u6587\u4ef6<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-4\"><a class=\"ez-toc-link ez-toc-heading-6\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#%E6%8E%A8%E9%80%81%E6%96%87%E4%BB%B6\" title=\"\u63a8\u9001\u6587\u4ef6\">\u63a8\u9001\u6587\u4ef6<\/a><\/li><\/ul><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-7\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#2%E5%AE%89%E8%A3%85%E8%A6%81dump%E7%9A%84apk\" title=\"2.\u5b89\u88c5\u8981dump\u7684apk\">2.\u5b89\u88c5\u8981dump\u7684apk<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-8\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#3pull_dex%E6%96%87%E4%BB%B6\" title=\"3.pull dex\u6587\u4ef6\">3.pull dex\u6587\u4ef6<\/a><\/li><li class=\"ez-toc-page-1 ez-toc-heading-level-3\"><a class=\"ez-toc-link ez-toc-heading-9\" href=\"http:\/\/xinyiworld.top\/wordpress_it\/?p=4680\/#4%E6%89%93%E5%BC%80dex%E6%96%87%E4%BB%B6\" title=\"4.\u6253\u5f00dex\u6587\u4ef6\">4.\u6253\u5f00dex\u6587\u4ef6<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"PackageManagerServicejava%E6%BA%90%E7%A0%81%EF%BC%8844%EF%BC%89%E4%BF%AE%E6%94%B9\"><\/span>PackageManagerService.java\u6e90\u7801\uff084.4\uff09\u4fee\u6539<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6e90\u7801\u76ee\u5f55\uff1aframeworks\/base\/services\/java\/com\/android\/server\/pm<br \/>\n\u6700\u5c0f\u7f16\u8bd1\u76ee\u5f55\uff1aframeworks\/base\/services\/java<br \/>\n\u4fee\u6539\u76ee\u7684\uff1a\u8bb0\u4f4f\u5b89\u88c5\u7684\u5e94\u7528\u7684\u5305\u540d\uff0c\u4e3a\u540e\u9762dump dex\u4f5c\u51c6\u5907\u3002<\/p>\n<pre><code class=\"language-java line-numbers\"> ...\n Log.i(TAG, \"Running dexopt on: \" + pkg.applicationInfo.packageName);\n            boolean test = write(\"\/data\/local\/tmp\/test.txt\",pkg.applicationInfo.packageName);\n            Log.e(TAG,\"write result:\" + test);  \n\n            \/\/CZAdd\n              \/**if(\"com.chinalwb.are.demo\".equals(pkg.applicationInfo.packageName)){\n                        killerAppName = pkg.applicationInfo.packageName;\n                  }else{\n                        killerAppName = null;\n                  }*\/   \n\n                        final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid);\n                        ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg));\n                        pkg.mDidDexOpt = true;\n                        performed = true;\n ...\n\n \/*\n     *\u5199\u6587\u4ef6\n     *\/\n    private boolean write(String fileName, String fileContent) {\n        boolean result = false;\n        File f = new File(fileName);\n        File parentFile = f.getParentFile();\n        if(!parentFile.exists()){\n            parentFile.mkdirs();\n        }\n        if(!f.exists()){\n            try {\n                f.createNewFile();\n            } catch (IOException e) {\n                e.printStackTrace();\n            }\n        }\n        try {\n            FileOutputStream fs = new FileOutputStream(f,false);\n            byte[] b = fileContent.getBytes();\n            fs.write(b);\n            fs.flush();\n            fs.close();\n            result = true;\n        } catch (Exception e) {\n           Log.e(TAG,\"write failure:\" + e.getMessage());\n        }\n        return result;\n    }\n<\/code><\/pre>\n<p>\u8c03\u8bd5\u53d1\u73b0framework\u5c5e\u4e8esystemServer\u8fdb\u7a0b\uff0c\u5bf9\u4e8e\u201c\/data\/local\/tmp\/\u201d\u76ee\u5f55\uff0c\u6ca1\u6709\u5199\u7684\u6743\u9650\u3002\u53d7\u9ad8\u4eba\u6307\u70b9,\u53d1\u73b0\u201c\/data\/system\"\u76ee\u5f55\u53ef\u4ee5\u5199\u6587\u4ef6\u3002<\/p>\n<pre><code class=\"language-java line-numbers\">boolean test = write(\"\/data\/system\/tmp\/test.txt\",pkg.applicationInfo.packageName);\nLog.e(TAG,\"write result:\" + test);\n<\/code><\/pre>\n<h2><span class=\"ez-toc-section\" id=\"DvmDexcpp%E6%BA%90%E7%A0%81%EF%BC%8844%EF%BC%89%E4%BF%AE%E6%94%B9\"><\/span>DvmDex.cpp\u6e90\u7801\uff084.4\uff09\u4fee\u6539<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u6e90\u7801\u76ee\u5f55\uff1adalvik\/vm<br \/>\n\u6700\u5c0f\u7f16\u8bd1\u76ee\u5f55\uff1adalvik\/vm<br \/>\n\u4fee\u6539\u76ee\u7684\uff1a\u8bfbdump\u7684\u914d\u7f6e\u6587\u4ef6(\u4fdd\u5b58\u7528\u6237\u60f3\u8981dump\u7684\u5305\u540d)\uff0c\u8bfb\u5f53\u524d\u5b89\u88c5\u7684\u5e94\u7528\u7684\u5305\u540d\uff0c\u7136\u540e\u5224\u65ad\u4e24\u4e2a\u5305\u540d\u76f8\u540c\u5c31\u53bbdump dex\u3002<\/p>\n<pre><code class=\"language-c line-numbers\">int findTargetPName(){\n    ALOGE(\"try to find the target pname\");\n    FILE *fp = NULL;\n    fp = fopen(\"\/data\/system\/tmp\/want_dump_pname.txt\", \"r\");\n\n    if (fp==NULL){\n        \/\/ fclose(fp);      fp==NULL\u4e0d\u9700\u8981close\u3002\n        fp = NULL;\n        ALOGE(\"find the target pname failure\");\n        return -1;\n    }else{\n         \/\/ \u8bfb\u53d6\u8131\u58f3apk\u7684\u5185\u5b58dex\u6587\u4ef6dump\u540e\u7684\u6587\u4ef6\u540d\u79f0\u5b57\u7b26\u4e32\n        fgets(dexDumpName, 128, fp);\n\n        if( dexDumpName[strlen(dexDumpName) -1 ] == '\\a'){\n            dexDumpName[strlen(dexDumpName)-1] = 0;           \/\/\u6709\u56de\u8f66\u7b26\u624d\u8981\u51cf1  \n        }else{\n            dexDumpName[strlen(dexDumpName)] = 0;  \n        }        \n\n\n        fclose(fp);\n        fp = NULL;\n\n        ALOGE(\"find the target pname:%s,len=%d\",dexDumpName,strlen(dexDumpName));\n        return 0;\n    }\n} \n\nint readCurrentInstalledPName(){\n    ALOGE(\"try to read current installed pname\");\n    FILE *fp = NULL;\n    fp = fopen(\"\/data\/system\/tmp\/test.txt\", \"r\");\n\n    if (fp==NULL){\n        \/\/ fclose(fp);      fp==NULL\u4e0d\u9700\u8981close\u3002\n        fp = NULL;\n        ALOGE(\"read current installed pname failure\");\n        return -1;\n    }else{\n         \/\/ \u8bfb\u53d6\u5f53\u524d\u5b89\u88c5\u7684APK\u7684\u5305\u540d\n        fgets(currentInstalledPName, 128, fp);\n\n        if( currentInstalledPName[strlen(currentInstalledPName) -1 ] == '\\a'){\n            currentInstalledPName[strlen(currentInstalledPName)-1] = 0;          \/\/\u6709\u56de\u8f66\u7b26\u624d\u8981\u51cf1  \n        }else{\n            currentInstalledPName[strlen(currentInstalledPName)] = 0;  \n        }        \n\n        fclose(fp);\n        fp = NULL;\n\n        ALOGE(\"read current installed pname:%s,len=%d\",currentInstalledPName,strlen(currentInstalledPName));\n        return 0;\n    }\n} \n\nint dumpDexFile(const void* addr, int len){\n  FILE *fp = NULL;\n\n  fp =  fopen(\"\/data\/system\/tmp\/dump.dex\", \"wb+\");\n   if (fp==NULL){\n         ALOGE(\"open dex output file failure\");\n          return -1;\n  }else{\n        fwrite(addr,sizeof(char),len,fp);\n        fclose(fp);\n         fp = NULL;\n          ALOGE(\"dump dex success,dex file path:%s\",\"\/data\/system\/tmp\/dump.dex\");\n         return 0;\n   }\n}\n\n\nint dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)\n{\n    \/\/CZAdd-----------------------------------------------------------------start\n    \/\/ \u8bfb\u53d6\u5f53\u524d\u5b89\u88c5\u7684\u5e94\u7528\u7684\u5305\u540d\u3002\n    int findTargetPNameResult = findTargetPName();\n    if(findTargetPNameResult &gt;= 0){\n        int findInstalledPNameResult = readCurrentInstalledPName();\n        if(findInstalledPNameResult &gt;= 0){\n            if (strcmp(dexDumpName, currentInstalledPName) == 0){\n                ALOGE(\"the target pname is same as the current installed pname,prepare to dump\");\n                dumpDexFile(addr,len);\n            }else{\n                ALOGE(\"the target pname is diffrent with the current installed pname,findTargetPNameResult:%s,findInstalledPNameResult:%s\",dexDumpName,currentInstalledPName);\n            }\n        }\n    }\n    \/\/CZAdd-----------------------------------------------------------------end\n    ...\n}\n\n<\/code><\/pre>\n<p><strong>findTargetPName()<\/strong>:\u81ea\u5b9a\u4e49\u65b9\u6cd5\uff0c\u83b7\u53d6\u7528\u6237\u60f3\u8981dump\u7684\u5e94\u7528\u7684\u5305\u540d<br \/>\n<strong>readCurrentInstalledPName()<\/strong>:\u81ea\u5b9a\u4e49\u65b9\u6cd5\uff0c\u8bfb\u53d6\u5f53\u524d\u6700\u8fd1\u5b89\u88c5\u7684\u5e94\u7528\u7684\u5305\u540d\uff0c\u5c31\u662f\u4e0a\u9762\u4fee\u6539PackageManagerService.java\u4fdd\u5b58\u7684\u5305\u540d\u3002<br \/>\n<strong>dumpDexFile()<\/strong>:\u81ea\u5b9a\u4e49\u65b9\u6cd5\uff0cdump\u51fa\u76f8\u5e94\u7684\u5e94\u7528\u7684dex\u6587\u4ef6\u3002<br \/>\n<strong>dvmDexFileOpenPartial()<\/strong>:\u7cfb\u7edf\u6e90\u7801\u7684\u65b9\u6cd5<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%E5%BC%80%E5%A7%8Bdump\"><\/span>\u5f00\u59cbdump<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u7cfb\u7edf\u6e90\u7801\u4fee\u6539\u70e7\u5230\u7cfb\u7edf\u540e\uff0c\u5c31\u53ef\u4ee5\u5f00\u59cb\u6309\u7167\u4e0b\u9762\u7684\u6b65\u9aa4\u6765dump\u4e86\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"1%E7%BC%96%E8%BE%91%E5%B9%B6%E6%8E%A8%E9%80%81%E7%94%A8%E6%88%B7dump%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6\"><\/span>1.\u7f16\u8f91\u5e76\u63a8\u9001\u7528\u6237dump\u914d\u7f6e\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"%E7%BC%96%E8%BE%91%E6%96%87%E4%BB%B6\"><\/span>\u7f16\u8f91\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>want_dump_pname.txt<br \/>\n<img src=\"https:\/\/upload-images.jianshu.io\/upload_images\/18328858-9cbd4d14f91faa5f.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" alt=\"image.png\" \/><br \/>\n\u6ce8\u610f\uff1a\u4e0d\u8981\u5e26\u7a7a\u683c\u6216\u8005\u56de\u8f66\u7b26\u3002<\/p>\n<h4><span class=\"ez-toc-section\" id=\"%E6%8E%A8%E9%80%81%E6%96%87%E4%BB%B6\"><\/span>\u63a8\u9001\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<pre><code class=\"language-bash line-numbers\">adb push \u4f60\u7535\u8111\u7edd\u5bf9\u8def\u5f84\/want_dump_pname.txt   \/data\/system\/tmp\n<\/code><\/pre>\n<p>\u5982\u679c\u6ca1\u6709tmp\u8def\u5f84\uff0c\u5219\u81ea\u5df1\u521b\u5efa\uff0c\u5982\u679c\u521b\u5efa\u6ca1\u6709\u6743\u9650\uff0cchmod 777 \u76f8\u5e94\u7684\u76ee\u5f55\u6216\u8005\u6587\u4ef6\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2%E5%AE%89%E8%A3%85%E8%A6%81dump%E7%9A%84apk\"><\/span>2.\u5b89\u88c5\u8981dump\u7684apk<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u5728framework\u521b\u5efa\u7684test.txt\u6587\u4ef6\uff0c\u7531\u4e8e\u6743\u9650\u7684\u95ee\u9898\uff0c\u5728dalvik\u91cc\u65e0\u6cd5\u8bfb\u53d6\u3002\u6709\u4e24\u79cd\u89e3\u51b3\u529e\u6cd5\uff1a<br \/>\n1.\u5728test.txt\u6587\u4ef6\u521b\u5efa\u540e\uff0c\u53ef\u4ee5chomd 777\u8fd9\u4e2a\u6587\u4ef6\uff0c\u7136\u540e\u518d\u5b89\u88c5apk.<br \/>\n2.framework\u5728\u521b\u5efatest.txt\u7684\u65f6\u5019\uff0c \u7528shell\u811a\u672c\u521b\u5efa\uff08Runtime.execute\uff09\uff0c\u7ed9\u5176\u8db3\u591f\u7684\u6743\u9650\u3002\uff08\u6ca1\u6709\u9a8c\u8bc1\uff09<\/p>\n<h3><span class=\"ez-toc-section\" id=\"3pull_dex%E6%96%87%E4%BB%B6\"><\/span>3.pull dex\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<pre><code class=\"language-bash line-numbers\">adb pull \/data\/system\/tmp\/dump.dex\n<\/code><\/pre>\n<p>\u53ef\u80fd\u4f1a\u63d0\u793a\u201d remote Permission denied\u201c,chmod 777\u8fd9\u4e2a\u6587\u4ef6\u6240\u5728\u7684\u76ee\u5f55\u5373\u53ef\u89e3\u51b3\u3002<\/p>\n<h3><span class=\"ez-toc-section\" id=\"4%E6%89%93%E5%BC%80dex%E6%96%87%E4%BB%B6\"><\/span>4.\u6253\u5f00dex\u6587\u4ef6<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u7528jadx-gui\u6253\u5f00dex\u6587\u4ef6<br \/>\n<img src=\"https:\/\/upload-images.jianshu.io\/upload_images\/18328858-9eba01f67548974b.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" alt=\"image.png\" \/><br \/>\n\u9057\u61be\u7684\u662f\u4ecd\u7136\u662f360\u7684\u58f3\u3002<\/p>\n<p>\u4e0b\u9762\u8fd9\u4e9b\u6587\u7ae0\u8bf4\u660e\u4e86\u95ee\u9898\u6240\u5728<br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/blog.csdn.net\/pinksofts\/article\/details\/82791303\">https:\/\/blog.csdn.net\/pinksofts\/article\/details\/82791303<\/a><br \/>\n<img src=\"https:\/\/upload-images.jianshu.io\/upload_images\/18328858-e58fc03b310bdbab.png?imageMogr2\/auto-orient\/strip%7CimageView2\/2\/w\/1240\" alt=\"image.png\" \/><br \/>\n<a class=\"wp-editor-md-post-content-link\" href=\"https:\/\/www.52pojie.cn\/thread-648311-1-1.html\">https:\/\/www.52pojie.cn\/thread-648311-1-1.html<\/a><br \/>\n360\u5728dex\u52a0\u8f7d\u7684\u65f6\u5019\uff0c\u5e76\u6ca1\u6709\u8c03\u7528dvmDexFileOpenPartial\uff0c\u800c\u662f\u81ea\u5b9e\u73b0\u4e86\u6b64\u51fd\u6570\u7684\u529f\u80fd\uff0c\u56e0\u6b64\u76f4\u63a5\u5728\u8fd9\u4e2a\u51fd\u6570\u4e0a\u4e0b\u65ad\u70b9\u662f\u4e0d\u80fd\u8131\u58f3\u7684\u3002\u5b83\u7684\u5b9e\u73b0\u65b9\u5f0f\u57fa\u672c\u662f\u7167\u6284\u4e86bionic\u6e90\u7801<\/p>\n<p>\u4e0d\u8fc7\u4e0d\u8981\u7070\u5fc3\uff0c\u53ea\u8981\u627e\u5230\u771f\u6b63\u7684\u5185\u90e8dex\u52a0\u8f7d\u7684\u6e90\u7801\u4f4d\u7f6e\uff0c\u5c31\u80fddump\u6210\u529f\u3002<\/p>\n<button class=\"simplefavorite-button\" data-postid=\"4680\" data-siteid=\"1\" data-groupid=\"1\" data-favoritecount=\"0\" style=\"\">\u6536\u85cf <i class=\"sf-icon-star-empty\"><\/i><\/button>","protected":false},"excerpt":{"rendered":"<p>\u672c\u6765\u60f3\u901a\u8fc7https:\/\/blog.csdn.net\/qq1084283172\/article\/de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[218],"tags":[],"_links":{"self":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/4680"}],"collection":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4680"}],"version-history":[{"count":1,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/4680\/revisions"}],"predecessor-version":[{"id":4681,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=\/wp\/v2\/posts\/4680\/revisions\/4681"}],"wp:attachment":[{"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4680"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4680"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/xinyiworld.top\/wordpress_it\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4680"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}