破解可读不可复制的 U 盘

特此声明:本篇文章仅用于研究学习,请网友自觉,不能用于黑产。

有一种自我防护的 U 盘,只支持在 U 盘中打开查看,无法拷贝出来。对于一个热爱自由的人来说,也许获得里面的内容是件小事,但是打破这个规则,则是一件更有意思的事。

那么,先设定一个不以获得内容为目的的目的:将 U 盘里面的文件拷贝出来。

通过观察,发现几个现象:

0.U 盘有登录验证机制。

1.输入用户名密码在U盘自带管理软件中打开 U 盘后,文件视觉上可见,但复制,粘贴的系统快捷键无法使用了。

2.登录验证之前,无法在 cmd 中访问 U 盘,文件加密状态。

得到结论:U 盘里面的内容在登录验证通过之前是加密存放的,登录成功后解密(估计是延迟解密的,因为 U 盘文件较大,如果在验证成功后一次性将所有文件都解密,耗费时间必然较多而且并不一定会真正访问所有文件)。打开U 盘后,U 盘管理程序向系统挂载了键盘钩子,拦截了复制,粘贴键盘。进一步思考,必须要在登录成功后,才有可能拿到解密后的文件。因此,我们必须打开 U 盘自带的管理软件登录。

尝试一

想一下在管理软件中双击鼠标后,在 WPS 中可以正常地打开文件,说明,此时真正的文件流已经被发送给了 WPS,那么我们直接在 WPS 文件中复制出来不就可以了吗?

然而却发现 WPS 中,鼠标右键中的复制,或者复制组合键盘也被屏蔽了,“另存为”功能也被屏蔽了。猜测可能是 WPS 提供了接口对文档进行保护(事实上,Office 也是这样)。不想把问题转化为与 WPS 的对抗赛,于是似乎只能再想办法。

尝试二

我们不能复制文件的原因是,复制快捷键被管理软件拦截并内部消化了,没有 post 到下一进程,解决思路是,将加入到系统中的鼠标钩子移除掉,不拦截 ctrl+c 。这很简单,只需要调用一个系统函数就可以了。

然而,这种方法没有起作用,是没有想周全。ctrl+c 原本是资源浏览器 (exeplorer.exe) 响应的键盘事件,也就是说,我们想在管理软件中使用 ctrl+c 复制,这也得它响应了该事件才行啊!所以,我们把 ctrl+c 的钩子移除掉,只是让我们可以在资源浏览器中复制,并不能达到在U盘管理软件中复制的目的。

尝试三

如果文件流被传递给了 WPS ,那么,我们可以中途拿到文件流吗?这可能需要去拦截进程,比较复杂。

受这个观点的启发,我们虽然不能拦截进程的数据,但是我们再造一个 WPS 替换掉 WPS 呢?这里说的再造一个,并非是真的写出一个 WPS,我们只需要实现我们自己的功能:这个程序在拿到文件流后,立即写文件,保存到我们系统中。

说到这儿,解决方法就很简单了:写一个程序,参数接受一个文件名,将这个文件 dump 到某个位置。之后,最关键的一步,将所有后缀为 .doc 的文件的默认打开方式设置为我们的这个程序。

确实,该方法起效果了,双击就可以复制想复制出来的文件!

这里其实还有研究,如何判断,双击一个文件,传给程序的是什么参数呢?是文件名,还是文件流?其实,仅略作思考就能得到答案:因为文件流(字节流)中可能会存在为 0  的字节,而程序接收输入的,也就是 main 函数,其参数是 argv**, argc,没有哪一个参数能说明字节流的长度,故,argv** 会被视作以 0 节尾的字符序列,而不是字节流。综上,程序接收的参数只能是文件名了。

程序比较简单,开源地址是:

https://github.com/juniorfans/copyOnClick


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值