应用程序附加动态链接库
如需转载请标明出处
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应用