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

原文地址:https://www.cnblogs.com/lytwajue/p/7397618.html