如何多开wps,ppt这类程序?

xf_21 2021-02-23 06:03:19
新创建这种程序时,会检测是不是已经有同样的进程存在了。是,就把文件名传过去打开,自己退出。

如何阻止这个过程,做到打开一个文件就创建一个进程?

如何探测它们保持唯一存在的手段?
...全文
762 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xf_21 2021-03-04
  • 打赏
  • 举报
回复
引用 11 楼 _mervyn 的回复:
[quote=引用 9 楼 xf_21 的回复:] 如果一个进程打开了一个加密文件,那么它新创建的文件就会成为加密文件
听你的意思是不希望为新创建的文件加密? 那哪些什么情况下需要加密文件呢?仅仅只是在解密打开现有文件编辑后加密吗?那最初的加密文件从何而来的?驱动不负责创建加密文件?
引用 9 楼 xf_21 的回复:
驱动没法在底层自动区分加密和不加密文件
别说自动了。。。 人为如何区分你都没告诉我呢。。。 你们做的应该是文件过滤驱动吧? 一般用的就是 MINIFILTER 吧。 就是要做一个类似文件透明加解密,让用户无感知? 但是不负责创建加密文件就挺奇怪的。但是我觉得也可以做到的吧,驱动在注册过滤函数那,可以注册文件创建回调的,判断下这个文件是不是新创建的不就行了? 为什么要和进程联系起来? [/quote] 再回复一下: 文件被加密后会额外增加一个文件头。有文件过滤驱动程序。本地也有生成加密文件的功能,是用另一个工具程序加密的,加密时需要指定哪些人能读这个文件,把用户列表传给服务器了,读的时候也要从服务器查(查登录用户是不是能读这个文件)。 人为区分可以看文件图标,做了一个shell扩展,会给加密的文件图标上边叠加一个小图标,就像SVN文件上边的叠加图标一样。
xf_21 2021-03-02
  • 打赏
  • 举报
回复
引用 11 楼 _mervyn 的回复:
[quote=引用 9 楼 xf_21 的回复:] 如果一个进程打开了一个加密文件,那么它新创建的文件就会成为加密文件
听你的意思是不希望为新创建的文件加密? 那哪些什么情况下需要加密文件呢?仅仅只是在解密打开现有文件编辑后加密吗?那最初的加密文件从何而来的?驱动不负责创建加密文件?
引用 9 楼 xf_21 的回复:
驱动没法在底层自动区分加密和不加密文件
别说自动了。。。 人为如何区分你都没告诉我呢。。。 你们做的应该是文件过滤驱动吧? 一般用的就是 MINIFILTER 吧。 就是要做一个类似文件透明加解密,让用户无感知? 但是不负责创建加密文件就挺奇怪的。但是我觉得也可以做到的吧,驱动在注册过滤函数那,可以注册文件创建回调的,判断下这个文件是不是新创建的不就行了? 为什么要和进程联系起来? [/quote] 文件来自于服务器,可能内部会议纪要什么的,从网页上下载下来。比如一个加密的doc文件下载到本地后,要用wps打开,打开后,用户可能又双击了桌面上另一个未加密的doc文件,也打开了,如果用户编辑后边这个文件,目前的驱动就会把这个文件加密。为了防止这种情况,只能让wps一次打开一个文件(不考虑用户从wps菜单里新建一个文件,或者把别的文件拖入wps界面的情况)
_mervyn 2021-03-02
  • 打赏
  • 举报
回复
引用 9 楼 xf_21 的回复:
如果一个进程打开了一个加密文件,那么它新创建的文件就会成为加密文件
听你的意思是不希望为新创建的文件加密? 那哪些什么情况下需要加密文件呢?仅仅只是在解密打开现有文件编辑后加密吗?那最初的加密文件从何而来的?驱动不负责创建加密文件?
引用 9 楼 xf_21 的回复:
驱动没法在底层自动区分加密和不加密文件
别说自动了。。。 人为如何区分你都没告诉我呢。。。 你们做的应该是文件过滤驱动吧? 一般用的就是 MINIFILTER 吧。 就是要做一个类似文件透明加解密,让用户无感知? 但是不负责创建加密文件就挺奇怪的。但是我觉得也可以做到的吧,驱动在注册过滤函数那,可以注册文件创建回调的,判断下这个文件是不是新创建的不就行了? 为什么要和进程联系起来?
xf_21 2021-02-26
  • 打赏
  • 举报
回复
引用 7 楼 _mervyn 的回复:
我按你说的测试了下ppt, 打开多个文件就有多个窗口,打开同一个文件多次就只有一个窗口。但是不管怎么样,进程确实只有一个。 我不明白的是,你这是什么需求,为什么需要它有多个进程? 你如果需要打开同一个文件到多个窗口我倒还能理解。 你如果一定需要打开多个进程的话,可以参考本人的这个项目: https://www.github.com/Wei1030/2Box 这个东西,是我以前写的用来多开游戏玩的。 大部分都能多开。 原理是用 dll注入+ api hook, 都可以用微软的 detours 库完成。 ..................................
大神! 我研究下你的代码。其实主要的问题在于不知道wps 、ppt 这两个程序是调用了那些函数,又传递了什么信息来保成唯一存在,如果知道了,确实就可以用hook的方式欺骗。 做这个我觉得需要逆向分析的能力,可惜本人完全不懂这个。最近找了个sandboxie沙箱,打算把程序放在沙箱里来多开了,不过沙箱本来不是用来多开的,如果用的话成本太高了(需要阅读沙箱代码,知道修改那个地方,去掉一些不需要的限制,还要把沙箱程序整合到自己的程序里,如果深度修改的话,技术一般的我需要很多时间) 这个问题是一个打开加密文件的项目引出来的,程序读写文件时,驱动程序负责加解密。如果一个进程打开了一个加密文件,那么它新创建的文件就会成为加密文件(除非是预先定义的某些路径下的),这不符合用户的使用习惯,编辑文件时驱动没法在底层自动区分加密和不加密文件(听起来不可思议,但按照做驱动的人员的说法,确实很难做到),所以只好hook createprocess函数,修改命令行参数,尽量让打开文档的进程和文件一一对应....其实这样做还是有问题
赵4老师 2021-02-26
  • 打赏
  • 举报
