一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法
【專利摘要】本發(fā)明公開了一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,包括以下步驟:1:root權限提升工具植入手機;2:分析內存消耗的原因;3:root權限操作的流程進行優(yōu)化;4:定義數據結構;5:設計實現權限操作結果檢測;6:設計并實現批量不同操作請求的執(zhí)行;7:清理所有調用資源并退出。本發(fā)明的有益效果如下:1、允許對特殊構建的文件列表中的信息逐一以root身份進行操作,列表中可以包含多種對文件的操作;2、在頻繁對相同或不同文件進行root權限操作的同時,可以很好控制手機內存的占用,避免耗費過多資源導致的應用效率與速度的降低;3、允許在完成相關root操作后,對操作成功與否進行驗證和反饋。
【專利說明】
一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法
技術領域
[0001]本發(fā)明涉及信息安全技術領域,特別涉及一種基于加密狗鎖定/解鎖電腦屏幕的方法。
【背景技術】
[0002]Root權限是Linux系統的最高權限。Android手機的權限系統與Linux—致,但各廠商發(fā)布的Android系統通常都僅開放了針對普通用戶的權限。如果需要獲取更多系統層面或分屬于其他應用的數據,則需要在手機中植入權限提升工具,然后通過一定的操作對root權限進行獲取。該工具是運行在Android系統底層(Linux層)的,因此Android應用需要通過一個通道與該工具進行交互。當前通行的做法是:開啟通道,執(zhí)行ROOT相關操作,關閉通道。但該現有技術僅適用于利用shell命令對文件一次性批量處理,或僅針對某一個文件做處理。
[0003]該現有技術在處理過程中存在以下限制:
[0004]1、無法獲得實時的反饋信息,即權限操作的結果。
[0005]2、由于通道無法復用,導致在需要逐一選擇性地對文件進行操作時,需要頻繁開啟通道、關閉通道。這種使用方式使得手機硬件資源被大量消耗,明顯降低了應用執(zhí)行的流暢度與性能。
[0006]3、針對多重root權限操作(如同時希望刪除某文件,增加某文件夾以及修改某文件權限),只能分別對每一個操作構建shell并進行操作,內存消耗較高。
【發(fā)明內容】
[0007]本發(fā)明針對現有技術的缺陷,提供了一種基于加密狗鎖定/解鎖電腦屏幕的方法,能有效的解決上述現有技術存在的問題。
[0008]—種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,包括以下步驟:
[0009]1:root權限提升工具植入手機,將在/system/bin下植入su文件;
[0010]2:分析頻繁執(zhí)行root權限操作引起大量內存消耗的原因;
[0011]3:對root權限操作的流程進行優(yōu)化;
[0012]4:定義數據結構用于描述文件root權限執(zhí)行的操作請求;
[0013]5:研究并設計實現權限操作結果檢測,使用shell指令對文件所在列表進行詳情獲取的方式對文件chmod操作進行驗證。其他方法通過文件系統的exist方法進行驗證;
[0014]6:設計并實現批量不同操作請求的執(zhí)行;
[0015]7:清理所有調用資源并退出。
[0016]作為優(yōu)選,所述步驟2的詳細步驟如下:
[0017]2.1:執(zhí)行Iinux下的chmod指令;
[0018]2.2:獲取 su 的進程,調用android系統的 Run time.getRuntime().exec( 〃su〃)方法,獲得一個su的進程對象;
[0019]2.3:建立Android與su進程的通道,用進程對象process獲取OutPutStream,并包裝成為DataOutputStream ;
[0020]2.4:向通道寫入shelI指令并執(zhí)行,使用DataOutputStream的writeBytes方法,在指令之后加上“/η”并將指令寫入通道中,調用DaraOutputStream的flush方法將指令刷進su進程;
[0021 ]2.5:關閉通道與su進程釋放資源,寫入exit/n并關閉DataOutputStream。
[0022]作為優(yōu)選,所述步驟3的詳細步驟如下:
[0023]3.1:在Android中聲明并創(chuàng)建一個Service,用于為應用全局提供權限操作服務。
[0024]3.2:在service中完成su進程與通道的創(chuàng)建;
[0025]3.2.1:在service初始化時即創(chuàng)建su進程;
[0026]3.2.2:創(chuàng)建 Servi ce 全局的DataOutputStream;
[0027 ]3.2.3:初始化該DataOutputStream 通道;
[0028]3.3:定義root權限操作的指令生成模版及執(zhí)行方法;
[0029]3.3.1:創(chuàng)建字符串構建方法,輸入為權限值和文件路徑;
[0030]3.3.2:創(chuàng)建指令執(zhí)行方法,該方法以字符串構建方法為輸入,通過通道向su進程寫入指令并執(zhí)行;
[0031]3.4:保持su進程及Service的全局通道始終可用;
[0032]3.5:為service創(chuàng)建外部調用接口 ;
[0033]3.5.1:定義ServiceHandler類用于處理外部對Service的調用;
[0034]3.5.2:在類內部定義廣播,用于向service發(fā)送指令;
[0035]3.5.3:將具體的she 11指令或調用請求作為廣播的參數交由ServiceHandler;
[0036]3.6:在service 中創(chuàng)建對 ServiceHandler 的響應;
[0037]3.6.1:在service中創(chuàng)建廣播接收器;
[0038]3.6.2:根據接收到的廣播參數調用相應方法完成與su文件的交互。
[0039]作為優(yōu)選,所述步驟4的詳細步驟如下:
[0040]4.1:定義描述結構,該描述類包括描述類型、文件路徑、操作參數三個數據域;
[0041 ]4.2:定義描述類中涉及的描述類型;
[0042]4.3:定義文件路徑格式,文件路徑為string形式;
[0043]4.4:操作參數數據域與描述類型相關。
[0044]作為優(yōu)選,所述步驟5的詳細步驟如下:
[0045]5.1:驗證chmod權限修改結果;
[0046]5.1.1:創(chuàng)建shel I進程并獲取待驗證文件所在目錄的列表詳情,指令格式為Is: _I:path;
[0047]5.1.2:創(chuàng)建輸入流獲取執(zhí)行上述指令獲得的返回值;
[0048]5.1.3:逐行讀取返回的數據,獲取與待驗證文件名相同的條目;
[0049]5.1.4:解析獲取到的條目,截取第1-10個字符,按照以下規(guī)則轉換為權限值;
[0050]5.1.5:與修改指令中的參數域中的權限值做對比,返回對比結果,Ox 1:成功,0x11:失敗。
[0051 ]5.2:驗證cp、rm、mkdir等文件操作指令執(zhí)行結果對該類操作的驗證,直接通過java中的File, exist方法判斷即可;
[0052]5.3:完善ServiceHandler類的權限操作的結果反饋接口 ;
[0053]5.3.1: Service中增加驗證結果廣播,以驗證結果為參數;
[0054]5.3.2: ServiceHandler中增加相應的驗證廣播的接收器,并在此增加外部回調接口反饋信息。
[0055]作為優(yōu)選,所述步驟6的詳細步驟如下:
[°°56] 6.1:用ArrayList創(chuàng)建存放描述操作請求的列表;
[0057]6.2:在ServiceHandler中增加以List為參數的接口 ;
[0058]6.3:將一系列不同操作請求分別封裝成操作請求描述對象并將各描述對象裝入ArrayList 傳入 ServiceHandler;
[0059]6.4:在ServiceHandler中有序取出操作描述對象,按既定格式解析描述請求并執(zhí)行請求、逐一調用回調返回結果。
[0060]作為優(yōu)選,所述步驟7的詳細步驟如下:
[0061 ] 7.1:用過Service中構建的DataOutputStrearn向進程中寫入:exit/n,關閉su進程;
[0062]7.2:關閉DataOutputStream;
[0063]7.3:注銷Service 與 ServiceHandler 中的廣播接收器;
[0064]7.4:關閉service。
[0065]與現有技術相比本發(fā)明的優(yōu)點在于:
[0066]1、允許對特殊構建的文件列表中的信息逐一以root身份進行操作,列表中可以包含多種對文件的操作。
[0067]2、在頻繁對相同或不同文件進行root權限操作的同時,可以很好控制手機內存的占用,避免耗費過多資源導致的應用效率與速度的降低。
[0068]3、允許在完成相關root操作后,對操作成功與否進行驗證和反饋。
【具體實施方式】
[0069]為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明做進一步詳細說明。
[0070]本發(fā)明主要解決了頻繁單次調用root權限工具進行權限操作導致的高內存消耗問題,同時對root權限獲取的功能進行了改善。本發(fā)明主要技術如下:
[0071]1.自主分析了當前通行的root權限操作流程,確定該流程中可復用的部分,并使用Android系統的Service組件對復用結構進行包裝,并實現外部訪問接口 ;
[0072]2.自主定義了用于裝載root權限操作的所針對的文件以及相關操作內容的數據結構,并構建列表對該數據結構進行包裝。用于實現對批量執(zhí)行多類型操作;
[0073]3.自主研究root權限操作效果的檢測方式與相關算法,并結合上述兩個技術點,在root權限操作執(zhí)行完成后對結果進行檢驗,實現權限操作結果實時反饋。
[0074]本發(fā)明的步驟如下:
[0075]l:root權限提升工具的植入;
[0076]2:分析頻繁執(zhí)行root權限操作引起大量內存消耗的原因;
[0077]3:對root權限操作的流程進行優(yōu)化;
[0078]4:定義數據結構用于描述文件root權限執(zhí)行的操作請求;
[0079]5:研究并設計實現權限操作結果檢測方法;
[0080]6:設計并實現批量不同操作請求的執(zhí)行方法;
[0081 ] 7:清理所有調用資源并退出。
[0082]下面是針對上述描述的關鍵步驟進一步說明:
[0083]l:root權限提升工具的植入
[0084]該步驟是后續(xù)所有操作的基礎。行業(yè)內部通常通過刷機方式,或利用系統漏洞,將root權限提升工具植入。該步驟將在/system/bin下植入su文件。該文件即root權限提升工具,允許任何系統用戶對其進行調用。通過該文件,用戶可以執(zhí)行root賬戶才有權限執(zhí)行的操作。該步驟所使用的技術并非本方法獨有,且使用方法比較容易獲得,在此不再贅述。
[0085]2:分析頻繁執(zhí)行root權限操作引起大量內存消耗的原因
[0086]2.1:root權限操作的實現原理
[0087]植入root權限提升工具這一步驟植入的su文件是操作的核心,對本專利所描述方法來說,操作的實質是執(zhí)行I inux下的chmod指令。
[0088]2.2: root權限在android上的執(zhí)行
[0089]2.2.1:獲取su的進程,調用android系統的Runtime.getRuntime0.exec(〃su")方法,獲得一個su的進程對象;
[0090]2.2.2:建立Android與su進程的通道,用進程對象process本身的方法獲取OutPutStream,并包裝成為DataOutputStream;該DataOutputStream 即為要構建的通道;
[0091]2.2.3:向通道寫入shell指令并執(zhí)行,以修改/data/data目錄權限為例,shell指令應當為” chmod 777/data/data” ;使用DataOutputStream的writeBytes方法,在指令之后加上“/η”并將指令寫入通道中,調用DaraOutputStream的flush方法將指令刷進su進程;至此,指令已被執(zhí)行;
[0092]2.2.4:關閉通道與su進程釋放資源,寫入exit/n并關閉DataOutputStream。
[0093]2.3:確定重復操作引起的內存消耗的原因
[0094]根據上述步驟可知,su進程的啟動和退出是整個流程中消耗資源最大的。通道的重復構建也可能使得資源被重復申請,造成浪費;后續(xù)步驟將對該問題進行解決。
[0095]3:對root權限操作的流程進行優(yōu)化;該步驟主要實現對su進程以及通道的復用,通過這種方式降低反復開啟SU與通道導致的內存消耗;
[0096]3.1:創(chuàng)建Service,在Android中聲明并創(chuàng)建一個Service,用于為應用全局提供權限操作服務。
[0097 ] 3.2:在service中完成su進程與通道的創(chuàng)建;
[0098]3.2.1:在service初始化時即創(chuàng)建su進程;
[0099]3.2.2:創(chuàng)建 Servi ce 全局的DataOutputStream;
[0100]3.2.3:初始化該DataOutputStream 通道。
[0101 ] 3.3:定義root權限操作的指令生成模版及執(zhí)行方法;
[0102]這里以chmod指令構建方法為例
[0103]3.3.1:創(chuàng)建chmod字符串構建方法,輸入為權限值和文件路徑;
[0104]3.3.2:創(chuàng)建指令執(zhí)行方法,該方法以chmod字符串構建方法為輸入,通過通道向su進程寫入指令并執(zhí)行。
[0105]3.4:保持su進程及Service的全局通道始終可用。
[0106]3.5:為service創(chuàng)建外部調用接口 ;
[0107]3.5.1:定義ServiceHandler類用于處理外部對Service的調用;
[0108]3.5.2:在類內部定義廣播,用于向service發(fā)送指令;
[0109]3.5.3:將具體的she 11指令或調用請求作為廣播的參數交由ServiceHandler。
[0110]3.6:在service 中創(chuàng)建對 ServiceHandler 的響應;
[0111]3.6.1:在service中創(chuàng)建廣播接收器;
[0112]3.6.2:根據接收到的廣播參數調用相應方法完成與su文件的交互。
[0113]4:定義數據結構用于描述文件root權限執(zhí)行的操作請求;該步驟定義一個數據結構,將文件具體操作與文件路徑封裝在一起,便于后期以隊列形式組織并傳遞。
[0114]4.1:定義描述結構,該描述類包括描述類型、文件路徑、操作參數三個數據域。
[0115]4.2:定義描述類中涉及的描述類型
[0?10] 這里僅以chmod、mkdir、rm與cp指令為例做描述類型的指定
[0117]0x01: chmod 指令;
[0118]0x02:mkdir 指令;
[0119]0x03:rm 指令;
[0120]0x04:cp 指令。
[0?21 ] 4.3:定義文件路徑格式,文件路徑為str ing形式,形如“/data/data/test.txt”。
[0122]4.4:操作參數數據域與描述類型相關,同樣以(:111]10(1、11^(1;[1'、1'1]1與0口為例
[0123]針對chmod,參數域為:權限值(如777或755等);
[0124]針對mkdir,參數域為空;
[0125]針對rm,參數域為空;
[0126]針對cp,參數域:目標目錄或文件名(如/data/data/testdir/)。
[0127]5:研究并設計實現權限操作結果檢測方法
[0128]使用shell指令對文件所在列表進行詳情獲取的方式對文件chmod操作進行驗證。其他方法通過文件系統的exist方法進行驗證。所有驗證均在Serv ice中完成。
[0129]5.1:驗證chmod權限修改結果;
[0130]5.1.1:創(chuàng)建shell進程并獲取待驗證文件所在目錄的列表詳情,指令格式為Is:-1:path(如Is: -1:/data/data/testdir);
[0131 ] 5.1.2:創(chuàng)建輸入流獲取執(zhí)行上述指令獲得的返回值;
[0132]5.1.3:逐行讀取返回的數據,獲取與待驗證文件名相同的條目;
[0133]5.1.4:解析獲取到的條目,截取第1-10個字符,按照以下規(guī)則轉換為權限值;
[0134]5.1.5:與修改指令中的參數域中的權限值做對比,返回對比結果,0x10:成功,0x11:失敗。
[0135]5.2:驗證cp、rm、mkdir等文件操作指令執(zhí)行結果對該類操作的驗證,直接通過java中的Fi le.exist方法判斷即可。
[0136]5.3:完善ServiceHandler類的權限操作的結果反饋接口 ;
[0137]5.3.1:Service中增加驗證結果廣播,以驗證結果為參數;
[0138]5.3.2: ServiceHandler中增加相應的驗證廣播的接收器,并在此增加外部回調接口反饋信息。
[0139]6設計并實現批量不同操作請求的執(zhí)行方法;
[0M0] 6.1:用ArrayList創(chuàng)建存放描述操作請求的列表;
[0141]6.2:在ServiceHandler中增加以List為參數的接口 ;
[0142]6.3:將一系列不同操作請求分別封裝成操作請求描述對象并將各描述對象裝入ArrayList 傳入 ServiceHandler;
[OH3] 6.4:在ServiceHandler中有序取出操作描述對象,按既定格式解析描述請求并執(zhí)行請求、逐一調用回調返回結果。
[0144]7:清理所有調用資源并退出,該步驟用于操作結束后釋放系統資源;
[0145]7.1:用過Service中構建的DataOutputStrearn向進程中寫入:exit/n,關閉su進程;
[0146]7.2:關閉DataOutputStream;
[0147]7.3:注銷Service 與 ServiceHandler 中的廣播接收器;
[0148]7.4:關閉service。
[0149]本領域的普通技術人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領域的普通技術人員可以根據本發(fā)明公開的這些技術啟示做出各種不脫離本發(fā)明實質的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內。
【主權項】
1.一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于包括以下步驟: I: root權限提升工具植入手機,將在/system/bin下植入su文件; 2:分析頻繁執(zhí)行root權限操作引起大量內存消耗的原因; 3:對root權限操作的流程進行優(yōu)化; 4:定義數據結構用于描述文件root權限執(zhí)行的操作請求; 5:研究并設計實現權限操作結果檢測,使用shell指令對文件所在列表進行詳情獲取的方式對文件chmod操作進行驗證。其他方法通過文件系統的exist方法進行驗證; 6:設計并實現批量不同操作請求的執(zhí)行; 7:清理所有調用資源并退出。2.根據權利要求1所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟2的詳細步驟如下: 2.1:執(zhí)行Iinux下的chmod指令; 2.2:獲取su的進程,調用android系統的Runtime.getRuntime().exec(〃su〃)方法,獲得一個su的進程對象; 2.3:建立Andro id與su進程的通道,用進程對象process獲取OutPutStream,并包裝成為DataOutputStream; 2.4:向通道寫入she 11指令并執(zhí)行,使用DataOutputStream的writeBytes方法,在指令之后加上“/η”并將指令寫入通道中,調用DaraOutputStream的flush方法將指令刷進su進程; 2.5:關閉通道與su進程釋放資源,寫入exit/n并關閉DataOutputStream。3.根據權利要求2所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟3的詳細步驟如下: 3.1:在Android中聲明并創(chuàng)建一個Service,用于為應用全局提供權限操作服務。 3.2:在service中完成su進程與通道的創(chuàng)建; 3.2.1:在service初始化時即創(chuàng)建su進程; 3.2.2:創(chuàng)建 Service 全局的DataOutputStream; 3.2.3:初始化該DataOutputStream 通道; 3.3:定義root權限操作的指令生成模版及執(zhí)行方法; 3.3.1:創(chuàng)建字符串構建方法,輸入為權限值和文件路徑; 3.3.2:創(chuàng)建指令執(zhí)行方法,該方法以字符串構建方法為輸入,通過通道向su進程寫入指令并執(zhí)行; 3.4:保持su進程及Service的全局通道始終可用; 3.5:為service創(chuàng)建外部調用接口 ; 3.5.1:定義ServiceHandler類用于處理外部對Service的調用; 3.5.2:在類內部定義廣播,用于向service發(fā)送指令; 3.5.3:將具體的she 11指令或調用請求作為廣播的參數交由ServiceHandler ; 3.6:在 service 中創(chuàng)建對 ServiceHandler 的響應; 3.6.1:在service中創(chuàng)建廣播接收器; 3.6.2:根據接收到的廣播參數調用相應方法完成與su文件的交互。4.根據權利要求3所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟4的詳細步驟如下: 4.1:定義描述結構,該描述類包括描述類型、文件路徑、操作參數三個數據域; 4.2:定義描述類中涉及的描述類型; 4.3:定義文件路徑格式,文件路徑為str ing形式; 4.4:操作參數數據域與描述類型相關。5.根據權利要求4所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟5的詳細步驟如下: 5.1:驗證chmod權限修改結果; 5.1.1:創(chuàng)建shell進程并獲取待驗證文件所在目錄的列表詳情,指令格式為Is:-1:path; 5.1.2:創(chuàng)建輸入流獲取執(zhí)行上述指令獲得的返回值; 5.1.3:逐行讀取返回的數據,獲取與待驗證文件名相同的條目; 5.1.4:解析獲取到的條目,截取第1-10個字符,按照以下規(guī)則轉換為權限值; 5.1.5:與修改指令中的參數域中的權限值做對比,返回對比結果,0x10:成功,Oxl1:失敗。 5.2:驗證cp、rm、mkdir等文件操作指令執(zhí)行結果對該類操作的驗證,直接通過java中的File, exist方法判斷即可; 5.3:完善ServiceHandIer類的權限操作的結果反饋接口 ; 5.3.1:Service中增加驗證結果廣播,以驗證結果為參數; 5.3.2:ServiceHandler中增加相應的驗證廣播的接收器,并在此增加外部回調接口反饋信息。6.根據權利要求5所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟6的詳細步驟如下: 6.1:用ArrayList創(chuàng)建存放描述操作請求的列表; 6.2:在ServiceHandler中增加以List為參數的接口 ; 6.3:將一系列不同操作請求分別封裝成操作請求描述對象并將各描述對象裝入ArrayList 傳入 ServiceHandler; 6.4:在ServiceHandler中有序取出操作描述對象,按既定格式解析描述請求并執(zhí)行請求、逐一調用回調返回結果。7.根據權利要求6所述的一種頻繁執(zhí)行root權限操作并獲得實時結果反饋的方法,其特征在于所述步驟7的詳細步驟如下: 7.1:用過Service中構建的DataOutputStream向進程中寫入:exit/n,關閉su進程; 7.2:關閉DataOutputStream; 7.3:注銷Service與ServiceHandler中的廣播接收器; 7.4:關閉service。
【文檔編號】G06F21/44GK105956457SQ201610270467
【公開日】2016年9月21日
【申請日】2016年4月27日
【發(fā)明人】黃旭
【申請人】四川秘無痕信息安全技術有限責任公司