Android中的apk通过签名校验防止反编译重打包

Android开发完打包好的apk如果被别人盗取可能会存在被反编译重打包的风险,那么我们如何来保护我们辛苦开发出来的程序不被别人盗取重打包呢,这里我们通过签名文件入手,因为打包时候是需要签名的,别人盗取后如果重打包也是需要签名的,那么如果重打包的签名跟我们原本打包的签名不一样,就可以阻止他使用该apk。

我们要在首页MainActivity里来判断重打包的签名文件是否与原签名文件一致:

/**
     * 获取签名文件的第一个签名值
     * @param packageName  应用包名
     * @return
     */
    public int getSignature(String packageName){
        PackageManager packageManager = this.getPackageManager();
        PackageInfo packageInfo = null;
        int sign = 0;
        try {
            packageInfo = packageManager.getPackageInfo(packageName,PackageManager.GET_SIGNATURES);
            Signature[] signatures = packageInfo.signatures;
            sign = signatures[0].hashCode();
        } catch (PackageManager.NameNotFoundException e) {
            sign = 0;
            e.printStackTrace();
        }
        return sign;
    }

签名文件的获取是在app的build.gradle文件里配置的

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.0"

    //配置签名文件信息
    signingConfigs {
        release {
            keyAlias 'xxx.keystore'
            keyPassword '123'
            storeFile file('D:/xxx.jks')
            storePassword '123'
        }
    }
    ……
}
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //通过签名校验防止重打包
        Log.d("tag","getSignature:" + getSignature("com.wjy.project.mylearntest"));
        //987654321这里是随便写的,实际的值是上面log  getSignature("com.wjy.project.mylearntest")输出的值
        if (getSignature("com.wjy.project.mylearntest") != 987654321){
            Toast.makeText(this,"app被重新打包",Toast.LENGTH_SHORT).show();
            //这里可以写使应用程序退出或杀死应用程序的代码,这样可以保护我们的apk不被重新打包
        }
    }

这样,通过签名文件的校验,如果不匹配就可以退出应该程序来防止重打包了。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Android Studio,生成签名文件可以按照以下步骤操作: 1. 打开Android Studio并打开您的项目。 2. 点击菜单栏的“Build”,然后点击“Generate Signed Bundle / APK”。 3. 选择“APK”并单击“Next”。 4. 在下一个屏幕上,选择“Create new”并填写有关您的密钥的详细信息,例如名称,密码,别名和有效期等。 5. 单击“OK”并填写有关您的应用程序的信息,例如版本号和版本名。 6. 单击“Next”并选择“Release”作为构建变体。 7. 单击“Finish”并等待编译完成。 一旦您的应用程序构建成功并生成签名文件,您可以使用以下步骤对其进行反编译、修改、打包签名: 1. 下载并安装Apktool(可在https://ibotpeaches.github.io/Apktool/上找到)。 2. 将您的APK文件复制到Apktool所在的文件夹。 3. 打开终端或命令提示符并导航到Apktool文件夹。 4. 输入以下命令以反编译您的APK文件:apktool d your-apk-file.apk 5. 对您的应用程序进行任何修改。 6. 输入以下命令以打包您的应用程序:apktool b your-modified-app-folder 7. 使用Java keytool生成新的签名文件。例如,使用以下命令生成新的签名文件:keytool -genkey -v -keystore your-keystore-file.jks -alias your-alias -keyalg RSA -keysize 2048 -validity 10000 8. 使用以下命令将您的应用程序签名:jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore your-keystore-file.jks your-modified-apk-file.apk your-alias 9. 安装已签名APK文件并测试它。 请注意,修改和打包应用程序可能会违反某些法律和条款。请确保您有权执行此操作,否则可能会面临法律后果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代新人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值