首页 自动驾驶

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南

分类:自动驾驶
字数: (0229)
阅读: (7225)
内容摘要:App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南,

在移动互联网时代,App的安全性至关重要。用户隐私、商业机密等敏感信息面临着各种安全威胁,其中App防止恶意截屏功能成为一个重要的安全课题。恶意截屏可能导致用户银行卡号、支付密码、聊天记录等信息泄露,给用户和企业带来巨大的损失。本文将深入探讨在iOS、Android和鸿蒙系统中实现App防止恶意截屏功能的方案,并分享实战中的避坑经验。

iOS平台防截屏方案

UIScreen.main.brightness 监控

iOS本身并没有提供直接禁止截屏的API。但是,系统截屏时屏幕亮度会瞬间变化。我们可以利用UIScreen.main.brightness的KVO (Key-Value Observing) 机制来监控亮度变化,并做出相应的反应,例如弹出警告框或模糊当前页面。需要注意的是,这种方法并不能完全阻止截屏,只能起到一定的提示作用。

// 监听屏幕亮度变化
private var brightnessObservation: NSKeyValueObservation?

override func viewDidLoad() {
    super.viewDidLoad()

    brightnessObservation = UIScreen.main.observe(\.brightness, options: [.new]) { [weak self] screen, change in
        guard let self = self else { return }
        // 亮度变化,可能是截屏
        if screen.brightness < 0.1 { // 根据实际情况调整阈值
            // 弹出警告框或模糊当前页面
            self.showScreenshotWarning()
        }
    }
}

deinit {
    brightnessObservation?.invalidate()
}

UIApplication.userDidTakeScreenshotNotification 监听

iOS 11 之后,系统提供了 UIApplication.userDidTakeScreenshotNotification 通知,可以用来监听用户截屏事件。这种方法比监听屏幕亮度变化更加准确,但同样无法完全阻止截屏,只能在截屏后做出响应。

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南
override func viewDidLoad() {
    super.viewDidLoad()

    NotificationCenter.default.addObserver(self, selector: #selector(screenshotTaken), name: UIApplication.userDidTakeScreenshotNotification, object: nil)
}

@objc func screenshotTaken() {
    // 弹出警告框或模糊当前页面
    showScreenshotWarning()
}

deinit {
    NotificationCenter.default.removeObserver(self, name: UIApplication.userDidTakeScreenshotNotification, object: nil)
}

UIBlurEffect 和 UIVisualEffectView 实现模糊效果

当检测到截屏事件时,我们可以使用 UIBlurEffectUIVisualEffectView 来模糊当前页面,防止敏感信息泄露。

func showScreenshotWarning() {
    let blurEffect = UIBlurEffect(style: .dark)
    let blurEffectView = UIVisualEffectView(effect: blurEffect)
    blurEffectView.frame = view.bounds
    blurEffectView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    view.addSubview(blurEffectView)

    // 可选:添加一个标签来提示用户
    let label = UILabel(frame: CGRect(x: 0, y: 0, width: 200, height: 50))
    label.center = view.center
    label.textAlignment = .center
    label.text = "检测到截屏,已模糊处理"
    label.textColor = .white
    blurEffectView.contentView.addSubview(label)

    // 延迟移除模糊效果
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        blurEffectView.removeFromSuperview()
    }
}

Android平台防截屏方案

FLAG_SECURE 标记

Android提供了一个 FLAG_SECURE 标记,可以添加到 ActivityWindow 上,禁止系统截屏。这是最简单有效的防截屏方式,但也有一些局限性,例如无法防止用户使用Root权限下的截屏工具。

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
    setContentView(R.layout.activity_main);
}

SurfaceView 和 TextureView 防止录屏

对于视频播放等场景,可以使用 SurfaceViewTextureView 来显示内容,并禁用硬件加速。这样可以防止一些录屏软件录制到视频内容。但是,这种方法会影响性能,并且仍然无法阻止Root权限下的录屏。

监听屏幕状态

可以通过注册 BroadcastReceiver 监听 ACTION_SCREEN_OFFACTION_USER_PRESENT 等广播,判断屏幕是否被锁定或解锁,并做出相应的处理。虽然这不能直接阻止截屏,但可以作为一种辅助手段,例如在屏幕解锁后清除敏感信息。

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南

鸿蒙系统防截屏方案

鸿蒙系统也提供了类似于Android的 FLAG_SECURE 标记,可以用于禁止截屏。此外,鸿蒙还提供了一些安全相关的API,可以用于检测和阻止恶意行为。具体的API使用方法需要参考鸿蒙官方文档。

安全组件 SecurityGuard

鸿蒙的 SecurityGuard 组件提供了多种安全能力,其中包括屏幕水印、屏幕防录制等功能,可以有效防止敏感信息泄露。具体使用方法需要参考鸿蒙官方文档进行配置。

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南

实战避坑经验总结

  • 不要过度依赖单一方案: 没有任何一种方案可以完全阻止截屏。应该结合多种方案,形成一个完整的安全体系。
  • 注意用户体验: 过度的安全措施可能会影响用户体验。需要在安全性和用户体验之间找到一个平衡点。
  • 考虑性能影响: 一些防截屏方案可能会影响性能。需要在性能和安全性之间做出权衡。
  • 持续关注系统更新: 操作系统和安全工具不断更新,需要及时关注最新的安全动态,并更新App的安全策略。
  • 关注 Root/越狱 设备: 针对 Root/越狱 设备,普通的防截屏手段可能失效,需要采取更高级的安全措施,例如代码混淆、反调试等。可以使用腾讯御安全、360加固保等工具对应用进行加固,增加破解难度。服务器端也可以进行一些安全校验,例如校验客户端的签名、设备指纹等。

例如,可以使用 Nginx 作为反向代理服务器,对 API 接口进行流量限制和访问控制,防止恶意攻击和数据抓取。可以使用宝塔面板来管理服务器,方便进行配置和维护。在高并发场景下,需要对 Nginx 进行优化,例如调整 worker 进程数、增加缓存等,以提高性能和稳定性。

App防截屏攻防战:iOS、Android、鸿蒙系统深度实践指南

转载请注明出处: 加班到秃头

本文的链接地址: http://m.acea2.store/blog/393890.SHTML

本文最后 发布于2026-04-22 20:25:35,已经过了5天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 吃土少女 1 天前
    写得太棒了!各种平台的方案都有,干货满满!
  • 咸鱼翻身 3 天前
    学习了,感谢分享。那个屏幕亮度监听的方案有点意思,可以试一下
  • 猫奴本奴 2 天前
    写得太棒了!各种平台的方案都有,干货满满!
  • 薄荷味的夏天 4 天前
    FLAG_SECURE 确实方便,但是遇到 root 还是没辙啊,求大神分享更多加固经验!