当浏览器等软件运行时-如果杀毒软件杀的时候只破坏了病毒体-wininit.dll被病毒劫持病毒将自向命名为wininet.dll放置于常用网络软件的安装目录下-先运行了病毒文件wininet.dll-病毒文件再将真正的系统文件wininet.dll调起来-例如浏览器-就会导致出现wininet.dll为无效的映像或是找不到的情况
XML文件是一种简单的数据存储方式,其数据可以被其他软件轻松读取,是一种可扩展的标记语言。对于不熟悉XML文件格式的用户来说,可能不清楚如何打开这种文件。下面将介绍XML文件的打开方法:
- 在你的XML文件上右击,选择“打开方式”,然后选择默认程序。
- 选择你想要的打开方式,然后勾选“始终使用选择的程序打开这种文件”,点击确定即可完成设置。
- 各类文本编辑软件基本都能很好地支持XML格式,包括常见的软件开发工具和网站开发工具等。
wininet.dii这个程序被删后应该怎么安装
是dll 不是dii – -! 被卡巴误删了?开机后按ctrl+alt+del 打开任务管理器点文件》新任务》在里面输入 在右边输入点搜索 然后下载到c:\windows\system32里面 重启====================================附 :wininet – – DLL文件信息 DLL 文件: wininet 或者 名称: Internet Extensions for Win32描述: 是Windows应用程序网络相关模块。
属于: Windows (Windows 2000以上平台)系统 DLL文件: 是常见错误: File Not Found, Missing File, Exception Errors 安全等级 (0-5): 0间谍软件: 否 广告软件: 否该文件隶属于%\WINDOWS\SYSTEM32目录下动态库连接文件该文件不可缺失,属于关键链接库当文件丢失或者损坏时,届时将无法完成Explorer进程(即桌面以及基于该进程的IE浏览器等,可使用不基于IE浏览器进行访问网络)可安装系统盘恢复安装或者其他同平台系统同文件代替在卡巴斯基中7.0和6.0中,该文件为疑似木马病毒。
瑞星2008无反应。
诺顿无任何应答
没有找到wininet.dll系统无法进入桌面如何解决
1. 被病毒劫持病毒将自向命名为放置于常用网络软件的安装目录下(例如浏览器),当浏览器等软件运行时,先运行了病毒文件, 病毒文件再将真正的系统文件调起来。
如果杀毒软件杀的时候只破坏了病毒体,就会导致出现为无效的映像或是找不到的情况。
2. 被病毒直接篡改(局部感染)病毒通过篡改系统文件,将自身放在系统文件中,随着的加载而加载。
当杀毒软件尝试清除病毒时,可能会破坏系统文件,导致出错。
解决方法1、进入系统桌面后按ctrl+alt+del调用任务管理器2、然后点击文件→新建任务(运行)3、输入 选择浏览4、选择C:\\Program Files\\Internet Explorer文件夹5、打开,打开IE浏览器后上网下载文件。
6、右键选择复制或者ctrl+C,然后指定至C:\\WINDOWS\\system32文件夹7、下载至本地后,重复2和3步骤,选择所有文件后,可以看到文件8、右键选择粘贴或者ctrl+V,然后重新启动即可。
DLL文件劫持应该怎么办
DLL当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。
由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。
首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。
利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。
程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行,如图18.4。
这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。
利用这种方法取得控制权后,可以对主程序进行补丁。
此种方法只对除, 等核心系统库以外的DLL有效,如网络应用程序的ws2_,游戏程序中的,还有大部分应用程序都调用的,这些DLL都可被劫持。
利用5.6.2章提供的来展示一下如何利用劫持技术制作补丁,目标文件用Themida v1.9.2.0加壳保护。
1.补丁地址去除这个CrackMe网络验证方法参考第5章,将相关补丁代码存放到函数PatchProcess( )里。
例如将h改成:代码 EB 29 jmp short C1补丁编程实现就是:代码: unsigned char p[2] = {0xEB, 0x29};WriteProcessMemory(hProcess,(LPVOID)0x, p, 2, NULL);p这个数组的数据格式,可以用OllyDBG插件获得,或十六进制工具转换。
例如Hex Workshop打开文件,执行菜单Edit/Copy As/Source即可得到相应的代码格式。
2.构建输出函数查看实例输入表,会发现名称为ws2_的DLL,因此构造一个同名的DLL来完成补丁任务。
伪造的ws2_有着真实ws2_一样的输出函数,完整源码见光盘。
实现时,可以利用DLL模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个DLL中的另一个函数。
可以这样使用一个pragma指令:代码:#pragma comment(linker, /EXPORT:SomeFunc=)这个pragma告诉链接程序,被编译的DLL应该输出一个名叫SomeFunc的函数。
但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。
如要达到劫持DLL的目的,生成的DLl输出函数必须与目标DLL输出函数名一样,本例可以这样构造pragma指令:代码:#pragma comment(linker, /EXPORT:WSAStartup=_MemCode_WSAStartup,@115)编译后的DLL,会有与ws2_同名的一个输出函数WSAStartup,实际操作时,必须为想要转发的每个函数创建一个单独的pragma代码行,读者可以写一个工具或用其他办法,将ws2_输出函数转换成相应的pragma指令。
当应用程序调用伪装ws2_的输出函数时,必须将其转到系统ws2_中去,这部分的代码自己实现。
例如WSAStartup输出函数如下构造:代码: ALCDECL MemCode_WSAStartup(void){GetAddress(WSAStartup);__asm JMP EAX;//转到系统ws2_的WSAStartup输出函数}其中GetAddress()函数的代码如下:代码: // MemCode 命名空间namespace MemCode{HMODULE m_hModule = NULL; //原始模块句柄DWORD m_dwReturn[500] = {0}; //原始函数返回地址// 加载原始模块inline BOOL WINAPI Load(){TCHAR tzPath[MAX_PATH]={0};TCHAR tzTemp[MAX_PATH]={0};GetSystemDirectory(tzPath, sizeof(tzPath));strcat(tzPath,\\ws2_);m_hModule = LoadLibrary(tzPath);//加载系统系统目录下ws2_ (m_hModule == NULL){wsprintf(tzTemp, TEXT(无法加载 %s,程序无法正常运行。
), tzPath);MessageBox(NULL, tzTemp, TEXT(MemCode), MB_ICONSTOP);}return (m_hModule != NULL); }// 释放原始模块inline VOID WINAPI Free(){if (m_hModule)FreeLibrary(m_hModule);}// 获取原始函数地址FARPROC WINAPI GetAddress(PCSTR pszProcName){FARPROC fpAddress;TCHAR szProcName[16]={0};TCHAR tzTemp[MAX_PATH]={0};if (m_hModule == NULL){if (Load() == FALSE)ExitProcess(-1);}fpAddress = GetProcAddress(m_hModule, pszProcName);if (fpAddress == NULL){if (HIWORD(pszProcName) == 0){wsprintf(szProcName, %d, pszProcName);pszProcName = szProcName;}wsprintf(tzTemp, TEXT(无法找到函数 %hs,程序无法正常运行。
), pszProcName);MessageBox(NULL, tzTemp, TEXT(MemCode), MB_ICONSTOP);ExitProcess(-2);}return fpAddress;}}using namespace MemCode;编译后,用LordPE查看伪造的ws2_输出函数,和真实ws2_完全一样,如图18.5所示。
查看伪造的ws2_中任意一个输出函数,例如WSACleanup:代码: CC0 ; int __stdcall WSACleanup()CC0 WSACleanup proc CC0 push offset aWsacleanup ;CC5 call sub_ ;GetAddress(WSACleanup)CCA jmp CCA WSACleanup endp会发现输出函数WSACleanup()首先调用GetAddress(WSACleanup),获得真实ws2_中WSACleanup的地址,然后跳过去执行,也就是说ws2_各输出函数被HOOK了。
3.劫持输出函数ws2_有许多输出函数,经分析,程序发包或接包时,WSAStartup输出函数调用的比较早,因此在这个输出函数放上补丁的代码。
代码如下:代码: ALCDECL MemCode_WSAStartup(void){hijack();GetAddress(WSAStartup);__asm JMP EAX; }hijack()函数主要是判断是不是目标程序,如是就调用PatchProcess()进行补丁。
void hijack(){if (isTarget(GetCurrentProcess())) //判断主程序是不是目标程序,是则补丁之{PatchProcess(GetCurrentProcess());}}伪造的ws2_制作好后,放到程序当前目录下,这样当原程序调用WSASTartup函数时就调用了伪造的ws2_的WSASTartup函数,此时hijack()函数负责核对目标程序校验,并将相关数据补丁好,处理完毕后,转到系统目录下的ws2_执行。
这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用,当挂接函数被执行时,相关的代码己被解压,可以直接补丁了。
有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。
此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。
一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,应引起注意。