DLL动持为这什么这代码劫持不了
#include "stdafx.h"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 头文件
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 头文件
#include <Windows.h>
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
#pragma comment(linker, "/EXPORT:LpkPresent=_AheadLib_LpkPresent,@1")
#pragma comment(linker, "/EXPORT:ScriptApplyDigitSubstitution=_AheadLib_ScriptApplyDigitSubstitution,@2")
#pragma comment(linker, "/EXPORT:ScriptApplyLogicalWidth=_AheadLib_ScriptApplyLogicalWidth,@3")
#pragma comment(linker, "/EXPORT:ScriptBreak=_AheadLib_ScriptBreak,@4")
#pragma comment(linker, "/EXPORT:ScriptCPtoX=_AheadLib_ScriptCPtoX,@5")
#pragma comment(linker, "/EXPORT:ScriptCacheGetHeight=_AheadLib_ScriptCacheGetHeight,@6")
#pragma comment(linker, "/EXPORT:ScriptFreeCache=_AheadLib_ScriptFreeCache,@7")
#pragma comment(linker, "/EXPORT:ScriptGetCMap=_AheadLib_ScriptGetCMap,@8")
#pragma comment(linker, "/EXPORT:ScriptGetFontProperties=_AheadLib_ScriptGetFontProperties,@9")
#pragma comment(linker, "/EXPORT:ScriptGetGlyphABCWidth=_AheadLib_ScriptGetGlyphABCWidth,@10")
#pragma comment(linker, "/EXPORT:ScriptGetLogicalWidths=_AheadLib_ScriptGetLogicalWidths,@11")
#pragma comment(linker, "/EXPORT:ScriptGetProperties=_AheadLib_ScriptGetProperties,@12")
#pragma comment(linker, "/EXPORT:ScriptIsComplex=_AheadLib_ScriptIsComplex,@13")
#pragma comment(linker, "/EXPORT:ScriptItemize=_AheadLib_ScriptItemize,@14")
#pragma comment(linker, "/EXPORT:ScriptJustify=_AheadLib_ScriptJustify,@15")
#pragma comment(linker, "/EXPORT:ScriptLayout=_AheadLib_ScriptLayout,@16")
#pragma comment(linker, "/EXPORT:ScriptPlace=_AheadLib_ScriptPlace,@17")
#pragma comment(linker, "/EXPORT:ScriptRecordDigitSubstitution=_AheadLib_ScriptRecordDigitSubstitution,@18")
#pragma comment(linker, "/EXPORT:ScriptShape=_AheadLib_ScriptShape,@19")
#pragma comment(linker, "/EXPORT:ScriptStringAnalyse=_AheadLib_ScriptStringAnalyse,@20")
#pragma comment(linker, "/EXPORT:ScriptStringCPtoX=_AheadLib_ScriptStringCPtoX,@21")
#pragma comment(linker, "/EXPORT:ScriptStringFree=_AheadLib_ScriptStringFree,@22")
#pragma comment(linker, "/EXPORT:ScriptStringGetLogicalWidths=_AheadLib_ScriptStringGetLogicalWidths,@23")
#pragma comment(linker, "/EXPORT:ScriptStringGetOrder=_AheadLib_ScriptStringGetOrder,@24")
#pragma comment(linker, "/EXPORT:ScriptStringOut=_AheadLib_ScriptStringOut,@25")
#pragma comment(linker, "/EXPORT:ScriptStringValidate=_AheadLib_ScriptStringValidate,@26")
#pragma comment(linker, "/EXPORT:ScriptStringXtoCP=_AheadLib_ScriptStringXtoCP,@27")
#pragma comment(linker, "/EXPORT:ScriptString_pLogAttr=_AheadLib_ScriptString_pLogAttr,@28")
#pragma comment(linker, "/EXPORT:ScriptString_pSize=_AheadLib_ScriptString_pSize,@29")
#pragma comment(linker, "/EXPORT:ScriptString_pcOutChars=_AheadLib_ScriptString_pcOutChars,@30")
#pragma comment(linker, "/EXPORT:ScriptTextOut=_AheadLib_ScriptTextOut,@31")
#pragma comment(linker, "/EXPORT:ScriptXtoCP=_AheadLib_ScriptXtoCP,@32")
#pragma comment(linker, "/EXPORT:UspAllocCache=_AheadLib_UspAllocCache,@33")
#pragma comment(linker, "/EXPORT:UspAllocTemp=_AheadLib_UspAllocTemp,@34")
#pragma comment(linker, "/EXPORT:UspFreeMem=_AheadLib_UspFreeMem,@35")
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 宏定义
#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 命名空间
namespace AheadLib
{
HMODULE m_hModule = NULL; // 原始模块句柄
DWORD m_dwReturn[35] = {0}; // 原始函数返回地址
// 加载原始模块
inline BOOL WINAPI Load()
{
TCHAR tzPath[MAX_PATH];
TCHAR tzTemp[MAX_PATH * 2];
GetSystemDirectory(tzPath, MAX_PATH);
lstrcat(tzPath, TEXT("\\usp10"));
m_hModule = LoadLibrary(tzPath);
if (m_hModule == NULL)
{
wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
}
return (m_hModule != NULL);
}
// 释放原始模块
inline VOID WINAPI Free()
{
if (m_hModule)
{
FreeLibrary(m_hModule);
}
}
// 获取原始函数地址
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("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
MessageBox(NULL, tzTemp, TEXT("AheadLib"), MB_ICONSTOP);
ExitProcess(-2);
}
return fpAddress;
}
}
using namespace AheadLib;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
typedef int(*lpAddFun)(int, int);
void download() //注入使用的下载函数
{
MessageBox(NULL, TEXT("我只是一个简单的提示框演示了下自动附加DLL,现在没啥功能,后期可以添加上读写内存,HOOK函数等功能"), TEXT("VB梦工厂提示"), MB_OK);
//参数 MB_OK 为按钮的类型
DWORD dwStart = GetTickCount();
DWORD dwEnd = dwStart;
do
{
dwEnd = GetTickCount()-dwStart;
}while(dwEnd <100);
//char str[10];
//char JB[50]="网络句柄:";
//sprintf(str,"%d",s); //数值转化为字符串
HINSTANCE hDll; //DLL¾ä±ú
lpAddFun addFun; //oˉêyÖ¸Õë
hDll = LoadLibrary("hook.dll");
addFun = (lpAddFun)GetProcAddress(hDll, "dllmain");
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 入口函数
BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
{
if (dwReason == DLL_PROCESS_ATTACH)
{
DisableThreadLibraryCalls(hModule);
if(Load())
{
//LpkEditControl这个数组有14个成员,必须将其复制过来
download();
}
else
return FALSE;
}
else if (dwReason == DLL_PROCESS_DETACH)
{
download();
Free();
}
return TRUE;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_LpkPresent(void)
{
GetAddress("LpkPresent");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptApplyDigitSubstitution(void)
{
GetAddress("ScriptApplyDigitSubstitution");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptApplyLogicalWidth(void)
{
GetAddress("ScriptApplyLogicalWidth");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptBreak(void)
{
GetAddress("ScriptBreak");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptCPtoX(void)
{
GetAddress("ScriptCPtoX");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptCacheGetHeight(void)
{
GetAddress("ScriptCacheGetHeight");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptFreeCache(void)
{
GetAddress("ScriptFreeCache");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptGetCMap(void)
{
GetAddress("ScriptGetCMap");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptGetFontProperties(void)
{
GetAddress("ScriptGetFontProperties");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptGetGlyphABCWidth(void)
{
GetAddress("ScriptGetGlyphABCWidth");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptGetLogicalWidths(void)
{
GetAddress("ScriptGetLogicalWidths");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptGetProperties(void)
{
GetAddress("ScriptGetProperties");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptIsComplex(void)
{
GetAddress("ScriptIsComplex");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptItemize(void)
{
GetAddress("ScriptItemize");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptJustify(void)
{
GetAddress("ScriptJustify");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptLayout(void)
{
GetAddress("ScriptLayout");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptPlace(void)
{
GetAddress("ScriptPlace");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptRecordDigitSubstitution(void)
{
GetAddress("ScriptRecordDigitSubstitution");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptShape(void)
{
GetAddress("ScriptShape");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringAnalyse(void)
{
GetAddress("ScriptStringAnalyse");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringCPtoX(void)
{
GetAddress("ScriptStringCPtoX");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringFree(void)
{
GetAddress("ScriptStringFree");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringGetLogicalWidths(void)
{
GetAddress("ScriptStringGetLogicalWidths");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringGetOrder(void)
{
GetAddress("ScriptStringGetOrder");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringOut(void)
{
GetAddress("ScriptStringOut");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringValidate(void)
{
GetAddress("ScriptStringValidate");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptStringXtoCP(void)
{
GetAddress("ScriptStringXtoCP");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptString_pLogAttr(void)
{
GetAddress("ScriptString_pLogAttr");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptString_pSize(void)
{
GetAddress("ScriptString_pSize");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptString_pcOutChars(void)
{
GetAddress("ScriptString_pcOutChars");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptTextOut(void)
{
GetAddress("ScriptTextOut");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_ScriptXtoCP(void)
{
GetAddress("ScriptXtoCP");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_UspAllocCache(void)
{
GetAddress("UspAllocCache");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_UspAllocTemp(void)
{
GetAddress("UspAllocTemp");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_UspFreeMem(void)
{
GetAddress("UspFreeMem");
__asm JMP EAX;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////