android存储作假通杀补丁(64GB作假128GB)(非boot-gki.img)

张开发
2026/4/17 16:38:48 15 分钟阅读

分享文章

android存储作假通杀补丁(64GB作假128GB)(非boot-gki.img)
修改如下diff--git a/makepac.sh b/makepac.sh index b0b0dea86b4..6f01f22e438100755---a/makepac.shb/makepac.sh -140,7140,7if[-e$code_path/incar.ini];then echo build_version : ${build_version}if[[${build_variant}user${build_version}gms]];thenif[[$project_name~ums312]];then-BOOTboot-gki.imgBOOTboot.imgchangeconfigfileBOOTfielsediff--git a/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c b/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c index2a37f9f3dba..235270f58cc100644---a/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.cb/vnd/bsp/kernel5.15/kernel5.15/fs/statfs.c -11,611,109#includelinux/compat.h#includeinternal.h//add by lyw#includelinux/path.h#includelinux/device-mapper.h#includelinux/string.h#includelinux/kernel.h//add end#define INCAR_TARGET_SIZE128/** * get_dm_name_for_mountpoint - 获取挂载点对应的设备映射名称 * add by lyw * * mountpoint: 挂载点路径如 /data * dm_name: 输出参数返回设备名称需调用方释放内存 * * 返回值0 成功负数错误码 */staticintget_dm_name_for_mountpoint(constchar*mountpoint,char**dm_name){structpathpath;structmapped_device*mdNULL;intret0;constchar*nameNULL;// 初始化输出参数*dm_nameNULL;// 1. 解析挂载点路径if(kern_path(mountpoint,LOOKUP_FOLLOW,path)){ret-ENOENT;// 路径不存在gotoout;}// 2. 检查是否为设备映射设备主设备号 253// if (MAJOR(path.dentry-d_sb-s_dev) ! DM_MAJOR) {// ret -ENODEV; // 不是DM设备// goto out_path;// }// 3. 获取设备映射对象mddm_get_md(path.dentry-d_sb-s_dev);if(!md){ret-ENODEV;gotoout_path;}// 4. 复制设备名称namedm_device_name(md);*dm_namekstrdup(name,GFP_KERNEL);if(!*dm_name){ret-ENOMEM;// 内存不足gotoout_md;}out_md:dm_put(md);// 释放设备映射引用out_path:path_put(path);// 释放路径引用out:returnret;}/** * 字符串转数字 * add by lyw * * param str */staticintsafe_atoi(char*str){intval;intretkstrtoint(str,10,val);// 十进制转换if(ret0){// 处理错误: -EINVAL(无效输入) 或 -ERANGE(溢出)return-1;}returnval;// 返回有效整数}/** * 提取dm-51中-后面的数字 * 提取254:51中:后面的数字 * add by lyw * * param str aaa * return 提取成功返回正确值不成功返回负数 */staticintextract_number(char*str){// 查找 - 字符的位置char*dash_pos;//判断str这个字符串是否包含字符-if(strstr(str,-)!NULL){dash_posstrchr(str,-);}elseif(strstr(str,:)!NULL){dash_posstrchr(str,:);}else{return-2;}// 如果找不到 - 或 - 在字符串末尾if(!dash_pos||!*(dash_pos1)){//fprintf(stderr, 未找到有效数字\n);return-1;// 错误码}// 移动到 - 后的第一个字符dash_pos;// 提取数字部分并转换为整数returnsafe_atoi(dash_pos);}staticintflags_by_mnt(intmnt_flags){intflags0;-56,6159,19staticintstatfs_by_dentry(structdentry*dentry,structkstatfs*buf){intretval;intmultiple1;intbk_size0;inttemp_size0;intclosest_size0;inthighestBit0;//add by lywchar*dm_nameNULL;intret;intvalue1;intvalue2;//add endif(!dentry-d_sb-s_op-statfs)return-ENOSYS;-64,6180,63staticintstatfs_by_dentry(structdentry*dentry,structkstatfs*buf)if(retval)returnretval;retvaldentry-d_sb-s_op-statfs(dentry,buf);//add by lyw//adb shell df -h /data//OTA升级前: /dev/block/dm-51//--/dev/block/dm-51 103G 2.6G 100G 3% /data//--/dev/fuse 59G 1.0M 59G 1% /storage/E913-1703//OTA升级后重启 /dev/block/dm-72//OTA升级后恢复出厂设置(多次恢复数字不变) /dev/block/dm-58//新判断条件分区大小大于112GB,且包含dm-,排除/storage/emulated//printk(**lyw-128G current s_id is /data device s_id: %s\n, dentry-d_sb-s_id);//strncmp第三个参数为要比较的最大字符数如果相等则返回0if(!strncmp(dentry-d_sb-s_id,dm-,3)){//如果路径包含dm-/** * 50GB转换成16进制为0xC80000000 * long value 50 * 1024 * 1024 * 1024L; * String hexString Long.toHexString(value); * System.out.println(hex hexString);//hex c80000000 */if(0xC80000000((buf-f_blocks)*(buf-f_bsize))){//并且容量大于50GB// 调用查询函数retget_dm_name_for_mountpoint(/data,dm_name);//精确查询/data路径对应的dm_name规避sdcard也作假问题if(ret){//printk(**lyw-128G Query failed: %d\n, ret);}else{//**lyw-128G Query success /data dm_name: 254:51//printk(**lyw-128G Query success /data dm_name: %s\n, dm_name);// 使用后必须释放内存kfree(dm_name);//方法1value1extract_number(dm_name);value2extract_number(dentry-d_sb-s_id);if(value10value20value1value2){//**lyw-128G current s_id is /data device: dm-51//printk(**lyw-128G current s_id is /data device s_id: %s\n, dentry-d_sb-s_id);//----------原作假逻辑--------------bk_size((buf-f_blocks)*(buf-f_bsize))/1024/1024/1024;temp_sizebk_size;while(temp_size0){temp_sizetemp_size1;highestBit;}closest_size1highestBit;if(closest_sizeINCAR_TARGET_SIZE){multipleINCAR_TARGET_SIZE/closest_size;}buf-f_blocksbuf-f_blocks*multiple;buf-f_bfreebuf-f_bfree*multiple;buf-f_bavailbuf-f_bavail*multiple;//----------原作假逻辑--------------}}}}//add endif(retval0buf-f_frsize0)buf-f_frsizebuf-f_bsize;returnretval;diff--git a/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c b/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c index fdb334ad4b9..994922e02e9100644---a/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.cb/vnd/bsp/kernel5.15/kernel5.15/mm/page_alloc.c -6181,136181,13longsi_mem_available(void)if(available0)available0;-returnavailable;returnavailable*2;}EXPORT_SYMBOL_GPL(si_mem_available);voidsi_meminfo(structsysinfo*val){-val-totalramtotalram_pages();val-totalramtotalram_pages()*2;//运行内存作假4GB--8GBval-sharedramglobal_node_page_state(NR_SHMEM);val-freeramglobal_zone_page_state(NR_FREE_PAGES);val-bufferramnr_blockdev_pages();diff--git a/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini b/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini index900c1c49eaa..720a78f2356100755---a/vnd/vendor/sprd/release/pac_config/ums312_2h10.inib/vnd/vendor/sprd/release/pac_config/ums312_2h10.ini -468,7468,7 DSP_LTE_CDMA1./vendor/sprd/release/unisoc_bin/4g_modem_22b/sharkl5_c2k/sharkl5 DFS1./bsp/sensorhub/public/build/sharkl5_cm4/sharkl5_cm4.bin Modem_GNSS1./vendor/sprd/release/unisoc_bin/gnss_20b_new/marlin3lite/marlin3lite_gnss_cm4_builddir/gnssmodem.bin Modem_WCN1./vendor/sprd/release/unisoc_bin/marlin3_20a/sc2355_marlin3_lite_ab_builddir/EXEC_KERNEL_IMAGE.bin-BOOT1./out/target/product/ums312_2h10/boot-gki.imgBOOT1./out/target/product/ums312_2h10/boot.img DTBO1./out/target/product/ums312_2h10/dtbo.img Super1./out/target/product/ums312_2h10/super.img UserData1./out/target/product/ums312_2h10/userdata.img可能会涉及到的几个修改文件sys\packages\apps\Settings\src\com\android\settings\deviceinfo\TopLevelStoragePreferenceController.java sys\frameworks\base\packages\SettingsLib\src\com\android\settingslib\deviceinfo\PrivateStorageInfo.java sys\frameworks\base\packages\SettingsLib\src\com\android\settingslib\deviceinfo\StorageManagerVolumeProvider.java sys\packages\apps\Settings\src\com\android\settings\deviceinfo\storage\StorageUsageProgressBarPreferenceController.java sys\frameworks\base\core\java\android\app\usage\StorageStatsManager.java sys\frameworks\base\services\usage\java\com\android\server\usage\StorageStatsService.java sys\frameworks\base\core\java\android\os\storage\StorageManager.java sys\frameworks\base\services\core\java\com\android\server\StorageManagerService.java sys\frameworks\base\core\java\android\os\StatFs.javaStorageUsageProgressBarPreferenceController.java--longtotalBytesmStorageStatsManager.getTotalBytes(mStorageEntry.getFsUuid());StorageStatsManager.java--returnmService.getTotalBytes(convert(storageUuid),mContext.getOpPackageName());StorageStatsService.java--场景一(小于等于512GB)finallongroundedUserspaceBytesmStorage.getPrimaryStorageSize();--场景二(大于512GB)finallongtotalBytesmStorage.getInternalStorageBlockDeviceSize();StorageManager.java--场景一(小于等于512GB)returnFileUtils.roundStorageSize(Environment.getDataDirectory().getTotalSpace()Environment.getRootDirectory().getTotalSpace());--场景二(大于512GB)returnmStorageManager.getInternalStorageBlockDeviceSize();StorageManagerService.java

更多文章