当前位置: 首页 > news >正文

内存作假常见方案可行性分析

内存作假通常修改所涉及到的几个文件:

 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	(可用√,总共√)
http://www.dtcms.com/a/326879.html

相关文章:

  • 【15-多类别分类和多标签分类】
  • SSE流式输出分层与解耦、用户自动结束语错误处理
  • 基于FPGA的热电偶测温数据采集系统,替代NI的产品(一)FPGA 测温研究现状
  • 【Python修仙编程】(20) 参悟参数真谛,林羽内力大增
  • 前端工程化:pinia
  • 【Leetcode】随笔
  • 【MATLAB 2025a】安装离线帮助文档
  • 学习嵌入式之IMAX6ULL——GUN工具链+点灯+SDK开发裸机驱动
  • 计算机网络:ovn数据通信都是用了哪些协议?
  • Java String类:不可变性的核心奥秘
  • Evaluation Warning: The document was created with Spire.XLS for Pyth用Python实现Excel转PDF并去除Spire.XLS水印
  • 银河通用招人形机器人强化学习算法工程师了
  • Python 类元编程(类工厂函数)
  • C语言(06)——二、八、十、十六进制的相互转换
  • Webpack Loader 完全指南:从原理到配置的深度解析
  • TRL - Transformer Reinforcement Learning 传递给SFTTrainer的数据集
  • 【linux】企业高性能web服务器
  • 多路转接 select
  • FinQ4Cn: 基于 MCP 协议的中国 A 股量化分析
  • CSS预处理器之Sass全面解析与实战指南
  • PowerDesigner生成带注释的sql方法
  • 腾讯前端面试模拟详解
  • 分享一款基于STC32G12K128单片机的螺丝机供料器控制板 ES-IO2422 S4
  • 浅谈 LangGraph 子图流式执行(subgraphs=True/False)模式
  • [鹧鸪云]光伏AI设计平台解锁电站开发新范式
  • Kubernetes生产环境健康检查自动化指南
  • Centos8系统在安装Git包时,报错:“没有任何匹配: git”
  • 【ros-humble】4.C++写法巡场海龟(服务通讯)
  • 搭建纯竞拍商城的核心技术要点与实施指南
  • 4-下一代防火墙组网方案