哈,又標題黨了。。不過我必定竭盡所能,寫一篇最親民的入門文章。javascript
本文僅供學習交流之用,切勿用於非法用途,讀者若運用所學知識,進行非法任何商業目的或者非法牟利,一切責任由操做者自行承擔,與本人無關。但願讀者僅僅從瞭解原理,保護自身APP儘可能減小危害出發來閱讀本文。php
本文發佈自wing的地方酒館,轉載請註明出處。java
本文以一個最簡單的例子,來教給你們Android逆向入門的一些知識。因此首先咱們須要準備一個APK,作的簡單一些,就是一個EditText,已經一個按鈕,模擬驗證註冊碼。android
當驗證碼填寫正確的時候,則提示驗證成功,錯誤的時候,則驗證失敗。git
如今,咱們將列舉數種辦法,攻破驗證,來讓咱們輸入任何密碼就驗證成功。github
若是你嫌命令行很差用(這是個很差的開始),那麼還能夠用整合到一塊兒的可視化工具AndroidCrackTool github.com/Jermic/Andr…算法
首先,把咱們的apk用ApkTool給反編譯了,進入目錄發現有如下文件夾express
將apk裏面的dex文件脫離,而後使用dex2jar轉換爲jar文件。安全
在代碼裏,咱們能夠很明顯看到,onClick方法內,進行了驗證碼的判斷。此時咱們已經找到切入點。app
通常apk的代碼不會如此簡單,確定有不少複雜的代碼,這時候如何去尋找切入點呢,其實咱們能夠根據引用的資源來尋找,好比咱們註冊失敗的時候會提示註冊失敗,這時候,咱們去res文件夾下找string。
<string name="failed">註冊失敗</string>複製代碼
發現name爲failed,而後再去public文件裏尋找對應的id,找到了
<public type="string" name="failed" id="0x7f060022" />複製代碼
將這個16進制的id轉化爲10進制,獲得2131099682,在逆向獲得的jar文件,索引這個id,發現正好有引用,因此這一區域是關鍵代碼區域.
逆向離不開猜想,找到目標頁面,假設要獲取一個點擊事件,那麼就猜想類型爲Button的屬性,在混淆代碼裏,只有一個button叫作a,那麼只要找這個a的點擊事件便可。
到如今咱們已經有了切入點,接下來要開始達成咱們的目的了,那就是改變代碼邏輯。
既然咱們已經抓住了切入點,如何去破解這個註冊碼究竟是多少呢,接下來向你們介紹幾種開刀方法。
看到混淆代碼,閱讀之,發現這個註冊碼是根據日期生成的,因此咱們只須要人算出來當前日期輸入便可。
固然這種方法缺陷很大,由於通常算法不會如此簡單。
既然找到了判斷點,咱們去閱讀smali代碼。
注意第48行,這裏是執行了方法a(),也就是生成key的方法,把返回值交給了V0,後面全部邏輯都是根據這個判斷的,因此咱們能夠把v0給偷偷替換掉,假設咱們替換爲"123",這樣咱們輸入123,就能夠經過驗證了,代碼以下:
什麼叫作酒後真言?就是喝多了讓他本身吐出來真心話,那麼咱們怎麼讓他吐出來真心話呢?固然是打log了,嘿嘿嘿,咱們只要在v0後面打一條log,把這個v0打出來,驗證碼不是就本身出來了嗎,哈哈。 代碼以下:
這絕對是重頭戲,什麼叫作深刻敵營呢?就是打入敵軍內部,這裏說的就是動態調試拉~ 直接debug smali,看看各個寄存器裏的值,你說膩害不膩害~
首先,你須要有個2.3如下的AS,由於smaliidea這個插件不支持2.3,而後安裝這個插件。
接下來,把逆向出來的AndroidManifest.xml文件作一點小修改,給他加入一句
<application android:debuggable="true"/>複製代碼
以後從新打包,安裝到手機上。接下來把整個逆向出來的項目導入到AS中。
將smali文件夾添加爲source root。
接下來Run->Edit Configurations 添加Remote,稍等要修改端口。
這時,打開ddms,看到端口爲8600,這時候把窗口裏的端口改成8600.
將sdk改成10.
接下來,點擊debug按鈕,就能夠動態調試了。
接下來就是打斷點,在生成驗證碼以後,打上斷點,而後點擊按鈕。
就能夠打印出來函數調用棧,各個寄存器等信息,這時候咱們使用evaluate expression 打印出v0的值:
能夠看到,與咱們以前代碼猜測結果一致,驗證碼爲"0318",到此,咱們就完成了這個驗證系統的逆向。
到此,本篇文章的內容就結束了,但願各位讀者不要去運用這些知識去作壞事,天網恢恢。 反而咱們應該思考的是怎麼去防止別人破壞咱們的APP,好比增長混淆程度,簽名校驗,加固等等,雖然這些也能被破解,可是會增長難度。畢竟安全這件事,防君子不防小人。房子的門能夠被撬開,但是我上班出門仍然會關門。
若是你喜歡個人文章,請多關注我,也能夠加入個人Android酒館來討論Android技術:425983695
參考:
《Android軟件安全與逆向分析》
www.zybuluo.com/oro-oro/not…