夜雨聆风学习资料网

ARTICLE · 1032225

为什么刚安装的App很清爽,几天后广告满天飞?

为什么刚安装的App很清爽,几天后广告满天飞?

"安装前几天没有广告,后面就老是弹推广告。"

"三天后开始出现启动广告。"

"刚开始还好,几天就是病毒。"

你是否也遇到过这种现象?很多人以为是自己"运气不好,装到个坏的"。

最近,360移动安全在对某类应用的一次安全检测中,从应用代码里看到了这本"剧本"是怎么被一行一行写出来的。 

今天,我们把这本剧本翻译成人话,讲给你听。

剧本第一幕:前3天,它真的在装“老实人”

这一幕要说的事:它把"什么时候开始打扰你",当成一个常数写进了代码。

先看一段被拆解出来的代码:

//

System.currentTimeMillis() - appInstallTime > 259200000

看不懂?我翻译一下这段代码在计算你装这个App多久了

259200000 毫秒,换算过来正好是 3 天

也就是说,代码里有一个"3天倒计时"你装上App的前3天,它刻意表现得很克制——广告少弹,甚至不弹。等你以为"这个App真干净、真好用"时,3天一到,开关被打开。

这还只是最基础的一层。

我们把这套"时间门槛"拆开数了一遍,发现它其实是一个四级体系

这四道门槛不是每个人都会挨个碰上,不同来源、不同广告位对应的是其中不同的那一道。代码里我们能数出来的,至少有 2、3、7、15 天四道。所以"到底第几天开始"这个问题,答案本身就取决于你是怎么把它装上的。

说白了,它不是"第几天开始弹广告",而是"每隔几天,解锁一批新的打扰方式"。

剧本第二幕:你是怎么“来”的,决定了它对你多客气

第一幕解决的是"什么时候开始",第二幕解决的是"对谁开始"。

这里还有一段更值得琢磨的逻辑:同一个App,会先看你是怎么装上的,再决定用什么节奏打扰你。

一部分用户:推广用户

   → 前2天完全安静

   → 另有一层15天的"静默期"控制

另一部分用户:自己搜到、自己下载的

   → 直接放行

看懂了吗推广带来的那部分用户,前期被特别小心地对待。 因为这些人是有获客成本的,太早打扰,人就被吓跑了,钱等于白花——所以先让你用爽,让你留下好评,让你把它留在手机里。等时间到了,再慢慢开始变现。

而另外那部分用户,没有获客成本,广告就可以来得更直接一些。

同一个App,你从哪里来,决定了它用哪一套节奏对你。

剧本第三幕:你杀的死它,但它有“分身”

这一幕要说的事:前三幕解决"什么时候""对谁",这一幕解决"能不能被你真的关掉"。这也是代码里比较"技术流"的一段。

App启动 → 触发保护服务

  → 启动3个辅助进程

  → 通过系统底层文件锁 + app_process 挂载

  → 当主进程被杀 → 3个分身互相"发现兄弟没了"

  → 通过 Binder 调用,把主进程重新拉起来

翻译成人话:这个App在手机里留了3个"分身",它们之间互相盯着。你把主程序划掉?只要分身还在,它就有机会重新复活

这就是为什么有些App你"明明关了",过一会儿又能感觉到它在后台跑、通知栏又冒出来甚至偶尔弹个广告它不是"卡了",而是被设计成"杀不死"。

更微妙的是:它不是偷偷干,而是劝你亲手把手机的保护关掉。

我们分析发现了一个权限引导页面,作用很直白:一步一步教用户去系统设置里,把"允许后台运行""后台弹出界面""锁定后台运行"这几个开关打开。带来的结果,值得每个用户记住

如果一个App反复劝你去系统设置里给它"开绿灯",你至少应该问一句:它拿这些权限到底要干什么?

剧本第四幕:真正决定给你看什么广告的,是云端

这一幕要说的事:前三幕的代码都在你手机里,第四幕的开关不在你手机上。

前面三幕讲的是"本地代码里写了什么"。但真正让这套剧本"活"起来的,是远程控制

