DLL劫持技术例子: HijackDll

控制台程序:DllLoader

Dll加载器,用于动态加载目标Dll,并动态调用目标函数

 1 #include <cstdio>
 2 #include <windows.h>
 3
 4 typedef int (*pAdd) (int a, int b);
 5
 6 int main()
 7 {
 8     HMODULE hModule = GetModuleHandleA("Dll.dll") != NULL ? GetModuleHandleA("Dll.dll") : LoadLibraryA("Dll.dll");
 9     pAdd Add = (pAdd)GetProcAddress(hModule, "Add");
10     if (NULL == Add)
11         printf("Failed\n");
12     else
13         printf("Succeed\n1 + 1 = %d\n", Add(1, 1));
14
15     system("pause > nul");
16     return 0;
17 }

main.cpp

原Dll:Dll

很简单的一个Dll,只有一个隐式函数Add.仅仅是一个简单的加法..

 1 #include <cstdio>
 2 #include <windows.h>
 3
 4 #define EXTERNC extern "C"
 5 #define EXPORT __declspec(dllexport)
 6 #define ECEP EXTERNC EXPORT
 7
 8 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
 9 {
10     switch(fdwReason)
11     {
12     case DLL_PROCESS_ATTACH:
13         MessageBoxA(NULL, "Attach", "", MB_ICONINFORMATION);
14         break;
15     case DLL_PROCESS_DETACH:
16         MessageBoxA(NULL, "Detach", "", MB_ICONINFORMATION);
17         break;
18     default:
19         break;
20     }
21
22     return TRUE;
23 }
24
25 ECEP int Add(int a, int b)
26 {
27     return a + b;
28 }

main.cpp

劫持Dll:HijackDll

用于劫持原Dll,并转发原程序的动态调用

 1 //last code by gwsbhqt at 20150727
 2
 3 #include <cstdio>
 4 #include <windows.h>
 5
 6 #define EXTERNC extern "C"
 7 #define NAKED __declspec(naked)
 8 #define EXPORT __declspec(dllexport)
 9 #define ECEP EXTERNC EXPORT
10 #define ENCDECL EXTERNC NAKED void __cdecl
11 #define EENSTD EXTERNC EXPORT NAKED void __stdcall
12 #define EENFAST EXTERNC EXPORT NAKED void __fastcall
13 #define ENDEF ENCDECL
14
15 #define INITFARPROC(lpModuleName, hProcName) 16     HMODULE hModule;17     hModule = GetModuleHandleA((lpModuleName));18     if (NULL == hModule) hModule = LoadLibraryA((lpModuleName));19     GetProcAddress(hModule, (hProcName));20     __asm JMP EAX;
21
22 #pragma comment (linker, "/EXPORT:Add=_Add,@1")
23
24 ENDEF Add()
25 {
26     INITFARPROC("Dll.tmp", "Add");
27 }
28
29 BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
30 {
31     switch (fdwReason)
32     {
33     case DLL_PROCESS_ATTACH:
34         MessageBoxA(NULL, "Hijack Dll Attach", "", MB_ICONINFORMATION);
35         break;
36     case DLL_PROCESS_DETACH:
37         MessageBoxA(NULL, "Hijack Dll Detach", "", MB_ICONINFORMATION);
38         break;
39     default:
40         break;
41     }
42
43     return TRUE;
44 }

main.cpp

都是些很简单的代码,仔细认真看看就好了

测试是只需要新建一个工程,工程下新建三个项目,分别是一个控制台程序和两个动态链接库,

在每个项目新建main.cpp文件,将代码贴入,生成工程之后.在Debug/Release文件夹下,将Dll.dll更名为Dll.tmp,将HijackDll.dll更名为Dll.dll...

即可完成Dll劫持...

时间: 07-26

DLL劫持技术例子: HijackDll的相关文章

dll劫持技术探索

0x1:实验背景 看到国外一篇文章,大致描述如下: Hi, There are a dll planting vuln in skype installer. This vuln had been reported to Microsoft but they decided not fix this. Here is the vulnerability details: ------ Skype installer in Windows is open to DLL hijacking. Sky

[转载]Dll注入技术之劫持进程创建注入

转自:黑客反病毒 DLL注入技术之劫持进程创建注入 劫持进程创建注入原理是利用Windows系统中CreateProcess()这个API创建一个进程,并将第6个参数设为CREATE_SUSPENDED,进而创建一个挂起状态的进程,利用这个进程状态进行远程线程注入DLL,然后用ResumeThread()函数恢复进程.1.创建挂起的进程     下面是创建一个挂起的计算器程序进程的主要代码: STARTUPINFO si = {0}; si.cb = sizeof si; si.dwFlags

C语言/C+游戏编程学习之简单 DLL 劫持,就是这么任性

C语言面向过程编程的语言:C++面向对象编程的语言. 两者有本质的区别,其实是完全不同的两种语言,只不过C++兼容C语言而已. 其中C++则一般看作是对C语言的扩展.因为C语言没有面向对象的语法结构,而当时业界又迫切需要面向对象的编程特性,所以贝尔实验室的开发者就为C语言添加了面向对象的结构.现在C++已经不只是C语言的扩展了,它已经完全可以被看作一种新的编程语言.虽然C语言的特性以及库函数仍然被C++支持,不过C++拥有自己的独立的类库体系,功能相当强大. C/C++的优点在于与底层比较接近,

Dll劫持漏洞详解

  一.dll的定义 DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型.在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中.当我们执行某一个程序时,相应的DLL文件就会被调用.一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件. 如果在进程尝试加载一个DLL时没有指定DLL的绝对路径,那么Wi

映像劫持技术(1):简单介绍

映像劫持,即Image File Execution Option.在深入了解这个概念之前,可以简单地认为,它可以令应用程度重定向.这是注册表里的一个功能,可以做这样的尝试: 打开注册表——定位到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options,右键,新建项,将其重命名为notepad.exe.在右边空白处点击右键,新建”字符串值“,将其重命名为”Debugg

&lt;ReversingEngineering&gt;关于windows32位系统下的dll注入技术经验汇

上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向工程核心原理>((韩)李承远 )<Reversing:逆向工程揭密(电子工业出版社)><黑客反汇编揭密>((俄)卡巴斯基 ) dll注入技术是一门逆向工程中非常基础非常初步的技术,也是打开大门的钥匙,逆向破解的前提条件.API勾取 ,Rootkit进程隐藏都需要dll注入为先决条

[转载]Dll注入技术之远程线程注入

转自:黑客反病毒 DLL注入技术之远线程注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     远线程注入原理是利用Windows 系统中CreateRemoteThread()这个API,其中第4个参数是准备运行的线程,我们可以将LoadLibrary()填入其中,这样就可以执行远程进程中的LoadLi

[转载]Dll注入技术之注册表注入

转自:黑客反病毒论坛 DLL注入技术之REG注入    DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     REG注入原理是利用在Windows 系统中,当REG以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件.当如果遇到有多个DLL文件时,需要用逗号或者空格隔开

[转载]Dll注入技术之ComRes注入

转自:黑客反病毒 DLL注入技术之ComRes注入     ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateInstance()这个API时,COM服务器会加载ComRes.dll到EXE中,我们利用这个加载过程,移花接木的把ComRes.dll替换掉,并在伪造的ComRes.dll,然后利用LoadLibrary()将事先准备好的DLL加载到目标的EXE中. 1.编写测试文件