Android和iOS包批量重签名

本文实例为大家分享了Android和iOS包批量重签名的具体代码,供大家参考,具体内容如下

Android篇

环境要求

1 安装winrar,然后配置winrar的环境变量,要用到winrar指令

2 配置java的bin目录到环境变量,要用到jarsigner指令

重签名步骤说明:

1 从母包复制一个子包

2 删除子包的签名文件META-INFO

3 根据需要修改子包的文件,比如渠道号文件之类

4 重签名子包

对应的python脚本

import os
import sys
import shutil
import json

ORIGINAL_APK='母包.apk'
UNSIGN_APK='unsign.apk'
SIGNED_APK={"\"子包1.apk\"":1,"\"子包2.apk\"":2,"\"子包3.apk\"":3,"\"子包4.apk\"":4}

KEY_STORE='keystore文件.keystore'
KEY_PASS='key密码'
STORE_PASS='store密码'

def copy_apk(src_f,dst_f):
 if not os.path.isfile(src_f):
 print("%s not exist"%(src_f))
 else:
 fpath,fname=os.path.split(dst_f)
 shutil.copyfile(src_f,dst_f)
 print("copy %s -> %s"%(src_f,dst_f))

def zip_del_file(apk_f,del_f):
 os.system("winrar d %s %s"%(apk_f,del_f))
 print('zip_del_file:'+del_f)

def zip_add_file(apk_f,channel):
 del_dir("assets")
 os.makedirs("assets")
 f=open("assets\\AppParamSetting.txt",'w')
 f.write('{"channel":%s,"bundleIdentifier":""}'%(channel))
 f.close()
 os.system("winrar a -ad %s %s"%(apk_f,"assets\\AppParamSetting.txt"))

def del_file(f):
 os.remove(f)
 print('del_file:'+f)

def del_dir(f_dir):
 if os.path.exists(f_dir):
 shutil.rmtree(f_dir)
 print("del_dir:"+f_dir)

def sign_app(unsigned_app, signed_app):
 signcmd='jarsigner -verbose -keystore %s -keypass %s -storepass %s -signedjar %s -digestalg SHA1 -sigalg MD5withRSA %s sfish' % (KEY_STORE,KEY_PASS,STORE_PASS,signed_app,unsigned_app)
 os.system(signcmd)
 print(signcmd)

if __name__ == '__main__':
 cur_dir=os.getcwd()
 print('cur_dir'+cur_dir)
 copy_apk(ORIGINAL_APK,"tmp_"+ORIGINAL_APK)
 zip_del_file("tmp_"+ORIGINAL_APK,"META-INF")
 for key in SIGNED_APK.keys():
 channel=SIGNED_APK[key]
 zip_add_file("tmp_"+ORIGINAL_APK,channel)
 sign_app("tmp_"+ORIGINAL_APK,key)
 del_dir("assets")
 del_file("tmp_"+ORIGINAL_APK)
 input("Done")

iOS篇

环境要求:

1 mac机子

2 证书文件,打开:Launchapd(火箭图标)->其他 -> 钥匙串访问,就在那里

3 .mobileprovision文件

重签名步骤说明:

1 从.mobileprovision文件生成entitlements.plist文件

2 解压ipa,会得到一个Payload目录,再往里是一个xxx.app,显示包内容可以看到里面的东西

3 删除签名文件,即:Payload/xxx.app/_CodeSignature目录

4 根据需要修改文件,比如渠道文件

5 重签名

6 压缩ipa

对应的python脚本

#!/usr/bin/python

import os
import sys
import json

ORIGINAL_IPA='母包.ipa'
SIGNED_APK={"\"子包1.ipa\"":1,"\"子包2.ipa\"":2,"\"子包3.ipa\"":3,"\"子包4.ipa\"":4}
CERT_FILE='证书文件'
MOBILE_PROVISION_UUID = 'mobileprovision的uuid'

def get_mobile_provision_dir():
 return os.path.join(os.getenv('HOME'),'Library/MobileDevice/Provisioning Profiles/')

def get_mobile_provision_file(uuid):
 return os.path.join(get_mobile_provision_dir(), uuid + ".mobileprovision")

def unzip_app():
 os.system('unzip -qo ./%s -d ./'%(ORIGINAL_IPA))
 print('unzip_app %s done!'%(ORIGINAL_IPA)) 

def del_code_signature():
 os.system("rm -rf ./Payload/sfish.app/_CodeSignature")
 print('del_code_signature done!')

def resign_app():
 os.system('/usr/bin/codesign --continue -f -s "%s" --entitlements "%s" "%s"'%(CERT_FILE,'./entitlement.plist','./Payload/sfish.app'))
 print('resign_app done!')

def zip_app(f_ipa):
 os.system('zip -r %s ./Payload'%(f_ipa))
 print('zip_app done!')

def del_payload():
 os.system('rm -r ./Payload')

def gen_entitlements(uuid, out_file_name):
 os.system('security cms -D -i "%s" > entitlement_full.plist '%(get_mobile_provision_file(uuid) ))
 os.system('/usr/libexec/PlistBuddy -x -c \'Print:Entitlements\' entitlement_full.plist > "%s" '%( out_file_name))

def rep_emb_file(uuid):
 os.system('cp "%s" ./Payload/sfish/embedded.mobileprovision' % (get_mobile_provision_file(uuid)))

def update_channel_file(channel):
 f_channel='./Payload/xxx.app/Data/Raw/channel.txt'
 fr=open(f_channel,'r')
 txt=fr.read()
 fr.close()
 js=json.loads(txt)
 js['channel_id']=channel
 fw=open(f_channel,'w')
 fw.write(json.dumps(js))
 fw.close()

