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; }