手机ROM,RAM作假显示

本文介绍了如何通过修改手机内核代码和应用程序来实现手机ROM和RAM内存大小的虚假显示。具体涉及修改内核文件`/kernel-3.10/fs/statfs.c`中的函数,以及调整Android系统的`ProjectManager.java`来控制不同UI下的内存显示。通过创建和读取特定文件,可以实现内存大小的伪装,从而改变用户在Settings、Manage apps和文件管理器中看到的内存信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                           设置手机存储作假统一切换指令及接口

修改一套UI下的内存显示大小,Rom的显示是由"/system/private/.space"和"/system/private/.spaceinfo"的值控制的

一:电脑端
1.确定电脑端默认Rom大小
a. 打开 /kernel-3.10/fs/statfs.c 。(该文件无法使用项目宏,可做分支)

查看 logonum[] 的值是否为:"/proc/env_logo_id" ,与 /frameworks/base/core/java/android/os/ProjectManager.java中
writeLogoId(int value)方法的文件路径要一样。

b.
注意一下变量 :
static char filepath[] = "/system/private/.space";
static char realfilepath[] = "/system/private/.spaceinfo";
static char logonum[] = "/proc/env_logo_id";

缓存的大小 : static char buf[16];

c.读取logoid的方法 : static int zhanFan_readLogo(char *path)


d.在user_statfs(const char __user *pathname, struct kstatfs *st)函数中修改,包括默认UI或指定UI下的Rom,方法如下

