2011-12-22

Tags: 程式語言 , android , java

GTUG針對Android App上的保護與破解基本概念講的蠻清楚的,有興趣的可以參考下面這二個GTUG場子裡的影片。





在攻擊(破解)方面的流程大致是下面這樣

  1. 先想辦法root你的anroid手機,接著用adb(下面這行指令)把apk從手機裡給挖出來。
    adb pull /data/app "your destination directory"
  2. 利用apktool、dex2jar、jd-gui將程式反組譯(可參考這篇文章),相關操作指令如下。
    apktool d z:/yourapp.apk z:/yourapp
    dex2jar classes.dex
    jd-gui classes_dex2jar.jar
在防守(保護) 方面大致上有下列儿招
  1. 利用SDK裡的Progaurd來保護你的程式碼(可參考這篇文章)。要讓Progaurd生效,記的要在eclipse裡的android project的project.properties最後一行加上下面這行設定檔。

    proguard.config=proguard.cfg


    註:我目前用SDK R16的版本,發現裡面附的Progaurd會出現異常,有不少人也跑到官方站台提到相同問題,我後來把Progaurd換成4.7版,並參考該issue討論串裡comment34的做法解決此項怪問題。

  2. 把核心程式碼用C/C++實作,讓人很難反組譯,然後java層利用jni跟這些so檔進行溝通。
  3. 如果你的程式是client / server架構,把重要的核心資料放到server上,這樣就算client端的程式不幸被破解了也沒用,因為你可以在server端動手腳擋掉這些人。
  4. 程式中要放好儿個保護點。
  5. 程式碼在設計時,不要一判斷到有人非法使用就強制退出程式,而是要讓程式還能跑,但是出現一些怪問題(e.g. delay 10 secs,跳到不相關的視窗...etc),每個保護點出現的怪問題不要一樣,增加破解要浪費的時間。
最後...攻防很有趣,但是讓開發人員賺不到錢就不有趣了。所以...自己若是破解了什麼東西,請自high就好,就別亂丟到網路上了,這可是很沒品的事呀~~~