只是为了好玩,我从亚马逊商店下载了一个 apk(我今晚之前从未使用过)并反编译它。您不会在清单中找到太多内容,但在 smali 树中有一个完整的 Amazon 类文件夹。 Amazon 使用的机制在很大程度上超出了我非常有限的理解,但我可以为您指出一些数据。
更新:这些应用需要安装亚马逊应用商店 apk 才能运行,因此下面的类使用一些亚马逊活动来检查 drm。
方法:
$apktool d xxx.apk
$cd xxx/smali
$grep -RHin 'amazon' *
调查结果:
首先,你可能想看看
.class public Lcom/amazon/mas/kiwi/util/ApkHelpers;
及其方法:
.method public static getApkSignature(Ljava/lang/String;)[B
.method private static getCodeSigners(Ljava/util/jar/JarFile;)[Ljava/security/CodeSigner;
.method public static getContentID(Ljava/util/jar/JarFile;)Ljava/lang/String;
.method public static getContentIDFromName(Ljava/lang/String;)Ljava/lang/String;
.method private static getFirstSigningCert(Ljava/util/jar/JarFile;)Ljava/security/cert/Certificate;
.method public static isSigned(Ljava/util/jar/JarFile;)Z
.method private static scanJar(Ljava/util/jar/JarFile;)V
在同一个 com/amazon/mas/kiwi/util 文件夹中还有一些类,例如 DeveloperInfo(没那么有趣)、Base64 和 BC1(用于校验和)。
在文件夹 com/amazon/android/ 中,您将找到 Kiwi 类
.class public final Lcom/amazon/android/Kiwi;
具有相当明显的领域:
.field private final drmFull:Z
该类 Kiwi 是应用程序中每个原始 smali 文件中的引用。示例:
.method public onCreate(Landroid/os/Bundle;)V
.locals 1
invoke-virtual {p0, p1}, Lxxx/xxxx/Xxxx;->xxxxXxxxx(Landroid/os/Bundle;)V
const/4 v0, 0x1
invoke-static {p0, v0}, Lcom/amazon/android/Kiwi;->onCreate(Landroid/app/Activity;Z)V
return-void
.end method
结论:
该方法涉及在 apk 的每个类中注入代码,可能通过反编译 apk、解析每个文件、添加必要的类以及使用相同的密钥重新编译。