Android編程之殺毒的實現(xiàn)原理及具體實例
電腦病毒看不見,卻無處不在,有時防護措施不夠或者不當操作都會導致病毒入侵。這篇文章主要介紹了Android編程之殺毒的實現(xiàn)原理及具體實例,結(jié)合實例形式分析了Android殺毒功能的原理與簡單實現(xiàn)技巧,需要的朋友可以參考下
具體如下:
一個殺毒軟甲最核心的部分一個是病毒庫一個是殺毒引擎,病毒庫從服務(wù)器中獲得,殺毒引擎實際上是判斷程序中的包名和簽名是否匹配病毒庫中的包名和簽名,如果匹配則為病毒,界面使用幀動畫來顯示。
思路:
1.從服務(wù)器端把病毒的版本庫信息下載下來將解析的數(shù)據(jù)存放到List集合中
2.獲取到手機中所有應(yīng)用程序的包名以及程序的簽名
3.將病毒庫匹配手機應(yīng)用程序包名及簽名
4.用ScrollView標簽進行自動滾動顯示
關(guān)鍵代碼如下:
特洛伊木馬病毒庫的信息:
tory.virus
cn.itcast.virus
惡意軟件,讀取用戶日志
3082020730820170a00302010202044ea7598f300d06092a864886f70d010105050030483
10a30080603550406130131310a30080603550408130131310a3008060355040713013131
0a3008060355040a130131310a3008060355040b130131310a30080603550403130131301
e170d3131313032363030353132375a170d3231313032333030353132375a3048310a3008
0603550406130131310a30080603550408130131310a30080603550407130131310a30080
60355040a130131310a3008060355040b130131310a3008060355040313013130819f300d
06092a864886f70d010101050003818d0030818902818100d915d7a98cde8bcd69b87ec52
11012ace847de42129a71bf679a059c2c55e893bc0ea886874432ab8b9097724211df6769
eacd3381ccac779ab7422d8101320b1e0b14e06ac8ee095b20e52cbe6163e10a87dc410b8
a91fb73d53c5bdb4a22d1295c61e04b8f8b68c475e69c1754a1dc35745e7c6ae0275c2620
b863b0d9ea8f0203010001300d06092a864886f70d01010505000381810038e1119fbb710
4180fddba4bc8b2c275df63f0df418b7480d8eba2891da20d34d3d083cfed7bb3eb546863
c76bc67cc93f2fa0e9377c470881c9a763c99cc035093184bb50f76e74155592eca3566a3
10af55e5fec19d6fdc1a74f226aef485f84389126e8e3f4b59fe2797cbfcac660b9f2cc81
e6f3dcaa7cb2001ecc496a7b
殺毒引擎:
/*
* 殺毒引擎(下載病毒庫、獲取程序的包名及簽名并進行匹配)
* (non-Javadoc)
* @see android.app.Activity#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
packagenames = new ArrayList();
virusResult = new ArrayList();
infos = new ArrayList();
animationDrawable.start();//播放掃描病毒的動畫
new Thread(){
@Override
public void run() {
try {
URL url = new URL("http://192.168.1.168:8080/virus.xml");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
//從服務(wù)器解析病毒庫并獲取到病毒庫的集合
virusbeans = VirusInfo.getVirusInfos(is);
TaskInfo taskInfo = new TaskInfo(KillVirusActivity.this); //實例化包資源管理器
//獲取到當前手機里面所有的包名
infos = pm.getInstalledApplications(0);
for(ApplicationInfo info : infos ){
packagenames.add(info.packageName);
}
int count=0;
// 殺毒引擎 根據(jù)病毒庫 比對當前系統(tǒng)里面的程序包名 簽名進行 殺毒
StringBuilder sb = new StringBuilder();
for(String packname : packagenames){
sb.append("正在掃描 "+ packname);
sb.append("\n");
Message msg = new Message();
msg.what = SCANNING;
msg.obj = sb;
handler.sendMessage(msg);
//檢查當前的packname 和對應(yīng)簽名 是不是跟病毒庫里面的信息一樣
for(VirusBean virusbean : virusbeans){
if(packname.equals(virusbean.getPackname())&&
taskInfo.getAppSignature(packname).equals(virusbean.getSignature()))
{
virusResult.add(packname);//添加一個病毒
}
}
count ++;//記錄病毒的總數(shù)
}
Message msg = new Message();
msg.what = SCANNING_FINISH;
msg.obj = count;
handler.sendMessage(msg);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
return super.onTouchEvent(event);
}
顯示病毒掃描信息:
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case SCANNING:
StringBuilder sb = (StringBuilder) msg.obj;
tv_killvirus_info.setText(sb.toString());
sv.scrollBy(0, 25);//每次增加都會自動向下移動畫面
break;
case SCANNING_FINISH:
int i = (Integer) msg.obj;
StringBuilder sb1 = new StringBuilder();
sb1.append("掃描完畢 共掃描 "+ i+ " 個程序");
if(virusResult.size()>0){
sb1.append("發(fā)現(xiàn)病毒 \n");
for(String packname : virusResult){
sb1.append("病毒名"+ packname);
sb1.append("\n");
}
}
tv_killvirus_info.setText(sb1.toString());
animationDrawable.stop();
break;
}
}
};
獲取到程序的簽名:
/*
* 獲取程序的簽名
*/
public String getAppSignature(String packname){
try {
PackageInfo packinfo =pm.getPackageInfo(packname, PackageManager.GET_SIGNATURES);
//獲取到所有的權(quán)限
return packinfo.signatures[0].toCharsString();
} catch (NameNotFoundException e) {
e.printStackTrace();
return null;
}
}
顯示掃描的文件頁面并自動滾動:
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/iv_killvirus_am"
android:id="@+id/sv_killvirus"
>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tv_killvirus_info"
>
希望本文所述對大家Android程序設(shè)計有所幫助。
相關(guān)閱讀:2018網(wǎng)絡(luò)安全事件:
一、英特爾處理器曝“Meltdown”和“Spectre漏洞”
2018年1月,英特爾處理器中曝“Meltdown”(熔斷)和“Spectre” (幽靈)兩大新型漏洞,包括AMD、ARM、英特爾系統(tǒng)和處理器在內(nèi),幾乎近20年發(fā)售的所有設(shè)備都受到影響,受影響的設(shè)備包括手機、電腦、服務(wù)器以及云計算產(chǎn)品。這些漏洞允許惡意程序從其它程序的內(nèi)存空間中竊取信息,這意味著包括密碼、帳戶信息、加密密鑰乃至其它一切在理論上可存儲于內(nèi)存中的信息均可能因此外泄。
二、GitHub 遭遇大規(guī)模 Memcached DDoS 攻擊
2018年2月,知名代碼托管網(wǎng)站 GitHub 遭遇史上大規(guī)模 Memcached DDoS 攻擊,流量峰值高達1.35 Tbps。然而,事情才過去五天,DDoS攻擊再次刷新紀錄,美國一家服務(wù)提供商遭遇DDoS 攻擊的峰值創(chuàng)新高,達到1.7 Tbps!攻擊者利用暴露在網(wǎng)上的 Memcached 服務(wù)器進行攻擊。網(wǎng)絡(luò)安全公司 Cloudflare 的研究人員發(fā)現(xiàn),截止2018年2月底,中國有2.5萬 Memcached 服務(wù)器暴露在網(wǎng)上 。
三、蘋果 iOS iBoot源碼泄露
2018年2月,開源代碼分享網(wǎng)站 GitHub(軟件項目托管平臺)上有人共享了 iPhone 操作系統(tǒng)的核心組件源碼,泄露的代碼屬于 iOS 安全系統(tǒng)的重要組成部分——iBoot。iBoot 相當于是 Windows 電腦的 BIOS 系統(tǒng)。此次 iBoot 源碼泄露可能讓數(shù)以億計的 iOS 設(shè)備面臨安全威脅。iOS 與 MacOS 系統(tǒng)開發(fā)者 Jonathan Levin 表示,這是 iOS 歷史上最嚴重的一次泄漏事件。
四、韓國平昌冬季奧運會遭遇黑客攻擊
2018年2月,韓國平昌冬季奧運會開幕式當天遭遇黑客攻擊,此次攻擊造成網(wǎng)絡(luò)中斷,廣播系統(tǒng)(觀眾不能正常觀看直播)和奧運會官網(wǎng)均無法正常運作,許多觀眾無法打印開幕式門票,最終未能正常入場。
五、加密貨幣采礦軟件攻擊致歐洲廢水處理設(shè)施癱瘓
2018年2月中旬,工業(yè)網(wǎng)絡(luò)安全企業(yè) Radiflow 公司表示,發(fā)現(xiàn)四臺接入歐洲廢水處理設(shè)施運營技術(shù)網(wǎng)絡(luò)的服務(wù)器遭遇加密貨幣采礦惡意軟件的入侵。該惡意軟件直接拖垮了廢水處理設(shè)備中的 HMI 服務(wù)器 CPU,致歐洲廢水處理服務(wù)器癱瘓 。
Radiflow 公司稱,此次事故是加密貨幣惡意軟件首次對關(guān)鍵基礎(chǔ)設(shè)施運營商的運營技術(shù)網(wǎng)絡(luò)展開攻擊。由于受感染的服務(wù)器為人機交互(簡稱HMI)設(shè)備,之所以導致廢水處理系統(tǒng)癱瘓,是因為這種惡意軟件會嚴重降低 HMI 的運行速度。
編程殺毒相關(guān)文章: