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

  • 相关阅读:
    深度解析U-Boot网络实现(长篇好文)
    优化嵌入式Linux的启动时间之内核
    优化嵌入式Linux的启动时间之文件系统
    Java安全之 ClassLoader类加载器
    Java 审计之xss审计要点
    Java审计之命令执行篇
    Java审计之文件操作漏洞
    Java 审计 之过滤器防御xss
    Java 审计之SSRF篇(续)
    Java 审计之SSRF篇
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7397618.html
Copyright © 2011-2022 走看看