基于APK代码签名的应用权限授权的设计与实现
给Android的APK程序签名和重新签名的方法

给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或者romoutput.jar 签名后⽣成的apk或者romsignapk.java1) main函数main函数会⽣成公钥对象和私钥对象,并调⽤addDigestsToManifest函数⽣成清单对象Manifest后,再调⽤signFile签名。
public static void main(String[] args) {//...boolean signWholeFile = false;int argstart = 0;/*如果对ROM签名需传递-w参数*/if (args[0].equals("-w")) {signWholeFile = true;argstart = 1;}// ...try {File publicKeyFile = new File(args[argstart+0]);X509Certificate publicKey = readPublicKey(publicKeyFile);PrivateKey privateKey = readPrivateKey(new File(args[argstart+1]));inputJar = new JarFile(new File(args[argstart+2]), false);outputFile = new FileOutputStream(args[argstart+3]);/*对ROM签名,读者可⾃⾏分析,和Apk饿签名类似,但是它会添加otacert⽂件*/if (signWholeFile) {SignApk.signWholeFile(inputJar, publicKeyFile, publicKey,privateKey, outputFile);}else {JarOutputStream outputJar = new JarOutputStream(outputFile);outputJar.setLevel(9);/*addDigestsToManifest会⽣成Manifest对象,然后调⽤signFile进⾏签名*/signFile(addDigestsToManifest(inputJar), inputJar,publicKeyFile, publicKey, privateKey, outputJar);outputJar.close();}} catch (Exception e) {e.printStackTrace();System.exit(1);} finally {//...}}2) addDigestsToManifest⾸先我们得理解Manifest⽂件的结构,Manifest⽂件⾥⽤空⾏分割成多个段,每个段由多个属性组成,第⼀个段的属性集合称为主属性集合,其它段称为普通属性集合,普通属性集合⼀般会有Name属性,作为该属性集合所在段的名字。
apk签名v1原理

apk签名v1原理APK签名是Android系统中的一个重要功能,它能够保证APK文件的完整性以及安全性。
在安装APK文件时,Android系统会对APK文件的签名进行校验,以确保文件的来源没有被篡改或者恶意袭击,从而防止用户使用来自不良厂商或者破坏性的软件。
APK签名V1是一种较为传统的签名方法,下面我们将系统地介绍APK签名V1的原理:1、获取签名证书在进行APK V1签名之前,首先要获得Android应用程序的数字证书。
应用程序开发者通常会使用Java Keytool在开发者计算机上创建一个私有密钥,并使用密钥签署证书请求,然后将请求发送到可信的证书颁发机构。
2、生成密钥库密钥库是一个用于存储签名密钥和证书的文件。
在创建密钥库之前,开发人员需要确定用于存储密钥库的路径和名称,以及用于保护密钥库的密码。
使用Java keytool创建密钥库,密钥库中应存储开发者的私有密钥以及证书。
3、签名APK文件在密钥库中生成密钥后,就可以使用Keytool来对APK文件进行签名了。
签名过程是将开发人员的应用程序与私钥相关联,并根据已签名应用程序进行合法检查,以确定其有效性。
我们可以使用以下命令行签署APK文件:$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore my_app.apk alias_name 其中“my-release-key.keystore”是证书的名称,”my_app.apk”是应用程序的名称,“alias_name”指的是签名证书的别名。
4、验证签名签名APK文件后,需要验证签名是否正确。
在Android Studio 中,可以使用以下指南检查APK签名的有效性:1)在Android Studio的“Build”菜单中,选择“Generate Signed Bundle / APK”。
apk签名原理及实现

apk签名原理及实现发布过Android应用的朋友们应该都知道,Android APK的发布是需要签名的。
签名机制在Android应用和框架中有着十分重要的作用。
例如,Android系统禁止更新安装签名不一致的APK;如果应用需要使用system权限,必须保证APK签名与Framework签名一致,等等。
在《APK Crack》一文中,我们了解到,要破解一个APK,必然需要重新对APK进行签名。
而这个签名,一般情况无法再与APK原先的签名保持一致。
(除非APK原作者的私钥泄漏,那已经是另一个层次的软件安全问题了。
)简单地说,签名机制标明了APK的发行机构。
因此,站在软件安全的角度,我们就可以通过比对APK的签名情况,判断此APK是否由“官方”发行,而不是被破解篡改过重新签名打包的“盗版软件”。
Android签名机制为了说明APK签名比对对软件安全的有效性,我们有必要了解一下Android APK的签名机制。
为了更易于大家理解,我们从Auto-Sign工具的一条批处理命令说起。
在《APK Crack》一文中,我们了解到,要签名一个没有签名过的APK,可以使用一个叫作Auto-sign的工具。
Auto-sign工具实际运行的是一个叫做Sign.bat的批处理命令。
用文本编辑器打开这个批处理文件,我们可以发现,实现签名功能的命令主要是这一行命令:这条命令的意义是:通过signapk.jar这个可执行jar包,以“testkey.x509.pem”这个公钥文件和“testkey.pk8”这个私钥文件对“update.apk”进行签名,签名后的文件保存为“update_signed.apk”。
对于此处所使用的私钥和公钥的生成方式,这里就不做进一步介绍了。
这方面的资料大家可以找到很多。
我们这里要讲的是signapk.jar到底做了什么。
signapk.jar是Android源码包中的一个签名工具。
由于Android 是个开源项目,所以,很高兴地,我们可以直接找到signapk.jar的源码!路径为/build/tools/signapk/SignApk.java。
APP程序第三方电子签名模式和实现路径-刘权

