访客

梦三国劫持dll文件(劫持系统dll)

74 hacker 黑客技术

本文目录一览:

DLL文件劫持应该怎么办

DLL当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。

由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL。程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行,如图18.4。这个过程用个形象的词来描述就是系统DLL被劫持(hijack)了。

184.gif

利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll, ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll,游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll,这些DLL都可被劫持。

利用5.6.2章提供的CrackMeNet.exe来演示一下如何利用劫持技术制作补丁,目标文件用Themida v1.9.2.0加壳保护。

1.补丁地址

去除这个CrackMe网络验证方法参考第5章,将相关补丁代码存放到函数PatchProcess( )里。例如将401496h改成:

代码:00401496 EB 29 jmp short 004014C1

补丁编程实现就是:

代码:

unsigned char p401496[2] = {0xEB, 0x29};

WriteProcessMemory(hProcess,(LPVOID)0x401496, p401496, 2, NULL);

p401496这个数组的数据格式,可以用OllyDBG插件获得,或十六进制工具转换。例如Hex Workshop打开文件,执行菜单Edit/Copy As/Source即可得到相应的代码格式。

2.构建输出函数

查看实例CrackMeNet.exe输入表,会发现名称为ws2_32.dll的DLL,因此构造一个同名的DLL来完成补丁任务。伪造的ws2_32.dll有着真实ws2_32.dll一样的输出函数,完整源码见光盘。实现时,可以利用DLL模块中的函数转发器来实现这个目标,其会将对一个函数的调用转至另一个DLL中的另一个函数。可以这样使用一个pragma指令:

代码:#pragma comment(linker, "/EXPORT:SomeFunc=DllWork.someOtherFunc")

这个pragma告诉链接程序,被编译的DLL应该输出一个名叫SomeFunc的函数。但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。

如要达到劫持DLL的目的,生成的DLl输出函数必须与目标DLL输出函数名一样,本例可以这样构造pragma指令:

代码:#pragma comment(linker, "/EXPORT:WSAStartup=_MemCode_WSAStartup,@115")

编译后的DLL,会有与ws2_32.dll同名的一个输出函数WSAStartup,实际操作时,必须为想要转发的每个函数创建一个单独的pragma代码行,读者可以写一个工具或用其他办法,将ws2_32.dll输出函数转换成相应的pragma指令。

当应用程序调用伪装ws2_32.dll的输出函数时,必须将其转到系统ws2_32.dl中去,这部分的代码自己实现。例如WSAStartup输出函数如下构造:

代码:

ALCDECL MemCode_WSAStartup(void)

