Pure Clean Master 保活与拉活反编译代码册
Pure Clean Master 保活与拉活反编译代码册返回竞品库
报告口径本页直接渲染本地报告真源;静态能力、动态观察、推断和线上未验证项不得互相替代。

Pure Clean Master 保活与拉活反编译代码册#

文档日期:2026-10-12
样本:com.pureclean.smartfile.master,APK 1.1.8(19)。
S1=静态事实,I=合理推断,U=未验证。未操作测试机。
下面代码均为对反编译结果的去混淆、去日志、去异常包装后的等价摘录/伪代码,用于开发快速理解;不是原始源码。精确证据必须回查所列文件与行号。密钥、SDK Token 和无关混淆常量已省略。

一、总体调用图#

ContentProvider WpCyBN.onCreate
  └─ tm.a(context)
      ├─ w61.a()                    创建 3 个通知 Channel
      ├─ md.a()                     尝试启动 gXXfik 前台服务
      │   └─ 失败 → Job 3857 / PsaeNNErXb
      ├─ qu3.e()                    每日 10:00 Alarm → BpFZcYhmZ
      ├─ 注册系统事件 Receiver
      ├─ ac3.a()                    Job 3432 / sToBblBqZa,15 分钟自续约
      └─ q41.d()                    WorkManager,15 分钟周期

BOOT/MY_PACKAGE_REPLACED ─┐
Alarm Receiver ───────────┤
JobService / Worker ──────┤→ md.a() + ep3.d()
FCM message ──────────────┘            └─ 1 秒后 AUTO 通知策略

系统事件/文件变化/业务阈值
  └─ x22.a(scene, callback)
      └─ vn 统一门控/频控
          └─ callback 组文案
              └─ t22.e/f → notify(8194)
                  └─ OutOpenActivity → SplashActivity → p71 路由工具页

二、发现范围#

本册覆盖本样本中发现的 App 自有保活/拉活方法:

  1. 初始化 Provider 与回调配置;
  2. 前台服务及失败 Job;
  3. 周期 Job、WorkManager、Alarm;
  4. 开机/升级/Alarm/系统事件 Receiver;
  5. FCM 入口;
  6. 常驻通知;
  7. AUTO 召回、统一通知门控、发布、重复和点击回跳。

Google/Firebase/AndroidX/广告 SDK 自带的 Job/Receiver 不列为“App 自有保活代码”;Manifest 中能看到它们,但不能外推为 App 主动保活策略。(S1)

三、初始化层#

3.1 KeepCallbackImp:参数与 Channel 常量#

源码:jadx/sources/com/ai/smart/notify/KeepCallbackImp.java:11-25

final class KeepCallbackImp extends KeepCallbackBase {
    static final Pair RESIDENT = ("channel_id_resident", "resident");
    static final Pair REMIND = ("channel_id_remind", "remind");
    static final Pair REMIND_SILENT = ("channel_id_remind_silence", "remind_silence");
    static final int RESIDENT_NOTIFICATION_ID = 1;

    KeepCallbackImp() {
        dailyAlarmTime = "10:00";   // 解码值
        jobIntervalMinutes = 15;
        workIntervalMinutes = 15;
    }
}

状态:S1。10:00 为解码后的静态值。

3.2 WpCyBN.onCreate():进程级自动初始化#

源码:jadx-targeted/WpCyBN.java:76-179。标准模式在 jadx/sources/com/ai/smart/WpCyBN.java:47-52 失败,因此使用 simple 定点恢复。

boolean onCreate() {
    Context context = getContext();
    if (context == null) return true;

    staticContext = context.getApplicationContext();
    if (!packageDigestMatchesAllowedValue(context.getPackageName())) return false;

    readDebugFlagFromSharedPreferences();
    KeepCallbackBase callback = reflectCallbackFromManifestMetadata("jpobwy");
    if (callback == null) return false;
    Global.keepCallback = callback;

    if (staticContext instanceof Application app) {
        app.registerActivityLifecycleCallbacks(ProcessActivityCounter.INSTANCE);
    }
    Adjust.getAttribution(...);
    Adjust.getAdid(...);
    launchAsyncInit(...);
    tm.a(context);
    return true;
}

