2010年12月28日 星期二

Android 開發筆記 - 關於反組譯 Android 程式,還真的不用 30 秒就搞定!

先前聽說許多關於 Android 程式很容易被逆向工程,我也抱持這樣的觀點去戳 Android 開發者 XDD 直到今天開完會,前輩跟我說 Android 產生出的 dex file 很難閱讀,因此我就去找一下相關資料,找到一篇 2007/11/28 How to decompile .dex file on Android 文章,上頭也是敘述要去解讀 dex 有點不好讀,但隨後找到 2009/08/08 decompiling DEX into Java sourcecode 這篇文章,細看一下原來還有 dex2jar 的方式!這下可好了...


所以,咱們來試試吧!我在 Ubuntu 10.04 的環境下測試


準備工具:



  • dex2jar

    • A tool for converting Android's .dex format to Java's .class format



  • JD-GUI

    • JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. 



  • 一份編譯好的 apk 檔案



接著就把 dex2jar 解壓縮出來,並執行


$ cd dex2jar-0.0.7.7-SNAPSHOT
$ sh dex2jar.sh MyWidget.apk


然後就會看到一個對應的 jar 檔:MyWidget.apk.dex2jar.jar


解壓縮 JD-GUI 去開啟 MyWidget.apk.dex2jar.jar 檔案,不囉唆,程式碼就可以看了!整個過程不用 30 秒吧!打快一點可能 3 秒喔 XD


dex2jar2JD-GUI


這...還真的叫我難以投入 Android 開發啊 *誤* 不過仔細一看,之前在 MyWidget 寫的程式,有些地方式用 R.layout.main 的地方,已經直接被換成數值了,但我想這樣也不會太難閱讀,畢竟整個 source code 都丟在你眼前了!更別提 dex2jar 仍然很活躍地進行維護及開發,真的開感謝一下對岸,第一次看到簡體中文有那種莫名的感動 XD 太多東西都嘛是英文先衝啦


至於 dex2jar 的原理,可以參考這邊:介绍dex2jar的核心思想,有原理才會有相對應的解法喔!


順便筆記一下 iPhone 的:


arm-elf-objcopy -I binary -O elf32-littlearm iPhoneApp out.elf && arm-elf-objdump -marm9 -D out.elf


但組語嘛,雖然學過,但我想我應該看不下去 XD


最後,關於逆向工程的事情,如果程式碼非常冗長,那一樣不好啃啊!所以,玩玩就好。


2010年12月26日 星期日

Mac mini 拆殼 + 更換記憶體

關於更換 Mac mini 裝備的事宜,可以參考很多網路上的資料,最好也看一些影片!這整個過程不是痛苦兩字可道盡 XDD 畢竟一台 Mac mini ,可是花了 19990 購買的 :P 心臟真的要大顆一點...


這個由來是因為最近 DDR3 1066 2GB 的記憶體一條才 650 元,所以心一橫就買了兩條,幫自己的 Mac mini 更新啦!在官方的 spec 中,敘述是最大支援到 4GB (兩條RAM),但有一些影片跟文章說明只需更新 EFI 可達到支援 8GB (一條插 4GB),思考了良久,覺得用不到 8GB 這麼多,再加上買兩條 4GB 的記憶體增加花費,故最後只敗了兩條 2GB 的金士頓囉!至於更換硬體設備,有錢的話可以去找蘋果店家,花錢請他們更換囉。這篇純粹個人記錄用,不見得適用於其他人 :P 請留意!


列一下參考資料:



回到主題,在此僅記錄個人的拆機過程,請先多看看其他人的拆機過程,少說看個三篇吧!我是 2010/04 買的 Mac mini ,現在已經算是舊版的,版本應該是 2009 年初版,比 2010 年中的版本還要厚喔。


基本工具


