应用程序附加动态链接库

319 阅读2分钟

应用程序附加动态链接库


如需转载请标明出处
QQ技术交流群:129518033

文章目录

相关问题:
1.修改应用程序的导入表
2.dll注入
3.无源码修改程序功能
4.应用程序永久注入dll

相关博文:
Windows核心编程 - API HOOK应用

环境:
OS : windows 7
编译器: vs2013

1.编写应用程序

示例程序为输出当前时间

// main.cpp
#include <iostream>
#include <windows.h>

int main()
{
	SYSTEMTIME t;

	GetSystemTime(&t);

	printf("time : %04d-%02d-%02d %02d:%02d:%02d\n",t.wYear,t.wMonth,t.wDay,t.wHour,t.wMinute,t.wSecond);

    system("pause");

	return 0;
}

在这里插入图片描述

2.编写dll动态链接库

示例代码为将GetSystemTime的时间固定返回2020-01-01 00:00:00

AdHookApi参考 Windows核心编程 - API HOOK应用
或者 windows api SetWindowsHookEx

注意:这里永久注入会影响整个程序的GetSystemTime,如果有源码可以在需要的位置通过LoadLibrary和FreeLibrary进行精准处理

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "stdafx.h"

#include "AdHookApi.h"

static CAdHookApi     gHooks;

void WINAPI my_GetSystemTime(LPSYSTEMTIME lpSystemTime)
{
	// 改变函数的行为,返回固定的时间
	// 2020-01-01 00:00:00
	lpSystemTime->wYear = 2020;
	lpSystemTime->wMonth = 1;
	lpSystemTime->wDayOfWeek = 0;
	lpSystemTime->wDay = 1;
	lpSystemTime->wHour = 0;
	lpSystemTime->wMinute = 0;
	lpSystemTime->wSecond = 0;
	lpSystemTime->wMilliseconds = 0;
}

BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
	)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
	{
							   MessageBox(0, "GetSystemTime劫持注入成功", "hello", 0);
							   // 截获KERNEL32.DLL的API GetSystemTime到你的函数地址my_GetSystemTime
							   gHooks.Add(_T("KERNEL32.DLL"), "GetSystemTime", my_GetSystemTime);
							   gHooks.BeginAll();
							   break;
	}
	case DLL_THREAD_ATTACH:
	{
							  break;
	}
	case DLL_THREAD_DETACH:
	{
							  break;
	}
	case DLL_PROCESS_DETACH:
	{
							   gHooks.EndAll();
							   break;
	}
	}
	return TRUE;
}

_declspec(dllexport) void empty()
{
	//空函数,为了导入表可以选择api
}

3.StudyPE+修改应用程序的导入表

dll添加到导入表后,应用程序每次启动会自动加附加的dll,同时执行dll中DllMain的代码。

注意:也可以先启动应用程序,通过CreateRemoreThread进行线程注入
在这里插入图片描述

4.结果

在这里插入图片描述
在这里插入图片描述


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

如需转载请标明出处
QQ技术交流群:129518033


Reference:
Windows核心编程 - API HOOK应用