• 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;
        }
    
  • 相关阅读:
    Verdi 看波形常用快捷操作
    Tensorflow系列——Saver的用法
    Verilog-分频器
    (原创)列主元Gauss消去法的通用程序
    冒泡排序算法
    ADC 与实际电压值的关系
    直流耦合 交流耦合 耦合
    当前不会命中断点,源代码与原始版本不同
    示波器触发
    在头文件#pragma comment(lib,"glaux.lib");编译器提示waring C4081: 应输入“newline“
  • 原文地址:https://www.cnblogs.com/alanfang/p/5580606.html
Copyright © 2020-2023  润新知