Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 對MobSF的源碼進行分析

對MobSF的源碼進行分析

編輯:關於Android編程

前言

首先我們需要分析MobSF的源碼,明白一個apk的靜態分析的步驟是什麼。經過分析,如何將apk文件解壓就是進行apk行為分析的第一步,確切的說應該是第二步,第一步應該是去殼。但是為了簡單起見,去殼這一步就暫時忽略。

首先從MobSF的源碼分析開始

運行MobSF
首先從網頁入手進行分析,啟動服務端後打開127.0.0.1:8000,進入開發者模式:
這裡寫圖片描述vcq9z/K3/s7xxve0q7Xdyv2+3aGjvPK1pbLCz+vSu8/Co6y0q7XdtcTK/b7dsdi2qMrHyc+0q7XELmFwa87EvP6jrLSrtb3ExMDvse21pc231tCyosO709DLtcP3o6zEx8O0v8+2qMrHyrnTw2phdmFzY3JpcHS0+sLrzeqzycnPtKu2r9f3oaM8YnIgLz4NCtTasb7Ss7XEamF2YXNjcmlwdLT6wuvW0KOsv8nS1L+0tb3KudPDQUpBWLy8yvXJz7SrwcvOxLz+o7o8YnIgLz4NCjxpbWcgYWx0PQ=="這裡寫圖片描述" src="/uploadfile/Collfiles/20160505/20160505090909759.png" title="\" />
顯然這個文件被Post到../Upload/頁面。
但是通過搜索整個源代碼文件夾,並沒有發現Upload頁面,雖然之前沒有使用過Django框架,但是有Flask的經驗,猜想必定有一個定義url的文件,在MobSF的文件夾,果然找到了一個urls.py文件:
這裡寫圖片描述
打開發現果然沒錯,這裡詳細描述了http消息和在服務器上的處理方法(函數)之間的關系:
這裡寫圖片描述

分析在apk文件在服務器上的處理流程
從urls.py文件中,可以看到,點擊上傳按鈕後,處理apk的函數是MobSF.views.Upload,找到MobSF文件夾下的views.py,打開找到其中的Upload函數:
這裡寫圖片描述

上傳文件進行分析
上傳一個apk進行分析,可以在服務器終端看到如下運行日志:
這裡寫圖片描述
和Upload函數中的提示信息進行核對,發現完全一致:
這裡寫圖片描述 繼續沿著這條線走下去
這個函數最終會向客戶端發送一個json數據包,在這個數據包中包含了以下內容:
response_data['url'] = 'StaticAnalyzer/?name='+request.FILES['file'].name+'&type=apk&checksum='+md5
response_data['status'] = 'success'
這裡寫圖片描述
首先包含了一個URL,不管這個json在客戶端會產生什麼,總之Upload函數的功能在返回這個json數據包之後就完成了。那麼猜想客戶端必定還要向服務器發送消息啟動分析。
前面說過在urls.py文件中,包含了所有的http請求和對應的處理方法,找到包含StaticAnalyser的項目:
這裡寫圖片描述
顯然,有一個StaticAnalyzer.views.StaticAnalyzer的函數負責靜態分析。
在StaticAnalyser文件夾中的views.py中找到這個函數:
這裡寫圖片描述 正式開始
將上面這個文件中的函數折疊起來,整個文件的結構就非常清楚了。
研究StaticAnalyser函數,就是研究整個靜態分析的過程:
這裡寫圖片描述
找到第一個調用的函數(前面計算md5值等部分就可以暫時忽略):
line 389: FILES=Unzip(APP_PATH,APP_DIR)
也就是說,apk文件其實是一個zip文件,為了將證實這一點,將一個後綴名為.apk的文件後綴改為.zip,打開
這裡寫圖片描述
顯然是這樣的,在裡面可以找到所有的apk源碼。

結語

下一步就是實現對apk文件的解壓,將使用zlib庫實現這一功能。
後續的任務就是一步一步實現StaticAnalyser函數其實是views.py文件中的所有功能,並將他們整合到一起,再使用Qt做出圖形界面。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved