|
|
|
|
// dllmain.cpp : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> DLL Ӧ<EFBFBD>ó<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڵ㡣
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// ͷ<EFBFBD>ļ<EFBFBD>
|
|
|
|
|
#include <Windows.h>
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoA=_AheadLib_GetFileVersionInfoA,@1")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoByHandle=_AheadLib_GetFileVersionInfoByHandle,@2")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoExW=_AheadLib_GetFileVersionInfoExW,@3")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeA=_AheadLib_GetFileVersionInfoSizeA,@4")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeExW=_AheadLib_GetFileVersionInfoSizeExW,@5")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoSizeW=_AheadLib_GetFileVersionInfoSizeW,@6")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:GetFileVersionInfoW=_AheadLib_GetFileVersionInfoW,@7")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerFindFileA=_AheadLib_VerFindFileA,@8")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerFindFileW=_AheadLib_VerFindFileW,@9")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerInstallFileA=_AheadLib_VerInstallFileA,@10")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerInstallFileW=_AheadLib_VerInstallFileW,@11")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerLanguageNameA=_AheadLib_VerLanguageNameA,@12")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerLanguageNameW=_AheadLib_VerLanguageNameW,@13")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerQueryValueA=_AheadLib_VerQueryValueA,@14")
|
|
|
|
|
#pragma comment(linker, "/EXPORT:VerQueryValueW=_AheadLib_VerQueryValueW,@15")
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD>궨<EFBFBD><EFBFBD>
|
|
|
|
|
#define EXTERNC extern "C"
|
|
|
|
|
#define NAKED __declspec(naked)
|
|
|
|
|
#define EXPORT __declspec(dllexport)
|
|
|
|
|
|
|
|
|
|
#define ALCPP EXPORT NAKED
|
|
|
|
|
#define ALSTD EXTERNC EXPORT NAKED void __stdcall
|
|
|
|
|
#define ALCFAST EXTERNC EXPORT NAKED void __fastcall
|
|
|
|
|
#define ALCDECL EXTERNC NAKED void __cdecl
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// AheadLib <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
|
|
|
|
|
namespace AheadLib
|
|
|
|
|
{
|
|
|
|
|
HMODULE m_hModule = NULL; // ԭʼģ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
DWORD m_dwReturn[15] = { 0 }; // ԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD>ַ
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭʼģ<EFBFBD><EFBFBD>
|
|
|
|
|
inline BOOL WINAPI Load()
|
|
|
|
|
{
|
|
|
|
|
TCHAR tzPath[MAX_PATH];
|
|
|
|
|
TCHAR tzTemp[MAX_PATH * 2];
|
|
|
|
|
|
|
|
|
|
GetSystemDirectory(tzPath, MAX_PATH);
|
|
|
|
|
lstrcat(tzPath, TEXT("\\version"));
|
|
|
|
|
m_hModule = LoadLibrary(tzPath);
|
|
|
|
|
if (m_hModule == NULL)
|
|
|
|
|
{
|
|
|
|
|
wsprintf(tzTemp, TEXT("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %s<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>"), tzPath);
|
|
|
|
|
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (m_hModule != NULL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <EFBFBD>ͷ<EFBFBD>ԭʼģ<EFBFBD><EFBFBD>
|
|
|
|
|
inline VOID WINAPI Free()
|
|
|
|
|
{
|
|
|
|
|
if (m_hModule)
|
|
|
|
|
{
|
|
|
|
|
FreeLibrary(m_hModule);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// <EFBFBD><EFBFBD>ȡԭʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ
|
|
|
|
|
FARPROC WINAPI GetAddress(PCSTR pszProcName)
|
|
|
|
|
{
|
|
|
|
|
FARPROC fpAddress;
|
|
|
|
|
CHAR szProcName[16];
|
|
|
|
|
TCHAR tzTemp[MAX_PATH];
|
|
|
|
|
|
|
|
|
|
fpAddress = GetProcAddress(m_hModule, pszProcName);
|
|
|
|
|
if (fpAddress == NULL)
|
|
|
|
|
{
|
|
|
|
|
if (HIWORD(pszProcName) == 0)
|
|
|
|
|
{
|
|
|
|
|
wsprintf(szProcName, "%d", pszProcName);
|
|
|
|
|
pszProcName = szProcName;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wsprintf(tzTemp, TEXT("<EFBFBD><EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> %hs<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>"), pszProcName);
|
|
|
|
|
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
|
|
|
|
|
ExitProcess(-2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return fpAddress;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
using namespace AheadLib;
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD>ں<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
|
|
|
|
|
{
|
|
|
|
|
if (dwReason == DLL_PROCESS_ATTACH)
|
|
|
|
|
{
|
|
|
|
|
DisableThreadLibraryCalls(hModule);
|
|
|
|
|
|
|
|
|
|
::MessageBox(NULL, "I am Demon", "CDIY", MB_OK);
|
|
|
|
|
|
|
|
|
|
return Load();
|
|
|
|
|
}
|
|
|
|
|
else if (dwReason == DLL_PROCESS_DETACH)
|
|
|
|
|
{
|
|
|
|
|
Free();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoByHandle(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoByHandle");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoExW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoExW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoSizeA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoSizeA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoSizeExW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoSizeExW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoSizeW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoSizeW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_GetFileVersionInfoW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("GetFileVersionInfoW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerFindFileA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerFindFileA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerFindFileW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerFindFileW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerInstallFileA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerInstallFileA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerInstallFileW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerInstallFileW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerLanguageNameA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerLanguageNameA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerLanguageNameW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerLanguageNameW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerQueryValueA(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerQueryValueA");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
ALCDECL AheadLib_VerQueryValueW(void)
|
|
|
|
|
{
|
|
|
|
|
GetAddress("VerQueryValueW");
|
|
|
|
|
__asm JMP EAX;
|
|
|
|
|
}
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|