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


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


1 則留言:

  1. 版主你好,請問你寫的這句

    筆記一下 iPhone 的:

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

    是甚麼意思?也有可以反組譯iOS IPA檔的工具跟指令嗎?

    版主回覆:(10/01/2012 01:11:11 AM)


    IPA 檔案用解壓縮軟體就可以打開來看。至於反組譯是將裡頭的 binary 檔案(通常跟app名稱一樣)翻成組語而已。其中解成組語是用 arm-elf-objcopy 和 arm-elf-objdump 指令,並搭配上述的參數來進行。我覺得返組譯的效果不佳啦 XD 供你參考。

    回覆刪除