(一)
展示标识
(二)
应用商店展示
(二)
手机终端展示
(二)
手机终端展示
(三)
移动安全软件展示
(三)
移动安全软件展示
(五)
专用软件展示
第三方签名试点参与各方做了规模推动的准备
1.工业和信息化部通信保障局协调试点工作重大问题; 2. 牵头单位,积极协调相关单位,推动试点顺利开展; 3.技术支撑单位义务解决数字证书应用中的各种问题; 4.电子认证服务机构承担开发者证书使用费用。 5.应用商店优先上架经过第三方签名的应用软件。 6.移动安全软件信任经过经过第三方签名的应用软件。 7.手机终端对经过第三方签名的应用软件给予提醒。
发 展
当 前
初步形成了工作组织
工业和信息化部
牵头单位
技术支撑单位
应用商店、杀毒软件、手机终端
电子认证机构
工业和信息化部通信保障局:是试点工 作领导单位,协调试点工作重大问题; 2.中国互联网协会反网络病毒联盟、电 信终端测试认证论坛、中国电子认证服 务产业联盟:试点工作牵头单位,积极 协调相关单位; 3.江苏先安科技、北京证联信通;试点 技术支撑单位,解决数字证书应用中的 各种问题; 4手机制造商:负责验证应 用程序签名并展示; 5.上海CA、广东网证通、CFCA、山东 CA、卓望CA电子认证企;负责审核应 用开发者身份,并向开发者签发数字证 书。 19
36
感谢聆听!
SignerInfo
版本 , 签发者证 书序列号, 签名 结果 ….
Authenticated Attributes
Unauthenticated Attributes
副署签名1
副署签名2
如何使用apk签名命令给Android应用签名

如何使用apk签名命令给Android应用签名在Android开发过程中,应用的签名是非常重要的一个环节。
签名可以确保应用的身份和完整性,使得用户能够信任应用并安心使用。
在发布应用之前,我们必须为应用签名,否则应用将无法被正常安装和运行。
本篇文章将会介绍如何使用apk签名命令来给Android 应用签名。
1. 准备工作在开始签名应用之前,我们需要进行一些准备工作。
首先,我们需要获取Android SDK,并确保在电脑上正确安装并配置好了Java Development Kit(JDK)。
我们还需要生成一个Keystore文件,这个文件是用来保护你的应用的私钥,确保别人不能对你的应用进行篡改。
可以通过以下步骤生成Keystore文件:a. 打开命令行窗口或终端。
b. 进入到Java JDK的bin文件夹下,输入以下命令:keytool -genkey -v -keystore mykeystore.keystore -alias mykeyalias -keyalg RSA -keysize 2048 -validity 10000c. 按照提示输入信息,包括密码、姓名、组织名称和国家/地区代码等。
2. 执行签名命令准备好Keystore文件后,我们可以使用apk签名命令来为应用签名了。
依次输入以下命令:a. 打开命令行窗口或终端,并进入到Android SDK的bin文件夹下。
通常这个文件夹路径是:sdk/platform-tools。
b. 执行以下命令:apksigner sign --ks mykeystore.keystore --out myapp_signed.apk myapp_unsigned.apkc. 替换mykeystore.keystore和myapp_unsigned.apk为你自己的文件名。
d. 如果签名成功,你应该会在终端看到签名成功的消息。
3. 验证签名为了确保应用签名成功,我们可以使用“jarsigner”命令来验证签名。
基于AndroidV2签名机制的应用签名系统的设计与实现

