zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    oracle里某列插入多行数据
    子类与父类的一些关系
    math.round()的值怎么取的
    oracle replace函数
    spring5.1.5使用的jackson依赖版本
    eclipse设置新建jsp页面的默认编码为utf-8
    c3p0启动失败
    sql的左联右联合内联的区别
    eclipse安装spring tools插件的问题
    HTML点击按钮button跳转页面的四种方法
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7397618.html
Copyright © 2011-2022 走看看