状态:S1 主干;simple 恢复可能丢失异常边(U)。

3.3 tm.a(Context):总编排#

源码:jadx/sources/defpackage/tm.java:29-103

static void initKeepAlive(Context context) {
    w61.a(context);                         // 创建通知 Channels
    if (!hasNotificationPermission(context)) return;

    if (!keepInitDone) {
        keepInitDone = true;
        md.a();                             // 前台服务
        qu3.e(context);                     // 每日 Alarm
        registerSystemEventReceivers(context);
        registerBootAndPackageReplaceReceivers(context);
        ac3.a(context);                     // Job 3432
    }

    if (!workInitDone) {
        q41.d(context);                     // 周期 WorkManager
        workInitDone = true;
    }
}

状态:S1。这里的门槛可由 k82.a() 还原为通知能力:API 33+ 检查 POST_NOTIFICATIONS,更低版本检查 NotificationManager.areNotificationsEnabled()(jadx/sources/defpackage/k82.java:23-27)。因此 Service/Alarm/Job/Work 主链只有在通知可用时才初始化。

四、前台服务与失败兜底#

4.1 md.a():启动前台服务,失败则排 Job 3857#

源码:jadx/sources/defpackage/md.java:173-243

static void ensureForegroundService() {
    Context context = WpCyBN.staticContext;
    if (context == null || !hasNotificationPermission(context)) return;

    try {
        if (!gXXfik.running) {
            Intent i = new Intent(context, gXXfik.class).setPackage(context.getPackageName());
            context.startForegroundService(i);
        }
    } catch (Throwable startFailure) {
        if (PsaeNNErXb.jobScheduled) return;
        JobInfo job = new JobInfo.Builder(3857, component(PsaeNNErXb.class))
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
            .setRequiresCharging(false)
            .setRequiresDeviceIdle(false)
            .setPersisted(true)
            .setMinimumLatency(5_000L)
            .setOverrideDeadline(7_000L)
            .setPriorityIfApi33(400)
            .build();
        jobScheduler.cancel(3857);
        jobScheduler.schedule(job);
        PsaeNNErXb.jobScheduled = true;
    }
}

状态:S1。

4.2 gXXfik:常驻前台服务#

源码:jadx/sources/com/ai/smart/gXXfik.java:36-125

private void enterForeground() {
    Notification n = w61.c(this);
    if (SDK_INT >= 29) {
        startForeground(1, n, 0x40000000 /* specialUse */);
    } else {
        startForeground(1, n);
    }
    running = true;
}

void onCreate() {
    super.onCreate();
    enterForeground();
}

int onStartCommand(Intent intent, int flags, int startId) {
    enterForeground();
    return SDK_INT >= 34 ? START_NOT_STICKY : START_STICKY;
}

void onDestroy() {
    super.onDestroy();
    stopForeground(STOP_FOREGROUND_REMOVE);
    running = false;
    md.a();
}

void onTaskRemoved(Intent rootIntent) {
    super.onTaskRemoved(rootIntent);
    md.a();
}

状态:S1。0x40000000 与 Manifest 的 foregroundServiceType="specialUse" 对应。系统是否允许重启为 U。

4.3 PsaeNNErXb:Job 3857 兜底#

源码:jadx/sources/com/ai/smart/PsaeNNErXb.java:46-139

void onCreate() {
    super.onCreate();
    startForeground(1, w61.c(this), SDK_INT >= 29 ? 0x40000000 : /* old overload */ 0);
    if (!gXXfik.running) {
        try { startForegroundService(new Intent(this, gXXfik.class)); }
        catch (Throwable ignored) { /* logged */ }
    }
}

boolean onStartJob(JobParameters params) {
    launchCoroutine(/* vn case 12: background keep work */);
    return true;
}

boolean onStopJob(JobParameters params) { return false; }

void onDestroy() {
    super.onDestroy();
    jobScheduled = false;
}

状态:S1。协程 case 12 的全部副作用受混淆影响,未完整命名(U)。

