內存作假通常修改所涉及到的幾個文件:
M sys/frameworks/base/core/java/android/app/ActivityManager.javaM sys/frameworks/base/core/jni/android_os_Debug.cppM sys/frameworks/base/core/jni/android_util_Process.cppM sys/frameworks/base/services/core/java/com/android/server/am/ProcessList.javaM vnd/bsp/kernel5.15/kernel5.15/fs/proc/meminfo.cM vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c
我們需要過的檢測app包括如下幾款:
安兔兔、魯大師、白眼、AIDA64、CPU X、CPU-Z、DevCheck、DeviceInfoHW
1、修改ActivityManager.java
--- a/sys/frameworks/base/core/java/android/app/ActivityManager.java
+++ b/sys/frameworks/base/core/java/android/app/ActivityManager.java
@@ -3438,8 +3438,8 @@ public class ActivityManager {public void writeToParcel(Parcel dest, int flags) {dest.writeLong(advertisedMem);
- dest.writeLong(availMem);
- dest.writeLong(totalMem);
+ dest.writeLong(availMem * 3);//運行內存作假:4GB-->12GB
+ dest.writeLong(totalMem * 3);
結果:
安兔兔 (可用√,總共√)
魯大師 (可用√,總共×)
白眼 (可用×,總共×)上面不行,下面行
AIDA64 (可用×,總共×)
CPU X (可用√,總共√)
CPU-Z (可用,總共)
DevCheck (可用×,總共×)
DeviceInfoHW (可用√,總共√)
2、修改android_os_Debug.cpp
--- a/sys/frameworks/base/core/jni/android_os_Debug.cpp
+++ b/sys/frameworks/base/core/jni/android_os_Debug.cpp
@@ -444,6 +444,11 @@ static void android_os_Debug_getMemInfo(JNIEnv *env, jobject clazz, jlongArray ocontinue;}outArray[i] = mem[i];
+ if (i == MEMINFO_TOTAL || i == MEMINFO_FREE || i == MEMINFO_AVAILABLE) {
+ outArray[i] = mem[i] * 3;//內存作假:4GB-->12GB
+ } else {
+ outArray[i] = mem[i];
+ }}
結果:
安兔兔 (可用×,總共×)
魯大師 (可用×,總共×)
白眼 (可用×,總共×)上面不行,下面也不行
AIDA64 (可用×,總共×)
CPU X (可用×,總共×)
CPU-Z (可用×,總共×)
DevCheck (可用×,總共×)
DeviceInfoHW (可用×,總共×)
3、修改android_util_Process.cpp
--- a/sys/frameworks/base/core/jni/android_util_Process.cpp
+++ b/sys/frameworks/base/core/jni/android_util_Process.cpp
@@ -684,7 +684,7 @@ static jlong android_os_Process_getFreeMemory(JNIEnv* env, jobject clazz)jlong sum = 0;std::for_each(mem.begin(), mem.end(), [&](uint64_t val) { sum += val; });
- return sum * 1024;
+ return sum * 1024 * 3;}static jlong android_os_Process_getTotalMemory(JNIEnv* env, jobject clazz)
@@ -695,7 +695,7 @@ static jlong android_os_Process_getTotalMemory(JNIEnv* env, jobject clazz)return -1;}- return static_cast<jlong>(si.totalram) * si.mem_unit;
+ return static_cast<jlong>(si.totalram) * si.mem_unit * 3;//內存作假:4GB-->12GB}
結果:
安兔兔 (可用√,總共√)
魯大師 (可用√,總共×)
白眼 (可用×,總共×)上面不行,下面行
AIDA64 (可用×,總共×)
CPU X (可用√,總共√)
CPU-Z (可用√,總共×)
DevCheck (可用×,總共×)
DeviceInfoHW (可用√,總共√)
4、修改ProcessList.java
--- a/sys/frameworks/base/services/core/java/com/android/server/am/ProcessList.java
+++ b/sys/frameworks/base/services/core/java/com/android/server/am/ProcessList.java
@@ -1795,8 +1795,8 @@ public final class ProcessList {final long homeAppMem = getMemLevel(HOME_APP_ADJ);final long cachedAppMem = getMemLevel(CACHED_APP_MIN_ADJ);outInfo.advertisedMem = getAdvertisedMem();
- outInfo.availMem = getFreeMemory();
- outInfo.totalMem = getTotalMemory();
+ outInfo.availMem = getFreeMemory() * 3;
+ outInfo.totalMem = getTotalMemory() * 3;//內存作假:4GB-->12GBoutInfo.threshold = homeAppMem;
結果:
安兔兔 (可用√,總共√)
魯大師 (可用√,總共×)
白眼 (可用×,總共×)上面不行,下面行
AIDA64 (可用×,總共×)
CPU X (可用√,總共√)
CPU-Z (可用√,總共×)
DevCheck (可用×,總共×)
DeviceInfoHW (可用√,總共√)
5、修改meminfo.c
--- a/vnd/bsp/kernel5.15/kernel5.15/fs/proc/meminfo.c
+++ b/vnd/bsp/kernel5.15/kernel5.15/fs/proc/meminfo.c
@@ -55,9 +55,9 @@ static int meminfo_proc_show(struct seq_file *m, void *v)sreclaimable = global_node_page_state_pages(NR_SLAB_RECLAIMABLE_B);sunreclaim = global_node_page_state_pages(NR_SLAB_UNRECLAIMABLE_B);- show_val_kb(m, "MemTotal: ", i.totalram);
- show_val_kb(m, "MemFree: ", i.freeram);
- show_val_kb(m, "MemAvailable: ", available);
+ show_val_kb(m, "MemTotal: ", i.totalram * 3);//運行內存作假:4GB-->12GB
+ show_val_kb(m, "MemFree: ", i.freeram * 3);
+ show_val_kb(m, "MemAvailable: ", available * 3);
結果:
安兔兔 (可用×,總共×)
魯大師 (可用√,總共√)
白眼 (可用×,總共×)上面行,下面不行
AIDA64 (可用×,總共×)
CPU X (可用×,總共×)
CPU-Z (可用√,總共√)
DevCheck (可用×,總共×)
DeviceInfoHW (可用×,總共×)
6、修改page_alloc.c
--- a/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c
+++ b/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c
@@ -6177,13 +6177,13 @@ long si_mem_available(void)if (available < 0)available = 0;
- return available;
+ return available * 3;}EXPORT_SYMBOL_GPL(si_mem_available);void si_meminfo(struct sysinfo *val){
- val->totalram = totalram_pages();
+ val->totalram = totalram_pages() * 3;//運行內存作假:4GB-->12GB
結果:
安兔兔 (可用√,總共√)
魯大師 (可用√,總共√)
白眼 (可用√,總共√)
AIDA64 (可用√,總共√)
CPU X (可用√,總共√)
CPU-Z (可用√,總共√)
DevCheck (可用√,總共√)
DeviceInfoHW (可用√,總共√)