發表文章

目前顯示的是 四月, 2011的文章

不要小看華人呀,Android App 的逆向工程!

還記得在某次的 COSCUP 與 Google 的龐教授,交流了一些 Android 方面的意見。由於他專精於 Compiler,我們也對 Dalvik Virtual Machine 的部份有些許的討論。當時感到非常榮幸,也覺得驕傲,因為這樣發光於全球的 Project ,也有華人在其中,更難得的是就在眼前。

最近空閒時間在研究一些 Android 的實作,煩腦之際,於 Google Code 發現了一個對岸朋友針對 apk 的逆向工程研究,有對 Dalvik VM 做了一系列的研究和說明,並開發了一支 apk 反組譯工具 [dex2jar]。如其名,該工具能將 DEX(Android apk 的格式)還原成 Java class 檔案,但更有趣的是,反向工程後的結果,不單只是 Binary 或 Bytecode,而是有『相當完整』的 Java 原始程式碼。

此外,在該 Project 的 Wiki 上,作者用『中文』記載了 [dex2jar] 的設計細節和反向工程所遭遇的問題,並寫了相應的解決手段,對技術有興趣的人可以去看看。 :-P
後記
如同該 Project 首頁所標註,還是請玩家在把玩這支程式時要『遵循 Google 相關協議與相關法律法規』。

Python之我見

圖片
對一個『慣C』人來說,[Python] 實在是讓人無法去接受的程式語言,無論是效能、速度還是所吃的系統資源,都讓人不滿意。但以一個類 Script 語言來看待它,又是個極度強大又好用的東西,開發時程也比其他傳統語言短相當多,開發完成之後,也有相當大的再擴展和加速的空間。所以,若是開發出來的東西,沒有絕對強烈的『即時』和『精巧』需求,用純 Python 來寫,會相當合理。


應用需求導向

若您是熟悉 Windows 的開發者,可將 Python 視為 [Visual Basic],是一個著重於『立即應用』的存在(當然在本質上不相同,後者相對簡陋且更著重於【可視化程式設計】)。他們最相似之處就是開發模式,因為長久下來,已經有太多人為 Python 寫出無數的模組、功能,以致開發者只需要懂得引入和使用這些模組,就能達成所有能想到的功能,這點與 Visual Basic 的『控制項』開發模式沒什麼不同。

在今天,由於太多人的貢獻成果,使 Python 開發者幾乎無所不能,再者,其已經跨足了許多平台。對開發者而言,同一支程式,只要注意引入模組是否能跨平台(大多數功能多半都有解決方案),就能輕易寫出能運行於不同平台上的應用軟體,稱之跨平台的 Visual Basic 可不為過。
但如同許多前端網頁開發者隨處濫用 JavaScript + HTML,濫用 Python 的人也有不少。由於 Python 過於易用,許多人在開發上只求達成功能,忘了效率的考量(這觸動了『慣C』人最大的忌諱),過去一些比較著名的例子就是: emesene(Linux 上常見的 MSN 軟體) 和 iBus(輸入法系統架構),速度慢或吃光系統資源還不打緊,甚至是造成系統鎖死當機的狀況。

獨特的語言特性
說到 Python 語言本身,它有極為結構化的設計,又支援各種先進的開發模式,物件導向等技術當然不會少,以致使用 Python 來開發大型專案是非常可行的。若要舉個實例,大概就是 Google 的各項網路服務。
Python 擁有獨特的語言規則,像是捨棄『{};』等包裝語法,並強迫對齊等設計。這使得開發者不得不簡化和編排自己的程式,不能再寫出長又難以維護的程式碼。當然,這會讓已經習慣傳統語言規則的開發者,會有困擾和不習慣,需要一些時間適應。不過,一旦接受了 Python 的設計習慣,便可輕易的使用。

適用範圍
很明顯,Py…