android程序劫持持程序,大谈android安全2——Activity劫持的防范程序
上篇在里面介紹了由于Android設計上的缺陷而導致的釣魚漏洞,并且也在文末介紹了用戶防范的方法。
然而,如果真的爆發了這種惡意程序,我們并不能在啟動程序時每一次都那么小心去查看判斷當前在運行的是哪一個程序。因此,前幾個星期花了一點時間寫了一個程序,叫反劫持助手。原理很簡單,就是獲取當前運行的是哪一個程序,并且顯示在一個浮動窗口中,以幫忙用戶判斷當前運行的是哪一個程序,防范一些釣魚程序的欺騙。
在這一次,由于是“正當防衛”,就不再通過枚舉來獲取當前運行的程序了,在manifest文件中增加一個權限:
然后啟動程序的時候,啟動一個Service,在Service中啟動一個浮動窗口,并周期性檢測當前運行的是哪一個程序,然后顯示在浮動窗口中。
程序截圖如下:
其中Service代碼如下:
/*
*?@(#)AntiService.java?Project:ActivityHijackingDemo
*?Date:2012-9-13
*
*?Copyright?(c)?2011?CFuture09,?Institute?of?Software,
*?Guangdong?Ocean?University,?Zhanjiang,?GuangDong,?China.
*?All?rights?reserved.
*
*?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
*?you?may?not?use?this?file?except?in?compliance?with?the?License.
*?You?may?obtain?a?copy?of?the?License?at
*
*?http://www.apache.org/licenses/LICENSE-2.0
*
*?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
*?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
*?See?the?License?for?the?specific?language?governing?permissions?and
*?limitations?under?the?License.
*/
packagecom.sinaapp.msdxblog.antihijacking.service;
importandroid.app.ActivityManager;
importandroid.app.Notification;
importandroid.app.Service;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.pm.PackageManager;
importandroid.content.pm.PackageManager.NameNotFoundException;
importandroid.os.Bundle;
importandroid.os.Handler;
importandroid.os.IBinder;
importandroid.os.Message;
importandroid.util.Log;
importcom.sinaapp.msdxblog.androidkit.thread.HandlerFactory;
importcom.sinaapp.msdxblog.antihijacking.AntiConstants;
importcom.sinaapp.msdxblog.antihijacking.view.AntiView;
/**
*?@author?Geek_Soledad?(66704238@51uc.com)
*/
publicclassAntiServiceextendsService?{
privatebooleanshouldLoop?=false;
privateHandler?handler;
privateActivityManager?am;
privatePackageManager?pm;
privateHandler?mainHandler;
privateAntiView?mAntiView;
privateintcircle?=2000;
@Override
publicIBinder?onBind(Intent?intent)?{
returnnull;
}
@Override
publicvoidonStart(Intent?intent,intstartId)?{
super.onStart(intent,?startId);
startForeground(19901008,newNotification());
if(intent?!=null)?{
circle?=?intent.getIntExtra(AntiConstants.CIRCLE,?2000);
}
Log.i("circle",?circle?+"ms");
if(true==?shouldLoop)?{
return;
}
mAntiView?=?newAntiView(this);
mainHandler?=?newHandler()?{
publicvoidhandleMessage(Message?msg)?{
String?name?=?msg.getData().getString("name");
mAntiView.setText(name);
};
};
pm?=?getPackageManager();
shouldLoop?=?true;
am?=?(ActivityManager)?getSystemService(Context.ACTIVITY_SERVICE);
handler?=?newHandler(
HandlerFactory.getHandlerLooperInOtherThread("anti"))?{
@Override
publicvoidhandleMessage(Message?msg)?{
super.handleMessage(msg);
String?packageName?=?am.getRunningTasks(1).get(0).topActivity
.getPackageName();
try{
String?progressName?=?pm.getApplicationLabel(
pm.getApplicationInfo(packageName,
PackageManager.GET_META_DATA)).toString();
updateText(progressName);
}?catch(NameNotFoundException?e)?{
e.printStackTrace();
}
if(shouldLoop)?{
handler.sendEmptyMessageDelayed(0,?circle);
}
}
};
handler.sendEmptyMessage(0);
}
privatevoidupdateText(String?name)?{
Message?message?=?newMessage();
Bundle?data?=?newBundle();
data.putString("name",?name);
message.setData(data);
mainHandler.sendMessage(message);
}
@Override
publicvoidonDestroy()?{
shouldLoop?=?false;
mAntiView.remove();
super.onDestroy();
}
}
浮動窗口僅為一個簡單的textview,非此次的技術重點,在這里省略不講。
當然,從以上代碼也可以看出本程序只能防范通過Activity作為釣魚界面的程序,因為它是通過運行的頂層的Activity來獲取程序名稱的,對WooYun最近提到的另一個釣魚方法它還是無能為力的,關于這一點將在下次談。
【編輯推薦】
【責任編輯:chenqingxiang TEL:(010)68476606】
點贊 0
總結
以上是生活随笔為你收集整理的android程序劫持持程序,大谈android安全2——Activity劫持的防范程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 能源行业的作业成本法管理
- 下一篇: Android 签名打包