怎样获取他人安卓app的应用签名文件

怎样获取他人安卓app的应用签名文件,第1张

publicvoidgetSingInfo(){try{PackageInfopackageInfo=getPackageManager()getPackageInfo("comexampleyao",PackageManagerGET_SIGNATURES);Signature[]signs=packageInfosignatures;Signaturesign=signs[0];parseSignature(signtoByteArray());}catch(Exceptione){eprintStackTrace();}}publicvoidparseSignature(byte[]signature){try{CertificateFactorycertFactory=CertificateFactorygetInstance("X509");X509Certificatecert=(X509Certificate)certFactorygenerateCertificate(newByteArrayInputStream(signature));StringpubKey=certgetPublicKey()toString();StringsignNumber=certgetSerialNumber()toString();Systemoutprintln("pubKey:"+pubKey);Systemoutprintln("signNumber:"+signNumber);}catch(CertificateExceptione){eprintStackTrace();}}

在发布应用的时候,需要通过keystore文件对apk包进行签名,才能发布到市场上。

在使用微信平台服务时或者其他需要提供MD5值的时候,该如何获取APK/签名文件的SHA1证书,MD5呢?

提供三种种方式:

1通过Android Studio的命令输入来获取:

keytool -list -v -keystore xxxjks

keytool -list -v -keystore xxxkeystore

2通过解压apk来获取:

1) 将apk修改后缀为 rar文件后解压;

2) 进入解压后的META-INF目录,该目录下会存在文件CERTRSA

3) 在该目录下打开cmd,输入命令 :keytool -printcert -file CERTRSA

3通过Eclipse获取

依次在 Eclipse 中打开 Window -> Preferances -> Android -> Build。

Well done!

也有提到怎么单独给一个apk签名,这里补充一下android的签名权限控制机制。

android的标准签名key有:

     testkey

     media

    latform

    hared

    以上的四种,可以在源码的/build/target/product/security里面看到对应的密钥,其中sharedpk8代表私钥,sharedx509pem公钥,一定是成对出现的。

    其中testkey是作为android编译的时候默认的签名key,如果系统中的apk的androidmk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。

   而如果设置成:

   LOCAL_CERTIFICATE := platform

    就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名,因为系统级别的签名也是使用的platform来签名,此时使用android:sharedUserId="androiduidsystem"才有用!

     在/build/target/product/security目录下有个README,里面有说怎么制作这些key以及使用问题(android42):

     从上面可以看出来在源码下的/development/tools目录下有个make_key的脚本,通过传入两个参数就可以生成一对签名用的key。

    其中第一个为key的名字,一般都默认成android本身有的,因为很多地方都默认使用了这些名字,我们自定义的话只需要对第二个参数动手脚,定义如下:

    C ---> Country Name (2 letter code) ST ---> State or Province Name (full name) L ---> Locality Name (eg, city) O ---> Organization Name (eg, company) OU ---> Organizational Unit Name (eg, section) CN ---> Common Name (eg, your name or your server’s hostname) emailAddress ---> Contact email addre

    另外在使用上面的make_key脚本生成key的过程中会提示输入password,我的处理是不输入,直接enter,不要密码!后面解释,用自定义的key替换/security下面的。

    可以看到android源码里面的key使用的第二个参数就是上面README里面的,是公开的,所以要release版本的系统的话,肯定要有自己的签名key才能起到一个安全控制作用。

    在上面提到如果apk中的编译选项LOCAL_CERTIFICATE没有设置的话,就会使用默认的testkey作为签名key,我们可以修改成自己想要的key,按照上面的步骤制作一个releasekey,修改android配置在/build/core/configmk中定义变量:

在主makefile文件里面:

ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/releasekey)

  BUILD_VERSION_TAGS += release-key

这样的话默认的所有签名将会使用releasekey。

修改完之后就要编译了,如果上面的这些key在制作的时候输入了password就会出现如下错误:

我在网上找到了合理的解释:

其实会出现这个错误的最根本的原因是多线程的问题。在编译的时候为了加速一般都会执行make -jxxx,这样本来需要手动输入密码的时候,由于其它线程的运行,就会导致影响当前的输入终端,所以就会导致密码无法输入的情况!

再编译完成之后也可以在buildprop中查看到变量:

这样处理了之后编译出来的都是签名过的了,系统才算是release版本

我发现我这样处理之后,整个系统的算是全部按照我的要求签名了。

网上看到还有另外的签名release办法,但是应该是针对另外的版本的,借用学习一下:

make -j4 PRODUCT-product_modul-user dist

这个怎么跟平时的编译不一样,后面多了两个参数PRODUCT-product_modul-user 和 dist 编译完成之后回在源码/out/dist/目录内生成个product_modul-target_files开头的zip文件这就是我们需要进行签名的文件系统

我的product_modul 是full_gotechcn,后面加“-user”代表的是最终用户版本,关于这个命名以及product_modul等可参考>

方式一:使用Android Studio生成

1点击Build->Generate,首次点击可能会提示输入 *** 作系统密码

2d出如下对话框,因为我们还没有生成过keystore ,所以点击Create new,新建keystore

3填写相关内容

Key store path 是 keystore的存放路径

Alias 是别名,填写APP名称即可,别的名称你记得住的也行

validity 是有效期限。

两种密码结合上一幅图看

填写完成后点击ok

(记得备份,因为以后这个apk的新版本都是用这个keystore了)

4d出此窗口,自动填充好了这密码和别名,Next

如果点击了Remember passwords 可能需要输入 *** 作系统密码。