五、周期 Job、Work 与 Alarm#

5.1 ac3.a(Context):Job 3432#

源码:jadx/sources/defpackage/ac3.java:80-127

static void schedulePeriodicJob(Context context) {
    long minutes = KeepCallback.jobIntervalMinutes; // 15
    if (minutes == 0) {
        jobScheduler.cancel(3432);
        return;
    }

    long delay = minutesToMillis(minutes);
    JobInfo job = new JobInfo.Builder(3432, component(sToBblBqZa.class))
        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_NONE)
        .setRequiresCharging(false)
        .setRequiresDeviceIdle(false)
        .setPersisted(true)
        .setMinimumLatency(delay)
        .setOverrideDeadline(delay + 5_000L)
        .setPriorityIfApi33(400)
        .build();
    jobScheduler.schedule(job);
}

状态:S1。

5.2 sToBblBqZa:Job 自续约#

源码:jadx/sources/com/ai/smart/sToBblBqZa.java:21-47

void onCreate() {
    super.onCreate();
    md.a();
    ep3.d("job-create/live-point");
}

boolean onStartJob(JobParameters params) {
    ac3.a(this);       // 再排下一次 Job 3432
    return false;
}

boolean onStopJob(JobParameters params) { return false; }

状态:S1;传给 ep3.d 的混淆字符串仅做语义占位,不应当作原文。

5.3 q41.d(Context) 与 kcTBvDgL.doWork():15 分钟 WorkManager#

源码:jadx/sources/defpackage/q41.java:145-181、jadx/sources/com/ai/smart/kcTBvDgL.java:26-35

static void schedulePeriodicWork(Context context) {
    long minutes = KeepCallback.workIntervalMinutes; // 15
    if (minutes == 0) {
        WorkManager.cancelUniqueWork("MiGS");
        return;
    }
    PeriodicWorkRequest request =
        new PeriodicWorkRequest.Builder(kcTBvDgL.class, minutes, MINUTES)
            .setFlexInterval(5, MINUTES)
            .build();
    WorkManager.enqueueUniquePeriodicWork("MiGS", /* existing policy */, request);
}

Result kcTBvDgL.doWork() {
    md.a();
    ep3.d("worker/live-point");
    return Result.success();
}

状态:S1。WorkManager 实际到达时间受系统调度影响(U)。

5.4 qu3.e(Context):每日 10:00 唤醒型 Alarm#

源码:jadx/sources/defpackage/qu3.java:79-130

static void scheduleDailyAlarm(Context context) {
    PendingIntent pi = PendingIntent.getBroadcast(
        context, 74655,
        new Intent(context, BpFZcYhmZ.class),
        pendingIntentFlags()
    );
    alarmManager.cancel(pi);

    Calendar next = nextLocalTime("10:00");
    long delay = next.getTimeInMillis() - System.currentTimeMillis();
    alarmManager.set(
        AlarmManager.ELAPSED_REALTIME_WAKEUP, // type 2,可唤醒;set() 非 exact
        SystemClock.elapsedRealtime() + delay,
        pi
    );
}

状态:S1。它具备 wakeup(唤醒)能力,但 set() 仍可被系统批处理和延迟,不是准点保证。

5.5 BpFZcYhmZ.onReceive():Alarm 回调#

源码:jadx/sources/com/ai/smart/BpFZcYhmZ.java:20-29

void onReceive(Context context, Intent intent) {
    md.a();
    ep3.d("alarm/live-point");
    qu3.e(context);        // 安排下一次
}

状态:S1。

六、开机、升级与系统事件#

6.1 ZPHDnIht.onReceive():BOOT/包升级#

源码:jadx/sources/com/ai/smart/ZPHDnIht.java:21-39;Manifest:jadx/resources/AndroidManifest.xml:339-348

void onReceive(Context context, Intent intent) {
    if (intent == null) return;
    String action = intent.getAction();
    if (BOOT_COMPLETED.equals(action) || MY_PACKAGE_REPLACED.equals(action)) {
        md.a();
        ep3.d("boot-or-replace/live-point");
    }
}

状态:S1。

