美文网首页
Apk重新签名的工具

Apk重新签名的工具

作者: 杨hai | 来源:发表于2019-01-30 18:22 被阅读0次

该工具可以完成以下几个工作

  1. 删除老的签名
  2. 对apk进行重新签名
  3. 对齐操作

缺点

  1. 只支持mac和linux,不支持window,原因为zip命令在window上面需要额外的配置

使用条件

  1. 必须安装了java环境
  2. 需要支持zipalign,jarsigner,zip命令

使用方式

切换到该目录后,执行appSign即可

工具目录说明

工具目录说明
基本说明
  1. 为生成的工具
  2. 待重新签名的apk
  3. 签名文件
  4. 生成未对其的apk,上传google 需要对齐
  5. 对齐后的apk包
  6. 配置文件,用于配置签名信息,以及待签名的apk名字以及签名后的apk包名
SignConfig.json说明
配置参数说明,你应该一看就懂

具体代码实现

package main

import (
   "encoding/json"
   "fmt"
   "github.com/yanghai23/GoLib/atfile"
   "io/ioutil"
   "os/exec"
   "runtime"
   "time"
)

var ip, whoami []byte
var err error
var cmd, cmd1, cmd2 *exec.Cmd
var status = false

func main() {

   data, err := readConfig()
   if err != nil {
       fmt.Println("读取配置文件失败")
       return
   }
   res := config2Obj(data)
   fmt.Println("配置数据读取成功", res.KeyAlias)

   //jarsigner -verbose -keystore foyoos.keystore
   // -storepass foyoosgame
   // -signedjar sign.apk %1 foyoos.keystore
   // -digestalg SHA1
   // -sigalg MD5withRSA
   go wait()
   //TODO 动态删除apk中的META-INF目录
   fmt.Println("开始删除签名文件信息")
   cmd2 = exec.Command("zip", "-d", res.SourceAppName+".apk", "META-INF/*")
   if whoami, err = cmd2.Output(); err != nil {
       fmt.Println("签名文件已经被删除!")
   } else {
       fmt.Println("成功删除老的签名文件信息")
   }

   fmt.Println("开始签名")
   camd := fmt.Sprintf("jarsigner -verbose  -keystore %s -keypass %s -storepass %s -signedjar %s %s %s -digestalg SHA1 -sigalg MD5withRSA",
       res.StoreFile,
       res.KeyPassword,
       res.StorePassword,
       res.TargetAppName,
       res.SourceAppName,
       res.KeyAlias)
   fmt.Println("请稍等,每个小点为表示1s,一排60个小点")
   fmt.Println(camd)

   targetFileName := res.TargetAppName + GetTimeStr() + "_sign.apk"
   cmd = exec.Command("jarsigner",
       "-verbose",
       "-keystore", res.StoreFile,
       "-keypass", res.KeyPassword,
       "-storepass", res.StorePassword,
       "-signedjar", targetFileName, res.SourceAppName+".apk",
       res.KeyAlias,
       "-digestalg", "SHA1",
       "-sigalg", "MD5withRSA")

   if whoami, err = cmd.Output(); err != nil {
       fmt.Println("发生异常=", err)
       fmt.Println("签名失败")
       status = true
       return
   }
   fmt.Println(string(whoami))
   fmt.Println("重新签名成功")

   fmt.Println("开始对齐操作")
   camd2 := fmt.Sprintf("zipalign -f -v 4  %s %s", targetFileName, res.TargetAppName+GetTimeStr()+"_sign_final.apk")
   fmt.Println(camd2)
   cmd1 = exec.Command("zipalign", "-f", "-v", "4",
       targetFileName, res.TargetAppName+GetTimeStr()+"_sign_final.apk")
   if whoami, err = cmd1.Output(); err != nil {
       fmt.Println("发生异常=", err)
       fmt.Println("对齐失败")
       status = true
       return
   }
   fmt.Println(string(whoami))
   fmt.Println("对齐成功")
   status = true
   // 默认输出有一个换行

}

func config2Obj(data []byte) *Config {
   config := &Config{}
   json.Unmarshal(data, config)
   return config
}

var ostype = runtime.GOOS

/**
   读取配置
*/

func readConfig() (data []byte, err error) {
   currentPath := atfile.GetCurrentDirectory()
   fmt.Println("操作系统类型 ", ostype)
   if "windows" == ostype {
       data, err = ioutil.ReadFile(currentPath + "\\SignConfig.json")
       fmt.Println("windows 读取配置")
   } else {
       data, err = ioutil.ReadFile(currentPath + "/SignConfig.json")
       fmt.Println("Mac 读取配置")
   }

   if err != nil {
       fmt.Println("err = ", err)
   }
   return data, err
}

func GetTimeStr() string {
   timestamp := time.Now().Unix()
   tm := time.Unix(timestamp, 0)
   return tm.Format("2006_01_02_03_04_05")
}

/**
   创建结构体
*/
type Config struct {
   KeyAlias      string `json:keyAlias`
   KeyPassword   string `json:keyPassword`
   StoreFile     string `json:storeFile`
   StorePassword string `json:storePassword`
   TargetAppName string `json:targetAppName`
   SourceAppName string `json:sourceAppName`
}

func wait() {
   t := 0
   for ; !status; {
       time.Sleep(time.Second)
       t ++
       if t < 60 {
           fmt.Print(".")
       } else {
           t = 0
           fmt.Println(".")
       }
   }
}

相关文章

  • Apk重新签名的工具

    该工具可以完成以下几个工作 删除老的签名 对apk进行重新签名 对齐操作 缺点 只支持mac和linux,不支持w...

  • APK重新签名的方法

    1. 生成签名证书在需要重新签名的apk目录下打开命令行工具(cmd):使用JDK自带的keytool工具, 运行...

  • apk重新签名

    对apk进行重新签名中遇到的问题记录如下 今天使用我周六写的工具对apk进行签名时,报了如下错误 jarsigne...

  • apk签名工具

    对apk进行反编译并修改后,需要对重新打包的apk进行签名。 秘钥生成工具——keytool路径:jdk/bin/...

  • apk签名

    上传商店的apk需要加固,从360网上加固后下载的包需要重新签名,签名工具在Android\Sdk\build-t...

  • Android签名过程详解

    1、本文主要内容 基础知识 手动签名apk 签名工具源码解析 总结 为了保证apk的安全性,必须对apk进行签名。...

  • apk重新签名

    借鉴地址: https://www.jianshu.com/p/997018fe43a9 对apk进行反编译之后,...

  • apk重新签名

    在上传各大安卓应用市场的时候, 没有加固的apk是不允许提交的,他们会帮我们加固好apk,但是加固完之后的apk是...

  • apk重新签名

    对apk进行反编译之后,如果想要将其修改后再次发布会遇到签名的问题。签名主要是为了保护APP不被篡改。 这里用到的...

  • Android反编译破解签名验证

    Android Studio无源码调试app 很多apk对签名做了验证,重新打包的apk没办法运行,不过签名验证都...

网友评论

      本文标题:Apk重新签名的工具

      本文链接:https://www.haomeiwen.com/subject/tlbcsqtx.html