回复
楼上大牛一头!
_mervyn 2021-02-26
  • 打赏
  • 举报
回复
我按你说的测试了下ppt, 打开多个文件就有多个窗口,打开同一个文件多次就只有一个窗口。但是不管怎么样,进程确实只有一个。 我不明白的是,你这是什么需求,为什么需要它有多个进程? 你如果需要打开同一个文件到多个窗口我倒还能理解。 你如果一定需要打开多个进程的话,可以参考本人的这个项目: https://www.github.com/Wei1030/2Box 这个东西,是我以前写的用来多开游戏玩的。 大部分都能多开。 原理是用 dll注入+ api hook, 都可以用微软的 detours 库完成。 至于需要hook的win api: 1、可以命名的内核句柄,程序可以用此来实现单例效果,主要包括事件、互斥量、信号量、共享文件、可等待的计时器、作业: NtCreateEvent NtOpenEvent NtCreateMutant NtOpenMutant NtCreateSection NtOpenSection NtCreateSemaphore NtOpenSemaphore NtCreateTimer NtOpenTimer NtCreateJobObject NtOpenJobObject 还有命名管道相关: NtCreateNamedPipeFile NtCreateFile NtOpenFile WaitNamedPipeA(W) 2、其他主要是考虑游戏类软件有可能用来防多开的,其他程序当然也可能会使用,我直接列api名字了: NtQuerySystemInformation // 用于遍历进程列表来防止多开 DeviceIoControl // 可以用于获取硬件信息上报服务器来防止多开 Netbios //获取mac地址上报服务器来防止多开 GetAdaptersInfo //同上 GetAdaptersAddresses //同上 //com相关,利用com调用遍历进程等,可以hook下面两个直接返回失败,从源头上阻止。 CoCreateInstance CoCreateInstanceEx //窗口相关,有些程序可能利用窗口,比如窗口名等来防止多开 CreateWindowExA(W) FindWindowA(W) FindWindowExA(W) EnumWindows EnumChildWindows GetWindow GetTopWindow //创建进程相关,有些程序可能创建子进程,我们也需要hook进程创建的相关api,来将我们的dll继续注入进新的子进程,防止其逃离我们的“沙箱”。 CreateProcessA(W) CreateProcessAsUserA(W) WinExec CreateProcessWithLogonW CreateProcessWithTokenW 3、hook完以上这些后,然后想办法让这些api返回“正常“, 这些可以防多开的api都”欺骗“了程序的话,程序自然就能多开了。 至于这些api hook了之后如何修改实现,可以直接看我的2box项目,上面提到的我全hook了。 我刚用我的2box程序去打开ppt试验了下, 可以打开多个ppt进程。 打开多个任务管理器: 还可以看到,每个任务管理器都遍历不出其他进程了。
Leon__码蚁 2022-01-17
  • 举报
回复
@_mervyn 前辈你好 我运行你的2box项目 但是sRPC链接库编译版本太老了 可以发一下这个的源码么
[PE]经典八炮 2021-02-25
  • 打赏
  • 举报
回复
wps本身就是多文档的,微软的Office才是单文档的
xf_21 2021-02-25
  • 打赏
  • 举报
回复
引用 4 楼 赵4老师 的回复:
试试将exe文件拷贝成不同文件名 比如 copy POWERPNT.EXE POWERPNT1.EXE copy POWERPNT.EXE POWERPNT2.EXE 然后试试 运行POWERPNT1.EXE,POWERPNT2.EXE 不保证行。
肯定不行(已经试过了不行)
赵4老师 2021-02-25
  • 打赏
  • 举报
回复
试试将exe文件拷贝成不同文件名 比如 copy POWERPNT.EXE POWERPNT1.EXE copy POWERPNT.EXE POWERPNT2.EXE 然后试试 运行POWERPNT1.EXE,POWERPNT2.EXE 不保证行。
ToperRay 2021-02-24
  • 打赏
  • 举报
回复
可以开虚拟机
ToperRay 2021-02-24
  • 打赏
  • 举报
回复
引用 2 楼 xf_21 的回复:
[quote=引用 1 楼 ToperRay 的回复:]可以开虚拟机

不行哪,给客户做程序,业务上要求这样实现。不能要求客户开虚拟机。再说,假如同时打开10个文件,难道要打开10个虚拟机吗[/quote]
那估计不行。
xf_21 2021-02-24
  • 打赏
  • 举报
回复
引用 1 楼 ToperRay 的回复:
可以开虚拟机
不行哪,给客户做程序,业务上要求这样实现。不能要求客户开虚拟机。再说,假如同时打开10个文件,难道要打开10个虚拟机吗

15,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