6.2 s7.onReceive():保活系统事件接收器#

源码:jadx/sources/defpackage/s7.java:19-90;注册入口:tm.java:40-71

void onReceive(Context context, Intent intent) {
    String action = intent != null ? intent.getAction() : null;
    if (!isOneOfRegisteredDeviceOrPackageActions(action)) return;

    long now = System.currentTimeMillis();
    if (now - lastHandledByAction.getOrDefault(action, 0L) < 500L) return;
    lastHandledByAction.put(action, now);

    md.a();
    ep3.d("system-receiver/live-point");
}

静态注册集经 hash 与同一工作区明文 Receiver 对照,包括解锁、充/断电、屏幕开关、包增删改、最近任务键/系统对话框和配置变化等;每个 action 做 500ms 去抖。(S1/I;混淆字符串的逐项明文应以运行日志复核)

6.3 MyApplication.onCreate():业务通知系统 Receiver#

源码:jadx/sources/com/ai/smart/MyApplication.java:99-126

void registerBusinessReceiver() {
    IntentFilter device = new IntentFilter();
    device.addAction(USER_PRESENT);
    device.addAction(ACTION_POWER_CONNECTED);
    device.addAction(ACTION_POWER_DISCONNECTED);
    device.addAction(BATTERY_CHANGED);
    device.addAction(SCREEN_ON);
    device.addAction(SCREEN_OFF);
    device.setPriority(1000);
    register(s13, device);

    IntentFilter packages = new IntentFilter();
    packages.addAction(PACKAGE_ADDED);
    packages.addAction(PACKAGE_REMOVED);
    packages.addAction(PACKAGE_REPLACED);
    packages.addDataScheme("package");
    register(s13, packages);

    register(s13, new IntentFilter(CLOSE_SYSTEM_DIALOGS));
    register(s13, new IntentFilter(CONFIGURATION_CHANGED));
}

状态:S1。这些 Receiver 的通知触发分支详见 拉活通知规则与文案全量报告.md。

6.4 q93 / ye:Activity 可见性与前后台闸门#

源码:jadx/sources/defpackage/q93.java:32-57,350-416、jadx/sources/defpackage/ye.java:70-113

// WpCyBN 注册的进程级计数器
onActivityStarted(Activity a) {
    tm.a(a.getApplicationContext());
    handleResidentNotificationEntryIfPresent(a);
    visibleActivityCount++;
    if (visibleActivityCount == 1) {
        reportForegroundLivePointIfDue();
        ep3.d("foreground/live-point");
        restartIpAndAdIdBlacklistChecks();
    }
}
onActivityStopped(Activity a) { visibleActivityCount--; }

// MyApplication 注册的业务生命周期回调
onAppForegrounded() { MyApplication.appInBackground = false; }
onAppBackgrounded() {
    MyApplication.appInBackground = true;
    if (leftBecauseOfAd) requestNotification(AD_GO_BACK, adRetrieveTemplate);
}

状态:S1。NaKMPne 使用 q93.f17531c,普通通知策略使用 MyApplication.f4790c。

七、FCM 远程入口#

7.1 NaKMPne.c(RemoteMessage)#

源码:jadx-targeted/NaKMPne.java:35-108。标准模式主方法失败,使用 simple 定点恢复。

void onMessageReceived(RemoteMessage message) {
    md.a();
    ep3.d("fcm/live-point");

    int priority = parseOriginalPriority(message);
    if (priority == HIGH
        && hasNotificationPermission(this)
        && visibleActivityCount <= 0
        && deviceStateChecksPass()
        && orientation != LANDSCAPE
        && minutesSinceLastPoint >= 5
        && hour >= 7 && hour < 23) {
        // simple 反编译未恢复出清晰的可见通知发布调用
    }

    inspectDeliveredPriorityAndPriorityReduction(message);
    updateLivePoint(...);
}

void onNewToken(String token) {
    yd1.a(this, token);
}

状态:收到 FCM 后调用 md.a()/ep3.d() 为 S1;“直接展示通知”没有代码证据,属于 U。

八、AUTO 拉活入口#

