「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战」。

更新记录

22.02.25 发布0.1.4版本支持OC

前言

想必很多同学都遇到过想要防止截屏的场景,但通过现有的API只能监听到截屏完成的通知。

试了一些主流应用,发现很多都appearance想去防止截图,但是最终实现的效果并不理想,只能在截图完成后去做一些提示,甚至访问相册删除图片。看起来好像是一github是干什么的个不好解决的问题。

经过一段时间的探索,我封装了一个十分轻量便捷的工具。希望能有些帮助,欢迎交逆向思维有多可怕流!

一、 常见方案

1.1 系统通知

UIApplication.userDidTakeScreenshotNotification 这个系统通知是在完成截屏动作后,系统给到 App 的,在收到这个通知后做处理,并不能达到防护的效果。

微信的付款吗就是这样的实现,科技布沙发优缺点在截屏后提供一个警示内容。

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

1.2 小红书

在使用小红书的截屏的时候顶部状appear态栏会添加一个小红书的水印如下图:

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

它是怎么实现的呢?我有两个猜测:

第一种:水印一直在,刘海后面

因为非刘海屏没有这个水印,所以估计是这样,但是通过切换到任务管理器状态并没有看到有那个水印。

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

第二种:通过什么黑科技加上的?appearance

不是第一种,难道真的是又什么黑科技?

appear续验证

我觉github得肯定是第一种,觉得任务切换的状态下是不是那个水印被系统隐藏appear掉。想道还有 QuickTime 可以投屏来验证。

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

破案,果然是藏在刘海后面的,没有继续深入的价值了‍♂️。逆向选择

1.3 ScreenShieldKit

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

在寻找解决方案的时候发现了这样一个S逆向DK ScreenShieldKit

Contact us for more information and to receive a free evaluati科技手抄报on SDK!

这句话一看就是收钱的了,抱着能白嫖绝不三连的宗旨,先略过暂不深入研究。(开玩笑,如果你觉得我的方案不错,本文求赞评转+Star!)

1.4 爱奇艺

爱奇艺使用apple苹果官网的是截图后直接读取用户相册删除图片的方式进行的,不给权限,截图就不会被删除。

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

1.5 U逆向行驶扣几分罚款多少钱ITextField

当我逆向思维案例100个们将一个 UITextFieldisSe科技最狂潮cureTextEntry 设置为 true 的时候,会隐去输入的文案用 圆点 替代。并且在进行录屏或者截屏的时候都会被系统隐去。

下面用我的个人项目 梦见账本

如下图我github是干什么的正在app小胖子QuickTime 进行录屏:

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

那么我们是否可以使用这种特性呢?

二、 RyukieSwifty/ScreenShield

基于 UITextField 的效果我实现了一个 Screenapp小胖子SGithieldCanvasView 可以很方便的进行使用。

GitHub: RyukieSwiapplicationfty/ScreenShield

如果觉得不错的话appearance,欢迎留个⭐️哦

2.1 使用方式

Cocoapods 导入

pod 'RyukieSwifty/ScreenShield'

使用

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

例如对整个控制器的 View科技图书馆行截屏防护:

import UIKit
import RyukieSwifty
class TransactionAddViewController: UIViewController {
    // MARK: - Life
    override func loadView() {
        view = ScreenShieldView.create()
    }
    ...
}

2.2 如何实现的

【iOS截屏防护】担心App内容被截屏泄露吗?这个开源库就是你要的

按照向里面添加子视图科技图书馆的方式验证具体的原因,最后发现这个canvas什么意思appstore果是由一个私有类实现的 _UITextLayoutCanvasView 。他本质上也是一个 UIView ,所以理论上只canvas要我们能够创建出来一个它,那么就可以将想要保护的内容添加进去。

由于它是私有类,无法直接创建,并且如果直接通过字符串区创建科技帝国从高分子材料开始也担心有审核风险,于是我通过下面的方式来创建逆向思维案例100个

private func makeSecureView() -> UIView? {
    let field = UITextField()
    field.isSecureTextEntry = true
    let fv = field.subviews.first
    fv?.subviews.forEach { $0.removeFromSuperview() }
    fv?.isUserInteractionEnabled = true
    return fv
}

当前手头没有更多的系统版本设备可以测试,已经验canvas2七彩的素描证的 13.7 ~ 15.3.1 是没问题的。

不排除会存在某些版本上 UITextField 的结构发生了调整导致失效的问题,如果有,欢迎在 GitHub 提 issue

总结

不知道各位有没有其他的实现方式,有的话欢迎一起github中文官网网页交流。

giti果本文有canvas什么意思帮到你,欢迎赞评转+Star!

  • Wechat: RyukieW
  • 技术文章归档
  • Github
我的个人项目 扫雷Elic 无尽天梯 梦见账本 隐私访问记录
类型 游戏 财务 工具
AppStore Elic Umemi 隐私访问记录

更多专栏:

Lawliet的独立开发碎碎念

Lawliet的iOS游园会

La科技最狂潮wliet的iOS底层实验室

Lawliet的icanvas可画下载OS逆向实验室

Lawliet的刷题小本本

Lawliet的Flutter实验室