反截屏
怎么禁止所有的软件截屏?
[解决办法]
这个还真不知道
[解决办法]
这个玩意儿是矛和盾的问题 无解
[解决办法]
有好的思路也可以分享一下
[解决办法]
不可能有无解的东西
[解决办法]
这要深入到系统内部机制了吧...禁止像素点采集什么的..
[解决办法]
大家有何好的思路可以聊聊。这个主要用在网络安全领域
[解决办法]
监视剪切板试试
[解决办法]
这个技术不太实用。因为我已经在做复制,粘贴时已经对剪贴板挂钩子了。
[解决办法]
这年月肿么木有看到啥高手
[解决办法]
不可能的. 只要人能看到, 就一定可以记录下来. 你今天把截屏给屏蔽掉, 你能把用户的照相机抢走吗? 你能保证他没有那种具有录像功能的显示器吗? 或者, 你能保证用户的记忆力不是神级的吗?
[解决办法]
软件上这就是无解
[解决办法]
你说是保护设计图纸,这直接拍照就行了
[解决办法]
我暂时不考虑拍照这些,先解决软件上的截屏。
[解决办法]
把你的程序放到虚拟机运行,然后在宿主机截屏
[解决办法]
这些我都先不考虑。我说的是反截屏软件,录屏软件。这是在交流设计思路,怎么都是说的找破绽,破绽是肯定有的。
[解决办法]
反截屏软件,录屏软件的思路是有,而且不难,但是当然要说找破绽,破绽是肯定有的,而且很容易找到,这就使得实现的功能毫无用处,那么还花时间干什么?
[解决办法]
反截屏软件,录屏软件的思路是有,而且不难?什么思路,说来听听
[解决办法]
这个是先防止一般的用户。其他的先不予考虑。
[解决办法]
我的反截屏主要是防止电脑上所有的软件截屏,并非是我的程序防止截屏
[解决办法]
你的程序用什么接口绘图
[解决办法]
这个知道。关键是API太多,如果每个都拦截,范围太广,会导致系统不稳定,说起来简单做起来难。
[解决办法]
用户模式防截屏就是拦截各种和截屏有关的api
[解决办法]
这个方法我早知道,主要是会导致系统不稳定
[解决办法]
但是只能这么做,如果你跟踪一下可以找到api之间的依赖关系,可以减少一些
[解决办法]
又是反截屏啊。。。即便是最简单的本机防范也不容易,就像吃鱼,本来很容易,但代价是放完整条河的水。
即使是最基本的GDI函数,你又岂敢乱动?定点处理容易,范围防范很难。
[解决办法]
你搞这些不如把真正实用的功能做好,如果其他功能一样,一个到处钩子,一个只做好本职工作,用户肯定选后者
[解决办法]
你这是安全产品么
[解决办法]
你搞这些不如把真正实用的功能做好?一款真正的安全产品,这些都不防范,那是失败的
[解决办法]
文档安全,做透明加密的,基于驱动层
[解决办法]
你说一下你的软件到底干啥的
------解决方案--------------------
我晕,那肯定撒。不是因为可能引起不稳定,我何必来这里问,整半天,没一个牛人
[解决办法]
给企业管理用的?
[解决办法]
既然驱动是必要的,可以利用它帮助hook
首先你这是必须运行的安全软件,所以它应该是开机自动运行的,那么就将驱动程序设为启动运行,引导时自动加载,此时杀软是没法提示的
你针对什么版本的windows
[解决办法]
zhao4zhong1
经典语录:
试问 LZ 又能如何防止用户拿着相机,对着屏幕拍照?
又或者,如何阻止用户从显卡 VGA/DVI接口,直接硬件方式获取画面信号?
[解决办法]
既然是基于驱动,你又说驱动被拦截,到底用驱动没
[解决办法]
驱动是过滤驱动。我现在问的是控制截屏,这个从驱动也不太好控制,所以走HOOK。但是现在无论是驱动还是hook,杀软都会提示,只要点阻止,肯定就无效了
[解决办法]
从技术上来说,反截屏只有一种途径,就是限制所有对受限内容的访问行为.这无非就是把所有可以访问设备,文件, 以及其它进程的接口过滤了. 工作量巨大.
从层次上来说,可以有以下的方案:
1.对用户透明, 但所有非授权的程序都是访问受限的. 这种方案对用户影响小,但技术难度大,基本上不会有完美的解决方案.因为用户行为很难预测...
2.直接对用户做限制.这种方案就是类似网吧桌面的那类应用.限制用户可以访问的内容.从用户接口上防止非受权行为.这对于专用的系统是个很好的解决方案.但要进行针对性的开发.和第三方应用的兼容性是个问题.但如果有比较好的设计和实施,将可以做出一个比较完美的方案.用户接受度也会很高.
另外:
只要断网,断外设,防拍照.就可以从源头上禁止了.但没法防止人工的记录.
防外人的加密是有意义的,比如windows的bit lock功能.
防自己人的加密,尤其是自己员工,而且还是生产这些内容的员工...基本是扯淡.不仅没用,还会引起强烈的反感.
公司对员工好点,招人/用人的时候多做人品的考察和管理,建立良好的企业文化和氛围.再注意一下加强员工道德和法律上的意识.这才是防止泄密的良性布局.
[解决办法]
说得太好了,我想我不用再回复了
[解决办法]
zhao4zhong1
经典语录:
不要陷入加密与解密的死循环。
试问 LZ 又能如何防止用户拿着相机,对着屏幕拍照截屏?
[解决办法]
如果连Bitblt、StretchBlt都拦截了,那系统还能用了吗?:)
[解决办法]
不可能完全反截屏
[解决办法]
不安全是因为这时str是个野指针,这个我知道.想安全点就是让str指向一个malloc来的足够大的内存就行了
[解决办法]
将来的操作系统搞不好会出这个功能满足管理层的需要
[解决办法]
没办法在技术上帮楼主什么
只说一句,我公司的防泄密软件除了让员工工作起来各种错误之外,什么用都没有
满足了管理层的心,冷了员工们的心
特别是负责维护这个软件的人都说“管理层一拍脑袋,我们就做各种无用功”
虽然掏钱的是管理层,但是也麻烦您这样的软件制作者替我们这些员工想想
三天两头出问题,找供应商还推三阻四说“不可能有问题”“有问题我们过几天来修”,管理层和这类软件提供者就是在拿普通员工当猴耍
[解决办法]
第二,就算你把我前面说的搞定了。我可以负责的告诉你,根本没有任何用处。不信你试试qq的截屏。绝对不是什么getdc(getwindowsdesktop())之类的玩意。因为有比getdc更简单更快速的方法。就是读取显存。而且只需要一行语句。这种技术800年前都已经烂遍大街了。(2003年时,有个哥们说截屏太慢,我告诉他读显存的方法,只需要一行语句,他实现后高兴得不了,说真是又快又方便)
如果你限制读取显存的话。则所有游戏、windows系统功能将极不稳定、兼容性大大降低。可以说windows根本没法用了。
所以说,别整天搞那些没用的。还说什么没有牛人、说什么不可能无解。自己水平菜不是你的错。狂妄自大、口出狂言、出来丢人就是你的不对了。
[解决办法]
该回复于2012-07-24 09:37:51被版主删除
[解决办法]
PMEMORY_BLOCK mem=(PMEMORY_BLOCK)IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
char*dest=(char*)mem->dest,*src=(char*)mem->src;size_t len=mem->len;int rev=mem->rev;
if(mem->rev==0)
memcpy(dest,src,len);
else
{
size_t i;
for(i=0;i<len;i+=rev)
{
memcpy(dest+i,src+len-i-rev,rev);
}
}
Irp->IoStatus.Information=mem->len;
Status=0;
}
break;
case IOCTL_GETDEVICE:
{
PDEVNAME devname=(PDEVNAME)IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
PDEVOBJS devobjs=(PDEVOBJS)Irp->UserBuffer;
Status=GetDeviceObjectByName(&devname->DeviceName,devname->CaseInsensitive,(PDRIVER_OBJECT*)&devobjs->DriverObject,(PDEVICE_OBJECT*)&devobjs->DeviceObject);
Irp->IoStatus.Information=Status==0?sizeof(DEVOBJS):0;
}
break;
case IOCTL_MAP_VIDEO_MEMORY:
{
PDEVICEADDR devaddr=(PDEVICEADDR)IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
PDEVICE_OBJECT device=(size_t)devaddr->Device>65535?devaddr->Device:DeviceObjects[(size_t)devaddr->Device];
Status=GreDeviceIoControl(device,IOCTL_VIDEO_MAP_VIDEO_MEMORY,&devaddr->rqva,sizeof(VIDEO_MEMORY),(PVIDEO_MEMORY_INFORMATION)Irp->UserBuffer,sizeof(VIDEO_MEMORY_INFORMATION),&Irp->IoStatus.Information);
}
break;
case IOCTL_UNMAP_VIDEO_MEMORY:
{
PDEVICEADDR devaddr=(PDEVICEADDR)IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
PDEVICE_OBJECT device=(size_t)devaddr->Device>65535?devaddr->Device:DeviceObjects[(size_t)devaddr->Device];
Status=GreDeviceIoControl(device,IOCTL_VIDEO_UNMAP_VIDEO_MEMORY,&devaddr->rqva,sizeof(VIDEO_MEMORY),0,0,&Irp->IoStatus.Information);
}
break;
case IOCTL_DEVICE_IO_CONTROL:
{
PDEVIOCTRL params=(PDEVIOCTRL)IrpSp->Parameters.DeviceIoControl.Type3InputBuffer;
Status=GreDeviceIoControl((PDEVICE_OBJECT)params->DeviceObject,params->IoControlCode,params->InputBuffer,params->InputBufferSize,params->OutputBuffer,params->OutputBufferSize,&Irp->IoStatus.Information);
}
break;
default:Irp->IoStatus.Information=0;
}
Irp->IoStatus.Status=Status;
IofCompleteRequest(Irp,IO_NO_INCREMENT);
return Status;
}
NTSTATUS NTAPI DriverEntry(struct _DRIVER_OBJECT *DriverObject,PUNICODE_STRING RegistryPath)
{
NTSTATUS Status;MakeUnicodeString(DeviceName,"\\??\\viddev");
MakeUnicodeString(n,"ObQueryNameString");
ObQueryNameString=MmGetSystemRoutineAddress(&n);
if((Status=IoCreateDevice(DriverObject,0,&DeviceName,FILE_DEVICE_UNKNOWN,0,0,&ThisDeviceObject))==0)
{
DriverObject->MajorFunction[IRP_MJ_CREATE]=DriverObject->MajorFunction[IRP_MJ_CLOSE]=DispatchCreateClose;
DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL]=DispatchDeviceControl;
DriverObject->DriverUnload=DriverUnload;
}
return Status;
}
[解决办法]
status==STATUS_BUFFER_TOO_SMALL
[解决办法]
就算你软件上解决了。
能搞定 VGA采集器 吗?
正常人 显卡VGA接口 --》 VGA连接线 --》显示器
采集: 显卡VGA接口 --》VGA采集卡--》 显示器
如果,有个 迷你的微型, 不需要主机PCI插槽的 VGA采集卡, 那么,你【软件层面】什么手段也无法防止,除非你不用显示器,不用画面输出
[解决办法]
我觉得,反反截屏
------解决方案--------------------
hook住截屏用的按键,和相关的API函数。
[解决办法]
NTSTATUS GreDeviceIoControl(PDEVICE_OBJECT DeviceObject,ULONG IoControlCode,void*InputBuffer,ULONG InputBufferSize,void*OutputBuffer,ULONG OutputBufferSize,PULONG ReturnLength)
{
IO_STATUS_BLOCK Iosb;PIRP pIrp;NTSTATUS Status;
pIrp=IoBuildDeviceIoControlRequest(IoControlCode,DeviceObject,InputBuffer,InputBufferSize,OutputBuffer,OutputBufferSize,FALSE,NULL,&Iosb);
if(pIrp)
{
Status=IofCallDriver(DeviceObject,pIrp);
*ReturnLength=Iosb.Information;
}
}
NTSTATUS GetDeviceObjectByName(PUNICODE_STRING DeviceName,BOOLEAN CaseInsensitive,PDRIVER_OBJECT*DriverObject,PDEVICE_OBJECT*DeviceObject)
{
MakeUnicodeString(on,"\\Driver");OBJECT_ATTRIBUTES oa;NTSTATUS status;HANDLE Dir;BOOLEAN Found=0;
InitializeObjectAttributes(&oa,&on,OBJ_CASE_INSENSITIVE,0,0);
status=ZwOpenDirectoryObject(&Dir,DIRECTORY_QUERY,&oa);
if(status==0)
{
PDIRECTORY_BASIC_INFORMATION dbi;ULONG Context,ReturnLength;PUNICODE_STRING name;
dbi=ExAllocatePoolWithTag(PagedPool,4096,0);
name=ExAllocatePoolWithTag(PagedPool,1024,0);
if(dbi&&name)
{
status=ZwQueryDirectoryObject(Dir,dbi,4096,1,1,&Context,&ReturnLength);
while(status==STATUS_MORE_ENTRIES
[解决办法]