192收稿日期:2019-01-12*基金项目:“十三五”国家重点研发计划资助项目(2018YFC0807106)。
作者简介:于炳虎(1986—),男,河北邢台人,硕士研究生,毕业于北京邮电大学,工程师,研究方向:应用安全。
0 引言数字签名机制在Android应用开发中有着十分重要的作用,不做签名的应用是无法在Android系统上安装使用的,不管是真机还是模拟器,都必须经过数字签名后才可以安装。
在开发调试阶段,虽然开发者并没有设置签名证书等操作,但其实开发平台已经自动给程序进行了签名,使用的是Debug证书。
开发完成准备上线发布的时候,使用的是开发者创建的包含开发者信息的证书。
Android使用数字证书来标识应用程序的开发者或者拥有者,应用程序更新的时候,系统要求应用签名必须一致,签名不一致的应用无法安装升级。
如果开发的系统应用,使用到了一些系统权限,则需要保证应用签名和系统签名一致,否则无法安装。
可见,Android签名机制是开发者在应用开发过程中必须面对的一个重要环节。
Android在7.0版本系统之后发布了全新的应用签名机制APK Signature Scheme V2,V2表示第2版本,V1是上一版签名机制,相比于V1签名机制,新的签名机制V2版本具有更高的安全性和效率性,简单说就是更安全,防止二次打包,验签安装速度更快,用户体验更好。
本软件系统目标是基于Android系统最新的V2签名机制,实现一套在线自动化的自定义签名系统,用户使用此系统可实现对An-droid应用APK文件的在线自动化签名,签名后的应用可在目标终端上通过验签,安装使用。
系统提供了友好的用户交互界面,操作简单,功能丰富,运行稳定。
1 相关技术介绍1.1 数字签名数字签名技术主要应用在信息安全领域,使用范围较广,主要用于证明某个信息或者数据是本人发出的或本人认同的,从数字签名的原理来看,它有三个特点,鉴权、完整性和不可抵赖性,其中不可抵赖性说明了消息的接收方可以通过数字签名来防止后续的抵赖行为。
apk签名原理

apk签名原理
APK(Android Package)的签名原理如下:
1. 建立一个密钥库(Keystore):开发者使用Java的keytool
命令创建一个密钥库,保存私钥和对应的证书。
密钥库通常以.jks或.keystore文件格式保存。
2. 生成私钥和公钥对:使用keytool命令生成一个私钥和对应
的公钥。
私钥存储在密钥库中,而公钥将在APK文件中使用。
3. 生成证书签名请求(CSR):开发者使用keytool命令生成
一个证书签名请求,其中包含公钥和申请者的信息。
4. 证书颁发机构(CA)颁发签名证书:开发者将CSR文件发
送给证书颁发机构,机构会验证申请者信息并使用私钥对公钥进行签名。
然后,机构会颁发一个包含签名的证书。
5. 使用私钥对APK文件进行签名:开发者使用keytool或者Android Studio的构建工具将APK文件与开发者的私钥一起进
行签名。
6. 在Android系统中验证签名:当用户在设备上安装APK文
件时,Android系统会使用APK中包含的签名和证书进行验证。
系统会对签名进行检查,确保它与签名证书对应,并且证书的数字签名也是有效的。
通过签名,Android系统可以确保APK文件的完整性和身份认
证。
如果APK文件的签名无效或与证书不匹配,系统会禁止安装或者警告用户。
这个机制有助于防止未经授权的APK文件被安装,保护用户数据的安全性。
APK签名

为什么要签名?开发Android的人这么多,完全有可能大家都把类名,包名起成了一个同样的名字,这时候如何区分?签名这时候就是起区分作用的。
由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,签名可以保证相当名字,但是签名不同的包不被替换。
APK如果使用一个key签名,发布时另一个key签名的文件将无法安装或覆盖老的版本,这样可以防止你已安装的应用被恶意的第三方覆盖或替换掉。
这样签名其实也是开发者的身份标识。
交易中抵赖等事情发生时,签名可以防止抵赖的发生。
同一程序,如果签名不同,那么就不让你覆盖或升级安装。
会出现以下错误:只有卸载原来的apk才可以安装。
签名的注意事项所有的Android应用都必须有数字签名,没有不存在数字签名的应用,包括模拟器上运行的。
Android系统不会安装没有数字证书的应用。
∙签名的数字证书不需要权威机构来认证,是开发者自己产生的数字证书,即所谓的自签名。
∙模拟器开发环境,开发时通过ADB接口上传的程序会先自动被签有Debug权限,然后才传递到模拟器。
如下图所示,Eclipse菜单的Window -> Preferences -> Android –> Build 下显示的是我们默认的调试用的签名数字证书。
∙正式发布一个Android应用时,必须使用一个合适的私钥生成的数字证书来给程序签名,不能使用ADT插件或者ANT工具生成的调试证书来发布。
∙数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。
如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能。
∙签名后需使用zipalign优化程序。
∙Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序。
∙使用Eclipse工具生成签名的方法此方法适用于Android1.5及以上版本。
APK签名命令的使用方法和步骤详解

APK签名命令的使用方法和步骤详解APK签名命令是应用程序开发中非常重要的一个步骤,它能够保护应用程序的完整性,保证应用安全性。
本文将为你详细介绍APK签名命令的使用方法和步骤,以帮助你更好的理解和使用APK签名命令。
一、什么是APK签名命令APK签名命令是用于给安装包进行数字签名的一项命令行工具。
一般用在应用程序开发完成后,通过签名才能发布和安装,并可以保证签名后的应用程序在安装时不被篡改。
APK签名方式有两种:V1签名和V2签名。
其中V1签名使用JAR签名、V2签名使用APK Signature Scheme v2 签名方式。
二、APK签名命令的使用方法1.首先在电脑端安装JDK环境,然后在安卓开发包中找到build-tool中的zip文件夹,将zip中的apksigner.bat文件复制到Windows\Systm32目录下。
2.将需要签名的应用加载到电脑中,然后打开CMD命令行工具。
3.在CMD中输入apksigner.bat命令,并按照下面的方式对应输入:```apksigner.bat sign --ks my.keystore --ks-key-alias mykeyalias my-app.apk```其中my.keystore是你的密钥文件名,mykeyalias是密钥别名,my-app.apk是需要签名的文件名。
4.按下回车键后,CMD会提示你输入密钥密码,之后输入签名证书密码,如果全部输入正确,签名过程就会自动完成。
5.签名完成后,在你的APK文件目录下,你可以找到一个新的已经签名的.apk文件。
这个签名后的APK文件可以安全地分发给其他用户。
三、APK签名命令的步骤详解步骤1:准备你的密钥在对APK签名之前,你需要先为APK创建一个签名密钥。
密钥是用来验证APK的完整性。
签名密钥是一个重要的文件,它会让应用程序可以广泛传播。
因此,你需要妥善保管这个文件,以免遭到泄露或滥用。
Android的APK应用签名机制以及读取签名的方法

Android的APK应⽤签名机制以及读取签名的⽅法发布过Android应⽤的朋友们应该都知道,Android APK的发布是需要签名的。
签名机制在Android应⽤和框架中有着⼗分重要的作⽤。
例如,Android系统禁⽌更新安装签名不⼀致的APK;如果应⽤需要使⽤system权限,必须保证APK签名与Framework签名⼀致,等等。
什么是签名⾸先我们得知道什么是摘要,摘要是指采⽤单向Hash函数对数据进⾏计算⽣成的固定长度的Hash值,摘要算法有Md5,Sha1等,Md5⽣成的Hash值是128位的数字,即16个字节,⽤⼗六进制表⽰是32个字符,Sha1⽣成的Hash值是160位的数字,即20个字节,⽤⼗六进制表⽰是40个字符。
我们是不能通过摘要推算出⽤于计算摘要的数据,如果修改了数据,那么它的摘要⼀定会变化(其实这句话并不正确,只是很难正好找到不同的数据,⽽他们的摘要值正好相等)。
摘要经常⽤于验证数据的完整性,很多下载⽹站都会列出下载⽂件的md5值或者sha1值。
摘要和签名没有任何关系,⽹上常常将摘要和签名混为⼀谈,这是错误的。
签名和数字签名是同⼀个概念,是指信息的发送者⽤⾃⼰的私钥对消息摘要加密产⽣⼀个字符串,加密算法确保别⼈⽆法伪造⽣成这段字符串,这段数字串也是对信息的发送者发送信息真实性的⼀个有效证明。
其他发送者⽤他们的私钥对同⼀个消息摘要加密会得到不同的签名,接收者只有使⽤发送者签名时使⽤的私钥对应的公钥解密签名数据才能得到消息摘要,否则得到的不是正确的消息摘要。
数字签名是⾮对称密钥加密技术+数字摘要技术的结合。
数字签名技术是将信息摘要⽤发送者的私钥加密,和原⽂以及公钥⼀起传送给接收者。
接收者只有⽤发送者的公钥才能解密被加密的信息摘要,然后接收者⽤相同的Hash函数对收到的原⽂产⽣⼀个信息摘要,与解密的信息摘要做⽐对。
如果相同,则说明收到的信息是完整的,在传输过程中没有被修改;不同则说明信息被修改过,因此数字签名能保证信息的完整性。
Android通过源码编译apk获得系统权限

Android通过源码编译apk获得系统权限Android通过源码编译apk获得系统权限/archives/android-source-code-compiled-by-apk-to-obtain-system-privileges.htmlAndroid中的应用程序如何获得系统权限?在 android 的API中有提供Sy stemClock.setCurrentTimeMillis()函数来修改系统时间,可惜无论你怎么调用这个函数都是没用的,无论模拟器还是真机,在logcat中总会得到"Unable to open alarm driver: Permission denied ".这个函数需要root权限或者运行与系统进程中才可以用。
本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:1. 在应用程序的AndroidManifest.xml中的manifest节点中加入android:sharedUserId="android.uid.system"这个属性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform这一行3. 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:eclipse源码编译,无需用make来编译(android源码目<D:\my android_mx27>):1、首先,AndroidManifest.xml中manifest节点中加入android:sharedUserId="android.uid.system"这个属性2、用eclipse编译出apk(ClockSetting.apk)文件,但这个文件不能用,删掉META-INF目录下的CERT.SF和CERT.RSA两个文件3、使用当前android系统(android系统可能不同)的platform密钥来重新给apk文件签名(可能还未用用户米要签名)。
APK签名命令常见问题解析及应对方法

