Android-APK:为何你的应用老是被破解,该如何有效地做签名校验

  1. 检查 Application
  2. 在调用 attachBaseContext 之前检测签名
  3. 检查 IPackageManager 有没有被动态代理
  4. 使用别的 API 去获取

检查 Application

他替换掉了 Application 为他自己的,那么变化的太多了,Application 的类名 / 方法数 / 字段数 / AndroidManifast 中 Application 节点的 name,都会变。我们这里以检查 Application 的类名为例:

/**

  • 校验 application
    */
    private boolean checkApplication(){
    Application nowApplication = getApplication();
    String trueApplicationName = “MyApp”;
    String nowApplicationName = nowApplication.getClass().getSimpleName();
    return trueApplicationName.equals(nowApplicationName);
    }

  • 先定义我们自己的 Application ——「MyApp」

  • 然后通过 getApplication() 获取到 Application 实例

  • 然后通过 getClass() 获取到类信息

  • 然后通过 getSimpleName() 获取到类名

  • 与正确的值比对然后返回

可以看到可以检测出被二次打包

在 attachBaseContext 之前检测

只要我们检测的够早,他就追不上我们。不,他会 hook 到我们的几率就越小

A: 要有多早?
B: emm,就在 Application 的构造方法里检测吧
A: 那,,,没 context 呀
B: 那就自己造一个 context!
A: 你放屁!
B: 走你

通过学习 Application 的创建流程可知,Context 是通过 LoadedApk 调用 createAppContext 方法实现的

// LoadedApk.java
package android.app;
ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);

函数原型为

// ContextImpl.java
package android.app;

@UnsupportedAppUsage
static ContextImpl createAppContext(ActivityThread mainThread, LoadedApk packageInfo) {
return createAppContext(mainThread, packageInfo, null);
}

第一个参数好说,因为这是个单例类,调用 currentActivityThread 即可获取 ActivityThread 对象

// ActivityThread.java
package android.app;

@UnsupportedAppUsage
private static volatile ActivityThread sCurrentActivityThread;

@UnsupportedAppUsage
public static ActivityThread currentActivityThread() {
return sCurrentActivityThread;
}

但是需要注意的是有 「@UnsupportedAppUsage」修饰,需要反射

  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
universal-apk-builder是一个用于构建通用APKAndroid应用程序包)的工具。它的作用是将一个应用程序的源代码和资源文件转换成可以在不同Android设备上运行的通用APK文件。 通常在开发Android应用程序时,需要为不同的设备和系统版本适配不同的APK文件。这意味着开发人员需要为每个设备和系统版本构建多个APK文件,增加了工作量和开发难度。 universal-apk-builder解决了这个问题。它可以根据输入的源代码和资源文件,自动进行适配和优化,生成一个通用的APK文件。这个通用APK文件可以在大多数Android设备和系统版本上运行,不再需要为每个设备和系统版本构建单独的APK文件。 使用universal-apk-builder的好处是显而易见的。首先,它大大减少了开发人员的工作量和开发周期,因为只需要构建一个通用的APK文件即可。其次,通用APK文件的运行效果和性能可以得到更好的保证,因为它经过了适配和优化处理。 然而,与任何工具一样,universal-apk-builder也有一些限制。它可能无法完全适配所有的Android设备和系统版本。在某些特殊情况下,仍然需要构建特定设备和系统版本的APK文件。此外,由于通用APK文件需要兼容多种设备和系统版本,可能会对应用程序的大小和性能产生一些影响。 总体而言,universal-apk-builder是一个实用的工具,可以帮助开发人员简化APK构建过程,提高开发效率。但开发人员仍需根据具体情况和需求来选择是否使用该工具,以及是否进行特定设备和系统版本的适配。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值