Facebook 推出靜態分析工具:Facebook Infer

Facebook 推出了靜態分析工具 Facebook Infer,可以事先找出 AndroidiOS 上的 bug:Open-sourcing Facebook Infer: Identify bugs before you ship

從官方給的操作動畫中就可以看出來怎麼跑了。目前看起來支援三種程式語言,C、Objective-C、Java:

Facebook Infer is a static analysis tool - if you give Infer some Objective-C, Java, or C code, it produces a list of potential bugs.

在 Android 上 (Java) 會找出的類型:

Infer reports null pointer exceptions and resource leaks in Android and Java code.

iOS 上則只找 memory leak:

In addition to this, it reports memory leak problems in iOS and C code.

比較特別的是,這個工具是用 OCaml 寫:

Infer is a static analysis tool for Java, Objective-C and C, written in OCaml.

Mozilla Developer Network (MDN) 上的 JavaScript 教學

Mozilla Developer Network (MDN) 寫了一篇關於 JavaScript 的介紹文章,算是以現在的角度來教 JavaScript:「A re-introduction to JavaScript (JS tutorial)」。

不是給完全不懂的人入門看的,而是對程式語言有了解的人看的。

文章裡面不單純只是教學,還引用了許多重要的文獻,尤其是 ECMAScript 規格書。有想要考據確認規格書怎麼定義會很方便。

而最後面還提到了 browser 上 DOM 實作時的 memory leak 問題以及解法,這對於現在 single page application 的應用也愈來愈重要了。

Valgrind 的其他用途

這篇文章的標題就說明了作者對 Valgrind 只被拿來抓 leak 很不滿:「Valgrind is *NOT* a leak checker」。

依照文章裡的說法:

Valgrind is an undefined behavior checking tool first, a function and memory profiler second, a data-race detection tool third, and a leak checking tool last.

文章裡從最簡單的用法 (什麼參數都不加) 開始解釋,到後面的 leak 檢查以及 profiling,算是還蠻清楚的 XDDD

HTTPS 頁面上的隱私問題

The Register 的「Even HTTPS can leak your PRIVATE browsing」這篇引用了「I Know Why You Went to the Clinic: Risks and Realization of HTTPS Traffic Analysis」這篇論文。

這篇論文說明,當 ISP 有能力分析所有流量,即使你全部都使用 HTTPS 時,論文裡的方式可以對某些極為敏感的資訊達到 89% 的辨識率:

Our attack identifies individual pages in the same website with 89% accuracy, exposing personal details including medical conditions, financial and legal affairs and sexual orientation.

這是因為 HTTPS 設計上是保護密碼、session key 這類技術上的「機密資訊」。而這個特點只能增加對隱私的保護,無法 100% 保護。

就算不看論文用了哪些資訊與方法,這個領域有很多可以分析的:很直覺就可以想到 ISP 可以看到 Destination IP 資訊,藉以「猜測」是哪個 domain,而 DNS query 資訊也是有幫助的。再來是 HTTP request 的 pattern (像是順序、大小) 再加上對網站結構的了解,也可以分析出不少東西。

如果可以再分析主流瀏覽器、作業系統以及 NAT box 的實做,還可以透過 TCP 的封包再推敲的更細緻。

整套系統利用統計模型架構好後,在 ISP 端大量分析,看起來就是 NSA 擅長的業務?

對於學術研究用的 Big Data...

面試的時候曾經有面試者說手上沒有 big data 可以研究,所以對 big data 的理解僅限於理論,不過我對這種講法就...

網路上有很多資料是很有用的:

能玩的東西明明就很多... 另外還可以掃各種公開資料。

Wikimedia 要幹蠢事了...

在「What are readers looking for? Wikipedia search data now available」這邊看到維基百科打算公開 search data,這不是前人幹過的蠢事嗎...

這讓我想起 2006 年「AOL search data leak」事件。AOL 希望對學術界有貢獻,於是把三個月份的 search data 匿名化後丟出來,結果被發現不管怎麼匿名化,search data 還是有辦法找出本人。AOL 也因此被告並且判決只要包含在內的每個人都可以拿到 USD$5000 的賠償。不過也因為 AOL 幹了蠢事,這也是少數被公開的 search real data。

看起來 Wikimedia 也要再來幹一次?

Kaspersky Internet Security 程式碼流出

Kaspersky Internet Security 程式碼流出 (可能是某個 beta 期間的):「Kaspersky Source Code In the Wild」,目前的版本是 2011。

程式碼是 2008 年由某個離職員工 copy 出去,在黑市尋找買家而流出的。雖然是 2008 年的版本,但對於寫惡意程式及病毒的人來說仍然是個重要的資料...

Perl 的 Object::Destroyer

使用 HTML::Tree 時因為有 circular reference,會要求你要使用 ->delete() 告知 object 打斷 reference 以避免 memory leak。於是就得很小心寫,要注意每個步驟以免某些狀況下忘記 ->delete() 而造成 leak:

my $html = HTML::TreeBuilder->new_from_content($body);
foreach my $element ($html->look_down('a', qr{某個 RE 條件})) {
    if (符合某個條件) {
        # 做某些事情...

        $element->delete;
        $html->delete;
        return;
    }

    # 做某些事情...
    $element->delete;
}
$html->delete;

後來找到了 Object::Destroyer,利用另外一個 object 的存活幫忙回收,於是就可以簡化成:

my $html = HTML::TreeBuilder->new_from_content($body);
my $htmlD = Object::Destroyer->new($html, 'delete');
foreach my $element ($html->look_down('a', qr{某個 RE 條件})) {
    my $elementD = Object::Destroyer->new($element, 'delete');
    if (符合某個條件) {
        return;
    }
    # 做某些事情...
}

這樣就不會 leak 了...