Android开发笔记之《特斯拉-Tesla 代码分析》

转载请注明出处

 

一、反编译APK文件,查看包结构


// Android库,不多解释
android.support
// HttpClient 4.1 repackaged for Android // http://www.findbestopensource.com/product/httpclientandroidlib
// https://github.com/surespot/httpclientandroidlib ch.boye.httpclientandroidlib
// 国内用百度地图 com.baidu.* vi.com.gdi.bgl.android.java // 谷歌的广告系统和移动服务系统 com.google.ads.* com.google.android.gms // 主要功能实现部分 com.teslamotors.api // 封装了http接口
com.teslamotors.service // 数据交互服务
com.teslamotors.client // 对service接口的封装,供上层的调用
com.leslamotors.data // 控制指令和状态数据的封装, parcel
com.teslamotors.tesla // 主activity,login activity,receiver等实现
com.teslamotors.tesla.fragments // 各种界面的fragment实现
com.teslamotors.util // 零零散散,连工具类都算不得
com.teslamotors.views // 自定义view

 

二、assets目录下的密钥及证书文件

1. sapi_cert.cer : (百度地图使用)

        InputStream ip = this.b.getResources().getAssets().open("sapi_cert.cer");
        Certificate certificate = ((CertificateFactory)localObject4).generateCertificate((InputStream)ip);
        ((InputStream)ip).close();
        KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
        ((KeyStore)ks).load(null, null);
        ((KeyStore)ks).setCertificateEntry("ca", (Certificate)certificate);

 

2. trust.keystore,在代码中发现以下内容,这是赤裸裸的密钥吗?

private static final java.lang.String TRUST_ASSET = "trust.keystore";
private static final java.lang.String TRUST_PASSWD = "qXD5wUA3qVySNr39Nc8sFEtKXUr3Mg";

Aliase : mykey
加密算法 : RSA, 
证书标准 : X.509

公钥:
30 82 01 22 30 0d 06 09 2a 86 48 86 f7 0d 01 01 01 05 00 03 
82 01 0f 00 30 82 01 0a 02 82 01 01 00 b6 e0 2f c2 24 06 c8 
6d 04 5f d7 ef 0a 64 06 b2 7d 22 26 65 16 ae 42 40 9b ce dc 
9f 9f 76 07 3e c3 30 55 87 19 b9 4f 94 0e 5a 94 1f 55 56 b4 
c2 02 2a af d0 98 ee 0b 40 d7 c4 d0 3b 72 c8 14 9e ef 90 b1 
11 a9 ae d2 c8 b8 43 3a d9 0b 0b d5 d5 95 f5 40 af c8 1d ed 
4d 9c 5f 57 b7 86 50 68 99 f5 8a da d2 c7 05 1f a8 97 c9 dc 
a4 b1 82 84 2d c6 ad a5 9c c7 19 82 a6 85 0f 5e 44 58 2a 37 
8f fd 35 f1 0b 08 27 32 5a f5 bb 8b 9e a4 bd 51 d0 27 e2 dd 
3b 42 33 a3 05 28 c4 bb 28 cc 9a ac 2b 23 0d 78 c6 7b e6 5e 
71 b7 4a 3e 08 fb 81 b7 16 16 a1 9d 23 12 4d e5 d7 92 08 ac 
75 a4 9c ba cd 17 b2 1e 44 35 65 7f 53 25 39 d1 1c 0a 9a 63 
1b 19 92 74 68 0a 37 c2 c2 52 48 cb 39 5a a2 b6 e1 5d c1 dd 
a0 20 b8 21 a2 93 26 6f 14 4a 21 41 c7 ed 6d 9b f2 48 2f f3 
03 f5 a2 68 92 53 2f 5e e3 02 03 01 00 01

 

附上解析代码:

    public static void parseTeslaKeystore(Context context) {
        String password = "qXD5wUA3qVySNr39Nc8sFEtKXUr3Mg";
        String fileName = "tesla_trust.keystore";

        InputStream inputStream = getAssetFile(context, fileName);

        KeyStore keystore = getKeystore(inputStream, password);
        echoKeystore(keystore);
    }

    private static KeyStore getKeystore(InputStream inputStream, String password) {
        try {
            KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
            keystore.load(inputStream, password.toCharArray());
            inputStream.close();
            return keystore;
        } catch (IOException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyStoreException e) {
            e.printStackTrace();
        }

        return null;
    }

    private static InputStream getAssetFile(Context context, String fileName) {
        Assert.assertNotNull(fileName);
        InputStream inputStream = null;

        try {
            inputStream = context.getAssets().open(fileName);
            return inputStream;
        } catch (IOException e) {
            e.printStackTrace();
        }

        return inputStream;
    }

 

posted @ 2016-06-13 14:49  老金280  阅读(1602)  评论(0编辑  收藏  举报