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

  • 相关阅读:
    Flask学习笔记1:基础知识
    Git学习笔记3:下载指定项目的单个文件或文件夹
    Tensorflow学习笔记6:解决tensorflow训练过程中GPU未调用问题
    Python学习笔记32:UDP协议链接
    Python学习笔记31:图片URL批量转存到本地
    软件安装笔记3:tesseract-ocr for mac和homebrew
    软件安装笔记2:Aria2百度云加速下载器
    软件安装笔记1:破解安装SecureCRT for mac及解决中文乱码问题
    forward(转发)与redirect(重定向)的区别
    剑指Offer_编程题_丑数
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7397618.html
Copyright © 2011-2022 走看看