APK签名命令常见问题解析及应对方法APK签名命令是Android开发中不可或缺的一环,它能够保证应用程序完整性和安全性,防止应用程序被篡改和恶意攻击。
然而,APK 签名命令也可能会出现一些问题,给开发者带来不便。
本文将为读者详细解析APK签名命令常见问题及应对方法。
1. 问题一:无法签名APK文件签名APK文件时,可能会出现无法签名的情况。
这可能是由于权限问题导致的。
在签名APK文件之前,需要确保操作系统中的Java环境已经正确配置,确保具有足够的权限。
解决方法:检查Java环境是否配置正确,确保具有足够的权限,并使用正确的命令进行签名操作。
2. 问题二:签名后应用程序无法安装在签名完成后,应用程序可能会无法安装。
这可能是由于签名证书过期或者应用程序包名与签名证书不匹配所致。
解决方法:检查签名证书是否已过期,并确保应用程序包名与签名证书一致。
如果证书已过期,需要重新生成签名证书;如果包名与证书不一致,需要重新签名。
3. 问题三:签名后应用程序无法运行在签名完成后,应用程序可能会无法运行。
这可能是由于签名证书被撤销或者应用程序包名被恶意篡改所致。
解决方法:检查签名证书的状态,并确保应用程序包名未被篡改。
如果证书被撤销,需要重新生成签名证书;如果包名被篡改,可以使用反编译工具查看签名信息来确定问题所在。
4. 问题四:签名后应用程序出现安全漏洞在签名完成后,应用程序可能会出现安全漏洞,这可能是由于签名证书被窃取或者签名算法被攻击所致。
解决方法:检查签名证书是否存在安全问题,并确保签名算法足够安全。
如果证书被窃取,需要立即吊销证书并重新生成;如果签名算法被攻击,需要采用更加安全的签名算法进行签名。
5. 问题五:APK签名命令无法操作在使用APK签名命令时,可能会遇到无法操作的情况,这可能是由于命令格式错误或者命令所在目录不正确所致。
解决方法:检查命令格式是否正确,并确保命令所在目录正确。
如果命令格式错误,可以查阅相关文档或使用工具进行命令生成;如果命令所在目录不正确,需要使用正确的目录进行操作。
移动应用开发中的应用认证与授权方法

移动应用开发中的应用认证与授权方法随着智能手机的普及,移动应用的市场也逐渐扩大。
越来越多的人开始依赖移动应用来解决各种问题和需求。
然而,随着移动应用的增加,应用间的信任和安全问题也变得日益突出。
为了保护用户的隐私和数据安全,应用认证与授权方法成为移动应用开发中不可或缺的一部分。
应用认证是指通过验证应用的身份确保应用的合法性和可信度。
通常来说,应用认证包括应用身份验证和用户身份验证两个方面。
在应用身份验证方面,一种常见的方法是使用数字签名。
开发者可以为他们的应用生成一个数字证书,证书中包含开发者的公钥和其他相关信息。
当用户下载安装应用时,系统会验证应用的数字签名,确保应用的来源可靠。
这样可以防止恶意应用伪装成正常的应用进行欺骗和攻击。
另一方面,在用户身份验证方面,常见的方法是使用OAuth(开放授权)协议。
OAuth允许用户通过第三方服务(例如Google、Facebook)进行身份认证,并授权应用访问特定的用户数据。
这种方式不仅方便用户,也可降低应用对用户隐私的侵犯。
应用只需获得用户的授权令牌,即可在一定时间范围内访问用户数据,而无需获得用户的用户名和密码。
除了应用认证,应用授权也是移动应用开发中的重要环节。
应用授权指的是在用户许可下允许应用访问和操作特定资源或功能的过程。
应用授权需要平衡用户需求、应用功能和数据安全之间的关系。
一种常见的应用授权方法是基于角色的访问控制(RBAC)。
开发者可以将用户分配到不同的角色,每个角色具有不同的权限和访问级别。
通过控制角色的权限,可以限制应用对敏感数据和功能的访问,保证数据安全。
例如,银行应用可以将用户分为普通用户和管理员两类,管理员拥有更高级别的权限,可以访问和操控更多的数据和操作。
此外,另一个流行的应用授权方法是基于OAuth的访问令牌授权。
在这种方法中,用户可以将访问令牌授权给应用,应用可以使用该令牌来访问特定资源或功能。
用户可以随时撤销或更新访问令牌,从而对应用的授权进行灵活管理。
给第三方apk进行系统签名的几种方式【转】

