一、使用场景
二、实现
双击一个文件的时候,一般是系统去启动一个进程,并且启动这个进程的时候带着需要打开的文件。那么当我们双击 ShareClient同步盘内一个云图标文件的时候,客户端是如何实现先下载文件后打开的呢?
显示流:
1、客户端在线时,双击云图标文件
2、等待一段时间
3、云图标文件状态变成对勾
4、等待一段时间,文件打开
隐示流:
1、在系统启动 Microsoft Word 之前,拦截住系统的该操作(注入)
2、向服务端发起下载该文件的请求(HOOK)
3、系统启动 Microsoft Word 打开文件
三、DLL 注入与 HOOK
什么是 DLL 注入技术?什么是 HOOK 挂钩技术?二者又是什么关系?
- AnyShare 向一个正在运行的系统进程注入 winhook.dll(winhook64.dll);
- AnyShare 通过设置 HOOK 对某个进程或窗口进行监视,即:对特定事件“挂钩”。一旦预定义特定事件发生-----双击文件,Windows 操作系统即会向钩子Hook发送通知消息;
- AnyShare 响应该消息-----下载文件,响应之后再将该消息返回到Windows 操作系统消息队列中。
- Windows 操作系统就会继续处理该消息-----打开文件。
说明:HOOK 类似于一个强盗,一旦捕获到特定事件响应处理后,也可以自己吞掉该消息,不返回到消息队列中。
Winhook64.dll 注入到应用程序的机制
系统启动后通过注册的服务将 winhook64.dll 注入到系统服务中拦截系统服务创建应用程序的系统调用,
当系统服务启动应程序时 winhook64.dll 会启动 sharetool 将 windhook64.dll 注入到应用程序中。
下图简易的描述了注入过程
四、HOOK 的配置及使用方法
1. 提供两种模式:最大化注入,最小化注入,默认最大化注入
最大化注入:注入所有能注入的进程
最小化注入:只会注入必须注入的进程,此时 Include 段生效。目前是4个固定的 hook,分别为 tray.exe,explorer.exe,vchost.exe,dllhost.exe,以保证最低的程序运行
最大化注入,最小化注入可以配置
2.配置文件的内容
配置文件是一个 ini 文件---Hookinfo.ini,总体遵循ini文件格式,放在安装目录下,与 tray.exe 同级。
【path】在配置项中以 Path 开头的是路径相关配置,就是说,此配置路径下的所有进程都会适配此配置, 一般这样的配置是用来调查问题的。
【process】以 Process 开头的就是进程相关配置了,只适用对应的进程,可以用于调查问题和解决问题。
3.配置项详细说明
【Global】
用来配置注入方式的,只有一个配置键 Mode,Mode 可以设置值0和1,其中0为默认值。
值0最大化注入,会注入所有能注入的进程,此时 Exclude 段生效。
值1最小化注入,只会注入必须注入的进程,此时 Include 段生效。目前是4个固定的 hook,分别为 tray.exe,explorer.exe,vchost.exe,dllhost.exe,以保证最低的程序运行。
一般情况下都是0值进行的,因为我们不知道客户需要使用哪些进程来触发下载。
如果出现大面积进程卡死,可以考虑设置为1,某些情况下,也可以设置为1验证,是不是我们的 HOOK 导致的问题。
[Global] Mode=0
【Exclude】
用来配置无需注入的名单,就是我们所谓的白名单,只有在 Global 段 Mode=0 的时候才生效。
以 Path 开头的键,为配置某个目录下所有的进程不进行注入操作,第一个为 Path0,如需配置多个后缀数字依次递增,值为具体目录全路径。
以 Process 开头的键,为配置某个进程不进行注入操作,第一个为 Process0,如需配置多个后缀数字依次递增,值为具体进程名称,需要带 exe 后缀名。
一般我们用无需注入来解决一些冲突问题,比如安装了客户端后,导致某些软件卡死,无法启动,都可以加进不注入名单试试。
[Exclude] Path0=C:\test\ Process0=test.exe
【Include】
用来配置需要注入的名单,就是我们所谓的黑名单,只有在 Global 段 Mode=1 的时候才生效。
以 Path 开头的键,为配置某个目录下所有的进程进行注入操作,第一个为 Path0,如需配置多个后缀数字依次递增,值为具体目录全路径。
以 Process 开头的键,为配置某个进程进行注入操作,第一个为 Process0,如需配置多个后缀数字依次递增,值为具体进程名称,需要带 exe 后缀名。这个段有几个固定的进程配置,目前是4个,分别为 tray.exe,explorer.exe,vchost.exe,dllhost.exe。
[Include] Path0=C:\test\ Process0=test.exe
【Limit】
用来配置条件 HOOK,已经深入到具体 HOOK 的函数了。
Path,PathFun 联合使用,配置某个路径下所有进程的条件 HOOK,后缀从0开始依次递增。键Path的值是需要条件 HOOK 的目录全路径。键 PathFun 的值是需要条件 HOOK 的目录的函数,有多个函数时,以|隔开。Process,ProcessFun 联合使用,配置某个进程的条件 HOOK,后缀从0开始依次递增。键 Process 的值是需要条件 HOOK 的进程名称,需要带 exe 后缀名键 ProcessFun 的值是需要条件 HOOK 的进程的函数,有多个函数时,以竖线"|"隔开。一般是我们某些进程必须注入,但是延迟注入还是没有效果的时候使用,这个需要程序员来进行操作了。
[Limit] Path0=C:\test\ PathFun0=NtCreateFile|CreateProcess
Process0=test.exe ProcessFun0=NtCreateFile|CreateProcess
【Delay】
用来配置延迟注入名单。
Path,PathMode,PathCondtion 联合使用,配置某个路径下所有进程的延迟注入,后缀从0开始依次递增。
键 Path 的值是需要延迟注入的目录全路径。
键 PathMode 的值是需要延迟注入的目录的延迟方式,值1是固定窗口等待,值2是固定时间等待
键 PathCondtion 的值是需要延迟注入的目录的延迟条件,在 PathMode=1 时,写入等待窗口的 ClassName,在 PathMode=2 时,写入等待时间,以毫秒为单位。
Process,ProcessMode,ProcessCondtion 联合使用,配置某个进程的延迟注入,后缀从0开始依次递增。
键 Process 的值为具体进程名称,需要带exe后缀名。
键 ProcessMode 与 ProcessCondtion 用法跟 PathMode 与 PathCondtion 一样。
延迟注入一般适用某些程序由于我们的原因卡死或者启动崩溃,但是又必须进行注入的情况。
一般使用固定时间等待来进行设置。
[Delay] Path0=C:\test\ PathMode0=2 PathCondtion0=1000
Process0=MindCAD2D.exe ProcessMode0=1 ProcessCondtion0=AlphaSplashScreen
【Relevancy】
关联下载文件配置名单。
Process,ProcessSuffix 联合使用,配置某个进程的关联下载文件,后缀从0开始依次递增。
键 Process 的值是需要关联下的进程名称,需要带exe后缀名
键 ProcessSuffix 的值是关联下载文件的后缀名,有多个后缀名时,以英文逗号","隔开。
使用某些进程,打开以文件的时候需要用到另外一个文件的内容。
[Relevancy]
Process0=test.exe
ProcessSuffix0=doc,txt