新四季網

檢測Android應用程式在安卓模擬器中運行的方法及系統與流程

2023-07-25 15:13:26 3


本發明涉及安卓模擬器配置領域,具體涉及一種檢測Android應用程式在安卓模擬器中運行的方法及系統。



背景技術:

隨著通信技術的發展,安卓模擬器(在電腦上模擬安卓作業系統,並能安裝、使用、卸載Android應用程式的軟體,即電腦上能夠操作安卓系統)已經廣泛應用於社會之中;因為安卓模擬器能夠修改各種移動終端配置參數,所以Hack能夠通過安卓模擬器在電腦上偽造多臺移動終端用戶,還能夠在安卓模擬器中篡改Android應用程式的數據達到「外掛」的目的。因此,為了保證Android應用程式的使用者安全,使用者需要得知Android應用程式的運行位置是在移動終端上,還是在電腦上的安卓模擬器中(Android應用程式的「BUG」只會在安卓模擬器中出現)。

目前,檢測Android應用程式的運行位置的方法為:在移動終端上通過JAVA層代碼來判斷移動終端中是否存在安卓模擬器特有的進程通信通道和IMEI信息,若安卓模擬器特有的進程通信通道和IMEI(International Mobile Equipment Identity,國際行動裝置身份碼)信息均不存在與Android應用程式中,則說明Android應用程式未在安卓模擬器中運行,進而實現運行位置信息的獲取。

但是,上述檢測Android應用程式的運行位置的方法存在以下缺陷:對於HACK而言,JAVA層的代碼比較容易被逆向出其實現原理,進而比較容易反編譯成原始代碼,而且運行位置信息、以及安卓模擬器特有的進程通信通道和IMEI信息,均容易被HACK所篡改,進而極大的降低檢測的準確性,難以保證用戶使用Android應用程式時的財產安全。



技術實現要素:

針對現有技術中存在的缺陷,本發明解決的技術問題為:檢測Android應用程式是否運行在安卓模擬器中。本發明顯著提高了檢測的準確性,能夠在用戶使用Android應用程式時,保證用戶的財產安全。

為達到以上目的,本發明提供的檢測Android應用程式在安卓模擬器中運行的方法,包括以下步驟:

步驟A:移動終端運行需要檢測的Android應用程式:

當通過JNI層判定移動終端中存在安卓模擬器特有的進程通信通道時,轉到步驟B;

當通過JNI層判定移動終端中存在安卓模擬器特有的IMEI信息時,轉到步驟B;

當通過JNI層判定移動終端中存在安卓模擬器特有的驅動文件時,轉到步驟B;

當通過JNI層判定移動終端中存在安卓模擬器特有的模擬器文件時,轉到步驟B;

當通過JNI層判定移動終端中存在安卓模擬器特有的電話號碼時,轉到步驟B;

當通過JNI層判定移動終端中存在安卓模擬器特有的Android Id時,轉到步驟B;

當移動終端中不存在特有信息時,確定需要檢測的Android應用程式未在安卓模擬器中運行;特有信息包括所述進程通信通道、IMEI信息、驅動文件、模擬器文件、電話號碼和Android Id;

步驟B:確定需要檢測的Android應用程式在安卓模擬器上運行。

與現有技術相比,本發明的優點在於:

(1)參見步驟A可知,本發明通過採集4個信息(安卓模擬器特有的進程通信通道、驅動文件、模擬器文件和IMEI信息),本發明只有在Android應用程式中未檢測到上述4個信息中的任何1個,才確定Android應用程式未在安卓模擬器中運行。

與現有技術中通過JAVA採集2個信息(進程通信通道和IMEI信息)來檢測Android應用程式是否在安卓模擬器中運行相比,本發明的檢測標準至少提高1倍;而且本發明通過UNI層採集信息,與JAVA層編寫的代碼相比,破譯和反編譯UNI層的代碼的難度非常高,進而顯著提高了檢測的準確性,在用戶使用Android應用程式時,保證了用戶的財產安全。

在此基礎上,參見步驟A可知,本發明在上述4個信息的判斷標準上增加了安卓模擬器特有的電話號碼和Android Id的判斷,即只有當特有電話號碼、Android Id、以及上述4個信息均不存在於Android應用程式中,才確定Android應用程式未在安卓模擬器中運行,進一步提高了檢測的準確性。

附圖說明

圖1為本發明實施例中檢測Android應用程式在安卓模擬器中運行的方法的流程圖。

具體實施方式

以下結合附圖及實施例對本發明作進一步詳細說明。