if __name__ == '__main__':
 gen_entitlements( MOBILE_PROVISION_UUID, "entitlement.plist" )
 unzip_app()
 del_code_signature()
 for key in SIGNED_APK.keys():
  channel=SIGNED_APK[key]
  update_channel_file(channel)
  resign_app()
  zip_app(key)
 del_payload()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android获取apk程序签名信息代码示例

    复制代码 代码如下: 这是获取apk包的签名信息private String getSign(Context context) {  PackageManager pm = context.getPackageManager();  List<PackageInfo> apps = pm.getInstalledPackages(PackageManager.GET_SIGNATURES);  Iterator<PackageInfo> iter = apps.iterator()

  • Android签名机制介绍:生成keystore、签名、查看签名信息等方法

    Android独有的安全机制,除了权限机制外,另外一个就是签名机制了.签名机制主要用在以下两个主要场合起到其作用:升级App和权限检查. 升级App 用户在升级一款已经安装过的App时,如果程序的修改来自于同一来源,则允许升级安装,否则会提示签名不一致无法安装的提示. 权限检查 我曾在Android Permission权限机制的具体使用一文中提过,对于申请权限的  protection level 为 signature 或者 signatureOrSystem 的,会检查权限申请者和权限声明

  • iOS 基于AFNetworking下自签名证书配置的方法

    自从https推出以后,客户端对网络安全的要求程度也越来越高.甚至在iOS9之后,苹果强制要求必须支持https请求. https是什么呢?它又是如何保证数据安全的呢? 简单来说,https就是http+TLS/SSL.就是在http上又加了一层处理加密信息的模块.服务端和客户端的信息传输都会通过TLS进行加密,也就说传输中的数据都是加密的,如果不知道私钥,是无法真正知道传输内容的真正意思的. 整个https单向验证流程简单总结如下: 就是用户发起请求,服务器响应后返回一个证书,证书中包含一些基

  • iOS之Https自签名证书认证及数据请求的封装原理

    摘要: 在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用 App Transport Security安全功能.App Transport Security(ATS)是苹果在iOS 9中引入的一项隐私保护功能,屏蔽明文HTTP资源加载,连接必须经过更安全的HTTPS.苹果目前允许开发者暂时关闭ATS,可以继续使用HTTP连接,但到年底所有官方商店的应用都必须强制性使用ATS. 项目中使用的框架是AFNetworking 3.

  • Android Apk去掉签名以及重新签名的方法

    Android Apk去掉签名以及重新签名的方法 Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败. 网上流传的"勾选允许安装未知来源的应用"其实跟签不签名没啥关系,说白了就是允许安装不从电子市场上下载的应用而已. 近几日需要修改一个Apk中JNI调用的.so文件,苦于没有apk源代码,只好研究了一下签名相关的问题.当然有很多第三方工具可以做到,但其实JDK中已经提供了强大的签名工具jarsigner. 1.

  • android应用签名详细步骤

    1.准备工作apk的签名工作可以通过两种方式来完成: 1)通过ADT提供的图形化界面完成apk签名:右键项目--> Android Tools -->Export Signed Application Package... --> 打开图形界面2)完全通过shell/dos命令来完成apk签名 我比较喜欢第2)种方式,所以下面将讲解如何通过命令的方式完成apk签名. 给apk签名一共要用到3个工具,或者说3个命令,分别是:keytool. jarsigner. zipalign,下面是对

  • iOS中的ipa重签名(逆向必备)

    2018开篇,这回要讲的是iOS重签名,网上重签名的工具太多了,我试用了一下,都还挺好使.但是,你不知道,我是个喜欢装逼的人吗?用工具怎么够酷呢?对,装逼得用终端.接下来的操作都是在终端中进行,开始你的装逼之旅吧! 一.重签名准备工作: •找到开发者证书和配置文件: 列出所有开发者证书文件: security find-identity -p codesigning -v •找一个开发环境配置文件生成entitlements.plist文件,后面签名要用到: security cms -D -i

  • Android APK使用Debug签名重新打包 Eclipse更改默认Debug签名

    对已有的apk文件进行重新打包,前面 Android签名机制:生成keystore.签名.查看签名信息 已经介绍了.本文介绍另外两种需求. 使用默认的Debug签名打包 如果直接使用Eclipse开发新程序,默认就会被打上Debug的签名,这个是地球人皆知,但是如果你是想Repack别人并且想使用Debug签名该怎么办? 首先需要找到你本机的默认签名的,一般位于C:\Users\用户名\.android\debug.keystore下,拷出来,然后打包,打包命令: 复制代码 代码如下: jars

  • 给Android的APK程序签名和重新签名的方法

    签名工具的使用 Android源码编译出来的signapk.jar既可给apk签名,也可给rom签名的.使用格式: java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 input.jar output.jar -w 是指对ROM签名时需使用的参数 publickey.x509[.pem] 是公钥文件 privatekey.pk8 是指 私钥文件 input.jar 要签名的apk或者rom output.jar 签名后生成

  • IOS 签名错误codesign failed with exit code 1解决方法

    IOS 签名错误 前日,Macbook的硬盘不幸挂了,于是将开发环境迁移到Mac Mini下.大家知道,对于Xcode来说,最麻烦的就是各种证书.ProvisioningProfile的配置问题.将原来的各种开发证书和.p12证书导入到mini上,接下来就碰到了各种莫名其妙的问题.先是无法development(可以debug),发现是证书导错了(没有用Agent证书,只有Agent可以发布).于是制作证书请求,重新下载证书. 等到部署的问题解决后,又发现无法调试--真机可以,但模拟器不行,一进

随机推荐