// 增强版:获取应用自身SO文件信息(带延迟和更智能的过滤)

// 使用setTimeout设置一个定时器,延迟5秒后执行内部的函数。
// 为什么需要延迟?因为App启动时,并不是所有的SO库都会立即加载。
// 很多库是在用户进行某些操作或App初始化到某个阶段后才动态加载的。
// 延迟执行可以大大增加捕获到所有关键SO库的可能性。
setTimeout(function() {
// Java.perform是Frida的核心函数,它确保我们的代码在应用的Java虚拟机(JVM)上下文中执行。
// 简单来说,所有需要与App的Java代码交互的操作(比如获取包名)都必须放在这里面。
Java.perform(function() {
// 在Frida控制台打印一条开始信息,方便调试和观察脚本执行状态。
console.log("[*] 开始枚举应用自身的SO模块(增强版)...\n"); // 调用Frida的Process.enumerateModules() API。
// 这个API会返回一个数组,包含了当前目标进程加载到内存中的所有模块(.so, .jar, .dex, 可执行文件等)的详细信息。
// 这是我们获取SO信息的基础数据源。
var modules = Process.enumerateModules(); // 初始化两个变量,用于存放后面获取到的应用包名和数据目录。
// 初始值为null,表示我们还未获取到这些信息。
var packageName = null;
var dataDir = null; // 使用try...catch代码块来包裹获取应用信息的代码。
// 为什么?因为在某些特殊情况或attach时机下,获取应用上下文可能会失败并抛出异常。
// try...catch可以捕获这个异常,防止整个脚本因错误而崩溃,并能优雅地切换到备用方案。
try {
// --- 智能过滤的第一步:尝试获取精确的应用信息 --- // 加载Android系统中的'android.app.ActivityThread'这个类。
// 这是一个非常核心的类,可以看作是应用主线程的管理者,通过它可以拿到应用的全局上下文。
var ActivityThread = Java.use("android.app.ActivityThread");
// 调用它的静态方法currentApplication()获取当前应用的Application实例。
var app = ActivityThread.currentApplication(); // 如果成功获取到了Application实例 (app不为null)
if (app) {
// 通过Application实例获取应用的上下文(Context)。Context是访问Android系统功能的“钥匙”。
var context = app.getApplicationContext();
// 从上下文中获取应用的包名,例如 "com.example.myapp"。
packageName = context.getPackageName();
// 从上下文中获取应用的数据目录,通常是 "/data/data/com.example.myapp"。
dataDir = context.getApplicationInfo().dataDir;
// 打印获取到的信息,让我们知道脚本工作正常。
console.log("[*] 检测到应用包名: " + packageName);
console.log("[*] 应用数据目录: " + dataDir + "\n");
} else {
// 如果第一种方法失败了 (比如在某些系统进程中),尝试第二种备用方案。
// 这种方法不常用,且不一定成功,但作为备选可以增加脚本的健壮性。
var activity = Java.use("android.app.Activity");
var currentActivity = activity.$new(); // 尝试创建一个Activity实例
if (currentActivity) {
var context = currentActivity.getApplicationContext();
packageName = context.getPackageName();
dataDir = context.getApplicationInfo().dataDir;
console.log("[*] 检测到应用包名: " + packageName);
console.log("[*] 应用数据目录: " + dataDir + "\n");
} else {
// 如果所有方法都失败了,打印提示信息。
console.log("[!] 无法获取应用上下文,将使用路径启发式过滤方法\n");
}
}
} catch (e) {
// 如果try代码块中发生任何错误,就会执行这里的代码。
console.log("[!] 无法自动检测应用信息: " + e.message);
console.log("[!] 将使用路径启发式过滤方法\n");
} // --- 核心过滤逻辑 ---
// 使用JavaScript的filter方法遍历之前获取的所有模块(modules数组)。
// filter会为每个模块执行一次内部的匿名函数,如果函数返回true,则保留该模块,否则丢弃。
var appSoModules = modules.filter(function(module) {
// **过滤条件1:必须是SO文件**
// 检查模块的路径(path)或名称(name)是否以 ".so" 结尾。如果不是,直接返回false,排除掉。
if (!module.path.endsWith('.so') && !module.name.endsWith('.so')) {
return false;
} // **过滤条件2:排除系统库**
// 定义一个包含常见系统库路径前缀的数组。
var systemPaths = [
"/system/", "/vendor/", "/apex/", "/odm/",
"/product/", "/system_ext/", "/bin/", "/sbin/",
"/data/dalvik-cache/", "/data/misc/", "/data/local/"
]; // 使用some方法检查模块的路径是否包含上面数组中的任何一个系统路径。
// some() 会遍历systemPaths,只要有一个路径前缀在module.path中找到了,它就返回true。
var isSystemLib = systemPaths.some(function(path) {
return module.path.indexOf(path) !== -1;
}); // 如果isSystemLib为true,说明是系统库,返回false,排除掉。
if (isSystemLib) return false; // **过滤条件3:智能判断是否为应用自身SO**
// 如果我们之前成功获取了包名(packageName不为null)
if (packageName) {
// 那么,如果一个SO文件的路径包含了应用的包名(如 /data/app/~~com.example.myapp-xxxx/lib/arm64/libnative.so)
// 或者包含了应用的数据目录(如 /data/data/com.example.myapp/lib/libnative.so)
// 或者位于通用的应用安装目录 /data/app/ 下
// 我们就极有理由相信它是应用自身的SO文件,返回true,保留它。
return module.path.indexOf(packageName) !== -1 ||
module.path.indexOf(dataDir) !== -1 ||
module.path.indexOf("/data/app/") !== -1;
} // **过滤条件4:启发式(Heuristic)过滤**
// 如果没能获取到包名,我们就只能靠“猜”。
// 通常,应用的SO文件会存在于/data/app/或/data/data/目录下。
// 检查路径是否包含这些关键目录,作为判断依据。
// `indexOf("/lib/")` 是一个比较宽泛的补充条件,可能会误伤,但能召回一些特殊情况。
return module.path.indexOf("/data/app/") !== -1 ||
module.path.indexOf("/data/data/") !== -1;
}); // --- 兜底逻辑:防止过滤后列表为空 ---
// 如果经过上面的严格过滤,一个SO文件都没找到(可能是某些特殊应用或过滤规则不适用)
if (appSoModules.length === 0) {
console.log("[!] 未找到应用SO文件,显示所有非系统SO文件:\n");
// 我们就放宽条件,重新进行一次过滤。
appSoModules = modules.filter(function(module) {
// 条件1:必须是SO文件
if (!module.path.endsWith('.so') && !module.name.endsWith('.so')) {
return false;
} // 条件2:只排除系统库
var systemPaths = [
"/system/", "/vendor/", "/apex/", "/odm/",
"/product/", "/system_ext/", "/bin/", "/sbin/",
"/data/dalvik-cache/", "/data/misc/", "/data/local/"
]; // 这里用 "!" 取反,意思是:只要不是系统库,就返回true,保留下来。
return !systemPaths.some(function(path) {
return module.path.indexOf(path) !== -1;
});
});
} // --- 格式化输出结果 ---
// 打印表头。padEnd()是字符串方法,用于在末尾填充空格,使字符串达到指定长度,从而实现列对齐。
console.log("模块名称".padEnd(35) +
"内存起始地址".padEnd(18) +
"大小".padEnd(12) +
"路径");
// 打印一条分隔线,让表格更清晰。
console.log("-".repeat(100)); // 初始化一个变量用于计算所有找到的SO文件的总大小。
var totalSize = 0; // 遍历最终筛选出的appSoModules数组。
appSoModules.forEach(function(module) {
// 从每个module对象中提取需要的信息。
var baseAddress = module.base; // 模块在内存中的起始地址
var size = module.size; // 模块占用内存的大小(字节)
var name = module.name; // 模块的名称 (如 libnative-lib.so)
var path = module.path; // 模块在文件系统中的完整路径
totalSize += size; // 将当前模块的大小累加到总大小中。 // 格式化并打印每一行数据,与表头对齐。
// baseAddress.toString(16) 将地址转换为16进制字符串。
console.log(name.padEnd(35) +
"0x" + baseAddress.toString(16).padEnd(16) +
(size + " B").padEnd(12) +
path);
}); // 打印另一条分隔线。
console.log("-".repeat(100));
// 打印统计结果:总共多少个模块,总大小是多少(同时提供字节和KB两种单位)。
console.log("总计: " + appSoModules.length + " 个模块, " +
totalSize + " 字节 (" + Math.round(totalSize/1024) + " KB)"); // --- 额外信息:按加载顺序显示 ---
// 如果找到了至少一个SO模块
if (appSoModules.length > 0) {
console.log("\n[*] 按加载地址排序:");
// 使用sort方法对模块数组进行排序。
// 排序的规则是比较两个模块(a, b)的基地址(base)。
// a.base.compare(b.base) 会根据地址大小返回-1, 0, 或 1,从而实现升序排列。
// 排序后,列表的顺序就大致对应了SO库被加载到内存中的顺序。
var sortedModules = appSoModules.sort(function(a, b) {
return a.base.compare(b.base);
}); // 遍历排序后的数组,并打印出序号、名称和加载地址。
sortedModules.forEach(function(module, index) {
console.log(" " + (index+1) + ". " + module.name + " @ 0x" +
module.base.toString(16));
});
}
});
}, 5000); // 5000毫秒 = 5秒
 

