<div align =center>Android逆向工程 實踐篇</div>
上篇給大家介紹的是基礎(chǔ)+小Demo實踐. 如果沒有看過的同學(xué)可以進(jìn)去看看.(<a href="http://www.reibang.com/p/b475a621abae">逆向工程 初篇</a>)<p>
本篇主要給大家介紹如何反編譯后修改源碼, 并打包運行在手機(jī)上.
先介紹下本篇文章用到的工具和資源.
1: Android Killer 1.3.1.0 (工具)
2: crackme.apk
還沒有破解之前會提示隨意輸入用戶名密碼會提示下面的信息.
下面我們來打開apk, 看看源碼是怎么回事.
我先用工具(Android Killer) 打開creckme.apk
這個是項目概要. 我們主要看的就是MainActivity 這個類, 其它的不看也沒什么關(guān)系. 如果有耐心和興趣的,朋友可以去看看MainActivity里面具體寫了什么, 判斷機(jī)制是什么.
破解步驟:
1: 點擊注冊按鈕后,彈出的toast 信息,這里可以分析出來,是什么條件觸發(fā),使程序彈出toas. [關(guān)鍵詞搜索]
2: 這個程序,就上面那一步已經(jīng)足夠破解了.
<h3> 下面打開MainActivity看看具體邏輯.</h3>
如果看不懂smali可以使用
下面我們找到程序入口 onCread 方法. 為什么要早這個入口呢? 我們要在這里找到初始化控件的函數(shù),對于這個程序來說, 只有一個Buttong(按鈕)比較容易找到,我們可以在onCread里面找到Button的監(jiān)聽(setOnClickListener)
中間是有幾句代碼沒有截圖.
接下來是重點, 大家看到 我前面提到了的方法, setOnClickListener 沒有?? 這里就是一個點擊事件, 但是這里沒有發(fā)現(xiàn)Toast 相關(guān)的信息. 這個MainActivity.smali都沒有發(fā)現(xiàn). 難道搞錯了??. 同志,別灰心, 看看項目列表,是不是還有一個MainActivity$1.smali, 這個是一個內(nèi)部類,我們打開這個smali可以看到有一個onClick方法, 這里就是在點擊onClick后,觸發(fā)的地方.那么我們要具體的看看里面的邏輯.
getText()方法代表是得到我們輸入的內(nèi)容. trim()方法代表去除多余的空格.
if-nez v0, :cond_0 條件判斷語句, 當(dāng)滿足某些條件之后會做什么.
const v0, 0x1 定義一個整形4字節(jié)的局部變量v0 它的值是1. 假如條件瞞足,也就是v0!=0 會跳轉(zhuǎn)到 :cond_0 執(zhí)行另一段代碼. 假如我們修改一下v0 的值,那么他就不會跳轉(zhuǎn)到 :cond_0的里面. 也就是破解成功.const v0, 0x0 這樣就可以讓程序彈出 注冊成功的Toast.
程序到這里已經(jīng)破解完成了. 感覺步驟很繁瑣...
下面教大家一個簡單一點的方法.一分鐘左右就可以搞定.
大家看到第一張圖片, 程序提示: 無效用戶名或注冊碼 這個是最直接的破解信息.我們可以在程序里面搜索下這個關(guān)鍵詞.<BR>
<h5>*搜索范圍記得換成整個項目</h5>
文本轉(zhuǎn)Unicode 后如果搜索不到,就轉(zhuǎn)回來搜索.
上面是我搜索的結(jié)果. 下一步搜索下 0x7f05000b 這個是unsuccessed的id,程序會通過這個id 來找到[無效用戶名或注冊碼]字符串.
我用箭頭標(biāo)出來的大家還熟悉嗎??? 就是上面我們改過的地方.這么容易就找到了.
<a >工具下載地址</a>
如果沒有找到,就自己去下載把. 我上傳了csdn, 沒有那么 快顯示出來的.
鏈接: http://pan.baidu.com/s/1hsunUcc 密碼: rfbn