安卓逆向入門(一)

本文作者:怪大叔

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

前言:

這段時間大師傅安排了安卓逆向練習。首先 0 基礎沒有代碼開始學起也是可以的,不用太過於執著於」我沒有代碼功底就學不會」,我可以很明確的說,我也沒有多少代碼功底,都是偶爾被大師傅逼著看。但是簡單的也就僅僅能看懂,寫出來又是另一個問題了。有時候我們學習很多東西需要的代碼知識不多,記住一些主要函數,語句就好了,不懂就有道翻譯(很多也就是英語,我英語也不行,也不用想著不懂英語就不能編程什麼的。)或百度,用到的時候對著那幾個主要的函數,語句你還能不懂?

00X1:

安卓逆向基礎工具有:

  • AndroidKiller (需安裝JDK)

  • ApkIDE (需安裝JDK)

  • ApkToolkit

  • APK上上籤

安卓模擬器推薦:

  • 夜神模擬器

  • 海馬模擬器

這些我們用的工具僅僅是AndroidKiller,模擬器可以隨意夜神模擬器特性就是不卡,方便但是很多不兼容;海馬模擬器,性能穩定但易卡;這裡我們選用夜神模擬器。

常用基礎的smali語句函數有:

  • Const 賦值
  • return-void返回空
  • Goto 跳轉
  • Cond 分支

判斷語句:

  • if-eq 等於
  • if-ne 不等於
  • if-lt 小於
  • f-ge 大於等於
  • if-gt 大於
  • if-le 小於等於
  • if-eqz 等於
  • if-nez 不等於
  • if-ltz 小於
  • if-gez 大於等於
  • if-gtz 大於

關鍵詞:

  • Success成功
  • Fail 失敗

詳細可以參考:Smali基本語法 - lee0oo0 - 博客園

00x2:

首先想破解一款小遊戲需要最先知道它是否加密加殼,因為 0 基礎開始,加密加殼就先不管;然而去打開這款遊戲查看是否有充值功能,以及整個流程。分析這款小遊戲對於你來說能破解的幾率有多大,如果大那麼你是否有這麼多的時間去調試測試更改破解,值不值得去破解,再綜合你本身的能力去考慮這件事;如果不行那就先保留下來,再找另一個小遊戲去破解。

這裡演示的小遊戲是「經典瑪麗」,用AndroidKiller查看有沒有加殼

沒有加殼那麼先打開這款apk看看

首先出來的是一個廣告,這裡得知是移動應用的,也就是可能存在收費介面也可能是移動的收費介面。

進入遊戲我們可以看到這款遊戲是存在充值的

點擊「超值裝備禮包」查看

點擊「立即購買」

這裡可以很明確的看到是中國移動的收費介面。

這裡最簡單的最基礎的就是搜索關鍵詞,關鍵詞在哪?點擊購買再退出的時候就有 比如:

「充值失敗」這就是關鍵詞,我們可以嘗試性的去用AndroidKiller搜索。

「充值失敗」需要轉為Unicode編碼進行搜索 並且跟進這個位置。

一般我們直接看smali代碼很蛋疼所以可以轉為java查看

這樣我們就可以很直觀的看到這代碼是說什麼的

前面也提到了 Success是成功 Fail 是失敗,那麼這裡我們直接把Fail 改成Success試試。

更改需要保存再點擊編譯

原來安裝在模擬器上的原版「經典瑪麗」需要卸載掉 才能安裝修改後的「經典瑪麗」,因為簽名不同。

修改過後的「經典瑪麗」在購買再退出就什麼提示也沒但是也沒有購買成功,其實我們改的只是一個分支 $後面有數字的smali文件 其實是分支,那麼我們改的時候可能少改了。

那麼我們可以報著有殺錯沒發過的心理去修改 直接把全部的「onFail」替換為「onSuccess」

因為簽名都一樣所以這裡就不用再去卸載了,直接安裝就好。

好了,這就修改成功了。那麼你覺得出現了「充值失敗」不太美觀,這裡大家可以自行修改,相信大家也懂怎麼修改吧?

好了,那麼說到不美觀,一打開的時候出現了兩個移動廣告圖片試試也得去掉?

這裡介紹的方法簡單粗暴,因為它是圖片我們不從代碼入手直接刪除這兩個圖片就好。

總結:

多試多練,代碼不懂就多看,英語不行也多看,沒有說代碼基礎,英語基礎一定要達到什麼什麼程度;不會說不會寫,那麼至少能模糊看懂也就夠了。


推薦閱讀:

演算法逆向1——簡單演算法逆向
GCHQ 對卡巴斯基實驗室的商業軟體進行逆向工程,卡巴斯基實驗室是否可以提起法律訴訟?
為何我國可以生產j20,卻生產不出好的汽車?
有Android逆向基礎如何學習Android漏洞挖掘?

TAG:软件破解 | 逆向工程 | 软件安全 |