準備工具,我使用一隻水果刀 + 鐵尺,做為開路先鋒!用水果刀從細縫插入(記得刀鋒朝外),硬撐出可以讓鐵尺插入的空間,此後就把水果刀拔掉了。開殼方式類是上述影片 "How to open mac mini..." 裡頭的過程,但不一樣的是我使用寬度短小的鐵尺!所以十分不方便。請小心使用水果刀跟鐵尺,不要以為鐵尺不會傷人,在擠壓過程中,我被鐵尺割到了 :P 所幸只是很小的皮肉傷,也讓我之後移動鐵尺時都會包一張衛生紙。至於插入到真的把整個底盤弄出來,大概花了 15 分鐘吧 XD 一直不斷地"輕輕弄" ,最後被傷到後獸性大發,就比較敢用力!只是我用得是寬度小的鐵尺,必須在一旁移動和扳開,導致 Mac mini 的底部有明顯被磨擦的痕跡。


插入鐵尺+拔掉水果刀
先透過水果刀撐出較大的縫隙,再用鐵尺插入


右邊
終於把右邊都先敲開了,已經可以看到磨損的樣貌!原先想要把一根根"輕輕地"扳開,但搞到最後啥都不管,直接在中間移動嘗試,硬把鐵尺彎大力一點直到整個底盤被弄出來,這真的是經驗論!心臟要大顆啊。只要一邊被撬開後,其他兩邊都會很自然地弄好 XD


底部

左邊

快拆完
等到右、底、左都被撬開後,接著可以把他反過來,從面板那邊慢慢地扳開囉 !


拆完殼
直到最後殼與機子分開了,接著要把機子上方的板子移開,但移開前要先把左邊兩處跟右上方的土金色移開,好像是天線的樣子。左邊兩處就只要慢慢往上移就行了,右上方那個要先去把底部的卡榫輕壓,就會彈跳出來。


天線跟彈簧
左下位置的天線與彈簧,都要保存好


注意有條線被膠帶貼住
左下的天線有被膠帶黏起來,我是有把它輕輕撕開,把天線移開,這樣才方便把機殼上方移掉


底部的樣貌
機殼上方有一顆硬碟,除了剛剛提到的 3 個天線外,此殼還有 4 處的小螺絲要拆,以及與機殼連線的排線喔!等到這些都清光後,再慢慢地把殼子往上移開來,由於底部還有像 PCI 卡的連接方式,所以需要慢慢地往上,這些細節請多看一下影片。


更換完記憶體
終於移開機子上方的部分,可以看到記憶體的擺置位置,我也順手換掉兩條原裝的 SAMSUNG 記憶體啦!


最後再慢慢把東西還原,收工!而成果嘛,如下圖:
兩條記憶體 + 白色屑屑 底部嚴重損傷
兩條被替換的記憶體、Mac mini 的損傷以及一台被更新成 4GB 的 Mac mini 啦!線都接好後,可以先開機檢查(左上角的[蘋果]->[關於這台Mac]->[更多資訊]->查看記憶體是不是顯是 4GB 囉),再把機殼蓋上,畢竟機殼對我這個新手來說真的太難拆了。


買了新螢幕

工作之後,錢花在 3C 上頭越來越不手軟!記得大學時期,第一次打工的錢,就花了 1500 買一張 AGP 8X 的顯示卡,彌補了一下前一年組的主機,當時為了省錢只用了一張 PCI 顯卡撐著,所以賺到錢就買上想到顯卡的升級。


去年底,主機掛了後,我也花了快兩萬元在主機身上, 今年四月,花了快兩萬五買了 Mac mini 跟周邊對應產品(這台可不是年中轟動的標錯價的 Server 啊),幾天前又花了五千多,買了一台 22" LCD 和 2 條 1066 的筆電記憶體。看來,今年稱得上花大錢的年代!3C 這種產品,沒事還是不要去留意,不然就會像我一樣不停敗下去 :p


呼,最近也有一些態度要改變,像是 3C 產品就是用來享受用的,但我總會有那種壞念頭,好比如花錢買了主機,就勢必要給它賺回來,例如大學那張顯卡,正是從事網頁相關的工作內容等。雖然成果也算是多少有賺回來,但這樣的心態反而給自己更多無所謂的壓力感。我想,我該試著多享受一下購物,而不是逼著自己賺錢啦!


