一、activity劫持简介
DEFCON-19上公布的https://www.trustwave.com/spiderlabs/advisories/TWSL2011-008.txt
android运行时,会在很多activity中进行切换,它自身维护着一个activity的历史栈,用于在用户点击back时,恢复前一个activity,栈顶指向当前显示的activity。
http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
在我们使用intent开启activity时,intent有一个选项FLAG_ACTIVITY_NEW_TASK,可以使得这个activity位于栈顶
http://developer.android.com/reference/android/content/Intent.html
#FLAG_ACTIVITY_NEW_TASK
如果我们注册一个receiver,响应android.intent.action.BOOT_COMPLETED,使得开启启动一个service;这个service,会启动一个计时器,不停枚举当前进程中是否有预设的进程启动,如果发现有预设进程,则使用FLAG_ACTIVITY_NEW_TASK启动自己的钓鱼界面,截获正常应用的登录凭证。
二、实例
androidmanifest.xml
HijackReceiver.java用于开机启动HijackService
HijackService.java用于判断正常应用是否启动,如果启动则开启劫持activity
AlipayLogin.java是伪造的界面,用于获取用户凭证并发送到指定地址,并返回正常应用
演示效果如下:
启动正常应用
这时恶意的后台service启动了伪造的activity
当用户输入凭证之后
恶意activity记录下凭证,并跳回到正常应用
在远端服务器已经记录下了用户凭证