8.1 ep3.d(String) → j case 8#

源码:jadx/sources/defpackage/ep3.java:150-175、jadx-targeted/j.java:200-204

static void onLivePoint(String source) {
    rememberFirstSourceIfEmpty(source);
    delay(1_000L, () -> x22.a(AUTO, new r12(AUTO_TEMPLATE)));
    refreshFcmTokenIfNeeded(source);
    reportLivePoint(source);
}

状态:S1 主链。AUTO 回调在两套模板中随机选择:缓存告警或存储占用告警。(S1)

九、统一通知策略#

9.1 x22.a(scene, callback)#

源码:jadx/sources/defpackage/x22.java:43-51

static void requestNotification(Scene scene, Supplier<Unit> buildAndPost) {
    Job previous = activeSceneJobs.remove(scene);
    if (previous != null) previous.cancel();
    activeSceneJobs.put(scene, launch(new vn(scene, buildAndPost)));
}

状态:S1。

9.2 vn:门控/频控去噪等价代码#

源码:jadx-targeted/vn.java:650-847;关键跳转交叉证据:jadx-targeted/vn-fallback.java:1115-1495

suspend Unit evaluateAndSend(Scene scene, Supplier<Unit> callback) {
    delay(1_000L);
    activeSceneJobs.remove(scene);

    if (!notificationsEnabled()) return;
    if (scene.tier != HIGH && firstOpenAgeMs() < 300_000L) return;
    if (!isInteractiveAndUnlocked()) return;
    if (isLandscape()) return;
    if (appIsForeground()) return;
    if (hour < 7 || hour >= 23) return;

    if (scene == RECENT_TASK
        && remoteRecentNoClickSwitch == 1
        && sameDayRecentNoClickCount >= 2) return;
    if (scene == NOTIFY_CLEAN && alreadyShownToday()) return;

    if (isOrganic()) {
        if (now - lastAnyNotification < 2 * HOUR) return;
    } else {
        long interval = intervalFor(scene.tier, totalShowCount, remoteConfig);
        if (now - lastTierNotification(scene.tier) < interval) return;
    }

    if (now - lastTierDecision < 10_000L
        && previousTier != null
        && scene.tier.isLowerThan(previousTier)) return;

    callback.get();
    saveLastAnyTime(now);
    saveTierTime(scene.tier, now);
    saveLastTier(scene.tier);
    incrementTotalCount();
    updateSceneCounters(scene);
}

状态:关键 return 均由 fallback 指令输出交叉确认,属于 S1;伪代码仍不是逐字原始源码。HIGH 冷却的实际分支为 highShowCount == 1 ? sendFirstIntervalHigh : sendRepeatIntervalHigh,字段名与轮次呈反常关系,疑似实现缺陷。

十、通知发布与重复#

10.1 t22.e/f(...):发布 ID 8194#

源码:jadx-targeted/t22.java:101-271

static void postReminder(
    Context context, String title, String body,
    String compactCta, String expandedCta,
    Intent clickIntent, Bitmap image,
    boolean isRepeat
) {
    clickIntent.setData(uniqueUri());
    if (!isRepeat) report("pushNotify", clickIntent.getStringExtra("action"));

    RemoteViews big = buildBig(title, body, expandedCta, image);
    RemoteViews small = buildSmall(title, compactCta, image);
    RemoteViews middle = buildMiddle(title, expandedCta, image);

    PendingIntent deleteIntent = broadcast("com.action.CANCEL_REPEAT");
    String channel = isRepeat ? "channel_id_remind_silence" : "channel_id_remind";
    Notification n = new NotificationBuilder(context, channel)
        .setSmallIcon(...)
        .setCustomViews(small, middle, big)
        .setContentIntent(activity(clickIntent))
        .setDeleteIntent(deleteIntent)
        .setTitleAndText(title, body)
        .build();

    notificationManager.notify(8194, n);

    if (!isRepeat) {
        int repeatCount = isSamsungDevice() ? 1 : 3;
        launch(new y22(repeatCount, sameNotificationArgs));
    }
}

状态:S1。

10.2 y22:4 秒重复#