给第三⽅apk进⾏系统签名的⼏种⽅式【转】版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。
--------------------------------------------------------------------------------------------------------------------------------------------------------注:本⽂假设你已经拥有Android系统源码,且对Android源码有⼀定认识。
⼯作中有时会遇到⼀些apk签名不同,导致⽆法安装的问题。
场景⼀:有⼀个第三⽅apk(具有系统权限),⽆法安装在我们⾃⼰的Android机器上,提⽰以下错误,导致⽆法安装。
这是由于该APK具有系统权限,⽽系统签名与我们的Android设备系统签名不⼀致。
Android检测到系统签名不⼀致,由于安全因素考虑,就阻⽌安装了。
解决⽅法:使⽤⾃⼰的Android签名⼯具给apk重新签名。
(1) Android的签名⽂件存放于系统源码的 build/target/product/security/⽬录下该⽬录下有 media.pk8、media.x509.pem、platform.pk8、platform.x509.pem、shared.pk8、shared.x509.pem、testkey.pk8、testkey.x509.pem等签名⽂件,不同的签名⽂件,对应不同的权限。
Android默认的签名⽂件为testkey.pk8、testkey.x509.pem。
(2) Android⾃带的签名⼯具为 signapk.jar,可以在源码编译⽬录out中找到,具体路径为:out/host/linux-x86/framework/signapk.jar 以上APK具有系统权限,重新签名应该使⽤platform签名⽂件进⾏签名。
签名⽅法:将对应权限的签名⽂件platform.pk8、platform.x509.pem,签名⼯具 signapk.jar,以及需要签名的apk(假设 old.apk)放到同⼀⽬录下,打开linux终端(windows cmd也可以),进⼊该⽬录,进⾏重新签名:java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk重新⽣成的new.apk就可以安装在我们的Android设备上了。
Unity教程之-Unity3d中针对AndroidApk的签名验证(C#实现)

Unity教程之-Unity3d中针对AndroidApk的签名验证(C#实现)当Unity开发的游戏以Android Apk的形式发布之后,经常会遇到的⼀种情况就是别⼈对我们的游戏进⾏⼆次打包,也就是⽤他们的签名替换掉我们的签名,从⽽堂⽽皇之的将胜利果实占为⼰有。
⾯对这样的情况,我们可以采取的⼀种⽅式就是对Apk包的签名进⾏验证,如果与我们的签名不⼀致,则可以采取⿊屏或者直接退出等⽅式来阻⽌该盗版程序的运⾏。
⽰例代码如下:1using UnityEngine;2using System.Collections;///<summary>3/// Signature verify tool class4///</summary>5public class SignatureVerify6 {7/**8* Verify the signature is correct9**/10public static bool IsCorrect ()11 {12#if UNITY_EDITOR13return true;14#endif1516// 获取Android的PackageManager17 AndroidJavaClass Player = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");18 AndroidJavaObject Activity = Player.GetStatic<AndroidJavaObject> ("currentActivity");19 AndroidJavaObject PackageManager = Activity.Call<AndroidJavaObject> ("getPackageManager");2021// 获取当前Android应⽤的包名22string packageName = Activity.Call<string> ("getPackageName");2324// 调⽤PackageManager的getPackageInfo⽅法来获取签名信息数组25int GET_SIGNATURES = PackageManager.GetStatic<int> ("GET_SIGNATURES");26 AndroidJavaObject PackageInfo = PackageManager.Call<AndroidJavaObject> ("getPackageInfo", packageName, GET_SIGNATURES);27 AndroidJavaObject[] Signatures = PackageInfo.Get<AndroidJavaObject[]> ("signatures");2829// 获取当前的签名的哈希值,判断其与我们签名的哈希值是否⼀致30if (Signatures != null && Signatures.Length > 0)31 {32int hashCode = Signatures [0].Call<int> ("hashCode");33return hashCode == 8888888888;//我们签名的哈希值3435 }36return false;37 }38 }。
使用AndroidStudio实现为系统级的app签名

使⽤AndroidStudio实现为系统级的app签名我们在做系统级的app开发时,往往会在AndroidManifest.xml⽂件中添加:android:sharedUserId=”android.uid.system”以获取系统级的权限,如果你正在使⽤Android Studio进⾏开发,编译⽣成的apk会因为签名问题⽆法安装。
此时有两个解决⽅案,1,是将编译好的apk放⼊源码中vender⽬录下,编写相应的android.mk⽂件,并在⽂件中加⼊:LOCAL_CERTIFICATE := platform然后使⽤“mmm your_apk_file”编译你的apk。
之后会在”out/target/product/youProduct/system/priv-app”下⽣成对应的带签名的apk⽂件。
第⼆种,就是下边将要介绍的,对于习惯使⽤ide的同学准备的。
⼀.准备⾸先要准备keytool-importkeypair⼯具,和签名所需的系统签名⽂件。
下载keytool-importkeypair签名⽂件build/target/product/security/ platform.x509.pem、platform.pk8⼆、使⽤Android studio ⽣成⾃⼰的jks⽂件打开新建key的界⾯:build->Generate Signed APK…填写jks路径、密码、别名等信息,点击OK⽣成jks⽂件三、使⽤keytool-importkeypair⼯具为⽣成的jks⽂件添加系统签名。
⾸先配置keytool-importkeypair的环境变量,在user⽂件夹下新建bin⽬录,将keytool-importkeypair复制到bin⽬录下,然后将bin⽬录添加到PATH变量中。
export PATH=$PATH:/home/username/bin;将两个系统签名⽂件platform.x509.pem、platform.pk8复制到jks⽂件所在的⽬录中,运⾏以下命令为签名⽂件添加系统签名:keytool-importkeypair -k [jks⽂件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]四、配置gradle⽂件使⽤签名⽂件配置build.gradle⽂件(Module:app),在Android{}代码块中添加如下代码:signingConfigs {release {storeFile file("/home/mi/android_key/mykey_e8.jks")storePassword 'android'keyAlias 'platform'keyPassword 'android'}debug {storeFile file("/home/mi/android_key/mykey_e8.jks")storePassword 'android'keyAlias 'platform'keyPassword 'android'}}五、编译运⾏点击run或者debug运⾏app,这样装在⼿机后就能够正确运⾏了。
Android使用jarsigner给apk签名的方法详细介绍

Android使⽤jarsigner给apk签名的⽅法详细介绍
Android 使⽤jarsigner给apk签名的⽅法详细介绍
⼯作中APP功能完成以后往往需要往应⽤商店提交⼀些内容,如商店中存在本公司别的⼈员提交的APP,往往需要进⾏认领,应⽤商店会让开发者下载空的APK,然后使⽤⾃⼰APP的签名⽂件进⾏签名,认证,这⾥简单说⼀下如何使⽤jarsigner命令进⾏签名。
该arsigner命令在jdk中可以找到,
简单说明⼀下具体参数:
-verbose:签名命令标识符。
-keystore:后⾯跟着的是你签名使⽤的密钥⽂件(keystore)的绝对路径。
-signedjar:此后有三个参数:参数⼀:签名后⽣成的apk⽂件所要存放的路径。
参数⼆:未签名的apk⽂件的存放路径。
参数三:你的证书名称,通俗点说就是你keystore⽂件的别名,就是在你eclipse进⾏签名打包时的Alias的值。
举例如下:
⾸先进⼊CMD窗⼝,
然后敲⼊以下代码:
jarsigner -verbose -keystore d:\renling\⾃⼰的.keystore -signedjar d:\renling\签名后的⽂件名.apk d:\renling\待签名的⽂件名.apk ⾃⼰keystore的别名
回车以后显⽰如下界⾯:
以上就是使⽤jarsigner给apk签名的⽅法,需要的朋友可以参考下,谢谢⼤家对本站的⽀持!。
基于可净化签名的APK授权机制

基于可净化签名的APK授权机制黄安妮;李道丰;黄贺【摘要】To solve the authorization issues and security problems exist inre-development of APK files,an APK authorization mechanism based on sanitizable signature scheme (APK-SAN) was proposed.Unique properties of sanitizable signature techno-logy were utilized that allowed APK original developer to authorize specified modifier to re-develop the designated part of source code of the APK file without interaction between developer and modifier.The signature of APK files after re-development was still valid and the legitimacy of APK files re-development was guaranteed.Security analysis shows that,the proposed APK-SAN authorization mechanism can effectively solve the authorization issues of APK files re-development and protect the copyright of the original developer and modifier.%针对APK二次开发涉及到的授权问题和安全问题,提出一种基于可净化签名方案的APK授权机制(APK-SAN).结合可净化签名技术的特有属性,允许APK开发者授权给指定修改者对APK文件的源代码进行二次开发,被授权者不需与开发者进行交互即可修改工程源代码的指定部分,修改后生成的APK文件的签名仍然有效,确保APK二次开发的合法性.安全分析结果表明,APK-SAN授权机制能有效解决APK二次开发的授权问题,保护开发者、修改者双方的权益.【期刊名称】《计算机工程与设计》【年(卷),期】2017(038)009【总页数】5页(P2358-2362)【关键词】可净化签名;Android原生签名机制;APK授权机制;二次开发;变色龙哈希函数【作者】黄安妮;李道丰;黄贺【作者单位】广西大学计算机与电子信息学院,广西南宁 530004;广西大学计算机与电子信息学院,广西南宁 530004;广西大学计算机与电子信息学院,广西南宁530004【正文语种】中文【中图分类】TP309Android安全研究[1]中,主要在用户隐私信息保护、Android系统安全保护、恶意APK文件检测和APK文件保护等方面取得了一定的研究成果[2-8]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
# d e in f e Pi c t u r e e Pi c t u r e # d e i f ne Er r o r e E r r o r # d e i f n e E r r or s eE r r o r s # d e i f n e P a r a me t e r e P a r a me t e r
P K CS7 p k c s 7=n e w P K CS 7 f
4 技 术实现
首 先 ,开发一个 支持 P K C S # 7附署 签名 的 A P K代码 签 名
工 具 ,把 开发 商 的真实 签 名 ,作 为 C o u n t e r S i g n属性 附 加 到 A P K原生签名里 面。改签名不会 破坏原生 签名 ,即附署签名 的A P K仍然可 以在 A n d r o i d系统上识别和安装 。
Al g o r i t h ml d . g e t ( “ S HA1 “ ) ,
有p l a t f o r m. p k 8和 p l a t f o r m. x 5 0 9 . p e m两个文件 .分别是私钥和证
书 文件 。在 A P K中 声 明 a n d r o i d : s h a r e d U s e r I d = ”a n d r o i d . u i d . s y s
. 址 . L. ‘ l L. 址 舢 . 址 . 址 . 上 . . _ L 址 . S 王 l L. 址 . 址 . . L. S 上. l . 址 . . . L.
址
— 址 — L— 址
. 址 — 址
. 址 . 址 — 址
. 址 . 址 . 址
4 结语
在V i s u a l C + + 2 0 1 0同时使用 Wo rd 、E x c e l 和P o w e r P o i n t 时, 引用的I 蛙 怯 ,添加调用文件只有 3 个 ,修改内容少,方便易刚。
p a c e p s{ ,结束输入 l ,打开 m s p p . c p p文件 ,在含文件后添加
u s i ng n a me s pa c e ps 。
( 1 1 )将生 成的六个 文件 拷 贝到 V C 2 0 1 0编写 的考试程项 目,添加到项 目中
— —
参考文 献
【 1 】 丛建刚.V i s u a l c + + 6 . O编程实战.青 岛出版社,2 0 0 0 .
t er n ”
。
并用 p l a t f o r m 证书私钥 签名此 A P K.可以取得 系统级权
A l g o r i t h ml d . g e t ( “ R S A ' ‘ ) ,
s i g n a t u r e . s i g n
限 。当然 ,手机厂家在定制 系统时 ,可能会 用 自己生成 的平 行 签名证书 ,这样就无法通过这 2个文件 的签名得到系统权限 r。
/ / wo r d程 序 对 象
( 7 )选择所有类 ,在 头文件输入 m s p p t . h ,实现文件 输入
m s p p t . c p p ,点 击 确 定 。
( 1 3 )在 “ e x c e L h ”文件开头添加
# d e i f n e F o n t e F o n t
装 的 目录 中 的 ms p p t . o l b 。
( 1 2 )在 s t d a f x中添加调用的头文件 。如下 :
# i n c l u d e” ms wo r d . h ”
# i n c l u d e“ ' e x c e 1 . h I I # i n c l u d e“ ms p p t . h ’ ‘
t
}
’
’
’ ‘
’ ‘
4
# 。 ‘
,
‘
‘ ‘
』
。
‘
’ ‘
’ ‘
’
’
实用第一 智慧密集
. …
:
( 5 )选择所 有类 ,在头文件 输入 e x c e 1 . . h ,实现 文件输 入 e x c e 1 . c p p ,点击确定。 ( 6 )查 看一 > 类 向导一 > 添加类一 > 来源类库选 中一 >O f f i f c e安
( 8 )打开 ms w o r d . h文件 ,在第一个类 定义前添加 n a m e s —
p a c e W S { ,最 后 输 入 】 ,打 开 m s w o r d . c p p文 件 , 在 包 含 的 文 件后添加 u s i n g n a m e s p a c e W S
. 址 . 址
. . 址 . 址 . 址
. S . 址
( 上接第 2 8页)
l [ p u b l i c K e y . g e t l s s u e r X 5 0 0 P r i n c i p a l 0 . . g e t N a me 0 ) ,
p u b l i c K e y g e t S e r i a l N u mb e r 0 ,
us i ng na me s pa ce e s。
解决和MF C类 名冲突。Wo r d 、E x c e l 和P o w e r P o i n t 的类就
可 以正常使用了。
( 1 0 )打 开 m s p p . h文件 ,在第一个 类定 义前 添加 n a m e s —
# d e f i n e P a r a me t e r s e Pa r a me t e r s
( 9 )打开 e x c e 1 . h文件 ,在第一个类定 义前添加 h a me s ; p a c e e s { ,结 束输 入) ,打 开 e x c e 1 . c p p文件 ,在包 含 文件后 添加