參見圖1所示,本發明實施例中的檢測Android應用程式在安卓模擬器中運行的方法,包括以下步驟:

S1:移動終端運行需要檢測的Android應用程式,在移動終端的JNI層(用來溝通JAVA代碼和外部的本地代碼C或C++的協議層)上,讀取fopen函數(打開文件函數);通過fopen函數,判斷移動終端中是否存在安卓模擬器特有的進程通信通道,若不是,轉到S2,若是,轉到S8。

S1的進程通信通道包括"/dev/socket/qemud"和"/dev/qemu_pipe",S1的具體流程為:

S101:調用Android系統提供的API函數獲取libc.so的句柄,其目的在於:打開文件函數fopen存在於Android系統的libc.so庫中,獲取libc.so的句柄能夠直接讀取libc.so庫中的fopen函數,轉到S102。

S101的具體實現方式為:

void*dlopen(const char*pathname,int mode);

在參數pathname中傳入需要打開的SO的名字(即libc.so),在參數mode中傳入打開方式(RTLD_NOW),需要解析符號。

S102:調用Android系統的API函數dlsym,通過libc.so的句柄打開fopen函數,轉到S103。

S102的具體實現方式為:

void*dlsym(void*handle,const char*symbol);

在參數handle中傳入libc.so的句柄,在參數symbol中傳入fopen函數的名稱。

S103:通過fopen函數分別打開進程通信通道"/dev/socket/qemud"和"/dev/qemu_pipe",函數fopen的原型為:

FILE*fopen(const char*path,const char*mode);

FILE為返回值,在參數path中傳入進程通道的名稱("/dev/socket/qemud"或"/dev/qemu_pipe"),在參數mode傳入打開的方式。