执行后输出

C:\Users\21558\Downloads\frida_dump-master (2)\frida_dump-master>frida -U -l 2.js -f com.shizhuang.duapp
____
/ _ | Frida 17.2.15 - A world-class dynamic instrumentation toolkit
| (_| |
> _ | Commands:
/_/ |_| help -> Displays the help system
. . . . object? -> Display information about 'object'
. . . . exit/quit -> Exit
. . . .
. . . . More info at https://frida.re/docs/home/
. . . .
. . . . Connected to 2112123AC (id=adb-KCAIKN05L048ZAF-ovuptT._adb-tls-connect._tcp)
Spawned `com.shizhuang.duapp`. Resuming main thread!
[2112123AC::com.shizhuang.duapp ]-> [*] 开始枚举应用自身的SO模块(增强版)... [*] 检测到应用包名: com.shizhuang.duapp
[*] 应用数据目录: Java.Field{holder: ApplicationInfo{a9ca16f com.shizhuang.duapp}, fieldType: 2, fieldReturnType: Ljava/lang/String;, value: /data/user/0/com.shizhuang.duapp} 模块名称 内存起始地址 大小 路径
----------------------------------------------------------------------------------------------------
libGameVMP.so 0x73b9b0a000 454656 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libGameVMP.so
libmmkv.so 0x7347a1b000 532480 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libmmkv.so
libxdl.so 0x734790d000 53248 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libxdl.so
libxcrash.so 0x7347957000 118784 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libxcrash.so
libdulog.so 0x733f092000 114688 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libdulog.so
libshadowhook.so 0x733cc1e000 81920 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libshadowhook.so
liboaid_crash_fixer_so_loader.so 0x733ca23000 36864 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/liboaid_crash_fixer_so_loader.so
libduhook.so 0x733ca8f000 1220608 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libduhook.so
libc++_shared.so 0x733cc5a000 929792 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libc++_shared.so
libxhook.so 0x733cbdd000 53248 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libxhook.so
libxunwind.so 0x733ca50000 69632 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libxunwind.so
libduHA.so 0x733b8c6000 12288 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libduHA.so
libszstone.so 0x733b68d000 2220032 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libszstone.so
libdewuhelper.so 0x733a544000 28672 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libdewuhelper.so
libdusanwa.so 0x733a50f000 139264 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libdusanwa.so
libkbArt.so 0x733a4c0000 114688 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libkbArt.so
libdu_mediacache.so 0x733a216000 2744320 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libdu_mediacache.so
libmonochrome_64.so 0x73701e7000 183156736 B /data/app/~~LsoxdtSgGQhOGoQClL7nGQ==/com.google.android.trichromelibrary_636712333-F1txeyJUk4kuPZelwpCAuQ==/base.apk!/lib/arm64-v8a/libmonochrome_64.so
libnative-crypto-hook.so 0x7311723000 69632 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libnative-crypto-hook.so
libimagepipeline.so 0x7301213000 16384 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libimagepipeline.so
libfbjni.so 0x73011c2000 200704 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libfbjni.so
libduv8.so 0x72c12c1000 15179776 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libduv8.so
libyoga.so 0x72dae0d000 184320 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libyoga.so
libhawk.so 0x72b91c9000 1994752 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libhawk.so
libByteVC1_dec.so 0x729020e000 450560 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libByteVC1_dec.so
libttheif_dec.so 0x7299343000 147456 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libttheif_dec.so
libheif.so 0x72a309f000 65536 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libheif.so
libstatic-webp.so 0x7246f86000 569344 B /data/app/~~YxjKiMfU5GhbqDTDhPhhpw==/com.shizhuang.duapp-f6V4lziH2H4ySLWwb1S4_A==/lib/arm64/libstatic-webp.so
libdu_heif.so 0x7228981000 1806336 B /data/data/com.shizhuang.duapp/files/soloader_x64/libdu_heif.so
libxyp2psdk.so 0x722754a000 3100672 B /data/data/com.shizhuang.duapp/files/soloader_x64/libxyp2psdk.so
libijmdetect_drisk.so 0x7221c63000 1417216 B /data/data/com.shizhuang.duapp/files/soloader_x64/libijmdetect_drisk.so
libdu_security.so 0x7221c12000 172032 B /data/data/com.shizhuang.duapp/files/soloader_x64/libdu_security.so
----------------------------------------------------------------------------------------------------
总计: 32 个模块, 217456640 字节 (212360 KB) [*] 按加载地址排序:
1. libdu_security.so @ 0x7221c12000
2. libijmdetect_drisk.so @ 0x7221c63000
3. libxyp2psdk.so @ 0x722754a000
4. libdu_heif.so @ 0x7228981000
5. libstatic-webp.so @ 0x7246f86000
6. libByteVC1_dec.so @ 0x729020e000
7. libttheif_dec.so @ 0x7299343000
8. libheif.so @ 0x72a309f000
9. libhawk.so @ 0x72b91c9000
10. libduv8.so @ 0x72c12c1000
11. libyoga.so @ 0x72dae0d000
12. libfbjni.so @ 0x73011c2000
13. libimagepipeline.so @ 0x7301213000
14. libnative-crypto-hook.so @ 0x7311723000
15. libdu_mediacache.so @ 0x733a216000
16. libkbArt.so @ 0x733a4c0000
17. libdusanwa.so @ 0x733a50f000
18. libdewuhelper.so @ 0x733a544000
19. libszstone.so @ 0x733b68d000
20. libduHA.so @ 0x733b8c6000
21. liboaid_crash_fixer_so_loader.so @ 0x733ca23000
22. libxunwind.so @ 0x733ca50000
23. libduhook.so @ 0x733ca8f000
24. libxhook.so @ 0x733cbdd000
25. libshadowhook.so @ 0x733cc1e000
26. libc++_shared.so @ 0x733cc5a000
27. libdulog.so @ 0x733f092000
28. libxdl.so @ 0x734790d000
29. libxcrash.so @ 0x7347957000
30. libmmkv.so @ 0x7347a1b000
31. libmonochrome_64.so @ 0x73701e7000
32. libGameVMP.so @ 0x73b9b0a000
[2112123AC::com.shizhuang.duapp ]->

为什么要延时加载,因为so先加载系统库,在记载应用so库,如果直接枚举只有系统so

应用安全 --- frida脚本 之 so枚举的更多相关文章

  1. Android hook神器frida(一)

    运行环境 ● Python – latest 3.x is highly recommended ● Windows, macOS, or Linux安装方法使用命令 sudo pip install ...

  2. MacOS微信逆向分析-Frida

    MacOS微信逆向分析-Frida 0.前言 PC下的微信二次开发相信大家都会了,那么本篇文章将带领大家使用Frida框架对Mac下微信来进行二次开发! PS:还有一种静态注入的方式也不错,但是考虑到 ...

  3. 基于Frida框架打造Art模式下的脱壳工具(OpenMemory)的原理分析

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956614 作者dstmath在看雪论坛公布一个Android的art模式下基 ...

  4. BlackArch-Tools

    BlackArch-Tools 简介 安装在ArchLinux之上添加存储库从blackarch存储库安装工具替代安装方法BlackArch Linux Complete Tools List 简介 ...

  5. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序

    直接切入正题,这是我09年到11年左右业余时间编写的项目,最初的想法很简单,做一个能拖拖拽拽就直接生成应用程序的工具,不用写代码,把能想到的业务操作全部封装起来,通过配置的方式把这些业务操作组织起来运 ...

  6. Siki_Unity_3-6_UI框架 (基于UGUI)

    Unity 3-6 UI框架 (基于UGUI) 任务1&2&3&4:介绍 && 创建工程 UI框架: 管理场景中所有UI面板 控制面板之间的跳转 如果没有UI框 ...

  7. c#操作windows本地账户

    using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices ...

  8. Hook Java API以获得MD5加密前数据

    Java实现MD5加密 在Java中,我们用MD5对数据进行加密,代码大概是这样的: import java.security.MessageDigest; import java.security. ...

  9. 爱伪装(AWZ)/爱立思(ALS)改机改串一键新机原理分析

    简介 爱伪装(AWZ)/爱立思(ALS)是一款iOS越狱系统上的改机工具,可以修改多种系统参数达到伪装设备型号及各种软硬件属性的目的,同时提供了防越狱检测机制,常用于iOS上的推广刷量,配合代理/VP ...

  10. Android微信逆向--实现发朋友圈动态

    0x0 前言 最近一直在研究Windows逆向的东西,想着快要把Android给遗忘了.所以就想利用工作之余来研究Android相关的技术,来保持对Android热情.调用微信代码来发送朋友圈动态一直 ...

随机推荐

  1. Unity 全系列免手机号全球版下载

    低调使用 https://github.com/tylearymf/UniHacker Unity中国

  2. DockQuery x 达梦 国产数据库生态“加速跑”

    「数字化」是当今社会最先进和最具穿透力的生产力,近十年里开展着气势磅礴的发展.而信创产业则是保障中国经济数字化转型平稳健康发展的基础. 随着信创产业规模不断扩大,国产数据库市场释放出前所未有的活力.达 ...

  3. HelpSteer2 与 StackExchange 谁是偏好建模的 “最佳拍档”?

    1.数据基础对比 对比纬度 StackExchange HelpSteer2 数据来源 基于 Stack Overflow.Server Fault 等多个问答社区的真实用户互动内容. 主要来自客户支 ...

  4. debian13+山泽USB蓝牙适配器5.3-成功

    在 Debian 上使用蓝牙适配器连接手机(如 Android 或 iPhone)的步骤如下: 1. 准备工作 1.1 确保蓝牙适配器正常工作 lsusb | grep -i bluetooth # ...

  5. mybatis查询报错java.lang.IndexOutOfBoundsException

    sql单独执行正确,但是mybatis查询报错,部分错误信息如下: org.mybatis.spring.MyBatisSystemException: nested exception is org ...

  6. [题解]P9755 [CSP-S 2023] 种树

    P9755 [CSP-S 2023] 种树 迟来的补题 本题是让最小化所有树长到指定高度日期的最大值,于是想到二分答案. 那么,对于一个给定的期限\(x\),如何判断是否能在这个日期内完成任务呢? 首 ...

  7. UVA12802 题解

    本蒟蒻的第一篇题解. 这道题的核心就是判断一个整数是不是回文质数. 如何判断质数? 灰常简单,我们只需要这样的几行代码: bool is_prime(int x) { if (x <= 1) r ...

  8. 【QML】file::///C:/....理解

    在Qt中,当使用QML的FileDialog组件时,返回的fileUrl属性是一个QUrl类型的对象,它表示文件的URL.这个URL的格式是"file:///"加上文件的绝对路径( ...

  9. 使用Process Explorer/Process Hacker和Windbg高效排查软件高CPU占用问题

    https://blog.csdn.net/chenlycly/article/details/134180480

  10. 减少Spring boot启动内存(开发环境)

    在学习cloud的过程中,因为启动了多个服务,发现电脑(8G内存)卡成狗啦....看下图: 想到每个服务都只是简单的使用了cloud的功能,内存怎么会这么大呢?头疼 扒拉扒拉一大堆文章后 大佬们给出了 ...