Android 靜態分析實驗記錄——軟件安全(二)

實驗目的

  • 理解安卓靜態分析破解概念
  • 掌握安卓移動設備基礎知識如:smali語法、邏輯判斷
  • 掌握安卓移動設備工具APKIDE的使用

實驗環境

  • 模擬器:夜神模擬器(OR 藍疊模擬器)
  • 使用工具:APKIDE

原理講解

  • 通過Dalvik的字節碼我們不能直接看到原來的邏輯代碼,這時需要藉助如Apktool或dex2jar+jd-gui工具來幫助查看。最終我們修改APK需要操作的文件是.smali文件,而不是對導出來的Java文件進行處理。

  • 安卓靜態分析破解的大致思路大致如下:

    1、安裝apk後進行一定程度的觀察和使用;

    2、使用工具反編譯apk,然後找到之前使用的一些關鍵詞,查看關鍵詞的位置,然後找到對應的smali文件;

    3、對smali文件進行觀察,要點就是找邏輯判斷語句及跳轉,分析代碼後手動修改邏輯,從而控制我們想要執行的語句如果看不到smali可以使用工具中的java還原查看原生的java代碼

    4、完成後保存,再編譯,運行破解後的app應用,查看是否破解成功。

實驗步驟

  • 在Android模擬器安裝好APK並嘗試輸入任意值點註冊後,會提示:無效用戶名或註冊碼。
    在這裏插入圖片描述
  • 將crackme02.apk文件導入到反編譯APK工具中,這裏使用的工具是APK改之理3.5.0.0。
  • 使用工具反編譯apk,然後找到之前使用的一些關鍵詞,查看關鍵詞的位置,嘗試搜索 “無效”字段:
    在這裏插入圖片描述
  • 成功找到一條記錄。點擊該紀錄查看,可以發現一個string標籤,標籤名unsuccessed:
    在這裏插入圖片描述
  • 搜索unsuccessed字段,成功找到相關記錄:
    在這裏插入圖片描述
  • 可以看到第一條記錄中的public標籤,標籤中有一個id:0x7f05000c。我們再嘗試搜索此ID:
    在這裏插入圖片描述
  • 可以看到第二行中的語句 : python const v1, 0x7f05000c
  • 這時候我們就離成功很近了! 同樣地,點擊進入,發現前面有一個判斷語句:if-nez v0, :cond_0
    在這裏插入圖片描述
  • 查看Smali邏輯判斷語法 :if-nez vA, :cond_**如果vA不等於0則跳轉到:cond_**
  • 我們在本文件內查找一下cond_0,發現了這樣一句,其中:Iget-object的含義是調用對象。
    在這裏插入圖片描述
  • 綜上,這兩段合起來的含義是如果v0不等於0,則跳轉到調用v0;而我們之前註冊失敗的情況下調用的一直是v1,即const v1,0x7f05000c;因而我們需要跳過這一句。
  • 可以令判斷語句修改爲: if-eqz v0, :cond_0,即如果vA等於0則跳轉到:cond_0在這裏插入圖片描述
  • 保存後,編譯apk,重新導入新生成的apk到模擬器中,完成後保存,再編譯,運行破解後的app應用,破解成功,顯示程序已註冊:
    在這裏插入圖片描述

實驗總結

靜態分析大致步驟:

  • 1、反編譯;
  • 2、代碼邏輯分析;
  • 3、代碼邏輯繞過修改
  • 4、重新編譯打包。

對抗靜態分析:

  • 1、使用代碼混淆技術,google提供了ProGuard代碼混淆工具,開發人員可以對自己代碼進行混淆;
  • 2、加殼,目前市面上常見的如愛加密,360的殼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章