5填写路径,选择签名版本,点击Finish

V2是Android 70出现的更安全更快速的签名方式。

点击ShowInExplore,或者自己打开路径,就可以看到app-releaseapk了

方式二:使用Gradle 生成

1编辑 根目录文件 gradleproperties

添加如下内容:

KEY_PATH=D:/Android/test1jks

KEY_PASS=12345678

ALIAS_NAME=test

ALIAS_PASS=12345678

2编辑 app/buildgradle 读取指定的路径密码

在android 闭包中添加signingConfigs闭包:

android {

compileSdkVersion 25

buildToolsVersion "2503"

defaultConfig {

applicationId "comexampletest"

minSdkVersion 16

targetSdkVersion 25

versionCode 1

versionName "10"

testInstrumentationRunner "androidsupporttestrunnerAndroidJUnitRunner"

}

signingConfigs {

config {

storeFile file(KEY_PATH)

storePassword KEY_PASS

keyAlias ALIAS_NAME

keyPassword ALIAS_PASS

}

}

在buildTypes release 闭包中添加 signingConfig signingConfigsconfig 应用前面的签名配置(ps:signingConfigs闭包必须在buildTypes闭包前)

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-androidtxt'), 'proguard-rulespro'

signingConfig signingConfigsconfig

}

}

3点击右侧工具栏的Gradle->项目名->:app->Tasks->build

assemble 用于生成测试版和正式版的apk

assembleDebug 用于生成测试版apk

我们很多应用需要用到系统签名,可以通过生成系统签名文件,在生成apk时使用这个签名,然后可以安装到机器中,不需要放在源码里编译,重新刷系统。

先附上 50和 20机器人通用的debugkey(图已经省略)

在Linux环境中,以Android源码目录为根目录。

其中的platformpk8是制作系统签名需要的文件。

1、在这个目录下,执行

生成临时文件platformpem

2、接着执行以下命令,将在目录下生成platformp12文件,它本质上应该就是一个数字证书

3、然后再执行以下命令出现以下信息,表示成功生成platformjks

这个名字可以改成debugkeystore 它的后缀本身是没有关系,eclipse和AS都识别 platformjks

4、然后在打包 apk 的时候选择platformjks文件,就可以直接用adb命令安装apk到机器中了。

xxxx表示需要安装的apk路径

5、签名的 Key store password和Key password都是android

在 Android 70 Nougat 中引入了全新的 APK Signature Scheme v2签名方式,美团也推出相应的 Android渠道包生成工具Walle 。

360加固后需要重新签名,借助360官方提供的 签名工具qihoo apk signer ,是采用的70以前的v1签名,这时再通过walle打渠道包,是无法成功往apk写入渠道号的。这时我们就必须借助 Android SDK提供的apksigner 工具对已经打包好的apk进行v2签名。

Android官方文档已经对 apksigner的使用 有比较详细的解释。下面说说实际的 *** 作步骤:

zip对齐,因为APK包的本质是一个zip压缩文档,经过边界对齐方式优化能使包内未压缩的数据有序的排列,从而减少应用程序运行时的内存消耗 ,通过空间换时间的方式提高执行效率(zipalign后的apk包体积增大了100KB左右)。

打开cmd,把目录切换到SDK的build-tools目录下(例如 E:\SDK\build-tools\2502\ ),执行:

zipalign命令选项不多:

-f : 输出文件覆盖源文件

-v : 详细的输出log

-p : outfilezip should use the same page alignment for all shared object files within infilezip

-c : 检查当前APK是否已经执行过Align优化。

另外上面的数字4是代表按照4字节(32位)边界对齐。

这个工具位于SDK目录的build-tools目录下。必须说明的是,v2签名方式时在Android70后才推出的,所以只有 版本>25 的SDK\build-tools\中才能找到apksignerjar。

打开cmd,把目录切到SDK\build-tools\版本号\lib下(例如 E:\SDK\build-tools\2502\lib ),执行:

示例:

apksigner还支持另外的一些选项, 详情点击这里 。包括指定min-sdk版本、max-sdk版本、输出详细信息、检查apk是否已经签名等等。

例如检查apk是否已经签名:

zipalign + apksigner,两步走完成对apk包的v2签名。且以上工具位于AndroidSDK目录的build-tools中。

目前发布APK之前大家都会采用第三方加固方案来实现应用安全,

在Windows下 360有签名工具可以直接签名,腾讯乐固目前取消了签名工具采用云端加固,但是之后需要自己重签名(因为加固之前会先去掉签名)。

在Mac下没有签名工具,这就比较难受了。

一般来说,我们可以通过命令行来签名Apk,打开命令行或者终端 输入如下命令

但是这样容易比较麻烦,还容易出错,其实我们还可以使用脚本来完成自动签名。

这里来简单说明一下吧,我是采用python来实现的, Mac与Windows均可使用

本文python环境:python 382

signjson 与signToolpy文件需要在同一文件夹下

其中signjson 是签名文件配置项(在工具中可以快捷选择,也可以不配置)

如下:

这样就配置好了

signToolpy 是签名工具,通过命令行或者终端运行该文件就行了

signToolpy文件如下:

运行如下:

配置好相关文件之后,点击签名就行了

好了,完成了一个简单而又实用的工具

以上就是关于怎样获取他人安卓app的应用签名文件全部的内容,包括:怎样获取他人安卓app的应用签名文件、获取APK/签名文件的SHA1证书,MD5、android 系统签名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9707073.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存