吐槽一下:CF窗口化解除鼠标限制DLL msimg32.dll的源代码发布。~

社区服务
高级搜索
猴岛论坛CF穿越火线吐槽一下:CF窗口化解除鼠标限制DLL msimg32.dll的源代码发布。~
发帖 回复
正序阅读 最近浏览的帖子最近浏览的版块
42个回复

吐槽一下:CF窗口化解除鼠标限制DLL msimg32.dll的源代码发布。~

楼层直达
小枫工作组

ZxID:17878826

等级: 上尉
举报 只看楼主 使用道具 楼主   发表于: 2012-10-20 0
— 本帖被 清风沐竹 执行压帖操作(2013-10-21) —
这个没有窗口化,这个仅仅是解除鼠标限制的代码,要窗口化的朋友不用看了,以下是头文件:
  1. #ifndef __APIHOOK
  2. #define __APIHOOK
  3. #include <windows.h>
  4. // APIHook类
  5. class APIHook
  6. {
  7. private:
  8. TCHAR m_szModName[256];
  9. char m_szProcName[256];
  10. PROC m_dwProcAddress;
  11. PROC m_dwNewProcAddress;
  12. byte *m_pBytesGoBack;
  13. byte m_bytesGoHookProc[5];
  14. bool m_bInitialed;
  15. bool m_bHooked;
  16. public:
  17. APIHook()
  18. {
  19.   m_bInitialed = false;
  20.   m_bHooked = false;
  21. }
  22. ~APIHook()
  23. {
  24.   
  25.   if ( m_bHooked )
  26.    UnHook();
  27. }
  28. bool InitHook(TCHAR *szModName, const char *szProcName, PROC dwNewProcAddress)
  29. {
  30.   
  31.   if ( m_bHooked )
  32.    UnHook();
  33.   if ( szModName == NULL || szProcName == NULL )
  34.    return false;
  35.   
  36.   HMODULE hMod = GetModuleHandle( szModName );
  37.   if ( !hMod )
  38.   {
  39.    hMod = LoadLibrary( szModName );
  40.    if ( !hMod )
  41.     return false;
  42.   }
  43.   
  44.   m_dwProcAddress = (PROC)GetProcAddress( hMod, szProcName );
  45.   if ( m_dwProcAddress == 0 )
  46.   {
  47.    CloseHandle( hMod );
  48.    return false;
  49.   }
  50.   
  51.   strcpy( m_szModName, szModName );
  52.   strcpy( m_szProcName, szProcName );
  53.   m_dwNewProcAddress = dwNewProcAddress;
  54.   m_bInitialed = true;
  55.   return true;
  56. }
  57. bool Hook()
  58. {
  59.   
  60.   if ( !m_bInitialed )
  61.    return false;
  62.   
  63.   if ( m_bHooked )
  64.    UnHook();
  65.   
  66.      m_pBytesGoBack = (byte *)VirtualAlloc( NULL, 10, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE );  
  67.   if ( NULL == m_pBytesGoBack )
  68.    return false;
  69.   HANDLE hProcess = GetCurrentProcess();
  70.   
  71.   if ( !ReadProcessMemory(hProcess, (LPCVOID)m_dwProcAddress, m_pBytesGoBack, 5, NULL) )
  72.    return false;
  73.   
  74.   m_pBytesGoBack[5] = 0xe9;
  75.   int nDistance = (int)m_dwProcAddress - (int)m_pBytesGoBack - 5;
  76.   memcpy( m_pBytesGoBack + 6, &nDistance, 4 );
  77.   
  78.   m_bytesGoHookProc[0] = 0xe9;
  79.   nDistance = (int)m_dwNewProcAddress - (int)m_dwProcAddress - 5;
  80.   memcpy( m_bytesGoHookProc + 1, &nDistance, 4 );
  81.   
  82.   if ( !WriteProcessMemory(hProcess, (LPVOID)m_dwProcAddress, m_bytesGoHookProc, 5, NULL) )
  83.    return false;
  84.   m_bHooked = true;
  85.   return true;
  86. }
  87. void UnHook()
  88. {
  89.   if ( m_bHooked )
  90.   {
  91.    HANDLE hProcess = GetCurrentProcess();
  92.   
  93.    if ( m_pBytesGoBack != NULL )
  94.    {
  95.     
  96.     WriteProcessMemory(hProcess, (LPVOID)m_dwProcAddress, m_pBytesGoBack, 5, NULL);
  97.     VirtualFree( m_pBytesGoBack, 0, MEM_RELEASE );
  98.     m_pBytesGoBack = NULL;
  99.    }
  100.    m_bHooked = false;
  101.   }
  102. }
  103.     inline void CallOriginFunction(int &nRetValue, unsigned int nParamCount, ...)
  104. {
  105.   if ( nParamCount > 0 )
  106.   {
  107.    LPVOID *pParamArray = new LPVOID[nParamCount];
  108.   
  109.    va_list params;
  110.    va_start( params, nParamCount );
  111.     for ( unsigned int i = 0; i < nParamCount; ++i )
  112.     {
  113.      pParamArray[nParamCount - i - 1] = (LPVOID)va_arg( params, LPVOID );
  114.     }
  115.    va_end( params );
  116.   
  117.    for ( unsigned int u = 0; u < nParamCount; ++u )
  118.    {
  119.     LPVOID param = pParamArray[u];
  120.     __asm
  121.     {
  122.      push param
  123.     }
  124.    }
  125.    delete[] pParamArray;
  126.   }
  127.   DWORD dwAddr = (DWORD)m_pBytesGoBack;
  128.   int nRet = -1;
  129.   
  130.   __asm
  131.   {
  132.    call dwAddr
  133.    mov nRet, eax
  134.   }
  135.   nRetValue = nRet;
  136. }
  137. PROC GetOriginFunction()
  138. {
  139.   return m_dwProcAddress;
  140. }
  141. };
  142. #endif

以下是msimg32源文件:
  1. // 头文件
  2. #include <Windows.h>
  3. #include "APIHOOKCLASS.H"
  4. #pragma comment(linker, "/EXPORT:vSetDdrawflag=_MsimgLib_vSetDdrawflag,@1")
  5. #pragma comment(linker, "/EXPORT:AlphaBlend=_MsimgLib_AlphaBlend,@2")
  6. #pragma comment(linker, "/EXPORT:DllInitialize=_MsimgLib_DllInitialize,@3")
  7. #pragma comment(linker, "/EXPORT:GradientFill=_MsimgLib_GradientFill,@4")
  8. #pragma comment(linker, "/EXPORT:TransparentBlt=_MsimgLib_TransparentBlt,@5")
  9. // 宏定义
  10. #define EXTERNC extern "C"
  11. #define NAKED __declspec(naked)
  12. #define EXPORT __declspec(dllexport)
  13. #define ALCPP EXPORT NAKED
  14. #define ALSTD EXTERNC EXPORT NAKED void __stdcall
  15. #define ALCFAST EXTERNC EXPORT NAKED void __fastcall
  16. #define ALCDECL EXTERNC NAKED void __cdecl
  17. APIHook hook;
  18. // MsimgLib 命名空间
  19. namespace MsimgLib
  20. {
  21.     HMODULE m_hModule = NULL;
  22.     DWORD m_dwReturn[5] = {0};
  23.     inline BOOL WINAPI Load()
  24.     {
  25.         TCHAR tzPath[MAX_PATH];
  26.         TCHAR tzTemp[MAX_PATH * 2];
  27.         GetSystemDirectory(tzPath, MAX_PATH);
  28.         lstrcat(tzPath, TEXT("\\msimg32"));
  29.         m_hModule = LoadLibrary(tzPath);
  30.         if (m_hModule == NULL)
  31.         {
  32.             wsprintf(tzTemp, TEXT("无法加载 %s,程序无法正常运行。"), tzPath);
  33.             MessageBox(NULL, tzTemp, TEXT("MsimgLib"), MB_ICONSTOP);
  34.         }
  35.         return (m_hModule != NULL);    
  36.     }
  37.         
  38.     inline VOID WINAPI Free()
  39.     {
  40.         if (m_hModule)
  41.         {
  42.             FreeLibrary(m_hModule);
  43.         }
  44.     }
  45.     FARPROC WINAPI GetAddress(PCSTR pszProcName)
  46.     {
  47.         FARPROC fpAddress;
  48.         CHAR szProcName[16];
  49.         TCHAR tzTemp[MAX_PATH];
  50.         fpAddress = GetProcAddress(m_hModule, pszProcName);
  51.         if (fpAddress == NULL)
  52.         {
  53.             if (HIWORD(pszProcName) == 0)
  54.             {
  55.                 wsprintf(szProcName, "%d", pszProcName);
  56.                 pszProcName = szProcName;
  57.             }
  58.             wsprintf(tzTemp, TEXT("无法找到函数 %hs,程序无法正常运行。"), pszProcName);
  59.             //MessageBox(NULL, tzTemp, TEXT("MsimgLib"), MB_ICONSTOP);
  60.             ExitProcess(-2);
  61.         }
  62.         return fpAddress;
  63.     }
  64. }
  65. using namespace MsimgLib;
  66. BOOL MyClipCursor(CONST RECT * lpRect)
  67. {
  68.     int ret = FALSE;
  69.     hook.CallOriginFunction(ret,1,NULL);
  70.     return ret;
  71. }
  72. // 入口函数
  73. BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, PVOID pvReserved)
  74. {
  75.     char szFileName[MAX_PATH] = { 0 };
  76.     char szProcessName[MAX_COMPUTERNAME_LENGTH] = { 0 };
  77.     if (dwReason == DLL_PROCESS_ATTACH)
  78.     {
  79.         GetModuleFileName(NULL,szFileName,MAX_PATH);
  80.         int nStrLen = strlen(szFileName);
  81.         for(int i = nStrLen; i > 0; i--)
  82.         {
  83.             if (szFileName[i] == '\\')
  84.             {
  85.                 strcpy(szProcessName,&szFileName[i+1]);
  86.                 break;
  87.             }
  88.         }
  89.         if (strcmp(szProcessName,"crossfire.exe") == 0)
  90.         {
  91.             if (hook.InitHook( TEXT("User32"), "ClipCursor", (PROC)MyClipCursor ) == false)
  92.             {
  93.                 MessageBox(NULL, TEXT("msimg32 Init Faild!"), TEXT("MsimgLib"), MB_ICONSTOP);
  94.             }
  95.             ;
  96.             ClipCursor(NULL);
  97.             if (hook.Hook() == false)
  98.             {
  99.                 MessageBox(NULL, TEXT("msimg32 Run Faild!"), TEXT("MsimgLib"), MB_ICONSTOP);
  100.             }
  101.             ClipCursor(NULL);
  102.         };
  103.         DisableThreadLibraryCalls(hModule);
  104.         return Load();
  105.     }
  106.     else if (dwReason == DLL_PROCESS_DETACH)
  107.     {
  108.         Free();
  109.         hook.UnHook();
  110.         hook.~APIHook();
  111.     }
  112.     return TRUE;
  113. }
  114. ALCDECL MsimgLib_vSetDdrawflag(void)
  115. {
  116.     
  117.     __asm POP m_dwReturn[0 * TYPE long];
  118.     
  119.     GetAddress("vSetDdrawflag")();
  120.     
  121.     __asm JMP m_dwReturn[0 * TYPE long];
  122. }
  123. ALCDECL MsimgLib_AlphaBlend(void)
  124. {
  125.     
  126.     __asm POP m_dwReturn[1 * TYPE long];
  127.     
  128.     GetAddress("AlphaBlend")();
  129.     
  130.     __asm JMP m_dwReturn[1 * TYPE long];
  131. }
  132. ALCDECL MsimgLib_DllInitialize(void)
  133. {
  134.     
  135.     __asm POP m_dwReturn[2 * TYPE long];
  136.     
  137.     GetAddress("DllInitialize")();
  138.     
  139.     __asm JMP m_dwReturn[2 * TYPE long];
  140. }
  141. ALCDECL MsimgLib_GradientFill(void)
  142. {
  143.     
  144.     __asm POP m_dwReturn[3 * TYPE long];
  145.     
  146.     GetAddress("GradientFill")();
  147.     
  148.     __asm JMP m_dwReturn[3 * TYPE long];
  149. }
  150. ALCDECL MsimgLib_TransparentBlt(void)
  151. {
  152.     
  153.     __asm POP m_dwReturn[4 * TYPE long];
  154.     
  155.     GetAddress("TransparentBlt")();
  156.     
  157.     __asm JMP m_dwReturn[4 * TYPE long];
  158. }


附上完整源代码,vc6工程可直接编译。~
msimg32.rar[点击下载](9 K) 下载次数:31 累计下载获得 DB 58

附上已经编译好的dll,放入CF目录可直接解除窗口化鼠标限制,要写窗口化的朋友可以考虑把这个dll注入到crossfire.exe。
msimg32.rar[点击下载](16 K) 下载次数:37 累计下载获得 DB 68

结贴,收功。
元芳,你怎么看?
本帖de评分: 3 条评分 DB +5
DB+1 2012-10-22

额 怎么找到的,!

DB+1 2012-10-21

牛人

DB+3 2012-10-20

精品文章

ccsk2jian

ZxID:1042389

等级: 中士
举报 只看该作者 42楼  发表于: 2013-10-21 0
谢谢啦。。收下了
删过你最爱的人吗

ZxID:28774897

等级: 新兵
举报 只看该作者 41楼  发表于: 2013-08-20 0
元芳你怎么看? 我看你麻痹看!
删过你最爱的人吗

ZxID:28774897

等级: 新兵
举报 只看该作者 40楼  发表于: 2013-08-20 0
啊啊啊啊啊啊啊啊啊啊啊啊啊啊
完美不够美

ZxID:28206683

等级: 中尉
举报 只看该作者 39楼  发表于: 2013-08-14 0
是什么东西啊?
夏日╮﹏secret°

ZxID:28203049

等级: 少将
╔━━━━━━━━╗ ┃爱生活、爱猴岛っ┃ ╚━━━━━━━━╝

举报 只看该作者 38楼  发表于: 2013-08-14 0
很流弊的样子,小白不懂路过。。。
我爱梦幻

ZxID:28536101

等级: 上校
举报 只看该作者 37楼  发表于: 2013-08-14 0

谢谢分享。
放弃- -

ZxID:17966077

等级: 新兵
举报 只看该作者 36楼  发表于: 2013-08-13 0
路过
1
不够mature.

ZxID:25686964

等级: 上将
   

举报 只看该作者 35楼  发表于: 2013-07-14 0
看不懂- -
 放肆的青春。

ZxID:17065380

等级: 准尉
举报 只看该作者 34楼  发表于: 2013-07-14 0
阿斯蒂芬岁的
 放肆的青春。

ZxID:17065380

等级: 准尉
举报 只看该作者 33楼  发表于: 2013-07-14 0
斯蒂芬斯蒂芬
 放肆的青春。

ZxID:17065380

等级: 准尉
举报 只看该作者 32楼  发表于: 2013-07-14 0
dsfds dsf sdfs
 放肆的青春。

ZxID:17065380

等级: 准尉
举报 只看该作者 31楼  发表于: 2013-07-14 0
fsdf
 一方通行

ZxID:348687

等级: 中将
我是谁?我不过是一个戴面具的人,就叫我李小璐吧。

举报 只看该作者 30楼  发表于: 2013-07-08 0
解除鼠标限制有什么用呢
a1006281516

ZxID:18241022

等级: 上校
神!!!
举报 只看该作者 29楼  发表于: 2013-07-08 0
  1. [tr][td] 不错[/td][td]果然 [/td][/tr]

际遇之神

惩罚

看见邪恶图,鼻血不止去医院,花费DB4

[VIP]灬28ce

ZxID:23243972

等级: 上等兵
举报 只看该作者 28楼  发表于: 2013-07-07 0
﹃_﹃〣  无语。。。。。。
[VIP]灬28ce

ZxID:23243972

等级: 上等兵
举报 只看该作者 27楼  发表于: 2013-07-07 0
支持,。。。。。。。
本帖提到的人: @。。

际遇之神

奖励

买了一个鸡蛋,吃出两个蛋黄得3DB

80895712

ZxID:8068819

等级: 中士
举报 只看该作者 26楼  发表于: 2013-07-06 0
找了很久咯  

貳零

ZxID:23677258

等级: 元帅

举报 只看该作者 25楼  发表于: 2013-03-22 0
不懂呢-,-

际遇之神

惩罚

下载爱情动作片,打开竟是有码葫芦娃,浪费电费DB6

a80895712

ZxID:8384220

等级: 上士
举报 只看该作者 24楼  发表于: 2013-03-22 0
1241586905

本文章来自:精易论坛(http://bbs.125.la/thread-13616857-1-1.html)请保留此链接, 感谢!
« 返回列表
发帖 回复