int user_statfs(const char __user *pathname, struct kstatfs *st)
{
    struct path path;
    int error;
    unsigned int lookup_flags = LOOKUP_FOLLOW|LOOKUP_AUTOMOUNT;
retry:
    error = user_path_at(AT_FDCWD, pathname, lookup_flags, &path);
    if (!error) {
        error = vfs_statfs(&path, st);
        path_put(&path);
        if (retry_estale(error, lookup_flags)) {
            lookup_flags |= LOOKUP_REVAL;
            goto retry;
        }
    }


    int type = -1;
    u64 customizedSize128G = 128*1024;
    u64 customizedSize64G = 64*1024;
    u64 customizedSize32G = 32*1024;
    u64 customizedSize16G = 16*1024;
    u64 customizedSize8G = 8*1024;
    u64 customizedSize4G = 4*1024;
    u64 asize = 1024;
    u64 bsize = 4096;
    u64 orgblocks = st->f_blocks;//手机的真实Rom大小
    char *filterpath = "/mnt/shell/emulated";
    if (strcmp(pathname,"/data/log_temp/boot/") != 0){
        printk("zhanfan orgblocks = %lld \n",orgblocks);//真实Rom大小
        printk("zhanfan st->f_bsize = %ld \n",st->f_bsize);//区块大小
        printk("zhanfan st->f_bfree = %lld \n",st->f_bfree);//真实可用Rom大小
        printk("zhanfan st->f_bavail = %lld \n",st->f_bavail);
    }

if (strcmp(pathname,filterpath) == 0
        || strcmp(pathname,"/data") == 0
        || strcmp(pathname,"/data/media") == 0
        || strcmp(pathname,"/storage/sdcard0") == 0){
        zhanFan_getNameByPid(sys_getpid(),cmdlinebuff,pnamebuff,sizeof(cmdlinebuff));
        if (zhanFan_checkPIDName(pnamebuff) && zhanFan_readSpaceFile() != 1 ){
            type = zhanFan_readSpaceFile();  //读取".space"文件,获得数据比较运算,反馈给电脑端作假后的Rom值
            if (type == 4){
                st->f_blocks = (customizedSize4G*asize*asize/bsize);
            }else if (type == 8){
                st->f_blocks = (customizedSize8G*asize*asize/bsize);
            }else if (type == 16){
                st->f_blocks = (customizedSize16G*asize*asize/bsize);
            }else if (type == 32){
                st->f_blocks = (customizedSize32G*asize*asize/bsize);
            }else if (type == 64){
                st->f_blocks = (customizedSize64G*asize*asize/bsize);
            }else if (type == 128){
                st->f_blocks = (customizedSize128G*asize*asize/bsize);
            }else{
                    if( zhanFan_readLogoFile() == -1 || zhanFan_readLogoFile() == 12){//默认UI时logoid为-1  
                        if((st->f_blocks > 0) && (st->f_blocks < (customizedSize4G*asize*asize/bsize))) {//真实Rom在0到4G之间
                            st->f_blocks = (customizedSize4G*asize*asize/bsize);
                        } else if((st->f_blocks > (customizedSize4G*asize*asize/bsize)) && (st->f_blocks < (customizedSize8G*asize*asize/bsize))) {
                            st->f_blocks = (customizedSize8G*asize*asize/bsize);
                        }  
                    } else if(zhanFan_readLogoFile() == 21){//UI_21时 返回16G
                        st->f_blocks = (customizedSize16G*asize*asize/bsize);
                    } else if(zhanFan_readLogoFile() == 22){//UI_22时 返回16G
                        st->f_blocks = (customizedSize64G*asize*asize/bsize);
                    } else {
                        st->f_blocks = (customizedSize8G*asize*asize/bsize);
                    }
                printk("zhanfan st->f_blocks = %lld \n",st->f_blocks);//查看作假Rom的大小
                printk("zhanfan zhanFan_readLogoFile() = %d \n",zhanFan_readLogoFile());//查看logo_id
            }

            u64 result = 0;
            result = st->f_blocks - orgblocks;//作假Rom和真实Rom的差值给可用内存做补指
            st->f_bfree += result;//作假Rom可用内存
            st->f_bavail += result;
        }
    }
    
    以上方法解析: 以上是对可用内存做减法运算,显示可用内存很大
                orgblocks : 手机的真实Rom大小
                zhanFan_readLogoFile() == -1 默认UI时logoid为-1
                
                一下是对可用内存做乘法运算,显示可用内存根据作假总Rom的变化而变化
                /*
                    u64 result = 0;
                    result = st->f_blocks;
                    do_div(result,orgblocks);//算出真实Rom和作假Rom的比值
                    st->f_bfree = st->f_bfree*result;//真实可用Rom乘上比值,获得作假可用Rom
                    st->f_bavail = st->f_bavail*result;
                 */
               
e.
编译 : make kernel
然后 : make bootimage
烧入手机

二:统一切换指令

a.打开/frameworks/base/core/java/android/os/ProjectManager.java
    /**
     * Rom ;文件不存在时,获取各分支或UI 下的Rom默认值大小,
     * 没有文件时,参与统一切换指令的显示方法,
     * 要与/kernel-3.10/fs/statfs.c中各UI的默认值保持一致
     * ROM 1 (真实), 4 (4G),8 (8G) ,16(16G) ,32(32G),64(64G),128(128G) 没文件时读到 8
     *
     */
    private static final String INTERNAL_DIR = "/system/private/";
    private static final String SPACE_FILE_NAME = ".space";
    public static int getRomSpace(){
        byte rom_flag = 0;
        File rom_File = new File(INTERNAL_DIR,SPACE_FILE_NAME);
        //if file not exist,first write
        if(!rom_File.exists()){
            if(FeatureOption.CUSTOM_PROJECT_C && isUi22() ){
                return 128;//返回 默认128G
            } else if(FeatureOption.CUSTOM_PROJECT_B ){
                return 64;//返回 默认64G
            } else if( FeatureOption.CUSTOM_PROJECT_A && isUi13() ) ){
                return 32;//返回 默认32G
            } else if( FeatureOption.CUSTOM_PROJECT_A && isUi17() ){
                return 16;//返回 默认16G
            } else if(FeatureOption.CUSTOM_PROJECT_C && isUi12() ){
                if(getRealBigToailSpace()){//根据判断返回 4G / 8G
                    return 8;//返回 默认8G
                }
                return 4;//返回 默认4G
            }
            return 8;
        }
        try {
            FileInputStream fis = new FileInputStream(rom_File);
            rom_flag = (byte)fis.read();
            fis.close();
        } catch (Exception e) {
            Log.e(TAG,"readRomSpace e " + e.toString());
        }
        Log.e(TAG,"space="+rom_flag);
        return (int)rom_flag;
    }
    
    
    /**
     * getTrueRomValue
     * 是否大于4G 大于时 返回 1 小于4G时 返回 0;
     *
     */
    public static int getTrueRomValue() {
        // 获取可用磁盘大小类
        StatFs statFs = new StatFs(Environment.getDataDirectory().getAbsolutePath());
        // 获取可用区块的个数<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值