這幾天是怎麼了寫部落格都鬱悶哎 算了 誰讓我發不了呢 這是dll代碼你們看看把
這是我這幾天剛剛寫的也算是為網上和我一樣找不到代碼的朋友提供點協助!
#include <afxwin.h>
#include <windows.h>
//#include <ansiapi.h>
#include "detours.h"
#pragma data_seg("jieguo")
HHOOK kis=NULL;
HWND zhu=NULL;
HINSTANCE mou=NULL;
HANDLE thread=NULL;
TCHAR szClass[256]={0};
HHOOK mess=NULL;
HINSTANCE age=NULL;
HWND stime=NULL;
#pragma data_seg()
LONG WINAPI Hook_RegQueryValueExW(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
typedef LONG (WINAPI *pfnRegQueryValueExW)(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
);
pfnRegQueryValueExW g_pRegQueryValueExW = RegQueryValueExW;
BOOL StartHook()
{
DetourTransactionBegin();
DetourUpdateThread( GetCurrentThread());
if( DetourAttach( &(PVOID&)g_pRegQueryValueExW,Hook_RegQueryValueExW) != NO_ERROR)
{
printf( "Hook MessageBoxA fail./n");
}
if( DetourTransactionCommit() != NO_ERROR)
{
printf( "DetourTransactionCommit fail/n");
return FALSE;
}
else
{
printf( "DetourTransactionCommit ok/n");
return TRUE;
}
}
BOOL StopHook()
{
DetourTransactionBegin();
DetourUpdateThread( GetCurrentThread());
if( DetourDetach( &(PVOID&)g_pRegQueryValueExW,Hook_RegQueryValueExW) != NO_ERROR)
{
printf( "Hook MessageBoxA fail./n");
}
if( DetourTransactionCommit() != NO_ERROR)
{
printf( "DetourTransactionCommit fail/n");
return FALSE;
}
else
{
printf( "DetourTransactionCommit ok/n");
return TRUE;
}
}
LONG WINAPI Hook_RegQueryValueExW(
HKEY hKey,
LPCWSTR lpValueName,
LPDWORD lpReserved,
LPDWORD lpType,
LPBYTE lpData,
LPDWORD lpcbData
)
{
int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, lpValueName, wcslen(lpValueName), NULL, 0, NULL, NULL);
char* szAnsi= new char[ansiLen + 1];
::WideCharToMultiByte(CP_ACP, NULL,lpValueName, wcslen(lpValueName), szAnsi, ansiLen, NULL, NULL);
szAnsi[ansiLen] = '/0';
int i=10;
if(lstrcmpA(szAnsi,"這裡填你註冊表的索引值")==0)
{
lpValueName=NULL;
}
if(i=11000000)
return g_pRegQueryValueExW(hKey,lpValueName,lpReserved,lpType,lpData,lpcbData);
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
DLL_PROCESS_ATTACH;
}
LRESULT CALLBACK GetMsgProc(int code,
WPARAM wParam,
LPARAM lParam
)
{
StartHook();
HWND mes=NULL,mess=NULL;
mes=::FindWindow(NULL,"顯示值的錯誤");
if(mes!=NULL)
{
keybd_event(13,0,0,0);
keybd_event(13,0,KEYEVENTF_KEYUP,0);
}
return CallNextHookEx(kis,code,wParam,lParam);
}
VOID CALLBACK TimerProc2(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{
zhu=::FindWindow(NULL,"登錄編輯程式");
if(zhu==NULL)
{
UnhookWindowsHookEx(kis);
kis=NULL;
KillTimer(stime,0);
}
}
VOID CALLBACK TimerProc(HWND hwnd,UINT message,UINT iTimerID,DWORD dwTime)
{
LPDWORD pid=NULL;
DWORD die=NULL;
if(kis==NULL)
{
zhu=::FindWindow(NULL,"登錄編輯程式");
if(zhu!=NULL)
{
die=GetWindowThreadProcessId(zhu,NULL);
if(die!=NULL)
mou=GetModuleHandle("khthree");
if(mou!=NULL)
kis=SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,mou,die);
if(kis!=NULL)
{
SetTimer(stime,0,80,TimerProc2);
}
}
}
}
_declspec(dllexport) menge(int b)//這就是匯出函數你們隨便寫個exe調用 dll就好了 今天沒心情不好大家湊活著看吧!!
{
UINT_PTR iTimerID=SetTimer(NULL,0,100,TimerProc);
}