当前位置: 首页 > 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.lryc.cn/news/618107.html

相关文章:

  • MySQL,Redis重点面试题
  • 最短路问题从入门到负权最短路
  • 基于51单片机指纹识别管理门禁密码锁系统设计
  • 集成电路学习:什么是URDF Parser统一机器人描述格式解析器
  • 19.Linux DHCP服务
  • 数据结构:串、数组与广义表
  • 【Leetcode】随笔
  • 每日算法刷题Day61:8.11:leetcode 堆11道题,用时2h30min
  • 普通大学本科生如何入门强化学习?
  • 【ros-humble】4.C++写法巡场海龟(服务通讯)
  • Linux运维学习第十四周
  • 【3D Gen 入坑(1)】Hunyuan3D-Paint 2.1 安装 `custom_rasterizer` 报错完整排查
  • PyTorch基础(使用Numpy实现机器学习)
  • Vue 中的 Class 与 Style 绑定详解2
  • ubuntu24.04设置登陆背景图片
  • Pytest项目_day12(yield、fixture的优先顺序)
  • Web安全自动化测试实战指南:Python与Selenium在验证码处理中的应用
  • 【openEuler构建测试环境或部署嵌入式系统】openEuler生态扩容新路径:内网穿透工具cpolar助力多场景落地
  • Linux-FTP服务器搭建
  • 多路转接 select
  • 【数据结构入门】二叉树(1)
  • IoT/实现和分析 NB-IoT+DTLS+PSK 接入华为云物联网平台IoTDA过程,总结避坑攻略
  • 智能合约执行引擎在Hyperchain中的作用
  • 快速搭建前端playwright工程
  • FinQ4Cn: 基于 MCP 协议的中国 A 股量化分析
  • Java -- 集合 --Collection接口和常用的方法
  • Python网络爬虫(一) - 爬取静态网页
  • 爬虫与数据分析结合:中国大学排名案例学习报告
  • TDengine IDMP 基本功能(2.数据建模)
  • 爬虫与数据分析结和