【版權全部,轉載請註明出處。出處:http://www.cnblogs.com/joey-hua/p/5138585.html】html
項目關鍵java代碼爲,將tv設置爲從jni讀取的字符串,這裏的破解內容是直接從apk動態調試修改最終顯示在tv裏的字符內容java
1.工具介紹android
Apktool,反編譯源碼用git
Android studio+smalidea插件,動態調試用github
2.準備工做shell
A.配置插件app
下載插件smalidea,地址https://bitbucket.org/JesusFreke/smali/downloadside
這個工具
下載完成後,打開android studio的Settings | Plugins,點擊選中下載好的zip壓縮包。並apply。idea
此步驟的目的是讓android studio能識別smali代碼,並能正常下斷點。
B.反編譯apk
下載apktool並反編譯apk
3.動態調試
首先在android studio新建一個項目,而後把剛纔反編譯的smali源碼
所有拷到項目的app | src | main | java下,把這個目錄下以前的所有刪除。
在MainActivity$1文件的這裏下個斷點,以下圖
接下來先以debug模式啓動程序,注意,是在手機上啓動。
若是你手機上有這些選項,設置 | 開發者選項 | 選擇調試應用(選擇crackme)| 等待調試器(勾選),
而後就能夠直接點擊程序圖標,會出現Waiting For Debugger對話框。
若是手機上沒有這些選項,能夠用adb命令的方式啓動,先從反編譯的androidmanifest.xml中找到對應的包名com.example.crackme和主activity名MainActivity。而後cmd窗口輸入
adb shell am start -D -n com.example.crackme/.MainActivity
手機上出現Waiting For Debugger對話框。
這時打開as的,大概等待兩三秒就會出現
而後再點擊as的Run | Edit Configurations(注意不是DDMS的run),新建一個Remote並起碼假設crack,填寫端口爲上圖的com.example.crackme對應的端口8700,選擇source using module’s classpath爲咱們以前建立的項目,點擊OK
如今終於能夠開始調試了,點擊Run | Debug ‘crack’,注意必定要關閉其餘IDE以防止端口占用,不然會出現相似下面的錯誤
程序已經調試起來了,由於咱們設斷點的地方須要先點擊一下按鈕「檢測是否被crack」,停在了斷點處
這就和java斷點調試差很少了,能夠watch寄存器v0,v1,v2等,這裏v1接收的是從jni層返回的字符串
這裏咱們只須要把最後程序界面的文字顯示成huaxiaozhou就能夠了,找到textView設置的從jni層返回的字符串
對mTransformed右鍵Set Value,在雙引號內輸入huaxiaozhou並敲回車鍵,會出現等待框
而後此變量的值就變了,這時候點擊Resume或stop
手機界面上就顯示huaxiaozhou了。