編輯:Android編程入門
近幾年來,無線平台特別是Android平台的安全逐漸成為各廠商關注的重點。各種新的思路和玩法層出不窮。所以,筆者基於前一段時間的學習和整理,寫了這系列關於Android應用安全和保護的文章。
這5篇文章主要關注客戶端代碼和數據的保護,介紹了幾種針對Android應用的逆向分析、攻擊和防護的方法。內容比較淺顯,適合沒有Android安全研究背景的同學入門和科普閱讀。
根本上來說,手機客戶端是完全控制在使用者手上的,是不可信的,不應該依靠客戶端來實現任何安全、邏輯、業務相關的控制。客戶端應該是極“瘦”的,不做任何安全相關的邏輯上的操作和判斷,不存儲敏感信息,甚至像浏覽器一樣簡單,所有邏輯都由服務端處理然後下發結果。
1.為了用戶體驗,本地必須保存登陸者的認證信息,避免每次打開都需要輸入密碼登錄
2.為了用戶體驗和減少服務器負載,展示給用戶的頁面大多需要本地繪制
3.有一部分安全邏輯必須由本地控制,如本地手勢密碼的設置和驗證
所以必須要賦予本地客戶端部分安全相關和邏輯控制相關的功能。而這些功能和邏輯一旦在本地客戶端實現,就一定會面臨著請求偽造、邏輯篡改、代碼洩露等的風險。(可以類比於B/S架構中的以Js為代表的本地腳本:Js在本地運行,可能會被修改、注入、繞過,Js代碼會被攻擊者直接看到)。
不過好在安全本身就不是絕對的,是和場景和價值結合起來討論的。如果能通過一些方法,讓應用分析者分析應用的難度提升到一個非常高的水平,或者說讓應用分析者分析的過程消耗的資源大於其成功之後獲得的回報,再或者說是讓應用逆向分析、攻擊者獲得的成果對用戶的資金和安全感的造成的影響很小到可以忽略的話,我們也可以認為是安全的。
無線客戶端分析和保護的出發點就是基於上述背景。實現邏輯的控制和繞過,敏感數據的加密和竊取等。在應用攻防中,雙方各有優劣。無線應用因為自身所能做的事情有限,在防御中是處於劣勢地位。
攻擊者可以使用root權限,可以使用特殊構造的操作系統(TaintDroid等),可以獲取並修改應用的動態代碼(Xposed,cydia substrate)、系統的環境(Xposed),可以修改重打包應用的靜態代碼(smali/baksmali/dex2jar)。
而在在防御中,開發者為了保護自己的應用,也相應采取了各種方法,把自己應用的安全性寄托在了各種地方。
1.寄托於破壞攻擊者的工具。
2.寄托在java層代碼逆向、調試、閱讀的難度和java自身的機制上。
3.寄托在Native層(c/c++)代碼逆向、調試、閱讀的難度上。
這就分別對應了無線客戶端攻防的三個維度。
一般而言,對於無線客戶端的安全攻防上,企業或開發者由於精力有限可能無法滿足應用的安全需求,如鲠在喉般的遏制著應用的健康發展。
作者:阿裡
第一種:匿名內部類作為事件監聽器類 大部分時候,事件處理器都沒有什麼利用價值(可利用代碼通常都被抽象成了業務邏輯方法),因此大部分事件監聽器只是臨時使用一次,所
本文介紹 Android 界面開發中最基本的四種布局LinearLayout、RelativeLayout、FrameLayout、TableLayout 的使用方法及這
一、概述1. 什麼是Handler Handler是Android消息機制的上層接口,它為我們封裝了許多底層的細節,讓我們能夠很方便的使用底層的
Android Hello World 實例讓我們開始真正的基於Android框架編程。在開始使用Android SDK寫第一個示例之前,請確保你已經按照