|
|
[原创]无需偷代码的API HOOK
我觉的楼主的东东很好!坚决支持原创!!!! |
|
|
关于lnline hook的问题
学习一下。!! |
|
|
某公司笔试题目 求助
学习了,好贴 学习了,好贴! |
|
|
[求助]SHELL扩展添加右键菜单出错
MARK一下,回头看看! |
|
|
[原创]汇编学习之路——本人对汇编学习的看法(另附一些资料)
mark.收藏一下 |
|
|
[注意]邀请码发放公布(7.25~7.28)
顶一下!!! |
|
|
[求解]在只知道dll中函数序号的情况下,如何获得函数地址。??
::GetProcAddress(hModule, (LPCSTR)MAKEINTRESOuRcE(order); 直接将order塞入第二个参数会有意外惊喜哦,亲 |
|
|
[原创]局域网监视小助手V1(有图有源码)
学习一下,看看!! |
|
|
[原创]第一次发个自己写的inline hook的代码
顶楼主,好东东!!!学习了! |
|
|
[分享] 百度网盘新地址提取工具
好东东,顶 !!!! |
|
|
[求助]关于hook
我是用vc6的。20/0是net的吧? |
|
|
[分享]自己经常使用的抓包工具
MARK一下, |
|
|
C程序设计语言发现的一个问题 求解答
学习了,回头试试下。 |
|
|
cpp文件调用ASM编译的函数问题
Nark 学百一下。 |
|
|
求助关于进程间通信的问题
学习下。 |
|
|
[原创]为记事本增加功能-大小写转换,加解密文件,字数统计。
Mark一下,有空看看 |
|
|
[求助][求助]Hook CreateProcess,改写程序入口方式注入dll
这个和 注入 一个 DLL有不同吗? |
|
|
API拦截
我也有这样的问题,想拦截ACCESS 窗体里的消息,但不成功?? |
|
|
[原创]asm的魅力(一)
路过,学习了. |
|
|
[原创]打造史上最完整APIHOOK完整开发库
下面这段代码好像就是汇编JMP (机器E9),可以拦截 输入法,比如可以翻译输入的中文为火星文的。用楼主的 APIhook是否可以实现同样的功能呢?还是不太懂楼主的最后的那个例子:( 楼主的库看上去应该更强一些啊。 还有,这个DLL好像没法调试?? =============== bool HookApi(LPCTSTR strDllName,LPCTSTR strFunName,int lngFunAddr) { hookBeOK=false; HMODULE hModule=NULL; int dwJmpAddr=0; hModule=GetModuleHandle(strDllName); if (hModule==NULL) {return false;} mlngFunAddr=(int)GetProcAddress(hModule,strFunName); if (mlngFunAddr==NULL) {return false;} CopyMemory(mbytOldCode,(const void *)mlngFunAddr,5); mbytNewCode[0]=0xE9; dwJmpAddr=lngFunAddr-mlngFunAddr-5; CopyMemory(&mbytNewCode[1],&dwJmpAddr,4); hookBeOK=true; HookStatus(true); return true; } =========== 这个是完整的代码。 //hxwdllwx.cpp #include <windows.h> #include <stdio.h> #include <stdlib.h> #pragma comment(lib,"imm32.lib") #pragma data_seg("mysechx") HHOOK g_hKeyboard=NULL; HWND g_hMainhWnd=NULL; char g_IMEString[256]=""; bool g_HOOKflag=false; #pragma data_seg() class clsHookInfo { private: BYTE mbytOldCode[5]; BYTE mbytNewCode[5]; int mlngFunAddr; bool hookBeOK; public: bool HookApi(LPCTSTR strDllName,LPCTSTR strFunName,int lngFunAddr) { hookBeOK=false; HMODULE hModule=NULL; int dwJmpAddr=0; hModule=GetModuleHandle(strDllName); if (hModule==NULL) {return false;} mlngFunAddr=(int)GetProcAddress(hModule,strFunName); if (mlngFunAddr==NULL) {return false;} CopyMemory(mbytOldCode,(const void *)mlngFunAddr,5); mbytNewCode[0]=0xE9; dwJmpAddr=lngFunAddr-mlngFunAddr-5; CopyMemory(&mbytNewCode[1],&dwJmpAddr,4); hookBeOK=true; HookStatus(true); return true; } bool HookStatus(bool blnIsHook) { DWORD oldACC,newACC; if (!hookBeOK) {return false;} if (blnIsHook) { VirtualProtect((LPVOID)mlngFunAddr,5,PAGE_WRITECOPY,&oldACC); CopyMemory((void *)mlngFunAddr,mbytNewCode,5); VirtualProtect((LPVOID)mlngFunAddr,5,oldACC,&newACC); } else { VirtualProtect((LPVOID)mlngFunAddr,5,PAGE_WRITECOPY,&oldACC); CopyMemory((void *)mlngFunAddr,mbytOldCode,5); VirtualProtect((LPVOID)mlngFunAddr,5,oldACC,&newACC); } return true; } }; clsHookInfo g_myHOOK1; clsHookInfo g_myHOOK2; char g_StringBuf1[256]=""; char g_StringBuf2[256]=""; UINT WM_HXWDLLWX_QQBTX=NULL; UINT WM_HXWDLLWX_HOOKKEY=NULL; BOOL MByteToWChar(LPCSTR lpcszStr,LPWSTR lpwszStr,DWORD dwSize) { DWORD dwMinSize; dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0); if(dwSize < dwMinSize) { return FALSE; } MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize); return TRUE; } BOOL WCharToMByte(LPCWSTR lpcwszStr,LPSTR lpszStr,DWORD dwSize) { DWORD dwMinSize; dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE); if(dwSize < dwMinSize) { return FALSE; } WideCharToMultiByte(CP_OEMCP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE); return TRUE; } LONG WINAPI myImmGetCompositionStringA(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) { LONG myReturn=0; LONG tempLen=0; int StrBufLen=0; if (dwIndex==GCS_RESULTSTR && g_HOOKflag) { memset(g_IMEString,0,256); tempLen=255; g_myHOOK1.HookStatus(false); ImmGetCompositionStringA(hIMC,GCS_RESULTSTR,g_IMEString,tempLen); g_myHOOK1.HookStatus(true); g_IMEString[tempLen]=0; if (lstrcmp(g_IMEString,g_StringBuf1)!=0) { memset(g_StringBuf1,0,256); lstrcpy(g_StringBuf1,g_IMEString); SendMessage(g_hMainhWnd,WM_HXWDLLWX_QQBTX,0,0); memset(g_StringBuf2,0,256); lstrcpy(g_StringBuf2,g_IMEString); } if (lpBuf==NULL || dwBufLen==0) { myReturn=lstrlen(g_StringBuf2); } else { StrBufLen=lstrlen(g_StringBuf2); memset(lpBuf,0,dwBufLen); if (dwBufLen>=StrBufLen) { dwBufLen=StrBufLen; myReturn=StrBufLen; } else { myReturn=0; } memcpy(lpBuf,g_StringBuf2,dwBufLen); } } else { g_myHOOK1.HookStatus(false); myReturn=ImmGetCompositionStringA(hIMC,dwIndex,lpBuf,dwBufLen); g_myHOOK1.HookStatus(true); } return myReturn; } LONG WINAPI myImmGetCompositionStringW(HIMC hIMC, DWORD dwIndex, LPVOID lpBuf, DWORD dwBufLen) { LONG myReturn=0; LONG tempLen=0; int StrBufLen=0; if (dwIndex==GCS_RESULTSTR && g_HOOKflag) { memset(g_IMEString,0,256); tempLen=254; g_myHOOK2.HookStatus(false); ImmGetCompositionStringW(hIMC,GCS_RESULTSTR,g_IMEString,tempLen); g_myHOOK2.HookStatus(true); g_IMEString[254]=0; g_IMEString[255]=0; if (lstrcmpW((wchar_t *)g_IMEString,(wchar_t *)g_StringBuf1)!=0) { memset(g_StringBuf1,0,256); lstrcpyW((wchar_t *)g_StringBuf1,(wchar_t *)g_IMEString); WCharToMByte((wchar_t *)g_StringBuf1,g_IMEString,256); SendMessage(g_hMainhWnd,WM_HXWDLLWX_QQBTX,0,0); memset(g_StringBuf2,0,256); MByteToWChar(g_IMEString,(wchar_t *)g_StringBuf2,128); } if (lpBuf==NULL || dwBufLen==0) { myReturn=lstrlenW((wchar_t *)g_StringBuf2)*2; } else { StrBufLen=lstrlenW((wchar_t *)g_StringBuf2)*2; memset(lpBuf,0,dwBufLen); if (dwBufLen>=StrBufLen) { dwBufLen=StrBufLen; myReturn=StrBufLen; } else { myReturn=0; } memcpy(lpBuf,g_StringBuf2,dwBufLen); } } else { g_myHOOK2.HookStatus(false); myReturn=ImmGetCompositionStringW(hIMC,dwIndex,lpBuf,dwBufLen); g_myHOOK2.HookStatus(true); } return myReturn; } BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) { switch(fdwReason) { case DLL_PROCESS_ATTACH: WM_HXWDLLWX_QQBTX=RegisterWindowMessage("WM_HXWDLLWX_QQBTX"); WM_HXWDLLWX_HOOKKEY=RegisterWindowMessage("WM_HXWDLLWX_HOOKKEY"); g_myHOOK1.HookApi("imm32.dll","ImmGetCompositionStringA",(int)myImmGetCompositionStringA); g_myHOOK2.HookApi("imm32.dll","ImmGetCompositionStringW",(int)myImmGetCompositionStringW); break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; case DLL_PROCESS_DETACH: g_myHOOK1.HookStatus(false); g_myHOOK2.HookStatus(false); break; default: break; } return true; } LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam) { if (code==0 && g_HOOKflag) { SendMessage(g_hMainhWnd,WM_HXWDLLWX_HOOKKEY,wParam,lParam); } return CallNextHookEx(g_hKeyboard,code,wParam,lParam); } void setHOOK() { g_hKeyboard=SetWindowsHookEx(WH_KEYBOARD,KeyboardProc,GetModuleHandle("hxwdllwx.dll"),0); } int WINAPI DLLstartHOOK(HWND myhWnd) { if (g_hMainhWnd==NULL) { g_hMainhWnd=myhWnd; } return 1; } int WINAPI DLLstopHOOK() { if (g_hKeyboard!=NULL) { UnhookWindowsHookEx(g_hKeyboard); g_hKeyboard=NULL; } return 1; } int WINAPI DLLsetHOOKState(bool myState) { if (myState) { if (g_hKeyboard==NULL) { setHOOK(); } g_HOOKflag=true; } else { g_HOOKflag=false; } return 1; } LPCTSTR WINAPI DLLGetPubString() { char tmpStr[258]=""; lstrcpy(tmpStr,g_IMEString); tmpStr[256]=0; tmpStr[257]=0; return (LPCTSTR)SysAllocString((const OLECHAR *)tmpStr); } int WINAPI DLLSetPubString(LPCTSTR tmpStr) { memset(g_IMEString,0,256); if (lstrlen(tmpStr)>255) { lstrcpyn(g_IMEString,tmpStr,256); } else { lstrcpy(g_IMEString,tmpStr); } return 1; } |
操作理由
RANk
{{ user_info.golds == '' ? 0 : user_info.golds }}
雪币
{{ experience }}
课程经验
{{ score }}
学习收益
{{study_duration_fmt}}
学习时长
基本信息
荣誉称号:
{{ honorary_title }}
勋章
兑换勋章
证书
证书查询 >
能力值