匡鳳飛
摘要:隨著3G/4G網(wǎng)絡(luò)的快速發(fā)展,移動智能終端設(shè)備不斷得到普及。在智能設(shè)備的廣泛使用中,安卓已是活躍用戶量最多的移動終端操作系統(tǒng)。由于安卓系統(tǒng)是開源的,導(dǎo)致有些開發(fā)愛好者可以在基于Android平臺的應(yīng)用中加入一些惡意代碼或程序,竊取他人隱私,使手機(jī)的安全嚴(yán)重受到威脅?;谶@些原因,作者擬開發(fā)集手機(jī)防盜、手機(jī)通訊、手機(jī)軟件管理、手機(jī)進(jìn)程管理、掃描殺毒、系統(tǒng)優(yōu)化等于一身的手機(jī)安全衛(wèi)士,以保障手機(jī)用戶的隱私。
關(guān)鍵詞:3G/4G網(wǎng)絡(luò);Android平臺;手機(jī)防盜;手機(jī)安全衛(wèi)士
中圖分類號:TN927 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2015)09-0048-06
隨著科技的發(fā)展,移動互聯(lián)網(wǎng)已成為當(dāng)下的趨勢,而擁有Android平臺的終端設(shè)備已達(dá)到75%的占有率,這都要?dú)w根于其平臺的開放性,顯著的開放性可以使其擁有更多的開發(fā)者。隨著用戶和應(yīng)用的日益豐富,使得Android平臺下的應(yīng)用多而混亂,其中不乏有大量的惡意扣費(fèi)軟件、盜取用戶隱私的木馬程序等等。這就使得開發(fā)出一個保護(hù)用戶隱私和阻截惡意軟件的手機(jī)安全衛(wèi)士顯得很有必要。本課題研究和設(shè)計(jì)的手機(jī)安全衛(wèi)士不僅可以檢測已安裝的惡意軟件,還能通過手機(jī)綁定其它手機(jī),以達(dá)到在手機(jī)丟失后遠(yuǎn)程鎖定用戶手機(jī),甚至遠(yuǎn)程銷毀已丟失手機(jī)上的用戶數(shù)據(jù)的目的,進(jìn)而起到保護(hù)用戶隱私的作用。
為了增強(qiáng)用戶體驗(yàn),除了在手機(jī)安全衛(wèi)士的UI設(shè)計(jì)上進(jìn)行了精心的人性化設(shè)計(jì),在功能性和實(shí)用性方面,充分結(jié)合了一些商業(yè)性安全軟件的構(gòu)思和設(shè)計(jì)技巧,進(jìn)行了優(yōu)化設(shè)計(jì),力求能成為手機(jī)終端用戶的必備工具之一。
1 項(xiàng)目需求分析
手機(jī)安全衛(wèi)士項(xiàng)目(全文簡稱“項(xiàng)目”)是根據(jù)當(dāng)前手機(jī)用戶需求而開發(fā)的,安卓系統(tǒng)的熱度與開源,使得用戶的隱私不能得到安全保障。為提高手機(jī)用戶的通信安全,加強(qiáng)手機(jī)用戶信息保密管理,項(xiàng)目主要從以下八個功能模塊著手,具體有以下功能需求。
1)手機(jī)防盜
如果用戶手機(jī)被盜,可以發(fā)送相應(yīng)的指令給安全號碼,然后手機(jī)自動發(fā)送手機(jī)中SIM卡的信息和手機(jī)的位置信息,給安全號碼。也可以給手機(jī)恢復(fù)出廠設(shè)置,設(shè)置鎖屏密碼,遠(yuǎn)程格式化手機(jī)SD卡,遠(yuǎn)程鎖定手機(jī)屏幕,大大的保護(hù)失主的隱私安全。
2)通訊衛(wèi)士
用戶可以自定義來電黑名單,可以短信攔截,電話攔截,短信電話攔截,來電歸屬地顯示,和對來電歸屬地浮標(biāo)位置的調(diào)整。
3)軟件管理
軟件有系統(tǒng)軟件與本地軟件兩類,可以顯示軟件的詳細(xì)信息和對軟件的快速啟動、刪除、分享應(yīng)用程序。
4)進(jìn)程管理
每個列表顯示一個正在運(yùn)行的進(jìn)程信息,可以殺死任意一個進(jìn)程,批量選擇殺死進(jìn)程,還可以顯示系統(tǒng)內(nèi)存占用信息,通過桌面widget可以時刻展示當(dāng)前的手機(jī)內(nèi)存占用狀況。
5)手機(jī)殺毒
從服務(wù)器下載最新的病毒庫,匹配用戶程序的包名與程序的數(shù)字簽名判斷應(yīng)用程序是否包含病毒,提示用戶并且查殺惡意軟件,使病毒木馬無處可藏。
6)系統(tǒng)優(yōu)化
掃描用戶手機(jī)上每一個應(yīng)用,列出含有緩存的應(yīng)用,用戶可以清理來提高手機(jī)性能,加長手機(jī)續(xù)航時間。
7)高級工具
號碼歸屬地查詢,常用號碼查詢,短信還原與備份。
8)設(shè)置中心
用戶可以選擇是否開啟軟件自動更新,是否開啟歸屬地查詢,是否開啟通訊防火墻等。
2 項(xiàng)目的設(shè)計(jì)
根據(jù)以上的功能需求,最常用和最具代表性的主要功能模塊有設(shè)備防盜、應(yīng)用管理、進(jìn)程管理、手機(jī)殺毒。其中,設(shè)備防盜模塊的設(shè)計(jì)是根據(jù)設(shè)備防盜開關(guān)是否開啟,并結(jié)合用戶手機(jī)SIM更換的狀態(tài)和設(shè)置的密碼來保護(hù)用戶的;而應(yīng)用管理模塊是通過ListView控件來展現(xiàn)用戶設(shè)備所有安裝的應(yīng)用,在項(xiàng)目中,所有應(yīng)用分為用戶應(yīng)用和系統(tǒng)應(yīng)用,用戶可以點(diǎn)擊列表?xiàng)l目對安裝的程序進(jìn)行分享、啟動和卸載;進(jìn)程管理是通過ActivityManager系統(tǒng)API來得到用戶設(shè)備正在運(yùn)行的進(jìn)程,用戶可以結(jié)束任意一個進(jìn)程釋放手機(jī)內(nèi)存,也可以多選結(jié)束多個進(jìn)程來節(jié)省手機(jī)內(nèi)存空間;手機(jī)殺毒模塊是通過一個病毒數(shù)據(jù)庫與用戶程序的數(shù)字簽名和用戶安裝程序的包名進(jìn)行匹配,檢測病毒,并刪除惡意病毒等。下面將通過項(xiàng)目模塊結(jié)構(gòu)圖和各個子模塊的流程圖,進(jìn)行具體的設(shè)計(jì)。
2.1 HomeActivity總體模塊結(jié)構(gòu)設(shè)計(jì)
HomeActivity總體模塊結(jié)構(gòu)圖如圖1所示。
2.2 手機(jī)防盜模塊設(shè)計(jì)
手機(jī)防盜模塊是通過用戶事先設(shè)置好安全號碼,比且開啟防盜功能。根據(jù)相應(yīng)的滿足條件,安全衛(wèi)士會發(fā)送相應(yīng)的響應(yīng)到安全號碼手機(jī)上,手機(jī)防盜模塊的流程圖如下圖2所示。
防盜的核心技術(shù)是通過短信指令,遠(yuǎn)程的控制了丟失的手機(jī)。通過建立一個broadcast監(jiān)聽手機(jī)的重啟狀態(tài),通過系統(tǒng)的一個服務(wù)TelephonyManager.getSimSerialNumber()方法獲取手機(jī)的SIM卡號,匹配和之前的是否一樣,如果不一樣就會給之前設(shè)置的安全號碼發(fā)送新手機(jī)號碼。
2.3 通訊衛(wèi)士模塊設(shè)計(jì)
手機(jī)通訊衛(wèi)士是通過黑白名單來管理來電和短信的,該模塊是通過繼承SQLiteOpenHelper來創(chuàng)建一個BlackNumberDBOpenHelper類,就好比創(chuàng)建一個管理黑名單的數(shù)據(jù)庫,用于對黑名單的增刪改查,功能流程如圖3所示。
2.4 軟件管理模塊設(shè)計(jì)
軟件可分為系統(tǒng)軟件與用戶軟件,軟件管理業(yè)務(wù)就是讓用戶管理自己的軟件,在顯示的每一個軟件上點(diǎn)擊可以分享、啟動或者卸載一個應(yīng)用。該模塊的業(yè)務(wù)流程如圖4所示。
2.5 設(shè)置中心模塊設(shè)計(jì)
通過設(shè)置中心可以設(shè)置是否開啟后臺服務(wù)設(shè)置,來點(diǎn)歸屬地顯示服務(wù)設(shè)置,黑名單攔截服務(wù)設(shè)置。其業(yè)務(wù)邏輯流程如圖5所示。
3 項(xiàng)目的實(shí)現(xiàn)與測試
3.1 項(xiàng)目開發(fā)環(huán)境與應(yīng)用環(huán)境
3.1.1開發(fā)環(huán)境
項(xiàng)目采用Sqlite數(shù)據(jù)庫,并在win7操作系統(tǒng)上,使用Java語言在Android Development Tool環(huán)境下完成項(xiàng)目的開發(fā)。為了進(jìn)一步了解開發(fā)環(huán)境,下面將對項(xiàng)目的目錄結(jié)構(gòu)加以說明。
1)項(xiàng)目的目錄空間結(jié)構(gòu)
在創(chuàng)建了本次的設(shè)計(jì)的項(xiàng)目后,會在項(xiàng)目的根目錄下發(fā)現(xiàn)一些文件和子目錄,以下是對這些目錄的簡要說明:
AndroidManifest.xml:是一個XML文件,用于描述將被構(gòu)建的應(yīng)用程序,以及應(yīng)用程序中包含哪些組件(Activity、Service等等)。
build.xml:是一個Ant腳本,用于編譯應(yīng)用程序和在設(shè)備上安裝應(yīng)用程序。
Default.properties和local.properties:是屬性文件,由Ant構(gòu)建腳本使用。
assets/:文件夾,用于存放需要打包到應(yīng)用程序中的靜態(tài)文件,以便部署到設(shè)備中。
bin/:文件夾,用于存放編譯后的應(yīng)用程序。
gen/:文件夾,Android構(gòu)建工具存放它們生成的源代碼的地方。
libs/:文件夾,用于存放應(yīng)用程序用到的第三方JAR包。
src/:文件夾,用于存放應(yīng)用程序的Java源代碼。
res/:文件夾,用于存放應(yīng)用程序的資源(如圖標(biāo)、GUI布局等),將被打包到編譯后Java中。
tests/:文件夾,用于存放完全獨(dú)立的Android項(xiàng)目,以便測試你所創(chuàng)建的項(xiàng)目。
2)項(xiàng)目代碼的組織結(jié)構(gòu)
程序代碼的組織結(jié)構(gòu)大體上有兩種:
第一種:按照業(yè)務(wù)邏輯組織代碼,這樣業(yè)務(wù)與業(yè)務(wù)之間的關(guān)聯(lián)度比較小。
第二種:按照代碼的類型組織包結(jié)構(gòu)。
在這里,我們采用第二種代碼的組織結(jié)構(gòu)進(jìn)行手機(jī)安全衛(wèi)士的開發(fā),其代碼的組織方式如下:
com.example.mobilesafe,這個包放我們開發(fā)程序的主界面;
com.example.mobilesafe.ui,這個包放我們開發(fā)程序的自定義控件;
com.example.mobilesafe.engine,我們程序開發(fā)的業(yè)務(wù)類放在這個包下;
com.example.mobilesafe.db,這個包放我們所使用的數(shù)據(jù)庫類;
com.example.mobilesafe.db.dao,這個包實(shí)現(xiàn)我們對數(shù)據(jù)庫的增刪改查;
com.example.mobilesafe.utils,這個包下為我們公用的工具類;
com.example.mobilesafe.service,這個包下為我們后臺長期運(yùn)行的服務(wù);
com.example.mobilesafe.receiver,這個包下是我們定義的廣播接收者。
3.1.2 項(xiàng)目應(yīng)用環(huán)境
項(xiàng)目開發(fā)完成后,在聯(lián)想、三星、諾基亞、HTC、小米、索尼、華為、中興等安卓手機(jī)上應(yīng)用均可。
3.2功能模塊的實(shí)現(xiàn)
3.2.1 splashactivity模塊
該界面主要功能是聯(lián)網(wǎng)檢查服務(wù)器是否有新的版本更新初始化數(shù)據(jù)和展示手機(jī)衛(wèi)士的logo,可以提高用戶的體驗(yàn)效果,具體界面如圖6所示。
版本更新關(guān)鍵代碼如下:
if (getAppVersion().equals(updateInfo.getVersion())) {//加載配置,判斷是否與當(dāng)前版本一致
Log.i(tag, "版本一致 進(jìn)入主界面");
loadMainUi();//加載主界面
finish();//關(guān)閉當(dāng)前界面
} else {
Log.i(tag, "版本不同,下載");
showUpdateDialog();//進(jìn)入更新對話框
}
3.2.2 Homeactivity模塊
在splash界面點(diǎn)擊“ok”按鈕后,就直接進(jìn)入homeactivtity了,該界面是手機(jī)用戶操作的主界面,具體界面效果如圖7所示。
主界面布局關(guān)鍵代碼如下:
private static final String[] names = { "手機(jī)防盜", "通訊衛(wèi)士", "軟件管理", "進(jìn)程管理","流量統(tǒng)計(jì)", "病毒查殺", "系統(tǒng)優(yōu)化", "高級工具", "設(shè)置中心" };//功能名稱數(shù)組
private static final int[]icons={R.drawable.safe,R.drawable.callmsgsafe,R.drawable.app,R.drawable.taskmanager,
R.drawable.netmanager,R.drawable.trojan,R.drawable.sysoptimize,R.drawable.atools,R.drawable.settings
};//功能圖標(biāo)數(shù)組
iv_icon.setImageResource(icons[position]);//把每張圖片顯示在主界面上
tv_name.setText(names[position]);//把每個功能名字顯示在主界面上
3.2.3手機(jī)防盜功能模塊
手機(jī)防盜也是該應(yīng)用最核心的功能模塊之一,是增強(qiáng)用戶體驗(yàn)的亮點(diǎn)。用戶可以通過預(yù)先設(shè)置密碼開啟防盜功能。用戶手機(jī)一旦丟失,就可以事先像安全衛(wèi)士設(shè)置的安全號碼發(fā)送指令做出相應(yīng)的響應(yīng),來找回丟失的手機(jī)。
1)安全密碼設(shè)置
打開手機(jī)防盜功能界面的時候,應(yīng)用會進(jìn)行判斷用戶是否已經(jīng)設(shè)置好防盜密碼,如果是首次會跳到設(shè)置密碼的對話框,如圖8所示。
設(shè)置安全密碼關(guān)鍵代碼如下:
AlertDialog.Builder builder = new Builder(this);
View view = View.inflate(this, R.layout.dialog_first_entry, null);
et_first_entry_pwd = (EditText) view
.findViewById(R.id.et_first_entry_pwd);
et_first_entry_pwd_confirm = (EditText) view
.findViewById(R.id.et_first_entry_pwd_confirm);
bt_first_entry_cancle = (Button) view
.findViewById(R.id.bt_first_entry_cancle);
bt_first_entry_ok = (Button) view.findViewById(R.id.bt_first_entry_ok);
bt_first_entry_ok.setOnClickListener(this);
bt_first_entry_cancle.setOnClickListener(this);
dialog = builder.create();
dialog.setView(view, 0, 0, 0, 0);
dialog.show();
2)設(shè)置向?qū)?shí)現(xiàn)
用戶正確輸入密碼后,就會進(jìn)入防盜安全向?qū)Ы缑婷?,用戶只有完成手機(jī)防盜模塊4個步驟的設(shè)置向?qū)гO(shè)置,安全功能才會被開啟,其具體界面效果如圖9至圖12所示。
防盜設(shè)置向?qū)Тa如下:
Step1:
String simNumber = tm.getSimSerialNumber();
Editor editor = sp.edit();
editor.putString("sim", simNumber);
editor.commit();
tv_bind_sim.setText("SIM卡已綁定");
iv_bind_sim.setBackgroundResource(R.drawable.lock);
Step2與step3:
Editor editor=sp.edit();
String content = data.getStringExtra("content");
number = data.getStringExtra("number");
editor.putString("contact_content", number);
editor.commit();
contact_content.setText(content);
Step4:
if (!sp.getBoolean("opend", false)) {
contact_content.setText("防盜已開啟");
safe_lock.setImageResource(R.drawable.lock);
Editor editor = sp.edit();
editor.putBoolean("opend", true);
editor.commit();
} else {
contact_content.setText("防盜未開啟");
safe_lock.setImageResource(R.drawable.unlock);
Editor editor=sp.edit();
editor.putBoolean("opend", false);
editor.commit();
}
3.2.4 進(jìn)程管理模塊
進(jìn)程管理界面的UI和軟件管理界面的UI大致類似,其主要界面展示如圖13所示。
進(jìn)程管理關(guān)鍵代碼如下:
for (TaskInfo taskInfo : killedTasks) {
if (taskInfo.isUserTask()) {
usertaskinfos.remove(taskInfo);
} else {
systemtaskinfos.remove(taskInfo);
System.out.println("jinlai");
}
}
3.2.5 通訊衛(wèi)士管理模塊
通訊衛(wèi)士可以讓用戶自定義添加黑名單,在界面右上角有個添加圖標(biāo)按鈕,點(diǎn)擊添加后,彈出添加黑名單對話框,可以電話攔截,短信攔截和電話短信攔截三種模式。確定后成功添加,黑名單號碼會保存到黑名單數(shù)據(jù)庫里,并且顯示出來。其界面展示如圖14所示。
黑名單關(guān)鍵代碼如下:
if ("1".equals(info.getMode())) {
holder.tv_mode.setText("全部攔截");
holder.tv_mode.setTextColor(getResources()
.getColor(R.color.red));
} else if ("2".equals(info.getMode())) {
holder.tv_mode.setText("電話攔截");
holder.tv_mode.setTextColor(getResources().getColor(
R.color.purple));
} else if ("3".equals(info.getMode())) {
holder.tv_mode.setText("短信攔截");
holder.tv_mode.setTextColor(getResources().getColor(
R.color.orange));
}
3.2.6 設(shè)置中心管理模塊
設(shè)置中心是對該手機(jī)衛(wèi)士的一些功能進(jìn)行設(shè)置,里面含的模塊有是否打開自動更新,來電顯示歸屬地顯示位置信息以及是否顯示來電歸屬地對話框,是否打開黑名單攔截服務(wù)等。其主要界面展示如圖15所示。
設(shè)置中心關(guān)鍵代碼如下:
自動更新:
if (sv_setting_update.isCheck()) {
sv_setting_update.setcheck(false);
editor.putBoolean("update", false);
sv_setting_update.setcontent("自動更新關(guān)閉"); // 更新
} else {
sv_setting_update.setcheck(true);
editor.putBoolean("update", true);
sv_setting_update.setcontent("自動更新開啟");
}
歸屬地:
if (sv_setting_showaddress.isCheck()) {
sv_setting_showaddress.setcheck(false);
sv_setting_showaddress.setcontent("查詢關(guān)閉"); // 歸屬地查詢
stopService(showAddressServiceIntent);
} else {
sv_setting_showaddress.setcheck(true);
sv_setting_showaddress.setcontent("查詢開啟");
startService(showAddressServiceIntent);
}
防火墻:
if (sv_setting_firewall.isCheck()) {
sv_setting_firewall.setcheck(false);
sv_setting_firewall.setcontent("防火墻服務(wù)沒有開啟");
stopService(callSmsFireWallServiceIntent);
} else {
sv_setting_firewall.setcheck(true);
sv_setting_firewall.setcontent("防火墻服務(wù)開啟");
startService(callSmsFireWallServiceIntent);
}
3.3 項(xiàng)目測試
在開發(fā)好項(xiàng)目后,需要對項(xiàng)目的每一個功能模塊進(jìn)行測試,把項(xiàng)目部署到虛擬機(jī)上測試是否能正常運(yùn)行,但由于項(xiàng)目的功能模塊比較多,我們只對其中的兩項(xiàng)常用服務(wù)進(jìn)行測試。
3.3.1 來電歸屬地測試
把項(xiàng)目部署到虛擬機(jī)上運(yùn)行,打開設(shè)置中心里的打開歸屬地按鈕,通過Eclipse進(jìn)入到(Dalvik Debug Monitor Service)DDMS界面,調(diào)試監(jiān)控服務(wù)。然后用虛擬機(jī)撥打一個電話號碼,看號碼歸屬地是否能成功的部署到手機(jī)上,其顯示的界面如圖16所示。
3.3.2 通訊衛(wèi)士模塊測試
測試開始前,我們需要開啟兩臺模擬器,一個當(dāng)作撥號電話,一個當(dāng)作接聽電話,然后我們把撥打電話的那一臺模擬器的號碼添加到接聽電話模擬器的黑名單上,分別測試三個模式,電話攔截,短信攔截,電話短信攔截。看應(yīng)用是否成成功的攔截我們設(shè)定的模式。如下圖17所示。
3.3.3 在真機(jī)上測試
測試時把項(xiàng)目部署到不同分辨率的手機(jī)上,發(fā)現(xiàn)不同顯示器上的顯示結(jié)果不一樣,軟件管理界面尤其明顯。比如PopupWindow,在不同分辨率的顯示效果變形,大分辨率上彈出距離圖標(biāo)較遠(yuǎn),小分辨率上則相反。通過對源代碼進(jìn)行優(yōu)化與修改,創(chuàng)建一個分辨率轉(zhuǎn)換工具,把px轉(zhuǎn)化成dip,轉(zhuǎn)換后測試效果在不同分辨率的手機(jī)上顯示效果是一樣的,有效的解決了圖形變形的問題。
4 結(jié)束語
手機(jī)安全是移動互聯(lián)網(wǎng)研究的一個重要課題,手機(jī)安全衛(wèi)士的研究目前筆者只作比較初步的研究。已對手機(jī)防盜、通訊衛(wèi)士、軟件及進(jìn)程管理等功能做了具體的設(shè)計(jì)與實(shí)現(xiàn),并完成了數(shù)據(jù)包及應(yīng)用程序聯(lián)網(wǎng)攔截等防火墻的基本功能。通過手機(jī)防盜功能的設(shè)置,可以遠(yuǎn)程定位已丟失的手機(jī)和遠(yuǎn)程清除已丟失手機(jī)SIM卡中的用戶數(shù)據(jù)。這是該項(xiàng)目的亮點(diǎn)之一。其次,通過通訊衛(wèi)士對黑白名單的管理,可以通過電話、短信以及電話和短信等3種方式對手機(jī)進(jìn)行通訊管理,這種對手機(jī)安全的管理方式也是用戶的實(shí)用功能之一。當(dāng)然,項(xiàng)目的研究也存在很多不足,比如不能添加病毒庫,暫時還不能實(shí)現(xiàn)對木馬病毒的查殺,還未設(shè)計(jì)系統(tǒng)故障修復(fù)功能,還未實(shí)現(xiàn)基于數(shù)據(jù)包內(nèi)容的過濾與攔截等功能,筆者將在今后對Android的學(xué)習(xí)和日常的工作中,對手機(jī)衛(wèi)士作進(jìn)一步優(yōu)化和完善,爭取為用戶提供更多更實(shí)用的功能,發(fā)揮更大的應(yīng)用價值。
參考文獻(xiàn):
[1] 周運(yùn)偉. 手機(jī)安全問題的難點(diǎn)剖析及其對策[J]. 信息網(wǎng)絡(luò)安全, 2013(10): 78-80.
[2] 宋杰. Android OS手機(jī)平臺的安全機(jī)制分析和應(yīng)用研究[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2010, 20(6): 152-156.
[3] 潘莉. 手機(jī)病毒的特點(diǎn)與防范[J]. 電腦與電信, 2011, 15(5): 74-75.
[4] 江連海. 智能手機(jī)安全系統(tǒng)開發(fā)[J]. 可編程控制器與工廠自動化, 2013(5):71-73.
[5] 蔣紹林. Android安全研究綜述[J]. 計(jì)算機(jī)應(yīng)用與軟件,2012, 29(10): 206-210.
[6] 羅喧. 智能手機(jī)應(yīng)用安全關(guān)鍵技術(shù)探討[J]. 計(jì)算機(jī)應(yīng)用與軟件,2012(10): 19-27 .