应用安全 --- apk加固 之 试用次数
通用原理
许多试用版软件使用以下两种方法来计算时间:
-
首次启动时间:在第一次启动时保存当前时间(
currentTimeMillis)。之后每次启动,都用当前时间减去保存的首次启动时间,来判断是否超过了试用期(例如7天)。 -
运行时间检查:在程序运行过程中,使用高精度时间(
nanoTime)来测量某个功能的运行时长,如果超时则要求购买。
(invoke-*.* \{\}, Ljava/lang/System;->currentTimeMillis\(\)J) \s*(move-result-wide ([pv]\d+))
替换
$1
const-wide $3, 0x1B82AED3940L
最终效果:
无论实际时间如何,应用程序从此处得到的“当前时间”永远是 0x1B82AED3940L。如果程序在第一次运行时保存了这个假时间作为安装时间,那么后续每次计算出的试用期时长永远是 固定的假当前时间 - 固定的假安装时间 = 0,从而实现无限。
(invoke-*.* \{\}, Ljava/lang/System;->nanoTime\(\)J)\s*(move-result-wide ([pv]\d+))
替换
$1
const-wide $3, 0x1B82AED3940L
浙公网安备 33010602011771号