Mã:
#include "stdafx.h"
#pragma data_seg(".shared")
#pragma data_seg()
HMODULE MyModuleHandle;
HHOOK hhk = NULL;
unsigned char Store[10];
long _stdcall SelfInject();
long _stdcall SelfEject();
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam);
BOOL WINAPI CreateProcessInternalW2(HANDLE hToken,
LPCWSTR lpApplicationName,
LPWSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCWSTR lpCurrentDirectory,
LPSTARTUPINFOW lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation,
PHANDLE hNewToken);
void HookAPI();
void UnHookAPI();
BOOL APIENTRY DllMain( HANDLE hModule, DWORD reason,LPVOID lpReserved)
{
if (reason == DLL_PROCESS_ATTACH)
{
HookAPI();
MyModuleHandle = (HMODULE)hModule;
}
else if (reason == DLL_PROCESS_DETACH)
{
UnHookAPI();
}
return TRUE;
}
long _stdcall SelfInject()
{
hhk = SetWindowsHookEx(WH_GETMESSAGE,GetMsgProc,MyModuleHandle,0);
return (hhk != NULL);
}
long _stdcall SelfEject()
{
return UnhookWindowsHookEx(hhk);
}
LRESULT CALLBACK GetMsgProc(int nCode,WPARAM wParam,LPARAM lParam)
{
return CallNextHookEx(hhk,nCode,wParam,lParam);
}
void HookAPI()
{
DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
HMODULE hmod = GetModuleHandle("kernel32");
long pa = (long)GetProcAddress(hmod,"CreateProcessInternalW");
long pa2 = (long)CreateProcessInternalW2;
long dAddr = pa2 - pa - 5;
unsigned char *p = (unsigned char *)pa;
unsigned char *p2 = (unsigned char *)(&dAddr);
VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
for (int i=0;i<5;i++)
Store[i] = p[i];
p[0] = (unsigned char)0xE9;
for (i=0;i<4;i++)
p[i + 1] = p2[i];
VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
}
void UnHookAPI()
{
DWORD OldProtect, NewProtect = PAGE_EXECUTE_READWRITE;
HMODULE hmod = GetModuleHandle("kernel32");
long pa = (long)GetProcAddress(hmod,"CreateProcessInternalW");
unsigned char *p = (unsigned char *)pa;
VirtualProtect((void *)pa,5,NewProtect,&OldProtect);
for (int i=0;i<5;i++)
p[i] = Store[i];
VirtualProtect((void *)pa,5,OldProtect,&NewProtect);
}
BOOL WINAPI CreateProcessInternalW2(HANDLE hToken,LPCWSTR lpApplicationName,LPWSTR lpCommandLine,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,DWORD dwCreationFlags,LPVOID lpEnvironment,LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation,PHANDLE hNewToken)
{
return 0;
}
Thông qua phân tích dữ liệu Google từ 86 quốc gia, mới đây, một công ty tại Anh đã công bố bảng xếp hạng kích tấc "cậu nhỏ" của các nước trên thế giới. Kết quả, hầu hết các nước xếp ở nhóm đầu của...
"Chim" của chàng trai Việt thuộc...