2016年1月21日 星期四

Android逆向工程之心得(附上小成品)

近期放寒假,總算有許多空閒時間了,咱們廢話不多說,進入正題吧!
以下用自己話來說,如有不正確見諒。

一、Android逆向工程是什麼?

有些人覺得是反編譯,但我覺得反Java更貼切些。
舉個例子:
假如有一樣商品經過以下程序
成分>配方>製作>包裝>實體商品販入市場
Android逆向工程就像是把整個程序倒過一樣
實體商品販入市場>包裝>製作>配方>成分
最終可以得到Java源程序

二、至於我們為何要逆向工程呢?
  
原因很簡單
1.apk美化、漢化(這部分反編譯大致上可完成)
2.apk去廣告、破內購、IP限制、Sim卡限制等等
3.修改apk內容(包括遊戲的數據、跨註冊免登入等等)
4.玩到後面,挑戰更複雜之殼層,有成就感(因人而異)

三、基本上會用到工具

1.解包、打包、反編譯、簽名
      有:apktool、apkdb、一鍵反編譯、adb反組建......

2.套裝軟件(包1.項目+Read、Write程式碼)
      有:akiller、apk改之理(apkIDE)......

3.脫殼、.dll、.so、smail 、xml
      有:.Net.reflectot、ildsm+ilsy、IDE、notepad+......
還有許多插件或是整合式工具,這邊就不多說。

四、Android逆向工程之大概思路

1.要逆向之Apk的編譯、反編譯、運行,檢查有無驗證等等
2.進行相對應修改的關鍵字或是英文查找
  例如:假設一款遊戲要修改金幣,則其中可能有  coin、gold,
    鑽石有 gem、diamond,支付有 pay、billing、purchasing等關鍵字存在。
3.如果順利找到關鍵字或是數值,則進行分析內容、方法、函數變化,
   然後判斷如何才能達到想要的結果,修改內容,保存文件。
4.編譯回去,在android模擬器上或是手機上運行,是否達到效果,
   如果沒有,就再回第3步分析(這邊會花的時間,與經驗有關囉)。

補充 :
(分析內容、方法、函數變化)這部分,
需大致看得懂smail文件中Davlik字節碼與java碼的對應關係,
然後可以轉換語言(C#、VB等等)方便分析,另外大概記一下語法,
以及opcode類中ldc系列(定義數值類)(Ex:i4=int32、i8=in64、r4=float32),
不懂的單字或是語法可以google或是百度一下,
最後附上小成品:
1.僅供測試研究使用
2.修改有風險,請自重
3.大多遊戲思路很像(Ex:onbillfinish、paysuccess支付成功
      get_gold取金幣、cooltime冷卻時間、Max hp最大血量)等等

雷電星海戰機-免費無限買鑽版

功夫少林-技能無CD版