1. 程式人生 > >Android逆向例項筆記—破解第一個Android程式_crackme02

Android逆向例項筆記—破解第一個Android程式_crackme02

本例項來源於《Android軟體安全與逆向分析》這本書,作者是看雪的非蟲,感謝提供這麼好的書和例項。 一、工具 幹什麼都得一個好工具對吧。 1.apkIDE 反編譯呢,我這裡使用的是apkIDE(apk改之理),工具的話自己百度吧。個人不喜歡留一些不需要的東西在網盤裡,難得整理,百度一大堆。我這裡就給一個官網咖,免得有些童鞋找錯了地方。現在這下下載網站一不小心,什麼全家福都來了。好了,扯得有點遠了。我用的就是最新版,我個人就喜歡最新版。(最新版可能有些問題) http://www.popotu.com/popo/apkide.html
上個樣圖:
2.藍疊 只要是模擬器都可以,我個人覺得這個好用。隨便找一個都行。官網:http://www.bluestacks.cn/ 樣圖: 二、檢視源程式 這裡我們直接拖拽crackme02到藍疊中,安裝
然後我們點開看看效果。
我們可以看到左上角有個程式未註冊。我們隨便輸入字元,點選註冊。發現Toast提示我們,無效使用者名稱或註冊碼。 此時,我們就該上我們的工具了 三、反編譯 1.工具的使用 這裡詳細介紹一下apkIDE的使用。 開啟apkIDE
點選專案,然後點選開啟apk,選擇我們的crackme02。 看輸出框的進度,之後就可以進行我們的操作了。
反編譯之後的檔案目錄
其中smali中存放的是反彙編的程式碼。 res是所有的資原始檔。 都與開發目錄一致。 2.strings.xml 我們知道在開始的時候,我們一般會一些字元放到strings.xml檔案中去。這裡我就開啟strings.xml檔案。
檔案在:res-values-strings.xml
現在我們看看strings.xml中的內容
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">Crackme0201</string>
    <string name="hello_world">Hello world!</string>
    <string name="menu_settings">Settings</string>
    <string name="title_activity_main">crackme02</string>
    <string name="info">Android程式破解演示例項</string>
    <string name="username">使用者名稱:</string>
    <string name="sn">註冊碼:</string>
    <string name="register">注 冊</string>
    <string name="hint_username">請輸入使用者名稱</string>
    <string name="hint_sn">請輸入16位的註冊碼</string>
    <string name="unregister">程式未註冊</string>
    <string name="registered">程式已註冊</string>
    <string name="unsuccessed">無效使用者名稱或註冊碼</string>
    <string name="successed">恭喜您!註冊成功</string>
</resources>
我們可以很容易的看到,Toast提示我們錯誤的地方

3.public.xml 我們知道每個字元都有唯一的int型別的索引值。 於是我們開啟strings.xml上面的public.xml檔案。
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <public type="drawable" name="ic_launcher" id="0x7f020001" />
    <public type="drawable" name="ic_action_search" id="0x7f020000" />
    <public type="layout" name="activity_main" id="0x7f030000" />
    <public type="dimen" name="padding_small" id="0x7f040000" />
    <public type="dimen" name="padding_medium" id="0x7f040001" />
    <public type="dimen" name="padding_large" id="0x7f040002" />
    <public type="string" name="app_name" id="0x7f050000" />
    <public type="string" name="hello_world" id="0x7f050001" />
    <public type="string" name="menu_settings" id="0x7f050002" />
    <public type="string" name="title_activity_main" id="0x7f050003" />
    <public type="string" name="info" id="0x7f050004" />
    <public type="string" name="username" id="0x7f050005" />
    <public type="string" name="sn" id="0x7f050006" />
    <public type="string" name="register" id="0x7f050007" />
    <public type="string" name="hint_username" id="0x7f050008" />
    <public type="string" name="hint_sn" id="0x7f050009" />
    <public type="string" name="unregister" id="0x7f05000a" />
    <public type="string" name="registered" id="0x7f05000b" />
    <public type="string" name="unsuccessed" id="0x7f05000c" />
    <public type="string" name="successed" id="0x7f05000d" />
    <public type="style" name="AppTheme" id="0x7f060000" />
    <public type="menu" name="activity_main" id="0x7f070000" />
    <public type="id" name="textView1" id="0x7f080000" />
    <public type="id" name="edit_username" id="0x7f080001" />
    <public type="id" name="edit_sn" id="0x7f080002" />
    <public type="id" name="button_register" id="0x7f080003" />
    <public type="id" name="menu_settings" id="0x7f080004" />
</resources>

找到我們需要的unsuccessed。如果覺得很難找,那麼我們搜尋功能就來了。 在搜尋內容裡面寫上unsuccessed,然後搜尋範圍選擇選中的檔案或資料夾,左邊我們選擇public.xml。然後點選搜尋全部。
我們可以看到下面的搜尋結果顯示了出來,我們雙擊這一行,就會跳到我們所需要找的位置。
然後我們記住id:0x7f05000c。 3.smali 這個時候我們還得使用我們的搜尋。方法類似,不在贅述。我們要選擇搜尋smail

我們發現有兩處。 第一處const v1, 0x7f05000c    於是我們雙擊過去。 然後往上找跳轉的地方。     move-result v0
    if-nez v0, :cond_0

這裡第一行程式碼返回的結果存到v0中去,第二行是對v0進行判斷。如果值為0,就往下執行,也就是彈出未註冊的地方。如果不為0,就跳轉到cond_0處。
那麼也就是這裡如果跳轉成功就會跳轉,那麼程式就是成功。 四、修改smali 這裡是nez,不等於0,那我們就修改為eqz,等於0。
重點中的重點,修改完之後,一定記得儲存。不然可能編譯錯誤或者,沒有編譯修改後的程式碼。 然後我們點選編譯,編譯生成apk
看輸出框的進度和檔案路徑,我們就去查詢我們的apk。一般來說就在原apk旁邊。重新編譯簽名後的apk名字前面會加上ApkIDE_

五、驗證 重新編譯好的apk我們需要來驗證一下是否成功。 我們拖拽到藍疊中,安裝開啟。

這裡發現我們已經破解成功了。 最後給出apk的下載吧。 https://yunpan.cn/cMuPerPjatc6S  訪問密碼 24ce 說的有錯誤或者不對的地方歡迎指正討論。大笑