應用程序附加動態鏈接庫
如需轉載請標明出處:http://blog.csdn.net/itas109
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: 署名-非商業使用-禁止演繹
如需轉載請標明出處:http://blog.csdn.net/itas109
QQ技術交流羣:129518033
Reference:
Windows核心編程 - API HOOK應用