获取 Android app的签名

可以利用Java的JarFile ,JarEntry,Certificate  来获取android app的签名信息

public class Do {

    private static final char[] wJ = "0123456789abcdef".toCharArray();

    /**
     * 从APK中读取签名
     *
     * @param file
     * @return
     * @throws IOException
     */
    public String getSignaturesFromApk(File file) throws IOException {
        JarFile jarFile = new JarFile(file);
        try {
            JarEntry je = jarFile.getJarEntry("AndroidManifest.xml");
            byte[] readBuffer = new byte[8192];
            Certificate[] certs = loadCertificates(jarFile, je, readBuffer);
            jarFile.close();
            if (certs != null) {
                for (Certificate c : certs) {
                    byte buffer[] = c.getEncoded();
                    return k(j(buffer));
                }
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally{
            jarFile.close();
        }
        return null;
    }

    private String k(byte[] paramArrayOfByte) {
        StringBuilder localStringBuilder = new StringBuilder(
                3 * paramArrayOfByte.length);
        int i = paramArrayOfByte.length;
        for (int j = 0;; j++) {
            if (j >= i)
                return localStringBuilder.toString().toUpperCase();
            int k = 0xFF & paramArrayOfByte[j];
            localStringBuilder.append(wJ[(k >> 4)]);
            localStringBuilder.append(wJ[(k & 0xF)]);
        }
    }

    public byte[] j(byte[] paramArrayOfByte) {
        try {
            MessageDigest localMessageDigest = MessageDigest.getInstance("MD5");
            localMessageDigest.update(paramArrayOfByte);
            byte[] arrayOfByte = localMessageDigest.digest();
            return arrayOfByte;
        } catch (NoSuchAlgorithmException localNoSuchAlgorithmException) {
            localNoSuchAlgorithmException.printStackTrace();
        }
        return null;
    }

    /**
     * 加载签名
     *
     * @param jarFile
     * @param je
     * @param readBuffer
     * @return
     */
    private Certificate[] loadCertificates(JarFile jarFile, JarEntry je,
            byte[] readBuffer) {
        InputStream is = null;
        try {
            is = jarFile.getInputStream(je);
            while (is.read(readBuffer, 0, readBuffer.length) != -1) {
            }
//            is.close();
            return je != null ? je.getCertificates() : null;
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            if(is != null){
                try {
                    is.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return null;
    }

}
时间: 2024-08-12 08:00:45

获取 Android app的签名的相关文章

如何获取android app的Activity

如何获取android app的Activity? 我觉得有2中方法比较好用. 第一种 a.启动待测apk b.开启日志输出:adb logcat>D:/log.txt c.关闭日志输出:ctrl+c d.查看日志 找寻: Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms appPackage = com.mm.android.hsy appActivity = .ui.LoginActivity

appium简明教程(9)——如何获取android app的Activity

有时候在appium的Desired Capabilities中需要指定被测app的appActivity,下面的方法可能会对你有所帮助. 方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没有,那么请联系有源码的同学,这是推荐方法. 本文版权归乙醇所有,欢迎转载,但请注明作者与出处,严禁用于任何商业用途 方法二 如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk. 我们以工具包里的Conta

Android App的签名

Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序, 我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装). 签名对你的App的影响. 你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的APP都使

通过Appium获取Android app中webview

因为要测试Android app中嵌入的web页面,所以需要从native切换到webview.网上查了好多帖子,都用到类似下面代码: //判断是否有 WEBVIEWSet<String> contextNames = driver.getContextHandles();for (String contextName : contextNames) {System.out.println(contextName);if (contextName.contains("WEBVIEW&

Android App的签名打包(晋级篇)

http://blog.csdn.net/linghu_java/article/details/6701666 Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性(如自动更新不会因为版本不一致而无法安装). 2.签名的步骤 a.创建key b.使用步骤a中产生的key对ap

Android App的签名打包

签名的意义 1. 为了保证每隔应用程序开发者的合法 2. 防止部分人通过使用相同的package Name来混淆替换已经安装的程序,从而出现一些恶意篡改. 3. 保证我们发布版本的一致性(如自动更新不会因为版本不一致而无法安装) 下面看一下签名的具体步骤: 1.在项目上右击选择Export,弹出以下窗口 2.选择Export Android Application,然后点击下一步,选择需要导出的工程,然后在下一步 如果存在签名文件选择use exiting keystore如果没有签名文件选择C

monkey测试===如何获取android app的Activity

本文转自:http://www.cnblogs.com/nbkhic/p/3806951.html 有时候在appium的Desired Capabilities中需要指定被测app的appActivity,下面的方法可能会对你有所帮助. 方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没有,那么请联系有源码的同学,这是推荐方法. 方法二 如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk.

AppCan移动开发技巧:3步走,获取移动APP签名信息

大家知道,在移动APP开发里,与应用包名一样,应用的签名信息需是唯一的,否则将会出现应用冒领.重复安装等问题.之前分享过安卓应用的签名如何获取(点击查看),这里将继续以AppCan平台为例,分享如何获取APK包的签名信息及相关注意事项. 获取APK包签名信息 为了保证每个应用程序开发商的合法ID安全,防止部分开发商通过使用相同的包名混淆和替换已经安装的程序,开发者需要对发布的APK文件进行唯一签名,保证每次发布的应用版本的一致性(如果自动更新,则不会因为版本不一致而无法安装). 操作步骤: 1.

关于获取Android系统所有已安装App信息的一些操作(详细)

转载请注明出处:http://blog.csdn.net/qinjuning       本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下:  第一部分: 获取应用程序的packagename.label.icon等 :             第二部分:获取应用程序的占用大小,包括:缓存大小(cachsize).数据大小(datasize). 每部分都为您准备了简单丰富的实例,您一定不会错过.