公告版位

新版部落格:blog.changyy.org

先前聽說許多關於 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

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


changyy 發表在 痞客邦 PIXNET 留言(1) 人氣()


留言列表 (1)

發表留言
  • Robert Wang
  • 版主你好,請問你寫的這句

    筆記一下 iPhone 的:

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

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

    changyy 於 2012/04/10 12:18 回覆