Android高階之十三講之安全方案
本文來自http://blog.csdn.net/liuxian13183/ ,引用必須註明出處!
Android是開源的,內部API相對比較透明,因此App的威脅會多一些,瞭解一些安全知識,有助於使用者體驗和產品穩定性。
1、App元件方面,慎用android:export=true(Activity、Service、BroadcastReveiver如果元件有超過一個intent-filter則預設為true;ContentProvider在16即4.1系統及以下預設為true,以上為false;),防止被程式惡意呼叫;對放出的元件,進行許可權限制和資料校驗,Intent設定包名。
2、WebView使用webView.addJavaScriptInterface的方式注入開放給H5的介面,使用註解的方式@JavaScriptInterface來標明介面。
4.2以下防攻擊方案:http://blog.csdn.net/zhouyongyang621/article/details/47000041
3、防止反編譯,造成介面被攻擊、資料洩露,進行混淆加固處理;同時可以將apk的md5發給服務端進行校驗,如果二次打包,則可以分辨出;用Cipher對資料庫包括SharePreference加密,後者使用MODE_PRIVATE;核心功能寫入so,通過jni呼叫。
4、防止DNS劫持,使用https加密傳輸;升級和下載時往往容易被劫持連結而下載別的App,同時防止被hook導致安裝其他路徑的安裝包。升級和下載使用https,安裝時要比較下載包的Md5與服務端返回是否一致、包名是否一致來保證下載包正常;將資料設定失效時間。
5、介面資料校驗,注意頻繁請求某一介面、虛擬註冊、驗證碼介面被刷,防止服務端被拖垮。
6、打包上傳後驗證簽名資訊,下載應用市場apk,解壓出META-INF下CERT.RSA檔案,使用如下命令檢視簽名
Collections.unmodifiableList(list);
Intent intent = new Intent("com.android.settings.action.SWITH_AGED_MODE"); intent.setPackage("com.android.settings"); sendBroadcast(intent,"com.android.settings.permission.SWITH_SETTING");
並對四大元件中傳遞的intent進行合法性校驗。
10、防禦措施一般如下三種:
第一、寄託在破壞攻擊者的工具。第二、寄託在Java層程式碼逆向、除錯和閱讀的難度。第三、寄託在c層程式碼逆向、除錯和閱讀的難度上。
11、對於動態註冊的廣播,儘量使用LocalBroadcastReceiver來進行本地註冊,這樣只在本應用內通訊;如果使用registerReceiver()則要做好許可權控制。
附硬體資訊查詢方式,通過撥號盤輸入如下引數即可
12、onPause時,通過ProcessManager.getRunningAppProcess來檢測自己是否位於棧頂,防止第三方應用懸浮
13、使用TrustMangerFactory匯入證照,自籤校驗
14、getRecentTask,使自己的程式不可見
在AndroidManifest.xml配置android:exclueFromRecents=false或Intent設定此flag,僅5.0以下有效,以上底層已經封掉getRecentTask方法
15、android:allowBackup=“false” 防止設為true後,通過 adb backup 和adb restore來備份和恢復資料。
16、敏感資訊不要使用socket通訊,使用可以檢驗身份的方式會更好。
通用功能
程式碼 | 功能描述 | 備註 |
---|---|---|
*#*#7780#*#* | 恢復手機出廠設定,清除應用資料以及設定,移除手機繫結的谷歌賬號,解除安裝下載的應用 | 不會刪除系統內建應用,不會刪除SD Card上的檔案 |
*2767*3855# | 重新安裝手機作業系統,恢復手機出廠狀態,刪除包括安裝在內部儲存上的所有APP並清除設定 | |
*#*#197328640#*#* | 進入除錯模式 | |
*#*#4636#*#* | 電話基本資訊,電話使用情況,電池資訊 | |
*#*#34971539#*#* | 攝像頭系統資訊 | 注意不要點選不要點選升級攝像頭系統資訊,小心1秒變磚 |
*#*#7594#*#* | 改變電源按鍵的功能,允許直接關機而不是詢問使用者選擇操作(無聲模式,飛航模式,關機) | |
*#*#273283*255*663282*#*#* | 備份所有的媒體檔案,開啟檔案拷貝介面讓你能夠備份圖片,視屏和音訊等媒體檔案 | |
*#*#8255#*#* | 啟動GTalk服務監控 | |
*2767*4387264636* | 顯示產品資訊 | |
*#0228# | 顯示電池狀態 | |
*#12580*369* | 軟體和硬體資訊 | |
*#32489# | 檢視加密資訊 | |
*#273283*255*3282*# | 資料建立選單 | |
*#3282*727336*# | 資料使用狀態 | |
*#8736364# | OTA升級選單 | |
##778 | 顯示EPST選單 | |
*#228# | ADC讀取選單 |
WIFI,GPS和藍芽檢測
程式碼 | 功能描述 | 備註 |
---|---|---|
*#*#526#*#* | WLAN檢測 | |
*#*#528#*#* | WLAN測試 | |
*#*#232339#*#* | WLAN測試 | |
*#*#232338#*#* | 顯示WIFI網路卡的MAC地址 | |
*#*#1472365#*#* | 快速GPS測試 | |
*#*#1575#*#* | 不同型別的GPS測試 | |
*#*#232331#*#* | 藍芽測試 | |
*#*#232337#*#* | 顯示藍芽裝置地址 |
系統韌體版本資訊
程式碼 | 功能描述 | 備註 |
---|---|---|
*#*#1111#*#* | FTA軟體版本 | |
*#*#2222#*#* | FTA硬體版本 | |
*#*#4986*2650468#*#* | 硬體資訊 | |
*#*#1234#*#* | PDA和手機系統資訊 | |
*#2263# | 基帶選擇 | |
*#9090# | 診斷配置 | |
*#7284# | USB模式控制 | |
*#872564# | USB日誌控制 | |
*#745# | RIL日誌輸出選單 | |
*#746# | 除錯日誌輸出選單 | |
*#9900# | 系統日誌輸出模式 | |
*#*#44336#*#* | 顯示構建時間,更新列表 | |
*#03# | NAND快閃記憶體串號 | |
*#3214789# | GCF模式狀態 | |
*#4238378# | GCF配置 |
工廠測試
程式碼 | 功能描述 | 備註 |
---|---|---|
*#*#0283#*#* | 網路資料包迴路測試 | |
*#*#0*#*#* | LCD測試 | |
*#*#0673#*#* | 音訊測試 | |
*#*#0289#*#* | 音訊測試 | |
*#*#0842#*#* | 震動與背光測試 | |
*#*#2663#*#* | 觸控式螢幕測試 | |
*#*#2664#*#* | 觸控式螢幕測試 | |
*#*#0588#*#* | 近距離感應器測試 | |
*#*#3264#*#* | 記憶體硬體版本 | |
*#0782# | 實時鐘測試 | |
*#0589# | 光感應器測試 | |
*#7353# | 快速測試選單 | |
*#3214789650# | LBS測試 | |
*#8999*8378# | 測試選單 | |
*#07# | 測試歷史 |
PDA和電話
程式碼 | 功能描述 | 備註 |
---|---|---|
*#*#7262626#*#* | 場測試 | |
*#06# | 顯示手機IMEI號碼 | |
*#*#8351#*#* | 開啟語音撥號記錄日誌 | |
*#*#8350#*#* | 關閉語音撥號記錄日誌 | |
**05***# | 從緊急撥號螢幕解鎖PUK碼 | |
*#301279# | 網路制式HSDPA HSUPA控制選單 | |
*#7465625# | 檢視手機鎖定狀態 | |
*7465625*638*# | 配置網路鎖定MCC/MNC | |
*7465625*782*# | 配置網路鎖定NSP | |
*7465625*77*# | 插入網路鎖定鍵SP | |
*7465625*27*# | 插入網路鎖定鍵NSP/CP | |
*#272886# | 自動接聽選擇 |
其他
程式碼 | 功能描述 | 備註 |
---|---|---|
*#0*# | Galaxy S3服務選單 | Samsung |
*#1234# | 軟體版本 | Samsung |
*#12580*369# | 硬體與軟體資訊 | Samsung |
*#0228# | 檢視電池狀態 | Samsung |
*#0011# | 開啟服務選單 | Samsung |
*#0283# | 網路迴路測試 | Samsung |
*#0808# | 訪問USB服務 | Samsung |
*#9090# | 開啟服務模式 | Samsung |
*#7284# | FactoryKeystring選單 | Samsung |
*#34971539# | 訪問攝像頭系統 | Samsung |
*#7412365# | 攝像頭韌體選單 | Samsung |
##7764726 | Motorola DROID 隱藏服務選單 | Motorola 預設密碼6個0 |
1809#*990# | LG Optimus 2x 隱藏服務選單 | LG 預設密碼6個0 |
3845#*920# | LG Optimus 3D 隱藏服務選單 | LG 預設密碼6個0 |
3845#*850# | LG G3 診斷測試選單 | LG AT&T |
5689#*990# | LG G3 診斷測試選單 | LG Sprint |
3845#*851# | LG G3 診斷測試選單 | LG T-Mobile |
##228378 | LG G3 診斷測試選單 | LG Verizon |
3845#*855# | LG G3 診斷測試選單 | LG 網路變種 |
*#*#3424#*#* | HTC 測試功能 | HTC |
##8626337# | 執行VOCODER | HTC |
##33284# | 場測試 | HTC |
##3282# | 顯示EPST選單 | HTC |
##3424# | 執行診斷模式 | HTC |
##786# | 反轉診斷支援 | HTC |
##7738# | 協議修訂 | HTC |
*#*#786#*#* | 硬體重置 | Nexus 5 |
*#*#7873778#*#* | 啟動Superuser應用 | Nexus 5 |
*#*#1234#*#* | 啟動Superuser應用 | Nexus 5 |
*#123# | 是否連線到家庭網路,僅用於加拿大和美國 | Nexus 5 |
*#*#2432546#*#* | 檢查系統升級 | Nexus 5 |
日誌輸出辦法:
adb logcat -b main -v time>app.log 列印應用程式的log
adb logcat -b radio -v time> radio.log 列印射頻相關的log
adb logcat -b events -v time 列印系統事件的日誌,比如觸屏事件
6、許可權問題
try { PackageManager packageManager=mContext.getPackageManager(); Drawable drawable=packageManager.getResourcesForApplication("com.tencent.qq").getDrawable(0x7f020110); mOnlineTv.setBackground(drawable); }catch (Exception e){ showToast(e.getMessage()); }
如上程式碼可以獲取QQ的一張圖片來設定到自己的App來,原因在於QQ設定了export=true,破解其App得到資源即可實現。延伸講一個activity的安全性,一般通過action、設定應用包名可以直接開啟,那麼可以做的就是給activity設定一個許可權,同時將傳過來context的package做判斷,如果在後臺註冊過則同意開啟,否則拒絕開啟。
再舉一例:
Intent intent = new Intent(Intent.ACTION_MAIN); ComponentName cn = new ComponentName("com.tencent.qq", "com.tencent.qq.activity.LoginActivity"); intent.setComponent(cn); startActivity(intent);
7、安全一點的intent(設定selector為null,chrome預設設定component為null)
- // convert intent scheme URL to intent object
- Intent intent = Intent.parseUri(uri);
- // forbid launching activities without BROWSABLE category
- intent.addCategory(“android.intent.category.BROWSABLE”);
- // forbid explicit call
- intent.setComponent(null);
- // forbid intent with selector intent
- intent.setSelector(null);
- // start the activity by the intent
- context.startActivityIfNeeded(intent, –1);
防止被注入選項和component進入其他app,被擷取資料。
劫持後如何防止使用者資料被抓取
主要因為html中被插入js,同時彈出新的偽裝頁面
http://www.cnblogs.com/alisecurity/p/5408588.html
遇到下面這種,還是要自己多注意些
8、zip包裡儘量不要出現../../file,對解壓包的目錄進行判斷是否多級目錄,防止資料被覆蓋。
String entryName = entry.getName();
if (entryName.contains(“..”)){
throw new Exception(“unsecurity zipfile!”);
}
9、
偽基站傳播分析
偽基站能夠偽裝成電信運營商的服務號,向手機使用者群發釣魚簡訊,收到的釣魚簡訊跟正常簡訊顯示在一起,真假難辨。釣魚網站的模擬度很高,並抓住了人們貪小便宜的弱點,先收集使用者資訊,再引導安裝仿冒應用。
美國聯邦調查局認為:金鑰長度需要設定56位,幾乎不可破解,而30位以下可以通過暴力破解-入侵的藝術。
相關文章
- Android高階之Dalvik初識Android
- kubernetes高階之pod安全策略
- Pytest高階進階之Fixture
- Android高手進階教程(二十三)之---Android中的日曆讀寫操作!!!Android
- Java高階特性之集合Java
- [Django高階之forms元件]DjangoORM元件
- Django高階之-快取Django快取
- js高階之-new map()JS
- 《前端之路》之 JavaScript 高階技巧、高階函式(一)前端JavaScript函式
- 高階前端的進階——CSS之flex前端CSSFlex
- [android]android自動化測試十三之sciroccoAndroid
- Java高階語法之反射Java反射
- python高階之函式Python函式
- Java 高階特性之 instanceofJava
- sql之20高階查詢SQL
- Statspack之十三-EnqueueENQ
- INSTRUMENTS除錯工具的使用(三十三) —— 高階任務之建立自定義Instruments(二)...除錯
- 『高階篇』docker之APIGateway(17)DockerAPIGateway
- 高階IO模型之kqueue和epoll模型
- React高階元件精講React元件
- 生成環境之Nginx高可用方案Nginx
- Android自定義view --Path 的高階用法之-搜尋按鈕動畫AndroidView動畫
- PathMeasure的API講解與實戰——Android高階UIAPIAndroidUI
- xmake高階特性之自定義選項
- java高階用法之:JNA中的FunctionJavaFunction
- java高階用法之:JNA中的StructureJavaStruct
- [譯]React高階話題之Refs and the DOMReact
- [譯]React高階話題之ContextReactContext
- flutter系列之:Navigator的高階用法Flutter
- AWK高階之內部函式使用函式
- 【Android進階】RecyclerView之ItemDecoration(一)AndroidView
- Android自我進階——JAVA之JVMAndroidJavaJVM
- Android之安全防護allowBackupAndroid
- 【MongoDB】高可用方案之副本集(Replica Set)MongoDB
- 放蕩不羈SVG講解與實戰——Android高階UISVGAndroidUI
- [android]android自動化測試十三之JavaMonkey跨APP操作AndroidJavaAPP
- 大資料之執行緒高階部分大資料執行緒
- 『高階篇』docker之CICD(終結篇)(44)Docker