網址在 程式人雜誌 2013 年 1 月 (創刊號)
這期介紹不少東西,限於創刊號的東西,所以內容比較偏向創始人所熟悉的領域,像是 Arduino/RS232/電磁學 等...比較偏向軔體方面的題材。
軟體的部分,主要是介紹了 Factory Pattern, Javascript, Web Apps - Single Page application。
Javascript 的部分,是用 Chrome 舉例,建議可以用 jsfiddle 網站所提供的服務,可以達到隨寫隨執行的目的。
Arduino 介紹的蠻清楚的,原來一些附加的硬體可以用疊的的疊上去,就會提供額外的功能,其實之前買 MAKE 雜誌的時候,也有看到介紹,那時就很心動想來玩玩。
- Jan 03 Thu 2013 18:30
程式人雜誌-2013年1月(創刊號)
- Jan 03 Thu 2013 14:34
MagPI #7
線上閱讀:MagPI #7
我只挑有興趣的文章來看。
p.18 Tune up Raspberry PI
- 需要額外的電源來 overvolting (升電壓),作者建議用 Kindle 或 Apple 的電源,Kindle 提供 850mA,而 Apple 可以提供到 1A。
- 設定可以參考 http://elinux.org/RPi_config.txt#Overclocking_options,主要是修改 /boot/config.txt,選項有 arm_freq, core_freq, sdram_freq, over_voltage...等
- 有工具可以幫忙做掉調整 config.txt 的差事:sudo raspi-config 再選 overclock,設定會寫到 /boot/config.txt
- 開機時按住 shift 會忽略掉 config.txt 裡超頻的設定。
p.26 C++ Cache
基礎介紹,面向的對象是初心者。
p.30 Python command line arguments
雖說是介紹 argparse 這個 module,但範例是用 pygame 來畫圖,最後有提供練習。
說真的,MagPI 雜誌不錯,蠻適合初學者看的,缺點是沒辦法從網頁版複製文字,就只能下載 PDF 才行了。
- Dec 30 Sun 2012 20:44
雲端工作術:Google教我的100個工作方法
閱畢日期:2012/12/30
用了超快的速度翻完這本大雜燴的書,整體感覺來說,比較適合剛接觸電腦,對於 Google 不熟悉的人。
只紀錄之前沒看過的部份:
- Google insight: 只知道 Google trends,可是不知道有 insight ,有空要來試試看
- Google mail lab 裡有「移動圖示欄位」可把附件圖示移到左側。
- Google document 可以同時編輯,用右上角的「共用」先分享。裏面有註解功能,可以對某部份加上說明。
- 建立表單,一直都知道,只是都沒用過
- 用 Google calendar 寫日記,這個主意蠻有趣的,但是這日記要怎麼匯出啊??
- Google calendar 已經有考慮到時區問題,有選項可以設定。然後跟 gmail 一樣,也有 lab 功能,裏面有一個是「隱藏凌晨和深夜時段」功能,然後自訂檢視可以改一周為兩周。
- 在聯絡人那邊設定生日以後,可以在 Google calendar 中「設定」「瀏覽有趣的日曆」裡找到朋友生日。
- Google search 找「電影」或「翻譯 abcd」都有特殊功能。
- Google Art Project 有提供數位導覽,另外也可以在出國前預先熟悉該館的配置。
- Google Hotel finder
- Google reader,好文章除了標記為星號,也要加上標籤(tag),之後才會容易找。
- iPad Reeder 是一個 iPad 上不錯的 Google reader 閱讀工具,有一個特色是可以用 readability 功能下載全文,而不必用瀏覽器再連出去,這很方便,不知道 PC/Android 上有相似的工具嗎?
- Google reader 可以查看 blog 的詳細資料與統計資料
- wordpress plugin - PIcasa Image express 可以讓 wordpress 跟 picasa web album 完美結合
- 搜尋時,可以在左邊看到社交,點選以後可以只顯示自己社交圈中分享的文章
- G+,可以在社交圈中設定出現頻率,讓自己人分享的訊息出現的較為頻繁
要買書可以到博客來網路書局
- Dec 27 Thu 2012 14:45
Android Apps Security Chapter 5 - Data Storage and Cryptography
這一章先討論了 PKI ,然後引用了海綿寶寶的例子來做說明,還蠻有趣的,一看就能懂。
接著是提 symmetric key algorithm,Android 內支援的有四種:AES, twofish, blowfish, camellia,不管是用哪一種,程式的方式相當一致,就是 KeyGenerator.getInstance("AES"); 這邊帶的參數不一樣。
public static byte[] generateKey(byte[] randomNumberSeed) {
SecretKey sKey = null;
try {
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(randomNumberSeed);
keyGen.init(256,random);
sKey = keyGen.generateKey();
} catch (NoSuchAlgorithmException e) {
Log.e(TAG,"No such algorithm exception");
}
return sKey.getEncoded();
}
然後是講到 padding,symmetric key algorithm 是以區塊為單位去做加密,因此會有 padding 問題。什麼是 padding?所謂的 padding 就是未滿資料區塊大小時所要填入的值,像 zero-padding 就表示是填 0;未指定的話,Android 是使用 PKCS5 padding。
再來就是區塊的處理,這邊介紹了 ECB, CBC, PCBC, CFB, OFB 這幾種 mode,看圖會比較容易懂。ECB 就是最簡單的處理,一塊就加密一次,所以 hacker 要破解時,就不用管前後文,直接針對某一塊去暴力破解就好,為了增加破解的複雜度,就有了後面幾種 mode,基本就是利用前一段加密過程所產出的東西來當作這一段的資料之後再加密。
接著介紹 Android 的儲存機制,Android 的儲存機制有 Shared Preferences, Internal Storage, External Storage, SQLite databases, Network connection。Shared Preferences 實體是 .xml 檔,真正的位置是在 /data/app/app 的資料夾下,這裡說可以設為 MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITABLE, MODE_MULTI_PROCESS。Internal Storage 的真正位置跟 Shared preferences 一樣,只是就不限於 xml。External Storage 則是在 SD Card 上。SQLite database,列出來的意思不知道是什麼,實際上這取決於放在哪裡。Network connection 的話,就是連線,一般最好就是用 SSL。列出機制以後,就是一堆範例程式。
Shared preference 是用 getSharedPreferences();Internal Storage 是用 context.openFileOutput()/context.openFileInput() 直接開檔做讀寫;SQLite Database 則要建立類別繼承 SQLiteOpenHelper ,複寫必要的函式以建立資料表格、做 CRUD 。作者是說,一般直接讀寫的情況比較少,他自己是都用 shared preference / sqlite database 比較多,操作比較方便。
章節最後是綜合應用,作者建立了一個 KeyManager 用來存放 key,Crypto 則用來作加解密:
// Key Manager
package net.zenconsult.android.crypto;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import android.content.Context;
import android.util.Log;
public class KeyManager {
private static final String TAG = "KeyManager";
private static final String file1 = "id_value";
private static final String file2 = "iv_value";
private static Context ctx;
public KeyManager(Context cntx) {
ctx = cntx;
}
public void setId(byte[] data) {
writer(data, file1);
}
public void setIv(byte[] data) {
writer(data, file2);
}
public byte[] getId() {
return reader(file1);
}
public byte[] getIv() {
return reader(file2);
}
public byte[] reader(String file) {
byte[] data = null;
try {
int bytesRead = 0;
FileInputStream fis = ctx.openFileInput(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] b = new byte[1024];
while ((bytesRead = fis.read(b)) ! = -1) {
bos.write(b, 0, bytesRead);
}
data = bos.toByteArray();
} catch (FileNotFoundException e) {
Log.e(TAG, "File not found in getId()");
} catch (IOException e) {
Log.e(TAG, "IOException in setId(): " + e.getMessage());
}
return data;
}
public void writer(byte[] data, String file) {
try {
FileOutputStream fos = ctx.openFileOutput(file,
Context.MODE_PRIVATE);
fos.write(data);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
Log.e(TAG, "File not found in setId()");
} catch (IOException e) {
Log.e(TAG, "IOException in setId(): " + e.getMessage());
}
}
}
// Crypto
package net.zenconsult.android.crypto;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import android.content.Context;
import android.util.Base64;
public class Crypto {
private static final String engine = "AES";
private static final String crypto = "AES/CBC/PKCS5Padding";
private static Context ctx;
public Crypto(Context cntx) {
ctx = cntx;
}
public byte[] cipher(byte[] data, int mode)
throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException,
BadPaddingException, InvalidAlgorithmParameterException {
KeyManager km = new KeyManager(ctx);
SecretKeySpec sks = new SecretKeySpec(km.getId(), engine);
IvParameterSpec iv = new IvParameterSpec(km.getIv());
Cipher c = Cipher.getInstance(crypto);
c.init(mode, sks, iv);
return c.doFinal(data);
}
public byte[] encrypt(byte[] data) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException,
InvalidAlgorithmParameterException {
return cipher(data, Cipher.ENCRYPT_MODE);
}
public byte[] decrypt(byte[] data) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException,
InvalidAlgorithmParameterException {
return cipher(data, Cipher.DECRYPT_MODE);
}
public String armorEncrypt(byte[] data) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException,
InvalidAlgorithmParameterException {
return Base64.encodeToString(encrypt(data), Base64.DEFAULT);
}
public String armorDecrypt(String data) throws InvalidKeyException,
NoSuchAlgorithmException, NoSuchPaddingException,
IllegalBlockSizeException, BadPaddingException,
InvalidAlgorithmParameterException {
return new String(decrypt(Base64.decode(data, Base64.DEFAULT)));
}
}
使用的時候直接用 Crypto 即可,Crypt 內部會自動去建立 KeyManager,然後使用。
- Dec 26 Wed 2012 15:37
閱讀力
閱畢日期:2012/12/26
這本書不錯呢,是我去圖書館拿預約書的時候,順手從書架上拿走的。拿回來看之後,才發現作者就是之前一直想看的「A6筆記整理術」一書的作者,真是太幸運啦。
做讀書筆記的幾個重點:為了什麼而買這本書來閱讀,最關注書裡的哪個部份,對閱讀的部份(對,不是整本,你可以只看部份)有什麼想法。
作者主要的主張,是利用筆記本來達到「載入式閱讀」。什麼是載入式閱讀?第一個就是要避免亂槍打鳥,要順手紀錄平常所看到、所想到的東西,根據這些再去選擇、購買書籍來看,所以第1本筆記本就是順手紀錄日常生活的想法、有興趣的事情、所看到、所想要的部份,這個就是發想的素材。這一本筆記本的紀錄要習慣化並找出適合自己的整理方式。
有了這些隨手的紀錄,就可以建構出尋書單,這就可以達到有效率的閱讀,因為是你所想知道的事情,就可以根據主題上網去看別人的推薦書、對於書的評論、感想、心得,就可以決定要買什麼書,去書店的時候就不會浪費時間,很快就能買完書,避免無謂的時間浪費。作者有提到日本有個「新書地圖」的網站,台灣不知道有沒有相似的網站?如果沒有,來做一個會不會有商機?新書的資料來源要從何而來?
作者也提到了筆記改變閱讀動機,「因為要做筆記而閱讀」,而非「讀完了所以寫讀書筆記」,說真的我好像比較偏向後者,主要是想留下一個紀錄,不過現在我想要照作者的建議來試試看,這樣應該可以學到更多東西。作者也強調可以不用整本書都做筆記,先專注在有興趣的地方即可,然後紀錄自己的想法,有需要再以跳躍的方式去閱讀有需要的部份。還有就是書籍的種類百百種,筆記方法不一定要千篇一律,要隨著調整。
摘錄的時候要紀錄出處(書名、ISBN)、頁次以及內文重點,不要怕摘錄和自己的感想與想法放在一起,可以用串燒的方式來寫,一段抄寫摘錄,一段寫自己的想法,就一直寫。
對於書本上寫的內容有反應進而產生自己的想法或見解才稱的上是真正的學習。
讀書筆記也該做適當的標籤或分類,有意義才便於搜索。作者是用 excel 當作文字索引,欄位有筆記本編號、年月日、標籤、書名、作者、出版社、歸類。之前在別的書上沒看到這部份,作者的這個 idea 真的很不錯。
注意不可以毫無思考的接受書本所寫的東西,或將別人的思考誤以為是自己的想法。
雜誌可以用撕下的方式閱讀,便於攜帶,讀完就丟,有需要則保留剪貼,作者的這個方法很棒,可以不用留整本,也可以確實的知道自己讀了多少。
儘量使用輕便的筆記本來紀錄,最後面介紹一些作者使用的工具,都很實用,我要去買的東西:捲紙油腊筆、立書架、平放書櫃。這個平放書櫃真的是令人驚訝,乍看之下就是堆書,但是可以從中間抽出來,而不需要搬動上面的書,不知道台灣有沒有賣?牌子是 SAPIENS
要買書可以到博客來網路書局
- Dec 22 Sat 2012 10:23
居家空氣大淨化
- Dec 17 Mon 2012 10:54
失戀33天 - 小說,或是求生指南
閱畢日期:2012/12/16
想去找這本書來看,是因為「失戀33天」這部電影饒有趣味,上網搜索了資訊,才知道這部電影是從小說翻拍的。而這部電影在台灣的票房並不好,記得在上片的時候一直在樓下電梯旁的影音廣告系統裡看到介紹,可是不是很想去看,直到後來二妹看第四台跟著看時,才發現到這部片真是好,王小賤與黃小仙的對白刻薄到讓人拍手叫絕了。到了十一月的金馬獎,這部片子也拿到不錯的獎項。找到這本小說也是機緣,原本是想找電子書來看,想不到豆瓣上的文已經被刪了,找了好一會兒,沒找到,就放棄了這念頭。直到上周二去圖書館拿預約的書時,竟然一不小心在還書架上瞄到這本書,於是立馬就借回家了。
小說的故事大體上跟電影差不多,就是黃小仙看到她男友與密友,於是就失戀了。失戀的這33天,開始與原本是仇敵的王小賤交好,遇到魏依然與李可,陳老師與陳阿姨,也跟王小賤一同整了前男友。到了後邊,才有不同,小說裡,陳阿姨後來醒了,電影裡,好像是走了,後來有收到簡訊或電話說阿姨醒了嗎?沒印象。然後是結局,小說裡是在大雨滂沱的車陣裡,王小賤二話不說就騎單車去接困在車陣裡的黃小仙,雖然嘴裏是說沒鑰匙回家,可誰會因為無心的一句話:「要不你來接我。」而真的去接呢?當然是有心人。電影裡則是因為北京要在車陣裡拍戲有難度,所以改成了在對面大樓租用廣告看板來亮字,然後說不會離開小仙一公尺範圍作終。不管怎麼樣都挺感人。
要買書,可以到博客來網路書局
- Nov 30 Fri 2012 10:48
Google時代驚人的整理術
這本書沒看完,看了一半,因為借期到了,就拿去還了。
事實上跟 Google 一點關係都沒有,注意看書名,Google時代,Google時代就是我們所處的這個時代,所以,有種上當的感覺。作者是韓國人,所以整本書的結構跟日本翻譯書一樣,前面就先說明為什麼整理很重要,講了蠻多缺點、優點...等等的,看到中段的時候,才發現這是一本給父母看的書,主要是教導父母如何教會孩子有整理的習慣,有了整理的習慣,生活、做事、唸書就會有條理,到了後半段,就開始介紹一些如何教導孩子學習整理的方法,不外乎就是分類、思考如何整理才會好找等等的。
另外還有就是跟孩子的溝通,因為孩子個人的認知方法可能跟父母不同,孩子可能認為這樣就整理好了,但是父母可能不這麼認為,因此事先講好目標,並且不干涉孩子的整理方法很重要,否則可能會造成反效果。
- Nov 29 Thu 2012 10:36
育兒中醫智慧
閱畢日期:2012/11/28
其實不算是真的看完啦,就翻過一遍。
書籍本身算是實用,介紹適合吃些什麼來調養小朋友,也提供了解決挑食、發汗過多...等等問題的解決方法,不過提供的方劑最好還是只參考就好,畢竟中藥也是藥,要施用前還是請教中醫師比較安全,畢竟你不知道小孩的體質是寒還是熱,是燥還是溫,施用錯誤,可能會導致病情加重,中性的藥物與食物的特性倒是可以參考。書本的後半段有教授一些簡單的體操與按摩,來幫助小朋友,並介紹說體操與按摩對哪些方面有幫助。
紀錄了幾則,除了自己可以用,也可以給小朋友用:
- 改善出汗過多:
- 桑葉紅棗茶:乾桑葉兩錢,紅棗三顆皮劃開,四碗水,煮沸直至湯色如茶色,放涼 (書上只提到一次要用三顆紅棗,可買 21 顆,分七天,但沒提桑葉兩錢是一周的量還是一次的量
- 桑椹汁
- 決明子茶:30粒炒過的決明子茶沖一杯,可持續沖泡到沒味道;可以清肝、明目、解油。
- 菊花茶:十朵沖泡一杯,不用買太多,以免變質;菊花有分種類,黃菊、杭菊可以疏散風熱、清熱解毒,而白菊、甘菊、滁菊可以平肝。可以清肝、明目、消腫、解油。
- 仙草茶:可以清熱、涼血、滋潤、利尿
- 四神糙米粥:茯苓、淮山藥、芡實、蓮子各兩錢,薏仁五錢,糙米半杯,加水熬煮,我想應該可以額外加上排骨,會比較香。
- 四神糙米茶:四神湯粉末(就上面四神糙米粥講的藥材磨成粉,等量糙米粉,混合均勻加熱水沖服,這泡起來應該很像是麵茶或麥片之類的吧。
- Nov 28 Wed 2012 11:36
驚爆遊戲
同事之前有跟我提到這部漫畫出動畫了,為此,我去找來看,結果發現我之前有看過前面幾話,然後就沒繼續看了。
故事算有意思,主角坂本龍太是一個沉迷於線上遊戲 BTOOM 的年青人,在線上遊戲他有很高的成就,但是在現實,他的工作不順遂,生活也不如意,甚至常常遷怒於他的母親跟養父。他的母親後來就簽署了一張同意書,這同意書是由遊戲公司所提供的,可以讓指定的人消失於現實之中,於是龍太就被送到一個孤島上去了。在運送的過程中,他跟負責運送的人起了衝突,頭部被電擊,失去了記憶,但他的運氣很好,順利到了島上。然後就展開了類似大逃殺的冒險(也很像美劇 Lost ),被放逐到島上的人,都必須使用遊戲公司所提供的炸彈來戰鬥,每個人的炸彈屬性不同,運用方法也不同。消滅了7個人以後,才能夠順利逃出島上。
接著就帶出每個人的故事,跟戰鬥的過程,龍太後來是選擇組隊,儘量不傷人,集滿7個以後,打算搶奪直昇機以集體逃出島上。到目前 53 話為止,已經帶了七八個人的故事過去了,但是還沒有結局的傾向。要繼續追下去嗎??
- Nov 28 Wed 2012 11:23
Android Apps Security Chapter 4 - Concept in action part 1
- Nov 23 Fri 2012 15:26
Android Apps Security Chapter 3 - Android security architecture
這一章回頭介紹起 Android 的安全機制,前面詳細解釋內部的做法,簡單說,就是 app 之間是被分隔的,app 要使用系統的某些資源,也需要特別在 AndroidManifest.xml 裡表明,在安裝的時候,使用者認可,那麼你的 app 才能使用這些資源。
app 之間被分隔的話,那麼該怎麼溝通,接著就介紹了 ContentProvider 跟 Intent。ContentProvider 其實就可以當作 DataStore 的同義詞,然後就表列了 Android 內部的 ContentProvider,想不到 Android 本身有提供這麼多 ContentProvider。Intent 的使用就簡單帶過去,因為用法其實就那幾種。
接著就介紹了 Permission,除了 Android 預先定義好的 Permission 之外,使用者也可以自訂 permission,這個我倒是不知道了。在 AndroidManifest.xml 裡,可以這麼寫 <permission android:name="net.zenconsult.mobile.testapp.permission.PURGE_DATABASE"
android:label="@string/label_purgeDatabase"
android:description="@string/description_purgeDatabase"
android:protectionLevel="dangerous" />
最後就舉了一個自訂 permission 的例子。
android:name="" 裡所表明的 PURGE_DATABASE,的確就是要新增一個類別去繼承 permission,並自定義 PURGE_DATABASE 字串。
我想一般要自己定義 permission 的機會應該不多才是。
- Nov 22 Thu 2012 10:35
網路殺神
閱畢日期:2012/11/20
索伯是個遊戲開發者,因為線上遊戲賺了很多錢,可是才四十幾歲就腦癌死了,臨死前,安排了很多事情。首先是幾起謀殺案,殺掉協助他設計的程式設計師,接著利用電腦遊戲與強大的分散式處理進行吸收部眾與攻擊。特別是故事裡提到的許多科技,在現在都已經有成品或半成品,像是 Google glass、無人駕駛汽車等等的,看起來真的非常讓人震驚,再加上一開始的段子還蠻驚聳的,的確會讓人擔憂。
但是在看的過程裡,邊去想,就會知道這其實不太可能,除非索伯的程式具有自我學習、創新的能力,否則這個程式是可能在二到三年間就失去其能力的。第一個是所謂的 NPC 人工智慧,在探知有關鍵字時,才做出對應的反應,這也意味著,索伯的預測必須命中,程式才會有反應,此外,如果程式所在的電腦失去通訊能力或電力或者是通訊的路徑中有節點失效、失去電力,也會無法收集到資訊並做出反應。第二個是利用遊戲或電話語音來吸收人,在遊戲的話是可以利用成就系統來激勵人,但是我懷疑吸收到的人是否真的會依照指示來行動;電話語音的話也是,如果在台灣,大概會被當成詐騙電話吧;有些人是被威脅、有些人是被利誘,這些是在資訊化程度非常高的情況,索伯的程式才有可能入侵某些系統,並做出修改來修改個人的資訊,但都沒考慮到改版的情況?萬一這些系統正好改版的話,索伯的程式必須有自我學習能力,才會知道該怎麼去使用改版的系統。第3個是分散式的組裝,我覺得這也不太可能,中段提到的槍,就是這樣組裝而成的,每個人負責幾個零件的組裝,然後到特定地點交給某人,然後這個人再把自己收到的零件組裝上去,就這樣到成品,事實上,不管是人製造或機器製造,都有可能會有錯誤的情況發生,到最後,你怎麼知道是可用的呢? 這個流程裡也沒有提到 QC 與回頭修復的部份,一般在工廠產線的最後是會有 QC 的,有問題,會打掉、檢查、修復等等的,成品才能出廠,這邊都沒提到。綜觀以上,故事雖然驚聳,但是實際可行性並不會太高。
故事到了後面還是在強調人,第一個是在索伯莊園存活下來的人,我忘了他名字,他的反應完全跳脫程式的預測,於是就讓程式失效,索伯程式後來把這件事情拿到遊戲裡當作一個案例來作宣導。第二個是政府的陰謀,不知道是國防部還五角大廈,就派人四處到各大企業去說明情況,並透露訊息,讓他們預做準備,之後的事情,就是特別小組居然被放棄,感覺上就是為後面鋪梗來著。最後的索伯跟賽伯克的對談則透露了後續索伯程式或許並非代表邪惡的可能性。
- Nov 05 Mon 2012 15:09
Android Apps Security Chapter 2 - Information, The foundation of an app
一開始還是一樣強調安全的重要性,並將攻擊區分為直接與間接攻擊,然後舉了一個 2.2~2.3 的漏洞做為間接攻擊的例子,這個漏洞是這樣子的:使用者瀏覽一個有問題的網頁,因為漏洞的關係,該網頁不會出現詢問的視窗,可以直接下載檔案並儲存到 SD Card,又因為另外一個漏洞,被下載的檔案會有可被執行的權限,於是攻擊者就有了可完整存取 SD Card 的權限。
接著就開始舉例了,第一步就是確認要將資料分類,哪些資料是個人資訊,哪些資料是敏感資訊,作者用了一個表格來做整理:
- 欄位名稱
- Personal? 個人資訊?
- Sensitive? 敏感
- Create 可以被使用者建立?
- Store 要存放嗎?存在遠端還是本地端?
- Send 需要傳送到網路上?
- Receive 需要從遠端下載?
仔細的寫下來,就可以針對資料欄位的特性來做處理,看需不需要加密、傳送要不要經由 SSL...等等的。章節的最後介紹了 AES 加解密,AES 是一種單一鑰匙就可加解密的演算法,跟要給別人公鑰、自己拿私鑰的那種不一樣。AES 演算法可以參考維基百科上的說明。
- Nov 03 Sat 2012 17:19
Android Apps Security Chapter 1 - Android architecture