吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3983|回复: 13
收起左侧

[Android 原创] frida实战修改魅族数字健康

[复制链接]
3800104045 发表于 2022-10-13 19:53

安卓逆向系列-Frida实战修改某族数字健康锁定应用时间

1. 介绍

现在很多手机都具有能够控制手机应用运行时长或者允许运行的时间段,例如EMUI就可以将手机直接锁定,在未到设定的时间之前都无法打开应用。魅族Flyme中内置了数字健康能够监控老人、小孩的手机应用运行时长,远程设定应用运行状态,能够规避老人小孩沉迷应用,如下所示。本文利用frida工具修改应用时间成功解除限制。
http://43.135.123.94:8090/upload/2022/10/image-1665655287143.png

2. 需求配置

  • frida 14.2.8
  • jadx
  • flyme系统

    3. 过程

    3.1 找到Class和Activity

    Flyme中的数字健康是设置中的一项,如下所示:
    http://43.135.123.94:8090/upload/2022/10/image-1665655403893.png
    这个要怎么去找他的Class和Activity呢。事实上,魅族的数字健康应用并不在system/app或者system/pri-app里面,根据名字的英文也无法搜索到。

为了快速定位应用包名,我们直接打开应用置于最上层,运行如下代码就能够发现其Class和Activity,代码如下:

adb shell "dumpsys window | grep mCurrentFocus"

结果如下:

http://43.135.123.94:8090/upload/2022/10/image-1665655673394.png

由图可见这个com.meizu.sceneinfo这个就是包名,com.meizu.familyguard.ui.usage.UsageActivity就是Activity的名字。

3.2 找到jar包

这种系统应用的安装包一般会在system/app或者system/pri-app里面,但是去找实际上是找不到的,并不带有ScenInfo之类的关键字。这里我们换个思路,直接从data目录开始寻找,即可找到,代码如下:
ls | grep com.meizu
结果如下,安卓系统为了防止应用报名冲突,会在包名后面自动补充部分base64的字符串,所以com.meizu.base64的报名即是我们想要的。

http://43.135.123.94:8090/upload/2022/10/image-1665659738360.png

进入其中,提取出base.apk,拖入jadx即可开始分析。

3.3 找到关键代码

首先根据Activity的路径找到对应的Activity,定位到UsageActivity代码如下:

http://43.135.123.94:8090/upload/2022/10/image-1665660033016.png

很明显,这只是展示View的地方,而且将当球Activity分成了todayweek也就是今天和近七天两个fragment组件。进入UsageFragment,在onCreate方法中,我们看到一个a方法,如下:

http://43.135.123.94:8090/upload/2022/10/image-1665660539940.png

其他代码都是在创建View,我们进入这个a方法,在a方法中我们可以看到定义了很多个onChanged()方法,猜测这个应该是当屏幕刷新的时候产生的动作,现在很多短视频APP和论坛APP通过这个刷新后续数据。在其中,我们可以看到一个参数是UsingTimeStats方法如下,根据名字来说就比较像使用时间了。
http://43.135.123.94:8090/upload/2022/10/image-1665660827317.png

我们接着进入该类,该类代码如下:

package com.meizu.digitalwellbeing.server.data;

import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.Keep;

@Keep
/* loaded from: classes.dex */
public class UsingTimeStats extends f {
    public static final Parcelable.Creator<UsingTimeStats> CREATOR = new Parcelable.Creator<UsingTimeStats>() { // from class: com.meizu.digitalwellbeing.server.data.UsingTimeStats.1
        /* renamed from: a */
        public UsingTimeStats createFromParcel(Parcel parcel) {
            return new UsingTimeStats(parcel);
        }

        /* renamed from: a */
        public UsingTimeStats[] newArray(int i) {
            return new UsingTimeStats[i];
        }
    };
    private long mUsingTime;

    @Override // com.meizu.digitalwellbeing.server.data.f, android.os.Parcelable
    public int describeContents() {
        return 0;
    }

    public UsingTimeStats() {
    }

    public UsingTimeStats(int i, long j, long j2, long j3) {
        super(i, j, j2);
        setUsingTime(j3);
    }

    /* JADX INFO: Access modifiers changed from: protected */
    public UsingTimeStats(Parcel parcel) {
        super(parcel);
        setUsingTime(parcel.readLong());
    }