源码:jadx/sources/defpackage/y22.java:65-119(标准输出主体失败但保留反编译伪代码)

for (int i = 0; i < repeatCount; i++) {
    delay(4_000L);
    if (!notificationsEnabled()) continue;
    if (!isInteractiveAndUnlocked()) continue;
    if (isLandscape()) continue;
    if (appIsForeground()) continue;
    postSameReminder(isRepeat = true); // 静默 Channel
}

状态:S1 主干;源码末尾仍有 UnsupportedOperationException,应以伪代码区与 t22 调用共同复核。

十一、点击回跳#

11.1 OutOpenActivity#

源码:jadx/sources/a/ac/view/splash/OutOpenActivity.java:55-84

void onCreate(Bundle state) {
    super.onCreate(state);
    cancelRepeatNotificationJob();

    String action = getIntent().getStringExtra("action");
    if ("notify_recentTask".equals(action)) resetRecentNoClickCount();
    reportClickNotify(action);
    dismissFullscreenAdsIfPresent();

    Intent next = new Intent(this, SplashActivity.class);
    next.putExtra("action", action);
    startActivity(next);
    finish();
}

状态:S1。

11.2 SplashActivity.j() 与 p71.d(action)#

源码:jadx/sources/a/ac/view/splash/SplashActivity.java:188-215、jadx/sources/defpackage/p71.java:203-341

void routeNotificationEntry() {
    String action = intentActionOr("none");
    if ("notify_ad_retrieve".equals(action) && mainTaskAlreadyExists()) {
        restoreExistingTask();
    } else {
        startMainActivityWith(action);
    }
}

void homeRouter(String action) {
    switch (action) {
        case "notify_screenshot", "resident_photo" -> open(ScreenShot);
        case "notify_new_fileA", "notify_auto_2", "notify_unlock_bigFile",
             "notify_uncharge", "resident_clean" -> open(LargeFile);
        case "notify_auto_1", "notify_unlockScreen_junk", "notify_unlock_unclean",
             "resident_cache" -> open(CacheClean);
        case "notify_appInstallA", "notify_appInstallB", "notify_appUnInstall",
             "notify_recentTask", "notify_charge", "resident_app" -> open(AppManage);
        case "notify_use_network_over_50", "notify_use_network_over_100",
             "notify_change_network", "resident_speed" -> open(NetworkTraffic);
        case "notify_lowpower20", "notify_unlockScreen_ram" -> open(RAM);
        case "notify_notifyClean" -> open(NotifyClean);
    }
}

状态:S1。notify_charge → AppManage 是代码真实映射,但产品语义可疑(I)。

十二、常驻通知构建#

12.1 w61.a/c(Context)#

源码:jadx/sources/defpackage/w61.java:38-74,98-230

static void createChannels(Context c) {
    create("channel_id_resident", "resident", IMPORTANCE_DEFAULT, sound=null);
    create("channel_id_remind", "remind", IMPORTANCE_HIGH,
           sound=null, lights=true, vibration=true);
    create("channel_id_remind_silence", "remind_silence", IMPORTANCE_HIGH,
           sound=null, lights=false, vibration=false);
}

static Notification buildResident(Context c) {
    PendingIntent clean = action(8197, "resident_clean");
    PendingIntent cache = action(8198, "resident_cache");
    PendingIntent app = action(8199, "resident_app");
    PendingIntent photo = action(8200, "resident_photo");
    PendingIntent speed = action(8201, "resident_speed");

    RemoteViews compactAndBig = bindLabelsAndDynamicSpeed(...);
    Notification n = builder(c, "channel_id_resident")
        .setOngoing(true)
        .setCustomViews(compactAndBig)
        .setContentIntent(openSplash("action_resident"))
        .build();

    n.deleteIntent = servicePendingIntent(gXXfik.class); // 删除后再次请求服务
    n.when = now + 365 * DAY;
    return n;
}

状态:S1。

十三、方法索引(给开发定位)#

