Unity3D对apk反编译重编译重签名

Posted lytwajue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D对apk反编译重编译重签名相关的知识,希望对你有一定的参考价值。


本文源链接:http://blog.csdn.net/qq393830887/article/details/56025923

工具

  • Java环境
  • Apktool(这玩意有些坑爹,不是官网最新的就好,找到一个好用的版本号能少非常多坑)

Apktool

技术分享

Jarsigner

技术分享

反编译

        var argList = ProcessHelper.CreateArgumentsContainer();
        argList.Add("java -jar");
        argList.Add(ApkToolPath);
        argList.Add("d");
        argList.Add(pathToBuildProject);
        argList.Add("-o");
        argList.Add(GetDecodeApkFolder(pathToBuildProject));

        var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());
        ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));

        var result = p.StandardOutput.ReadToEnd();
        var error = p.StandardError.ReadToEnd();
        p.WaitForExit();
        p.Close();

        Debug.Log(result);
        Debug.Log(error);

技术分享
- 反编译之后的图如上(unknown是没有的)
- 反编译之后能够做一些改动。通常会改动androidMainifest.xml
- 牛逼一点的。能够改动smali,比如前面提及到的Unity半屏输入

重编译

        var unsignedApk = GetUnSignedApkPath(pathToBuildProject);
        FileHelper.DeleteFile(unsignedApk);

        var argList = ProcessHelper.CreateArgumentsContainer();
        argList.Add("java -jar");
        argList.Add(ApkToolPath);
        argList.Add("b");
        argList.Add(GetDecodeApkFolder(pathToBuildProject));
        argList.Add("-o");
        argList.Add(unsignedApk);
        var cmd = string.Join(" ", argList.ToArray());

        var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());
        ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));

        var result = p.StandardOutput.ReadToEnd();
        var error = p.StandardError.ReadToEnd();
        p.WaitForExit();
        p.Close();

        Debug.Log(result);
        Debug.LogError(error);

重签名

        var unsignedApk = GetUnSignedApkPath(pathToBuildProject);
        var finalApk = GetFinalApkPath(pathToBuildProject);
        FileHelper.DeleteFile(finalApk);

        var argList = ProcessHelper.CreateArgumentsContainer();
        argList.Add("jarsigner");
        argList.Add("-keystore 路径");
        argList.Add("-storepass password");
        argList.Add("-signedjar");
        argList.Add(finalApk);
        argList.Add(unsignedApk);
        argList.Add("别名");

        var p = ProcessHelper.Start(ProcessHelper.CreateStartInfo());
        ProcessHelper.WriteLine(p, ProcessHelper.CreateArguments(argList));

        var result = p.StandardOutput.ReadToEnd();
        var error = p.StandardError.ReadToEnd();
        p.WaitForExit();
        p.Close();

        Debug.Log(result);
        Debug.LogError(error);
  • 一个Keystore能够相应多个Key
  • 假设Key的password不一样,还得另外输入Key的password




以上是关于Unity3D对apk反编译重编译重签名的主要内容,如果未能解决你的问题,请参考以下文章

Android签名文件转化为pk8和pem来对apk重签名

android 签名验证防止重打包

apk反编译和重新打包

安卓反编译出来的代码如何修改重新生成APK

代码编译-反编译-解混淆

Android对apk源代码的改动--反编译+源代码改动+又一次打包+签名附HelloWorld的改动实例