远程线程注入(0X01)第一个动态链接库

###最近要写个远程线程注入的作业
之前没写过dll的程序
那就先写个简单的Hello World练练手!

DLL

#####注:以下程序均为Unicode编码,在VS2013下编译通过

###0X01新建一个dll工程,贴上以下代码,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//dllTest.cpp
#include <Windows.h>
#include <Psapi.h>

extern "C" int __declspec(dllexport) mb();
//声明导出函数
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH://附加进程
{
TCHAR lpMainMoudleName[MAX_PATH];
TCHAR lpMessage[MAX_PATH + 64];
//获取PID和主模块名,将弹出消息框
DWORD dwPID = GetCurrentProcessId();
GetModuleBaseName(GetCurrentProcess(), NULL, lpMainMoudleName, MAX_PATH);
wsprintf(lpMessage, L"process name: %s, PID: %u ", lpMainMoudleName, dwPID);
MessageBox(NULL, lpMessage, L"msg.dll", MB_OK);
break;
}
case DLL_THREAD_ATTACH://附加线程
break;
case DLL_PROCESS_DETACH://分离进程
break;
case DLL_THREAD_DETACH://分离线程
break;
}
return TRUE;
}
int mb()
{
MessageBox(NULL, L"Hello World!", L"我是导出函数", MB_OK);
return 0;
}

编译通过后在工程的Debug目录下会生成一个dllTest.dll文件

###0X02新建一个Win32工程来测试上面的dll
就叫dllCall吧
建完后把上面生成的dllTest.dll复制到dllCall工程的Debug目录下
然后贴上以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//dllCall.cpp
#include <stdio.h>
#include <windows.h>
typedef int(*lpMB)(); //宏定义函数指针类型
int main(int argc, char *argv[])
{
HINSTANCE hDll; //DLL句柄
lpMB callMB; //函数指针
hDll = LoadLibrary(L"dllTest.dll");
if (hDll != NULL)
{
callMB = (lpMB)GetProcAddress(hDll, "mb");
if (callMB != NULL)
{
callMB();
}
FreeLibrary(hDll);
}
return 0;
}

编译通过后运行会弹出两个对话框
至此一个简单的dll就完成了,接下来开始我们的远程线程注入吧!