这个App的广告开关、广告频率、素材内容、甚至保活策略,都不是写死在安装包里的,而是通过一个加密通道从云端实时拉取。

也就是说:

• 你手机上的App,只是一个"壳"

• 真正决定"什么时候弹广告、弹什么广告、弹多少个"的,是远端服务器上的一个开关

• 这些开关甚至可以针对每一台设备、每一个用户,单独设置

这带来一个很现实的问题:当开发者想"收网"时,不需要你更新App,云端改个参数就行。

剧本还没完,它甚至知道你"付没付钱"

如果说前面四幕是"广撒网",那这一幕就是开始"认人"。

分析还发现了一段更隐蔽的代码逻辑:这个App能够检测用户在广告页面里是否发起了支付——比如你点开广告、跳转到支付页面,它都能识别到。

检测到之后会发生什么?

• 它会把"这个用户在广告里付款了"这件事上报到服务器

• 上报内容包括:广告标题、描述、链接、点击时间等上下文信息

• 这套能力由云端开关控制,可以针对不同用户单独开启或关闭

• 分析还注意到:对几家头部电商域名的支付跳转,它是放行;对不在这份名单里的其他电商支付跳转,它会拦截并另外上报一条记录。

这里,必须把边界说清楚,这一点很重要:

从分析看,感知粒度只是"发生了支付这件事"。订单号只用来做"是/否"判断,订单金额、买了什么商品,都没有被提取和存储。

这意味着什么?把"这个人转化了"记一笔,再去向广告主结算虽然,目前只确认了"具备这个能力",没有证据表明它被大规模滥用。

剧本的最后一页:它可以"自己给自己升级"

前面几幕讲的是"这一个版本会做什么",这一页讲的是"它还能变成什么"。

分析发现其更底层的能力:热修复/插件化框架

翻译成人话:App 理论上可以不走商店的更新流程,直接从服务器下载新的代码包,然后加载进来运行。

这意味着什么?今天你在应用商店下载的版本,和一个月后它在云端"悄悄"更新成的版本,可能完全是两个东西

这不只是一款App,这是一类现象

这里你可能想问:这是不是就这一款App的问题?

不是。

这套手法组合——延迟激活、来源差异化、进程保活、云控广告、支付归因、动态加载——在行业里每一个都有各自成熟的"名字":

做法

行业里叫什么

2/3/7/15天时间门槛

延迟激活 / 时间触发

按来路区别对待:一部分人先安静几天,一部分人直接开始

来源差异化 / 条件化展示

三个辅助进程互相拉活

进程保活 / 多进程互拉

云端控制广告开关和素材

云控 / 远程配置

加密通信+域名混淆

通信隐蔽 / 域名轮换

检测用户在广告里是否付款

支付归因 / 转化归因

热修复/插件化动态加载

动态代码加载 / 热更新

单看每一项,它都能找到一个"正当用途";可一旦把它们按顺序接起来,可能就是一个"高风险条件链"背后的设计意图就值得思考。

当然,"能力"和"行为"是两件事

普通用户怎么识别防范

看到这里,你可能会想:那我是不是要开始怀疑手机里的每一个App了?倒也不必焦虑。

真正需要警惕的,是有下面这几个特征的App:

最后说两句

我们拆这套剧本,不是为了让用户对所有App产生恐慌,而是想让大家明白一件事:

一款App好不好,不能只看它"能不能用",还要看它在你看不见的地方,"正在做什么"。

把代码里的"小聪明"翻译成人人看得懂的话,就是我们把它写出来的原因。

下次你再装一个新App,不妨多给它3天、7天、15天的时间。如果它始终对你"表里如一",那它值得留在你的手机里。如果它开始"变脸"……你知道那套剧本,是怎么写的了。

360移动安全团队,专注移动安全与反诈将不定期拆解真实案例和“剧本”,欢迎关注。

THE END

互动话题

你有没有遇到过类似的现象?评论区聊聊~

温馨提示:请只聊你遇到的套路和体验,不用点名具体应用,避免给彼此带来不必要的麻烦~

相关学习资料