{

GetAddress("WSAStartup");

__asm JMP EAX;//转到系统ws2_32.dll的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_32.dll");

m_hModule = LoadLibrary(tzPath);//加载系统系统目录下ws2_32.dll

if (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_32.dll输出函数,和真实ws2_32.dll完全一样,如图18.5所示。

185.gif

查看伪造的ws2_32.dll中任意一个输出函数,例如WSACleanup:

代码:

.text:10001CC0 ; int __stdcall WSACleanup()

.text:10001CC0 WSACleanup proc near

.text:10001CC0 push offset aWsacleanup ;"WSACleanup"

.text:10001CC5 call sub_10001000 ;GetAddress(WSACleanup)

.text:10001CCA jmp eax

.text:10001CCA WSACleanup endp

会发现输出函数WSACleanup()首先调用GetAddress(WSACleanup),获得真实ws2_32.dll中WSACleanup的地址,然后跳过去执行,也就是说ws2_32.dll各输出函数被HOOK了。

3.劫持输出函数

ws2_32.dll有许多输出函数,经分析,程序发包或接包时,WSAStartup输出函数调用的比较早,因此在这个输出函数放上补丁的代码。代码如下:

代码:

ALCDECL MemCode_WSAStartup(void)

{

hijack();

GetAddress("WSAStartup");

__asm JMP EAX;

}

hijack()函数主要是判断是不是目标程序,如是就调用PatchProcess()进行补丁。

void hijack()

{

if (isTarget(GetCurrentProcess())) //判断主程序是不是目标程序,是则补丁之

{

PatchProcess(GetCurrentProcess());

}

}

伪造的ws2_32.dll制作好后,放到程序当前目录下,这样当原程序调用WSASTartup函数时就调用了伪造的ws2_32.dll的WSASTartup函数,此时hijack()函数负责核对目标程序校验,并将相关数据补丁好,处理完毕后,转到系统目录下的ws2_32.dll执行。

这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用,当挂接函数被执行时,相关的代码己被解压,可以直接补丁了。有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。

一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,应引起注意。

电脑玩梦三国的时候进不去说,计算机中丢失d3dx9_40.dll怎么解决

计算机中丢失d3dx9_40.dll的解决方法和详细的操作步骤如下:

准备的材料:电脑、d3dx9_40.dll文件。

1、首先,通过某个渠道获取d3dx9_40.dll文件,例如,在线查找并下载该文件,如下图所示。

2、其次,将d3dx9_40.dll文件复制到“C:\Windows\System32”目录中,如下图所示。

3、接着,单击“开始”菜单,选择“运行”,输入:regsvr32 d3dx9_40.dll,然后单击“确定”按钮,如下图所示。

4、最后,将弹出如下提示框,表明完成d3dx9_40.dll文件的安装,单击“确定”按钮即可。这样,问题就解决了。

梦三国sound.dll文件360说疑似木马

我前几天也有个这样的情况估计你的梦三国的sound.dll给禁用了,你用360杀毒扫描一下,提示有毒删除了,然后打开360杀毒的那里的恢复把sound.dll给恢复了,加入白名单,这样就解禁了sound.dll在 什么盘:\Program Files\梦三国\New里面

梦三国,我笔记本上的梦三国为什么什么打不开了 说是Siund.dll文件未能启动

你的电脑应该是双显卡的,目前梦三国不支持双显卡。你禁用独立显卡用集成的就能玩了

梦三国 最近总提示sound.dll 文件有病毒

sound.dll

重新下一个覆盖一下,或者把提示有毒的先删除,换成这个没毒的!

打开梦三国的时候更新下了DHCORE.DLL文件,刚下好就被瑞星删了,说是木马病毒,怎么回事?

应该是被删除的那个文件的关系,你可以把这个文件从瑞星的隔离区还原,

然后将这个文件提交到可疑文件上报,

由电脑管家的工作人员帮你人工鉴定一下,这种鉴定的准确率是100%

鉴定结束后,它们会将结果反馈给你,你就知道该文件的安全性了

如果是安全的,信任即可,如果是病毒,那么你可以重新下载梦三国的安装包

腾讯电脑管家企业平台:

THE END
相关文章

昨天( 五月 八日)yD 四拜客生涯 知识 网 又到了一年一度的妈妈节。yD 四拜客生涯 知识 网 正在那充斥 爱的一地。yD 四拜客生涯 知识 网

街采神回复来了!看罗湖人最想对妈妈说什么?

外新网 五月 一 一日电据外国驻泰国年夜 使馆网站新闻 ,为背海中异胞提求加倍 就捷的发事办事 ,真现“掌上办私”、“整跑腿”,依据 海内 同一 布置 ,外国驻

驻泰国使馆启用“中国领事”APP中“婚姻登记预约”业务

评论列表
  • 只影晕白
    只影晕白 Jul 9日, 2022 @ 10:53 am 提示sound.dll 文件有病毒sound.dll重新下一个覆盖一下,或者把提示有毒的先删除,换成这个没毒的!打开梦三国的时候更新下了DHCORE.DLL文件 回复
  • 忿咬卿绡
    忿咬卿绡 Jul 9日, 2022 @ 07:55 am 看伪造的ws2_32.dll中任意一个输出函数,例如WSACleanup:代码: .text:10001CC0 ; int __stdcall WSACleanup().text:10001CC0 WSACleanup pro 回复
  • 森槿榆西
    森槿榆西 Jul 9日, 2022 @ 12:55 pm 的函数。但是SomeFunc函数的实现实际上位于另一个名叫SomeOtherFunc的函数中,该函数包含在称为DllWork. dll的模块中。如要达到劫持DLL的目的,生成的DLl输出函数必须与目标DLL输出 回复
发布评论
提交