忘了一提,這次購物的理由是...因為 Mac mini 轉 D-Sub 時的輸出,在我之前那台 19" LCD 1440x900 上,最多只能選擇 1280x768 的解析度,對於我這種愛看 code 的人,這種高度有點吃力。而 2GB DDR3 1066 的筆電記憶體,其實也是要拿來擴充 Mac mini 啦,思考了很久,最後還是看在最近的低價敗了。


2010年12月24日 星期五

驗證 GTalk 使用明文/加密文傳遞聊天內容

我一直以為 GTalk 是加密傳送聊天訊息的,直到今早一位在火燙公司的學弟,請我跟他用 GTalk 聊天時,意外發現 GTalk 原來不是完全的加密聊天的。


情境敘述:


目前共有三台電腦



  1. 第一台是 Ubuntu 10.04 安裝 Pidgin 2.6.6 版本,上頭標示支援 GTalk SSL/TLS 加密傳輸,使用 A 帳號

  2. 第二台是 Windows XP,安裝 GTalk 官方繁體中文版 1.0.0.105,此版本不提供加密服務,使用 B 帳號

  3. 第三台是 Windows 7,安裝 GTalk 官方英文版 1.0.0.104,此版本提供加密服務,使用 C 帳號


測試結果:



  • 當 A 跟 B 進行聊天時,發現兩者傳遞的內容都是明文的 XML 資料,其中 <body> 內記錄的就是聊天內容,除此之外,當然連帳號資訊都是未加密的

  • 當 A 跟 C 進行聊天時,此時兩端會使用加密傳遞

  • 當 B 跟 C 進行聊天時,此時兩端皆會使用不加密傳遞,結果跟 A 與 B 一樣


因此驗證了一件事,不要以為自己的 IM client 標榜加密,就等於跟人溝通都會加密的!還是會看對方情況來處理,例如 B 跟 C 都已是官方的軟體,只是一個是繁體版,另一個是英文版,但繁體版不加密,導致英文版最後也配合繁體版進行不加密的通訊。


查了一些文章,這篇說的跟我測的差不多:正面全裸的Gtalk 1.0.0.105,慎用!


所謂的加密部分,只能確保 gtalk client 端連到 google server 端的過程,但從 google server 連到對方那端時,不見得會加密(例如對方透過 http 在 GMail 上用)。除此之外,這次測到的一個大問題是:


就算你自己的 gtalk client 可以提供加密連線,但對方不提供時,結果自己連到 google server 這端也就不走加密


呼,還是萬試謹言慎行啊!還有,快去用英文版就好!


最後附上一些圖示:


gtalk 加密
GTalk 使用加密時的封包訊息


gtalk未加密
GTalk不使用加密時的封包,其中 <body> 儲存的就是聊天訊息,此例為 "Hello" 訊息,除此之外連同通訊雙方的帳密資訊也是曝光的,並使用可讀性佳的 XML 描述


2010年12月18日 星期六

Windows 7 常用免費軟體

回老家,順便重灌一下電腦,神清氣爽啦,順便記一下最近常用的免費軟體:



工作類:



Firefox Plugin:



Google Chrome Plugin:



筆記:


XMarks 可以把書籤資料紀錄在 Server 上,該 Server 可以是自己架的,也可以直接用 XMarks 上面的。而多個瀏覽器的好處,我可以把工作上的同步在 Google Chrome 上頭,然後把家裡用的同步在 Firefox 上頭,如此一來也可以分得很乾淨,另一種用法也可以用目錄分辨工作或家用。另外,我在 Firefox 上僅使用書籤工具列,好處是看到不錯的網頁就直接拖拉分頁進去記錄,而書籤工作列上只要目錄分的好,就不會有顯示上的問題,只會有操作上的便利。