3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
哈,又標題黨了。。不過我一定竭盡所能,寫一篇最親民的入門文章。本文僅供學習交流之用,切勿用於非法用途,讀者若運用所學知識,進行非法任何商業目的或者非法牟利,一切責任由操作者自行承擔,與本人無關。希望讀者僅僅從了解原理,保護自身APP盡量減少危害出發來閱讀本文。本文發布自wing的地方酒館,轉載請註明出處。本文以一個最簡單的例子,來教給大家Android逆向入門的一些知識。所以首先我們需要準備一個APK,做的簡單一些,就是一個EditText,已經一個按鈕,模擬驗證註冊碼。當驗證碼填寫正確的時候,則提示驗證成功,錯誤的時候,則驗證失敗。現在,我們將列舉數種辦法,攻破驗證,來讓我們輸入任何密碼就驗證成功。神兵利器ShakaApktool https://github.com/rover12421/ShakaApktoolDex2Jar https://github.com/pxb1988/dex2jarSmali https://github.com/JesusFreke/smaliSmaliIDEA https://bitbucket.org/JesusFreke/smali/downloads/如果你嫌命令行不好用(這是個不好的開始),那麼還可以用整合到一起的可視化工具AndroidCrackTool https://github.com/Jermic/Android-Crack-Tool首先,把我們的apk用ApkTool給反編譯了,進入目錄發現有以下文件夾其中,smali文件夾里,放的都是dex反編譯出來的smali文件,如果想改變應用的邏輯,只需要修改smali再重新打包即可。接下來,介紹幾種突破方法。尋找切入點直接尋找法將apk裡面的dex文件脫離,然後使用dex2jar轉換為jar文件。在代碼里,我們可以很明顯看到,onClick方法內,進行了驗證碼的判斷。此時我們已經找到切入點。資源引用法一般apk的代碼不會如此簡單,肯定有很多複雜的代碼,這時候如何去尋找切入點呢,其實我們可以根據引用的資源來尋找,比如我們註冊失敗的時候會提示註冊失敗,這時候,我們去res文件夾下找string。註冊失敗 發現name為failed,然後再去public文件里尋找對應的id,找到了 將這個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文件做一點小修改,給他加入一句 之後重新打包,安裝到手機上。接下來把整個逆向出來的項目導入到AS中。將smali文件夾添加為source root。接下來Run->Edit Configurations 添加Remote,稍等要修改埠。這時,打開ddms,看到埠為8600,這時候把窗口裡的埠改為8600.將sdk改為10.接下來,點擊debug按鈕,就可以動態調試了。接下來就是打斷點,在生成驗證碼之後,打上斷點,然後點擊按鈕。就可以列印出來函數調用棧,各個寄存器等信息,這時候我們使用evaluate expression 列印出v0的值:可以看到,與我們之前代碼猜想結果一致,驗證碼為」0318″,到此,我們就完成了這個驗證系統的逆向。結語到此,本篇文章的內容就結束了,希望各位讀者不要去運用這些知識去做壞事,天網恢恢。 反而我們應該思考的是怎麼去防止別人破壞我們的APP,比如增加混淆程度,簽名校驗,加固等等,雖然這些也能被破解,但是會增加難度。畢竟安全這件事,防君子不防小人。房子的門可以被撬開,可是我上班出門仍然會關門。如果你喜歡我的文章,請多關注我,也可以加入我的Android酒館來討論Android技術:425983695參考:《Android軟體安全與逆向分析》

本文由yidianzixun提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