如何在R3下用VC修改导出表?请贴出代码,急 如何在R3下用VC修改导出表?(替换自己的函数地址)请贴出代码,急 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用API Hook。需要一个dll,代码太多,我全贴出来也不现实。我这边自己用VS2005写了个用dll来抹掉API的导出表的例子,你不妨看看http://www.brsbox.com/filebox/down/fc/3dcebaa0f3fb26f02c60414639f48c4c 这个是劫持系统的MessageBoxA,用自己的MyMessageBox来替换 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 预处理#include "PoBind.h"#include "ApiHook.h"#include <TlHelp32.h>#pragma warning(disable: 4312)////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 成员变量HMODULE CApiHook::m_hModule = NULL;CApiHook *CApiHook::m_pHead = NULL;CApiHook CApiHook::m_ahLoadLibraryA("Kernel32.dll", "LoadLibraryA", CApiHook::AHLoadLibraryA);CApiHook CApiHook::m_ahLoadLibraryW("Kernel32.dll", "LoadLibraryW", CApiHook::AHLoadLibraryW);CApiHook CApiHook::m_ahLoadLibraryExA("Kernel32.dll", "LoadLibraryExA", CApiHook::AHLoadLibraryExA);CApiHook CApiHook::m_ahLoadLibraryExW("Kernel32.dll", "LoadLibraryExW", CApiHook::AHLoadLibraryExW);CApiHook CApiHook::m_ahGetProcAddress("Kernel32.dll", "GetProcAddress", CApiHook::AHGetProcAddress);////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 构造函数CApiHook::CApiHook(PCSTR pszModName, PCSTR pszApiName, PVOID pvNew){ m_pszModName = pszModName; m_pszApiName = pszApiName; m_pvNew = pvNew; m_pvOrg = GetProcAddress(GetModuleHandleA(pszModName), pszApiName); m_pNext = m_pHead; m_pHead = this;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 析购函数CApiHook::~CApiHook(){ CApiHook *p = m_pHead; if (p == this) { m_pHead = p->m_pNext; } else { for (; p->m_pNext; p = p->m_pNext) { if (p->m_pNext == this) { p->m_pNext = m_pNext; break; } } }}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 挂接函数PVOID CApiHook::Hook(PBYTE pbModule){ PIMAGE_NT_HEADERS p = (PIMAGE_NT_HEADERS) (pbModule + ((PIMAGE_DOS_HEADER) pbModule)->e_lfanew); PIMAGE_IMPORT_DESCRIPTOR q = (PIMAGE_IMPORT_DESCRIPTOR) (pbModule + p->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); for (; q->Name; q++) { if (strcmpi(m_pszModName, (PCSTR) (pbModule + q->Name)) == 0) { for (PIMAGE_THUNK_DATA r = (PIMAGE_THUNK_DATA) (pbModule + q->FirstThunk); r->u1.Function; r++) { if ((FARPROC) r->u1.Function == m_pvOrg) { WriteProcessMemory(GetCurrentProcess(), &r->u1.Function, &m_pvNew, sizeof(PVOID), NULL); return m_pvOrg; } } } } return NULL;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 挂接所有函数VOID CApiHook::Hook(HMODULE hModule){ for (CApiHook *p = m_pHead; p; p = p->m_pNext) { if (p->m_pvOrg) { p->Hook((PBYTE) hModule); } }}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 挂接所有模块VOID CApiHook::Hook(){ HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId()); if (hSnap != INVALID_HANDLE_VALUE) { MODULEENTRY32 meModule = {sizeof(MODULEENTRY32)}; for (BOOL bResult = Module32First(hSnap, &meModule); bResult; bResult = Module32Next(hSnap, &meModule)) { if (meModule.hModule != m_hModule) { Hook(meModule.hModule); } } CloseHandle(hSnap); }}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 载入HMODULE WINAPI CApiHook::AHLoadLibraryA(PCSTR pszPath){ HMODULE hModule = LoadLibraryA(pszPath); if (hModule) { Hook(hModule); } return hModule;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 载入HMODULE WINAPI CApiHook::AHLoadLibraryW(PCWSTR pwzPath){ HMODULE hModule = LoadLibraryW(pwzPath); if (hModule) { Hook(hModule); } return hModule;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 载入HMODULE WINAPI CApiHook::AHLoadLibraryExA(PCSTR pszPath, HANDLE hFile, DWORD dwFlags){ HMODULE hModule = LoadLibraryExA(pszPath, hFile, dwFlags); if (hModule && !(dwFlags & LOAD_LIBRARY_AS_DATAFILE)) { Hook(hModule); } return hModule;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 载入HMODULE WINAPI CApiHook::AHLoadLibraryExW(PCWSTR pwzPath, HANDLE hFile, DWORD dwFlags){ HMODULE hModule = LoadLibraryExW(pwzPath, hFile, dwFlags); if (hModule && !(dwFlags & LOAD_LIBRARY_AS_DATAFILE)) { Hook(hModule); } return hModule;}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 获取地址EXTERN_C PVOID _ReturnAddress();FARPROC WINAPI CApiHook::AHGetProcAddress(HMODULE hModule, PCSTR pszName){ FARPROC pfn = GetProcAddress(hModule, pszName); if (pfn) { MEMORY_BASIC_INFORMATION m = {0}; VirtualQuery(_ReturnAddress(), &m, sizeof(MEMORY_BASIC_INFORMATION)); if (hModule != (HMODULE) m.AllocationBase) { for (CApiHook *p = m_pHead; p; p = p->m_pNext) { if (p->m_pvOrg == NULL) { p->m_pvOrg = GetProcAddress(GetModuleHandleA(p->m_pszModName), p->m_pszApiName); } if (pfn == p->m_pvOrg) { pfn = (FARPROC) p->m_pvNew; break; } } } } return pfn;}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 预处理#pragma once////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CApiHook 类class CApiHook{private: PCSTR m_pszModName; PCSTR m_pszApiName; PVOID m_pvNew; PVOID m_pvOrg; CApiHook *m_pNext; static CApiHook *m_pHead;public: static HMODULE m_hModule;public: template <typename T> operator T() {return (T) m_pvOrg;} CApiHook(PCSTR pszModName, PCSTR pszApiName, PVOID pvNew); ~CApiHook(); public: PVOID Hook(PBYTE pbModule); static VOID Hook(HMODULE hModule); static VOID Hook(); private: static CApiHook m_ahLoadLibraryA; static CApiHook m_ahLoadLibraryW; static CApiHook m_ahLoadLibraryExA; static CApiHook m_ahLoadLibraryExW; static CApiHook m_ahGetProcAddress;private: static HMODULE WINAPI AHLoadLibraryA(PCSTR pszPath); static HMODULE WINAPI AHLoadLibraryW(PCWSTR pwzPath); static HMODULE WINAPI AHLoadLibraryExA(PCSTR pszPath, HANDLE hFile, DWORD dwFlags); static HMODULE WINAPI AHLoadLibraryExW(PCWSTR pwzPath, HANDLE hFile, DWORD dwFlags); static FARPROC WINAPI AHGetProcAddress(HMODULE hModule, PCSTR pszName);};//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 链接:http://www.yonsm.net/read.php?25http://www.yonsm.net/read.php?7http://www.yonsm.net/read.php?8 我想HOOK掉DX中的d3dx9_28.dll文件的D3DXCreateTextW函数,每个文件的导入表均无引用该函数,可能是系统调用,以上方法都测了,都不可以。。请高手指教 问个GDI+的问题 有什么原因会提示undeclared identifier? 菜鸟之问 一个小菜鸟的问题! 怎样在web中调试ATL组件?? 为什么用LoadLibrary不行,用LoadLibraryEx就可以呢??? 使用winsock编程发现丢失数据的现象 有关画线的问题。谢谢! 请教网络编程高手,如何用VC设置路由,就象route命令一样? 生成记录集对象的记录数却总是0??? 广告一下 -- 提供一个C++实现的安全的暂停、继续、停止的线程框架 WaitForSingleObject()调用死机
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#include "PoBind.h"
#include "ApiHook.h"#include <TlHelp32.h>#pragma warning(disable: 4312)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 成员变量
HMODULE CApiHook::m_hModule = NULL;
CApiHook *CApiHook::m_pHead = NULL;CApiHook CApiHook::m_ahLoadLibraryA("Kernel32.dll", "LoadLibraryA", CApiHook::AHLoadLibraryA);
CApiHook CApiHook::m_ahLoadLibraryW("Kernel32.dll", "LoadLibraryW", CApiHook::AHLoadLibraryW);
CApiHook CApiHook::m_ahLoadLibraryExA("Kernel32.dll", "LoadLibraryExA", CApiHook::AHLoadLibraryExA);
CApiHook CApiHook::m_ahLoadLibraryExW("Kernel32.dll", "LoadLibraryExW", CApiHook::AHLoadLibraryExW);
CApiHook CApiHook::m_ahGetProcAddress("Kernel32.dll", "GetProcAddress", CApiHook::AHGetProcAddress);
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 构造函数
CApiHook::CApiHook(PCSTR pszModName, PCSTR pszApiName, PVOID pvNew)
{
m_pszModName = pszModName;
m_pszApiName = pszApiName;
m_pvNew = pvNew;
m_pvOrg = GetProcAddress(GetModuleHandleA(pszModName), pszApiName); m_pNext = m_pHead;
m_pHead = this;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 析购函数
CApiHook::~CApiHook()
{
CApiHook *p = m_pHead;
if (p == this)
{
m_pHead = p->m_pNext;
}
else
{
for (; p->m_pNext; p = p->m_pNext)
{
if (p->m_pNext == this)
{
p->m_pNext = m_pNext;
break;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 挂接函数
PVOID CApiHook::Hook(PBYTE pbModule)
{
PIMAGE_NT_HEADERS p = (PIMAGE_NT_HEADERS) (pbModule + ((PIMAGE_DOS_HEADER) pbModule)->e_lfanew);
PIMAGE_IMPORT_DESCRIPTOR q = (PIMAGE_IMPORT_DESCRIPTOR) (pbModule +
p->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress); for (; q->Name; q++)
{
if (strcmpi(m_pszModName, (PCSTR) (pbModule + q->Name)) == 0)
{
for (PIMAGE_THUNK_DATA r = (PIMAGE_THUNK_DATA) (pbModule + q->FirstThunk); r->u1.Function; r++)
{
if ((FARPROC) r->u1.Function == m_pvOrg)
{
WriteProcessMemory(GetCurrentProcess(), &r->u1.Function, &m_pvNew, sizeof(PVOID), NULL);
return m_pvOrg;
}
}
}
} return NULL;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 挂接所有函数
VOID CApiHook::Hook(HMODULE hModule)
{
for (CApiHook *p = m_pHead; p; p = p->m_pNext)
{
if (p->m_pvOrg)
{
p->Hook((PBYTE) hModule);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 挂接所有模块
VOID CApiHook::Hook()
{
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, GetCurrentProcessId());
if (hSnap != INVALID_HANDLE_VALUE)
{
MODULEENTRY32 meModule = {sizeof(MODULEENTRY32)};
for (BOOL bResult = Module32First(hSnap, &meModule); bResult; bResult = Module32Next(hSnap, &meModule))
{
if (meModule.hModule != m_hModule)
{
Hook(meModule.hModule);
}
}
CloseHandle(hSnap);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 载入
HMODULE WINAPI CApiHook::AHLoadLibraryA(PCSTR pszPath)
{
HMODULE hModule = LoadLibraryA(pszPath);
if (hModule)
{
Hook(hModule);
}
return hModule;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 载入
HMODULE WINAPI CApiHook::AHLoadLibraryW(PCWSTR pwzPath)
{
HMODULE hModule = LoadLibraryW(pwzPath);
if (hModule)
{
Hook(hModule);
}
return hModule;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 载入
HMODULE WINAPI CApiHook::AHLoadLibraryExA(PCSTR pszPath, HANDLE hFile, DWORD dwFlags)
{
HMODULE hModule = LoadLibraryExA(pszPath, hFile, dwFlags);
if (hModule && !(dwFlags & LOAD_LIBRARY_AS_DATAFILE))
{
Hook(hModule);
}
return hModule;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 载入
HMODULE WINAPI CApiHook::AHLoadLibraryExW(PCWSTR pwzPath, HANDLE hFile, DWORD dwFlags)
{
HMODULE hModule = LoadLibraryExW(pwzPath, hFile, dwFlags);
if (hModule && !(dwFlags & LOAD_LIBRARY_AS_DATAFILE))
{
Hook(hModule);
}
return hModule;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 获取地址
EXTERN_C PVOID _ReturnAddress();
FARPROC WINAPI CApiHook::AHGetProcAddress(HMODULE hModule, PCSTR pszName)
{
FARPROC pfn = GetProcAddress(hModule, pszName);
if (pfn)
{
MEMORY_BASIC_INFORMATION m = {0};
VirtualQuery(_ReturnAddress(), &m, sizeof(MEMORY_BASIC_INFORMATION));
if (hModule != (HMODULE) m.AllocationBase)
{
for (CApiHook *p = m_pHead; p; p = p->m_pNext)
{
if (p->m_pvOrg == NULL)
{
p->m_pvOrg = GetProcAddress(GetModuleHandleA(p->m_pszModName), p->m_pszApiName);
} if (pfn == p->m_pvOrg)
{
pfn = (FARPROC) p->m_pvNew;
break;
}
}
}
} return pfn;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 预处理
#pragma once
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CApiHook 类
class CApiHook
{
private:
PCSTR m_pszModName;
PCSTR m_pszApiName;
PVOID m_pvNew;
PVOID m_pvOrg; CApiHook *m_pNext;
static CApiHook *m_pHead;public:
static HMODULE m_hModule;public:
template <typename T> operator T() {return (T) m_pvOrg;}
CApiHook(PCSTR pszModName, PCSTR pszApiName, PVOID pvNew);
~CApiHook(); public:
PVOID Hook(PBYTE pbModule);
static VOID Hook(HMODULE hModule);
static VOID Hook();
private:
static CApiHook m_ahLoadLibraryA;
static CApiHook m_ahLoadLibraryW;
static CApiHook m_ahLoadLibraryExA;
static CApiHook m_ahLoadLibraryExW;
static CApiHook m_ahGetProcAddress;private:
static HMODULE WINAPI AHLoadLibraryA(PCSTR pszPath);
static HMODULE WINAPI AHLoadLibraryW(PCWSTR pwzPath);
static HMODULE WINAPI AHLoadLibraryExA(PCSTR pszPath, HANDLE hFile, DWORD dwFlags);
static HMODULE WINAPI AHLoadLibraryExW(PCWSTR pwzPath, HANDLE hFile, DWORD dwFlags);
static FARPROC WINAPI AHGetProcAddress(HMODULE hModule, PCSTR pszName);
};
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
http://www.yonsm.net/read.php?7
http://www.yonsm.net/read.php?8