打開"/dev/socket/qemud"時(fopen("/dev/socket/qemud",r),若FILE不為空(返回文件句柄),則確認"/dev/socket/qemud"打開且存在,即Android應用程式在電腦上的安卓模擬器中運行(安卓模擬器肯定會存在上述的通道來進行通信),轉到S8。

打開"/dev/qemu_pipe"時(fopen("/dev/qemu_pipe",r),若FILE不為空(返回文件句柄),則確認"/dev/qemu_pipe"打開且存在,即Android應用程式在電腦上的安卓模擬器中運行(安卓模擬器肯定會存在上述的通道來進行通信),轉到S8。

若打開上述2個進程通信通道的FILE均為空,則確認所有進程通信通道均未打開且不存在,轉到S2。

S2:通過fopen函數,判斷移動終端中是否存在安卓模擬器特有的驅動文件,若不是,轉到S3,若是,轉到S8。

S2的驅動文件為"/proc/tty/drivers",S2的具體流程為:

通過fopen函數打開驅動文件:fopen("/proc/tty/drivers",r);

若返回值FILE不為空,則確認驅動文件打開且存在,即Android應用程式在電腦上的安卓模擬器中運行;若FILE為空,則確認驅動文件未打開且不存在。

S3:通過fopen函數,判斷移動終端中是否存在安卓模擬器的模擬器文件,若不是,轉到S4,若是,轉到S8。

S3的模擬器文件包括以下3份:

"/system/lib/libc_malloc_debug_qemu.so";

"/sys/qemu_trace";

"/system/bin/qemu-props";

S3的具體流程為:

通過fopen函數分別打開上述3份模擬器文件:

fopen("/system/lib/libc_malloc_debug_qemu.so",r);

fopen("/sys/qemu_trace",r);

fopen("/system/bin/qemu-props",r);

打開任意一份模擬器文件時,若返回值FILE不為空,則確認有模擬器文件存在且被打開,即Android應用程式在電腦上的安卓模擬器中運行。

打開所有模擬器文件時,若返回值FILE均為空,則確認所有模擬器文件均未打開且不存在。

S4:判斷移動終端中是否存在安卓模擬器的特有的電話號碼,若不是,轉到S5,否則轉到S8;具體實現方式為:

TelephonyManager tm=(TelephonyManager)

context.getSystemService(Context.TELEPHONY_SERVICE);

String phonenumber=telephonyManager.getLine1Number;

特有電話號碼包括:

"15555215554","15555215556","15555215558","15555215560",

"15555215562","15555215564","15555215566","15555215568",

"15555215570",、"15555215572","15555215574","15555215576",

"15555215578","15555215580","15555215582","15555215584"。

S5:在JNI層上獲取移動終端的Android Id,判斷Android Id是否等於000000000000000,若是,轉到S8,否則轉到S6。

S5中獲取移動終端的Android ID的具體流程為:

S501:通過Android系統提供的JNI層的API函數,獲取getSystemService接口,轉到S502。

S501的具體實現方式為:

jclass cls_context=

(*env)->FindClass(env,"android/content/Context");

cls_context為環境的上下文,env為JNI層提供的環境變量的接口指針,是JNI層調用其他API的接口。

jmethodID getSystemService=

(*env)->GetMethodID(env,cls_context,"getSystemService","(Ljava/lang/String;)Ljava/lang/Object;")。

S502:通過getSystemService接口,獲取TELEPHONY_SERVICE屬性,轉到S503。

S502的具體實現方式為:

jfieldID TELEPHONY_SERVICE=(*env)->GetStaticFieldID(env,cls_context,"TELEPHONY_SERVICE","Ljava/lang/String;")。

S503:通過TELEPHONY_SERVICE屬性,調用JNI層的接口獲取TelephonyManager接口,轉到S504。

S503的具體實現方式為:

jclass cls_tm=

(*env)->FindClass(env,"android/telephony/TelephonyManager")。

S504:通過TelephonyManager接口,獲取getDeviceId接口(即提供獲取Android ID的接口),轉到S505。

S504的具體實現方式為:

jmethodID getDeviceId=(*env)->GetMethodID(env,cls_tm,"getDeviceId","Ljava/lang/String;")。

S505:通過getDeviceId接口獲取Android ID,具體實現方式為:

jstring deviceid=(*env)->CallObjectMethod(env,telephonymanager,getDeviceId);

其中deviceid即為Android ID。

S6:在JNI層上獲取移動終端的IMEI信息,判斷IMEI信息是否等於310260000000000,若是,轉到S8,否則轉到S7。

S6的具體流程為:

調用函數dlsym來獲取system_property_get函數(即S1中libc.so的接口函數),dlsym函數原型為:

int_system_property_get(const char*name,char*value);

在參數name中傳入system_property_get函數的名稱,value代表獲取的IMEI信息。若IMEI信息等於310260000000000,則確認Android應用程式在電腦上的安卓模擬器中運行(安卓模擬器中的IEMI信息為固定值)。

S7:確認Android應用程式未在安卓模擬器中運行,結束。

S8:確認Android應用程式在電腦上的安卓模擬器中運行,結束。

本發明實施例中的檢測Android應用程式在安卓模擬器中運行的系統,包括設置於需要檢測的Android應用程式的移動終端上的進程通信通道判斷模塊、IMEI信息判斷模塊、驅動文件判斷模塊、模擬器文件判斷模塊、電話號碼判斷模塊、Android Id判斷模塊和檢測結果模塊。

進程通信通道判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的進程通信通道(/dev/socket/qemud和/dev/qemu_pipe),若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送進程通信通道排除信號。

進程通信通道判斷模塊的具體工作流程為:在JNI層上讀取打開文件函數,判斷是否能夠通過打開文件函數打開所述進程通信通道,若是,則判定移動終端中存在該進程通信通道,否則判定移動終端中不存在該進程通信通道。

IMEI信息判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的IMEI信息(310260000000000),若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送IMEI信息排除信號。

驅動文件判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的驅動文件(/proc/tty/drivers),若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送驅動文件排除信號。

驅動文件判斷模塊的具體工作流程為:判斷是否能夠通過所述打開文件函數打開所述驅動文件,若是,則判定移動終端中存在該驅動文件,否則判定移動終端中不存在該驅動文件。

模擬器文件判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的模擬器文件,若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送模擬器文件排除信號。

所述模擬器文件包括/system/lib/libc_malloc_debug_qemu.so、/sys/qemu_trace以及/system/bin/qemu-props;模擬器文件判斷模塊的具體工作流程為:判斷是否能夠通過所述打開文件函數打開所述模擬器文件,若是,則判定移動終端中存在該模擬器文件,否則判定移動終端中不存在該模擬器文件。

電話號碼判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的電話號碼,若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送模擬器文件排除信號。

Android Id判斷模塊用於:通過JNI層判斷移動終端中是否存在安卓模擬器特有的Android Id(000000000000000),若是,向檢測結果模塊發送模擬器運行信號,否則向檢測結果模塊發送模擬器文件排除信號。

檢測結果模塊用於:收到任意模塊發的模擬器運行信號時,確定需要檢測的Android應用程式在安卓模擬器上運行,收到所述系統中所有模塊發送的排除信號時,確定需要檢測的Android應用程式未在安卓模擬器中運行。

進一步,本發明不局限於上述實施方式,對於本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也視為本發明的保護範圍之內。本說明書中未作詳細描述的內容屬於本領域專業技術人員公知的現有技術。

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