模块 类/方法 路径与行号 作用
自动初始化 WpCyBN.onCreate jadx-targeted/WpCyBN.java:76-179 Provider 启动总链
参数 KeepCallbackImp.<init> jadx/sources/com/ai/smart/notify/KeepCallbackImp.java:11-25 Channel、ID、10:00、15min
总编排 tm.a jadx/sources/defpackage/tm.java:29-103 Service/Alarm/Receiver/Job/Work
前台服务入口 md.a jadx/sources/defpackage/md.java:173-243 启动服务,失败排 Job3857
常驻 Service gXXfik jadx/sources/com/ai/smart/gXXfik.java:36-125 startForeground、自恢复
Job3857 PsaeNNErXb jadx/sources/com/ai/smart/PsaeNNErXb.java:46-139 前台服务兜底
Job3432 排程 ac3.a jadx/sources/defpackage/ac3.java:80-127 15min Job
Job3432 服务 sToBblBqZa jadx/sources/com/ai/smart/sToBblBqZa.java:21-47 自续约、live point
Work 排程 q41.d jadx/sources/defpackage/q41.java:145-181 唯一周期 Work
Worker kcTBvDgL.doWork jadx/sources/com/ai/smart/kcTBvDgL.java:26-35 服务与 live point
Alarm 排程 qu3.e jadx/sources/defpackage/qu3.java:79-130 每日 10:00
Alarm 接收 BpFZcYhmZ.onReceive jadx/sources/com/ai/smart/BpFZcYhmZ.java:20-29 服务、live point、重排
开机升级 ZPHDnIht.onReceive jadx/sources/com/ai/smart/ZPHDnIht.java:21-39 BOOT/替换后恢复
保活系统事件 s7.onReceive jadx/sources/defpackage/s7.java:19-90 500ms 去抖后服务与 live point
业务系统事件 MyApplication.onCreate jadx/sources/com/ai/smart/MyApplication.java:99-126 动态 Receiver
前后台闸门 q93、ye jadx/sources/defpackage/q93.java:350-416、ye.java:70-113 可见 Activity 计数、后台标志、广告回流
FCM NaKMPne.c/d jadx-targeted/NaKMPne.java:35-114 消息激活、Token
AUTO ep3.d、j case 8 jadx/sources/defpackage/ep3.java:150-175、jadx-targeted/j.java:200-204 周期入口转 AUTO 通知
场景入口 x22.a jadx/sources/defpackage/x22.java:43-51 同场景去重与协程
策略 vn jadx-targeted/vn.java:650-847、vn-fallback.java:1115-1495 门控、频控、计数、指令跳转复核
构建发布 t22.e/f jadx-targeted/t22.java:101-271 ID8194、自定义布局、重复
重复 y22.invokeSuspend jadx/sources/defpackage/y22.java:65-119 4 秒静默重发
常驻通知 w61.a/c jadx/sources/defpackage/w61.java:38-74,98-230 Channels、ID1、五入口
点击 OutOpenActivity.onCreate jadx/sources/a/ac/view/splash/OutOpenActivity.java:55-84 取消重发、埋点、转 Splash
落地 SplashActivity.j、p71.d SplashActivity.java:188-215、p71.java:203-341 Action → 工具页

十四、未验证与开发注意#

  1. JADX 完整任务有 579 个错误;六个关键类已用 simple 模式恢复,但不能当原始源代码。(U)
  2. vn 的 simple 输出曾缺失三处跳转;本轮已用 fallback 指令输出确认首次打开 300 秒、最近任务两次未点击、通知清理每日一次的 return,但实际计时/计数仍应真机日志验证。(S1/U)
  3. NaKMPne 没有明确的可见通知发布调用;不要把 FCM 收消息直接等同“展示通知”。(U)
  4. 系统强停会进入 stopped state,通常不是这些 Job/Receiver 可自行绕过的;本报告不声称可对抗强停。(U)
  5. Android 14+ 前台服务限制、Android 15/16 通知与任务配额、各 OEM 自启动策略均需真机矩阵验证。(U)
  6. 所有定时均是“请求调度”,不是 SLA:Work/Job/非 exact Alarm 都可能延迟。(S1/U)
竞品拆包报告库 · 逆向结论按证据等级阅读