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

JADX 上场

为了知道他做了什么,我们需要逆向出目前受害者的代码。这里我们使用开源项目jadx来完成。

打开 jadx 之后会直接弹出「打开」对话框,选取被破解的 apk 即可:

简单对比下可以发现,多了一个「HookApplication」类

点击进去即可直接看见源代码:

public class HookApplication extends Application implements InvocationHandler {
private static final int GET_SIGNATURES = 64;
private String appPkgName = BuildConfig.FLAVOR;
private Object base;
private byte[][] sign;

private void hook(Context context) {
try {
DataInputStream dataInputStream = new DataInputStream(new ByteArrayInputStream(Base64.decode(“省略很长的签名 base64”, 0)));
byte[][] bArr = new byte[(dataInputStream.read() & 255)][];
for (int i = 0; i < bArr.length; i++) {
bArr[i] = new byte[dataInputStream.readInt()];
dataInputStream.readFully(bArr[i]);
}
Class cls = Class.forName(“android.app.ActivityThread”);
Object invoke = cls.getDeclaredMethod(“currentActivityThread”, new Class[0

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

]).invoke(null, new Object[0]);
Field declaredField = cls.getDeclaredField(“sPackageManager”);
declaredField.setAccessible(true);
Object obj = declaredField.get(invoke);
Class cls2 = Class.forName(“android.content.pm.IPackageManager”);
this.base = obj;
this.sign = bArr;
this.appPkgName = context.getPackageName();
Object newProxyInstance = Proxy.newProxyInstance(cls2.getClassLoader(), new Class[]{cls2}, this);
declaredField.set(invoke, newProxyInstance);
PackageManager packageManager = context.getPackageManager();
Field declaredField2 = packageManager.getClass().getDeclaredField(“mPM”);
declaredField2.setAccessible(true);
declaredField2.set(packageManager, newProxyInstance);
System.out.println(“PmsHook success.”)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值