    @Override // com.meizu.digitalwellbeing.server.data.f, android.os.Parcelable
    public void writeToParcel(Parcel parcel, int i) {
        super.writeToParcel(parcel, i);
        parcel.writeLong(getUsingTime());
    }

    public long getUsingTime() {
        return this.mUsingTime;
    }

    public void setUsingTime(long j) {
        this.mUsingTime = j;
    }

    @Override // com.meizu.digitalwellbeing.server.data.f
    public String toString() {
        String fVar = super.toString();
        int length = fVar.length();
        return new StringBuilder(fVar).replace(length - 2, length, ", mUsingTime = " + getUsingTime() + " }").toString();
    }
}

根据代码意思,基本可以确定,这就是存放APP的使用时间的类了。

3.4 Hook代码

这里找到的只是其中一个业务相关类,Hook点也有很多,我这里就直接HookgetPackageName()方法,假设我们这里需要修改皮皮虾:com.sup.android.superb软件的运行时间,那么利用frida的hook方法可以写如下代码:

Java.perform(function(){

    var PackageUsingTimeStats = Java.use("com.meizu.digitalwellbeing.server.data.PackageUsingTimeStats");
    console.log("PackageUsingTimeStats:", PackageUsingTimeStats);
    PackageUsingTimeStats.getPackageName.implementation = function(){
        var mPackageName = this.getPackageName();
        var mUsingTime = this.getUsingTime();
        if (mPackageName=="com.sup.android.superb"){
            console.log("detected");
            this.setUsingTime(0);
            mUsingTime = this.getUsingTime();
        }

        console.log("getPackageName:",mPackageName,"===>",mUsingTime);

        return mPackageName;
    }

    console.log("end");
});

hook思路是当匹配到皮皮虾的包名的时候就设定其使用时间为0。

3.5 运行效果

通过注入frida代码,运行效果如下,这里为了显示效果,我将其使用时间方法10000倍。结果如下:
http://43.135.123.94:8090/upload/2022/10/image-1665661378011.png

4. 分析总结

  1. 属于新手级别的hook测试,难度不大,但是是一次分析练手的好机会
  2. hook点就在Activity附近,比较好找,第三方厂家开发的应用不会这么好找
  3. 多用frida找到所有方法,有些方法经过混淆完全找不到

免费评分

参与人数 7威望 +1 吾爱币 +28 热心值 +7 收起 理由
junjia215 + 1 + 1 用心讨论,共获提升!
qtfreet00 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
文西思密达 + 3 + 1 我很赞同!
yyyao2008 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zqtzheng + 1 + 1 用心讨论,共获提升!
mEIhUAlU123 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 3800104045 发表于 2022-10-17 10:33
Hmily 发表于 2022-10-14 10:48
https://www.52pojie.cn/misc.php?mod=faq&action=faq&id=29&messageid=36 看这个方法把图片上传论坛本地贴 ...

主要是直接qq截屏粘贴...没有保存实体图片

点评

你现在点击图片链接过去右键保存不可以吗?  详情 回复 发表于 2022-10-17 10:34
Hmily 发表于 2022-10-14 10:48
https://www.52pojie.cn/misc.php? ... 29&messageid=36 看这个方法把图片上传论坛本地贴到md正文里吧,看这个图床地址,感觉迟早就要挂了。

点评

看了下这个域名,是他/她的博客,连图床都不是…  发表于 2022-10-16 06:27
yyxmm 发表于 2022-10-14 12:54
yiting8 发表于 2022-10-14 15:41
APP 哪里下载呀
zqtzheng 发表于 2022-10-15 00:50
楼主抽空试一下鸿蒙的。不知道没解锁bl能不能够修改成功
se34218 发表于 2022-10-15 16:39
这个好,可以根据自己需求修改
hzwang1966 发表于 2022-10-15 18:03
请问 app 没有加壳么?
nj2004 发表于 2022-10-17 05:48
学习了,感谢分享!
Hmily 发表于 2022-10-17 10:34
3800104045 发表于 2022-10-17 10:33
主要是直接qq截屏粘贴...没有保存实体图片

你现在点击图片链接过去右键保存不可以吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表