暴米花 发表于 2006-12-13 11:52:00

实现 MU 窗口化 过程

<strong><br/><br/></strong>实现&nbsp;MU&nbsp;窗口化&nbsp;过程 <p></p><p>窗口化&nbsp;的确可以实现&nbsp;可能很多人都以实现了&nbsp;我在这里抛砖引玉了<br/>但是&nbsp;登陆&nbsp;30&nbsp;秒后&nbsp;出现&nbsp;GameGuard&nbsp;出错<br/>实在不知原因&nbsp;<br/>又找不到&nbsp;&nbsp;加密解密&nbsp;的代码&nbsp;<br/>听说&nbsp;99&nbsp;可以和&nbsp;+11&nbsp;装备&nbsp;100%&nbsp;成功&nbsp;太&nbsp;nb&nbsp;<br/>自愧不如了<br/>现在决定放弃了</p><p>把我的这些垃圾&nbsp;贴到这&nbsp;谁愿意继续搞&nbsp;谁搞去把</p><p>&lt;&nbsp;1&nbsp;&gt;&nbsp;调试&nbsp;:<br/>工具&nbsp;OllDbg&nbsp;系统&nbsp;xp&nbsp;忽略所有异常&nbsp;<br/>菜单&nbsp;文件/打开&nbsp;选择&nbsp;main.exe&nbsp;<br/>在参数框中&nbsp;添入&nbsp;conn44ect&nbsp;/u210.51.27.96&nbsp;/p44405&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;这是模仿&nbsp;&nbsp;MU.exe&nbsp;启动&nbsp;Main.exe<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;MU.exe&nbsp;使用了命令行&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;显然不同的区&nbsp;IP&nbsp;不同&nbsp;<br/>bp&nbsp;77FB172C&nbsp;ecx&nbsp;==&nbsp;0c6d39cf&nbsp;//&nbsp;这是第26次&nbsp;SEH&nbsp;<br/>断下后按&nbsp;F7&nbsp;到这里</p><p>0C6D39CF&nbsp;&nbsp;&nbsp;&nbsp;8B4424&nbsp;0C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;EAX,DWORD&nbsp;PTR&nbsp;SS:<br/>0C6D39D3&nbsp;&nbsp;&nbsp;&nbsp;8380&nbsp;B8000000&nbsp;0&gt;ADD&nbsp;DWORD&nbsp;PTR&nbsp;DS:,2<br/>0C6D39DA&nbsp;&nbsp;&nbsp;&nbsp;C740&nbsp;18&nbsp;0000000&gt;MOV&nbsp;DWORD&nbsp;PTR&nbsp;DS:,0<br/>0C6D39E1&nbsp;&nbsp;&nbsp;&nbsp;31C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;EAX,EAX<br/>0C6D39E3&nbsp;&nbsp;&nbsp;&nbsp;C3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RETN<br/>0C6D39E4&nbsp;&nbsp;&nbsp;&nbsp;31C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;EAX,EAX<br/>0C6D39E6&nbsp;&nbsp;&nbsp;&nbsp;64:FF30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;DWORD&nbsp;PTR&nbsp;FS:<br/>0C6D39E9&nbsp;&nbsp;&nbsp;&nbsp;64:8920&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;DWORD&nbsp;PTR&nbsp;FS:,ESP<br/>0C6D39EC&nbsp;&nbsp;&nbsp;&nbsp;3100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XOR&nbsp;DWORD&nbsp;PTR&nbsp;DS:,EAX<br/>0C6D39EE&nbsp;&nbsp;&nbsp;&nbsp;64:8F05&nbsp;0000000&gt;POP&nbsp;DWORD&nbsp;PTR&nbsp;FS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;这里下断点<br/>0C6D39F5&nbsp;&nbsp;&nbsp;&nbsp;58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;POP&nbsp;EAX<br/>0C6D39F6&nbsp;&nbsp;&nbsp;&nbsp;833D&nbsp;B07E6D0C&nbsp;0&gt;CMP&nbsp;DWORD&nbsp;PTR&nbsp;DS:,0</p><p><br/>然后&nbsp;bp&nbsp;0C6D39EE&nbsp;<br/>断下后&nbsp;我们先&nbsp;看一下&nbsp;启动&nbsp;GameGuard.des&nbsp;的代码<br/>d&nbsp;5A2470&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;这个地址我也忘记我是如何找到的了&nbsp;我可能用了&nbsp;SoftICE&nbsp;或者&nbsp;我一直跟踪到此<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;ASProtect壳&nbsp;的HookAPI挺恶心&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;可能要&nbsp;BP&nbsp;CreateProcessA&nbsp;+&nbsp;一个大一点的数<br/>数据窗口&nbsp;点右键&nbsp;反汇编&nbsp;看到下面代码</p><p>005A2470&nbsp;&nbsp;&nbsp;&nbsp;8D5424&nbsp;18&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEA&nbsp;EDX,DWORD&nbsp;PTR&nbsp;SS:<br/>005A2474&nbsp;&nbsp;&nbsp;&nbsp;8D4424&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LEA&nbsp;EAX,DWORD&nbsp;PTR&nbsp;SS:<br/>005A2478&nbsp;&nbsp;&nbsp;&nbsp;8D8C24&nbsp;B0030000&nbsp;LEA&nbsp;ECX,DWORD&nbsp;PTR&nbsp;SS:<br/>005A247F&nbsp;&nbsp;&nbsp;&nbsp;52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;EDX<br/>005A2480&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;EAX<br/>005A2481&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;0<br/>005A2483&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;0<br/>005A2485&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;0<br/>005A2487&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;1<br/>005A2489&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;0<br/>005A248B&nbsp;&nbsp;&nbsp;&nbsp;6A&nbsp;00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;0<br/>005A248D&nbsp;&nbsp;&nbsp;&nbsp;8D9424&nbsp;C8010000&nbsp;LEA&nbsp;EDX,DWORD&nbsp;PTR&nbsp;SS:<br/>005A2494&nbsp;&nbsp;&nbsp;&nbsp;51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;ECX<br/>005A2495&nbsp;&nbsp;&nbsp;&nbsp;52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSH&nbsp;EDX<br/>005A2496&nbsp;&nbsp;&nbsp;&nbsp;FF15&nbsp;04915B00&nbsp;&nbsp;&nbsp;CALL&nbsp;DWORD&nbsp;PTR&nbsp;DS:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;这里&nbsp;调用&nbsp;CreateProcessA<br/>005A249C&nbsp;&nbsp;&nbsp;&nbsp;85C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEST&nbsp;EAX,EAX<br/>005A249E&nbsp;&nbsp;&nbsp;&nbsp;75&nbsp;46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNZ&nbsp;SHORT&nbsp;main.005A24E6</p><p>005A2496&nbsp;行&nbsp;调用&nbsp;CreateProcessA&nbsp;。<br/>修改&nbsp;地址&nbsp;5B9104&nbsp;的内容可以&nbsp;HOOK&nbsp;CreateProcessA&nbsp;;</p><p>向下&nbsp;按&nbsp;F7&nbsp;或&nbsp;F8&nbsp;有几个&nbsp;跳转指令&nbsp;<br/>然后&nbsp;启动了&nbsp;&nbsp;GameMon.des&nbsp;&nbsp;//&nbsp;也是&nbsp;CALL&nbsp;CALL&nbsp;DWORD&nbsp;PTR&nbsp;DS:&nbsp;<br/>注意&nbsp;一下&nbsp;OD&nbsp;中显示出的字符串&nbsp;可以&nbsp;发现这些&nbsp;跳转&nbsp;多数&nbsp;跳到了&nbsp;GameMon&nbsp;failure&nbsp;;<br/>我把他们&nbsp;统统&nbsp;改了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;见后面的&nbsp;C&nbsp;代码&nbsp;</p><p>//////////////////////////////////////////////////&nbsp;调试就到这里了&nbsp;谁喜欢调自己调去把</p><p><br/>&lt;&nbsp;2&nbsp;&gt;&nbsp;注入&nbsp;DLL&nbsp;<br/>可以很简单的&nbsp;使用&nbsp;远程线程&nbsp;的&nbsp;方法&nbsp;照搬&nbsp;&lt;&lt;winndows&nbsp;核心编程&gt;&gt;&nbsp;里的代码就行了</p><p>//////////////////////////////////////////////////////////////////////////////<br/>&lt;&nbsp;3&nbsp;&gt;&nbsp;启动&nbsp;main.exe&nbsp;向其代码空间中写入&nbsp;指令<br/>首先启动&nbsp;Main&nbsp;&nbsp;//&nbsp;不要忘了传递命令行&nbsp;&nbsp;connect&nbsp;/u210.51.27.96&nbsp;/p44405&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;各区的&nbsp;IP&nbsp;与&nbsp;端口&nbsp;在&nbsp;partition.inf&nbsp;文件里</p><p>当然以调试器的身份启动&nbsp;Main&nbsp;是非常好的&nbsp;&nbsp;&nbsp;//&nbsp;但先要躲过&nbsp;IsDebuggerPresent()<br/>在&nbsp;26&nbsp;次&nbsp;异常后断下&nbsp;,修改&nbsp;Main&nbsp;的代码&nbsp;,一切那么自然<br/>但我不知&nbsp;如何躲过&nbsp;IsDebuggerPresent()&nbsp;所以启动之后产生了&nbsp;千万次异常</p><p>我只好不用&nbsp;"调试"&nbsp;那参数了,这样修改&nbsp;Main.exe&nbsp;代码的时机很难掌握了<br/>我用了&nbsp;这样一个循环&nbsp;只是延时了&nbsp;其实没准的&nbsp;很<br/>while&nbsp;(dwBuf&nbsp;!=&nbsp;GREAYE_PROCESS_V&nbsp;&amp;&amp;&nbsp;j&nbsp;&lt;&nbsp;1110000)<br/>{<br/>BOOL&nbsp;fRead&nbsp;=&nbsp;ReadProcessMemory&nbsp;(GetCurrentProcess(),&nbsp;&nbsp;(LPCVOID)GREAYE_PROCESS_A&nbsp;,&nbsp;(LPVOID)&nbsp;&amp;dwBuf,&nbsp;4,&nbsp;NULL)&nbsp;;<br/>_ASSERTE&nbsp;(fRead)&nbsp;;<br/>j&nbsp;++&nbsp;;<br/>}<br/>/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p><p>下面是&nbsp;被注入的&nbsp;DLL&nbsp;的全部代码&nbsp;<br/>//&nbsp;注意&nbsp;:&nbsp;我从来没搞过任何项目&nbsp;写过的代码也有限<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的代码&nbsp;写的不好&nbsp;请原谅<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;比如&nbsp;里面有一些&nbsp;曾经用过&nbsp;但现在不用的变量&nbsp;没有删掉<br/>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;还有注释&nbsp;写的不好请原谅</p><p></p><p>//&nbsp;MuDll.cpp&nbsp;文件<br/>#include&nbsp;"MU_DLL.h"</p><p><br/>#pragma&nbsp;data_seg&nbsp;("sharedID")<br/>HANDLE&nbsp;m_hMuThread&nbsp;=&nbsp;NULL&nbsp;;<br/>HANDLE&nbsp;m_hMuProcess&nbsp;=&nbsp;NULL&nbsp;;<br/>static&nbsp;int&nbsp;m_iNumLoad&nbsp;=&nbsp;0&nbsp;;<br/>static&nbsp;char&nbsp;m_szMuMsg&nbsp;;<br/>#pragma&nbsp;data_seg&nbsp;()&nbsp;<br/>#pragma&nbsp;comment&nbsp;(linker,&nbsp;"/SECTION:sharedID,rws")</p><p><br/>WNDPROC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_wpMuOldProc&nbsp;;<br/>HINSTANCE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hThis&nbsp;;<br/>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hwndInsert&nbsp;;<br/>LPPROCESS_INFORMATION&nbsp;&nbsp;m_lpProcessInfoMon&nbsp;;<br/>HWND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_hwndMu&nbsp;;<br/>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_lpsSend&nbsp;&nbsp;;&nbsp;&nbsp;<br/>UINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_strSendLen&nbsp;=&nbsp;0&nbsp;;</p><p></p><p><br/>int&nbsp;WINAPI&nbsp;DllMain&nbsp;(HINSTANCE&nbsp;hInstance,&nbsp;DWORD&nbsp;fdwReason,&nbsp;PVOID&nbsp;pvReserved)<br/>{<br/>if&nbsp;(fdwReason&nbsp;==&nbsp;DLL_PROCESS_ATTACH)<br/>{<br/>m_hThis&nbsp;=&nbsp;hInstance&nbsp;;<br/>m_iNumLoad&nbsp;++&nbsp;;</p><p>if&nbsp;(m_iNumLoad&nbsp;&gt;&nbsp;1)<br/>{<br/>m_hwndInsert&nbsp;=&nbsp;FindWindow&nbsp;("InsertDll",&nbsp;NULL)&nbsp;;<br/>SetProcessPriorityBoost&nbsp;(m_hMuProcess,&nbsp;TRUE)&nbsp;;<br/>DWORD&nbsp;dwRun&nbsp;=&nbsp;ResumeThread&nbsp;(m_hMuThread)&nbsp;;<br/>if&nbsp;(&nbsp;-1&nbsp;==&nbsp;dwRun)<br/>{ <br/>char&nbsp;szShowNum&nbsp;;<br/>sprintf&nbsp;(szShowNum,&nbsp;"hThread&nbsp;&nbsp;%x&nbsp;load&nbsp;time&nbsp;%d\n",&nbsp;m_hMuThread,&nbsp;m_iNumLoad)&nbsp;; &nbsp;&nbsp; <br/>MessageBox&nbsp;(NULL,&nbsp;szShowNum&nbsp;,&nbsp;"&nbsp;shibai&nbsp;MUdll",&nbsp;MB_OK)&nbsp;;<br/>FreeLibrary&nbsp;(m_hThis)&nbsp;;<br/>}<br/>else&nbsp;<br/>{<br/>unsigned&nbsp;dwTreadID&nbsp;=&nbsp;0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE&nbsp;hThread&nbsp;=&nbsp;NULL&nbsp;;<br/>hThread&nbsp;=&nbsp;(HANDLE)_beginthreadex&nbsp;(NULL,&nbsp;0,&nbsp;&amp;ThreadReadWrite&nbsp;,&nbsp;NULL,&nbsp;0,&nbsp;&amp;dwTreadID)&nbsp;;<br/><br/>}<br/>}<br/>} <br/>return&nbsp;TRUE;<br/>}</p><p>unsigned&nbsp;__stdcall&nbsp;ThreadReadWrite&nbsp;(PVOID&nbsp;pvoid)<br/>{<br/>int&nbsp;i&nbsp;=&nbsp;0&nbsp;;<br/>int&nbsp;j&nbsp;=&nbsp;0&nbsp;;<br/>DWORD&nbsp;dwBuf&nbsp;=&nbsp;0&nbsp;;</p><p>while&nbsp;(dwBuf&nbsp;!=&nbsp;GREAYE_PROCESS_V&nbsp;&amp;&amp;&nbsp;j&nbsp;&lt;&nbsp;1110000)&nbsp;&nbsp;&nbsp;//&nbsp;如果出现保护错误或其他错误&nbsp;尝试&nbsp;修改循环次数&nbsp;这个“dwBuf&nbsp;!=&nbsp;GREAYE_PROCESS_V”&nbsp;没用<br/>{<br/>BOOL&nbsp;fRead&nbsp;=&nbsp;ReadProcessMemory&nbsp;(GetCurrentProcess(),&nbsp;&nbsp;(LPCVOID)GREAYE_PROCESS_A&nbsp;,&nbsp;(LPVOID)&nbsp;&amp;dwBuf,&nbsp;4,&nbsp;NULL)&nbsp;;<br/>_ASSERTE&nbsp;(fRead)&nbsp;;<br/>j&nbsp;++&nbsp;;<br/>}</p><p>SuspendThread&nbsp;(m_hMuThread);&nbsp;&nbsp;<br/>&nbsp;<br/>char&nbsp;FalseNpCode[]&nbsp;=&nbsp;"\xB8\x01\x00\x00\x00"&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;mov&nbsp;&nbsp;eax,&nbsp;&nbsp;0x00000001<br/>"\xB9\xE2\x33\xE5\x77"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;mov&nbsp;&nbsp;ecx,&nbsp;&nbsp;0x77E533E2<br/>"\xBA\x08\x06\x14\x00"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;mov&nbsp;&nbsp;edx,&nbsp;&nbsp;0x00140608 <br/>"\x90\x90\x90\x90\x90"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;nop<br/>"\x90\x90\x90\x90\x90"<br/>"\x90\x90\x90\x90\x90"<br/>"\x90\x90\x90\x90\x90"<br/>"\x90\x90\x90\x90\x90"<br/>"\x90\x90\x90\x90"&nbsp;;</p><p>//&nbsp;跳过&nbsp;Create&nbsp;GameGuard <br/>BOOL&nbsp;fOKe&nbsp;=&nbsp;WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;<br/>(LPVOID)NP_ADDRESS,&nbsp;<br/>FalseNpCode,&nbsp;<br/>44,&nbsp;FALSE)&nbsp;;&nbsp;&nbsp;<br/>//&nbsp;跳过&nbsp;GameGuard&nbsp;后&nbsp;的后续工作<br/>//&nbsp;一些跳转<br/>char&nbsp;chrJMP[]&nbsp;=&nbsp;"\xeb"&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A256C,&nbsp;chrJMP,&nbsp;1,&nbsp;FALSE)&nbsp;;&nbsp;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A2b4b,&nbsp;chrJMP,&nbsp;1,&nbsp;FALSE)&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A2d5b,&nbsp;chrJMP,&nbsp;1,&nbsp;FALSE)&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A2dcc,&nbsp;chrJMP,&nbsp;1,&nbsp;FALSE)&nbsp;;</p><p>//&nbsp;一个函数我不知道他的用途,运行他会出错&nbsp;干脆&nbsp;NOP&nbsp;掉了<br/>char&nbsp;chrNOP[]&nbsp;=&nbsp;"\x90\x90\x90\x90\x90\x90\x90"&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A2cd9,&nbsp;chrNOP,&nbsp;7,&nbsp;FALSE)&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005A2ceb,&nbsp;chrNOP,&nbsp;4,&nbsp;FALSE)&nbsp;;</p><p>//&nbsp;下面这些函数的地址&nbsp;也没什么用&nbsp;用&nbsp;SofICE&nbsp;下断&nbsp;很容易找到&nbsp;<br/>//&nbsp;钩挂&nbsp;CreateProcess&nbsp;()&nbsp;函数&nbsp;<br/>LPVOID&nbsp;lpMyFunc&nbsp;;<br/>lpMyFunc&nbsp;=&nbsp;(LPVOID)MyCreateProcess&nbsp;;<br/>BOOL&nbsp;fOKa&nbsp;=&nbsp;WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005b9104,&nbsp;(LPCVOID)&amp;lpMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;<br/><br/>//&nbsp;改变&nbsp;MU&nbsp;窗口类风格<br/>//char&nbsp;cClssStyle[]&nbsp;&nbsp;&nbsp;=&nbsp;"\x03"&nbsp;;<br/>//BOOL&nbsp;fOKb&nbsp;=&nbsp;WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x0045D313,&nbsp;cClssStyle,&nbsp;1,&nbsp;FALSE)&nbsp;;<br/><br/>//&nbsp;钩挂&nbsp;CreateWindow&nbsp;函数&nbsp;改变窗口风格<br/>lpMyFunc&nbsp;=&nbsp;(LPVOID)MyCreateWindowEx&nbsp;;<br/>BOOL&nbsp;fOKc&nbsp;=&nbsp;WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B93DC,&nbsp;(LPCVOID)&amp;lpMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;<br/><br/>//&nbsp;钩挂&nbsp;ChangeDisplaySetting&nbsp;函数&nbsp;<br/>lpMyFunc&nbsp;=&nbsp;(LPVOID)MyChangeDisplay&nbsp;;<br/>BOOL&nbsp;fOKd&nbsp;=&nbsp;WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B9410,&nbsp;(LPCVOID)&amp;lpMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;</p><p>//&nbsp;钩挂&nbsp;send&nbsp;函数<br/>lpMyFunc&nbsp;=&nbsp;(LPVOID)MySend&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B9470,&nbsp;(LPCVOID)&amp;lpMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;</p><p>//&nbsp;钩挂&nbsp;recv&nbsp;()<br/>lpMyFunc&nbsp;=&nbsp;(LPVOID)MyRecv&nbsp;;<br/>WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B9494,&nbsp;(LPCVOID)&amp;lpMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;<br/><br/>//&nbsp;钩挂&nbsp;SetTimer&nbsp;()&nbsp;<br/>//dwMyFunc&nbsp;=&nbsp;(DWORD)MySetTimer&nbsp;;<br/>//WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B93cc,&nbsp;(LPCVOID)&amp;dwMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;</p><p><br/>//&nbsp;钩挂&nbsp;TextOut&nbsp;函数<br/>//dwMyFunc&nbsp;=&nbsp;(DWORD)MyTextOut&nbsp;;<br/>//WriteProcessMemory&nbsp;(m_hMuProcess,&nbsp;(LPVOID)0x005B9068,&nbsp;(LPCVOID)&amp;dwMyFunc,&nbsp;4,&nbsp;FALSE)&nbsp;;</p><p><br/>//if&nbsp;(fOKa&nbsp;&amp;&amp;&nbsp;fOKb&nbsp;&amp;&amp;&nbsp;fOKc)&nbsp;<br/>// MessageBox&nbsp;(NULL,&nbsp;"&nbsp;代码改好了&nbsp;要出错了吗?",&nbsp;":(",&nbsp;0)&nbsp;;</p><p>ResumeThread&nbsp;(m_hMuThread)&nbsp;;&nbsp;<br/><br/>CloseHandle&nbsp;(m_hMuThread)&nbsp;;<br/>CloseHandle&nbsp;(m_hMuProcess)&nbsp;;</p><p>_endthreadex(0)&nbsp;;<br/>return&nbsp;0&nbsp;;<br/>}</p><p><br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;MU&nbsp;子类化窗口过程<br/>LRESULT&nbsp;CALLBACK&nbsp;MuSubclassProc&nbsp;(HWND&nbsp;hwnd,&nbsp;UINT&nbsp;message,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)<br/>{<br/>HANDLE&nbsp;hFile&nbsp;;<br/>DWORD&nbsp;dwActBytes&nbsp;;<br/><br/>switch&nbsp;(message)&nbsp;<br/>{<br/>case&nbsp;WM_CREATE&nbsp;:</p><p>m_hwndMu&nbsp;=&nbsp;hwnd&nbsp;;<br/>break&nbsp;;</p><p>case&nbsp;WM_TIMER&nbsp;:</p><p>if&nbsp;((int)wParam&nbsp;==&nbsp;1000)<br/>{<br/>KillTimer&nbsp;(hwnd,&nbsp;(int)wParam)&nbsp;;&nbsp;&nbsp;//&nbsp;不知道他是什么&nbsp;但是必须&nbsp;Kill<br/>return&nbsp;0&nbsp;;<br/>}<br/>break&nbsp;;</p><p>case&nbsp;WM_ACTIVATE&nbsp;:&nbsp;&nbsp;&nbsp;//&nbsp;解决了Mu窗口不放弃焦点的问题<br/>wParam&nbsp;=&nbsp;1&nbsp;;<br/>break&nbsp;;</p><p>case&nbsp;WM_DESTROY&nbsp;:</p><p>//&nbsp;顺便把&nbsp;Mon&nbsp;结束掉&nbsp;<br/>TerminateProcess&nbsp;(m_lpProcessInfoMon&nbsp;-&gt;&nbsp;hProcess,&nbsp;0)&nbsp;; <br/><br/>////&nbsp;将&nbsp;m_lpsSend串写到磁盘&nbsp;&nbsp;他们是&nbsp;Send&nbsp;Recv&nbsp;包<br/>&nbsp; if&nbsp;(!m_lpsSend)&nbsp;break&nbsp;;<br/>hFile&nbsp;=&nbsp;CreateFile&nbsp;("e:\\Mu&nbsp;Msg.txt",&nbsp;GENERIC_WRITE,&nbsp;0,&nbsp;NULL,&nbsp;CREATE_ALWAYS,&nbsp;FILE_ATTRIBUTE_NORMAL,&nbsp;NULL)&nbsp;;<br/>WriteFile&nbsp;(hFile,&nbsp;m_lpsSend,&nbsp;m_strSendLen,&nbsp;&amp;dwActBytes,&nbsp;NULL)&nbsp;;<br/>CloseHandle&nbsp;(hFile)&nbsp;;<br/>break&nbsp;;</p><p>case&nbsp;0x2B11&nbsp;:&nbsp;&nbsp;&nbsp;//&nbsp;看Main.exe&nbsp;的代码&nbsp;好象有这个&nbsp;用户消息&nbsp;但是从没接收到过他<br/>MessageBox&nbsp;(NULL,&nbsp;"0x2B11&nbsp;Msg",&nbsp;"WndProc",&nbsp;0)&nbsp;; <br/>break&nbsp;;<br/>}</p><p>return&nbsp;&nbsp;CallWindowProc&nbsp;(m_wpMuOldProc,&nbsp;hwnd,&nbsp;message,&nbsp;wParam,&nbsp;lParam);&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;CreateWindowEx()<br/>EXPORT&nbsp;HWND&nbsp;WINAPI&nbsp;MyCreateWindowEx&nbsp;(DWORD&nbsp;dwExStyle,LPCTSTR&nbsp;lpClassName,&nbsp;LPCTSTR&nbsp;lpWindowName,DWORD&nbsp;dwStyle,<br/>&nbsp;&nbsp;int&nbsp;x,int&nbsp;y,int&nbsp;nWidth,int&nbsp;nHeight,<br/>&nbsp;&nbsp;HWND&nbsp;hWndParent,HMENU&nbsp;hMenu,HINSTANCE&nbsp;hInstance,LPVOID&nbsp;lpParam)&nbsp;<br/>{<br/>HWND&nbsp;hwnd&nbsp;=&nbsp;NULL&nbsp;;<br/>if&nbsp;(&nbsp;strcmp(lpClassName,&nbsp;"MU")&nbsp;==&nbsp;0)<br/>{<br/>hwnd&nbsp;=&nbsp;CreateWindowEx&nbsp;(/*dwExStyle*/0,<br/>lpClassName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;class&nbsp;name<br/>lpWindowName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;caption<br/>WS_OVERLAPPEDWINDOW&nbsp;&amp;&nbsp;(~WS_THICKFRAME&nbsp;)&nbsp;&amp;&nbsp;(~WS_MINIMIZEBOX)&nbsp;&amp;&nbsp;(~WS_MAXIMIZEBOX),&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;style<br/>0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;initial&nbsp;x&nbsp;position<br/>0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;initial&nbsp;y&nbsp;position<br/>640,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;initial&nbsp;x&nbsp;size<br/>480,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;initial&nbsp;y&nbsp;size<br/>hWndParent,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;parent&nbsp;window&nbsp;handle<br/>hMenu,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;menu&nbsp;handle<br/>hInstance,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;program&nbsp;instance&nbsp;handle<br/>lpParam)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;creation&nbsp;parameters<br/>//&nbsp;子类化&nbsp;MU&nbsp;窗口<br/>m_wpMuOldProc&nbsp;=&nbsp;(WNDPROC)SetWindowLong&nbsp;(hwnd,&nbsp;&nbsp;GWL_WNDPROC,&nbsp;(LONG)&nbsp;MuSubclassProc);&nbsp;<br/>}</p><p>else&nbsp;<br/>{<br/>hwnd&nbsp;=&nbsp;CreateWindowEx&nbsp;(dwExStyle,<br/>lpClassName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;class&nbsp;name<br/>lpWindowName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;caption<br/>dwStyle, &nbsp;&nbsp;//&nbsp;window&nbsp;style<br/>x, &nbsp;&nbsp;//&nbsp;initial&nbsp;x&nbsp;position<br/>y, &nbsp;&nbsp;//&nbsp;initial&nbsp;y&nbsp;position<br/>nWidth, &nbsp;&nbsp;//&nbsp;initial&nbsp;x&nbsp;size<br/>nHeight, &nbsp;&nbsp;//&nbsp;initial&nbsp;y&nbsp;size<br/>hWndParent,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;parent&nbsp;window&nbsp;handle<br/>hMenu,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;window&nbsp;menu&nbsp;handle<br/>hInstance,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;program&nbsp;instance&nbsp;handle<br/>lpParam)&nbsp;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;creation&nbsp;parameters<br/>}<br/>return&nbsp;hwnd&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;CreateProcess()<br/>EXPORT&nbsp;BOOL&nbsp;WINAPI&nbsp;MyCreateProcess&nbsp;(LPCTSTR&nbsp;lpApplicationName,&nbsp;LPTSTR&nbsp;lpCommandLine,&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpProcessAttributes,<br/>&nbsp;&nbsp;&nbsp;&nbsp;LPSECURITY_ATTRIBUTES&nbsp;lpThreadAttributes,&nbsp;BOOL&nbsp;bInheritHandles,&nbsp;DWORD&nbsp;dwCreationFlags,<br/>&nbsp;&nbsp;&nbsp;&nbsp;LPVOID&nbsp;lpEnvironment,&nbsp;LPCTSTR&nbsp;lpCurrentDirectory,&nbsp;LPSTARTUPINFO&nbsp;lpStartupInfo,<br/>&nbsp;&nbsp;&nbsp;&nbsp;LPPROCESS_INFORMATION&nbsp;lpProcessInformation)<br/>&nbsp;<br/>{ <br/>CreateProcess&nbsp;(lpApplicationName,&nbsp;lpCommandLine,&nbsp;lpProcessAttributes,<br/>&nbsp;&nbsp;&nbsp;lpThreadAttributes,&nbsp;bInheritHandles,&nbsp;<br/>&nbsp;&nbsp;&nbsp;dwCreationFlags&nbsp;|&nbsp;CREATE_SUSPENDED,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;挂起&nbsp;进程&nbsp;&nbsp;GameMon.des<br/>&nbsp;&nbsp;&nbsp;lpEnvironment,&nbsp;lpCurrentDirectory,&nbsp;<br/>&nbsp;&nbsp;&nbsp;lpStartupInfo,&nbsp;lpProcessInformation)&nbsp;;<br/>m_lpProcessInfoMon&nbsp;=&nbsp;lpProcessInformation&nbsp;;<br/><br/>return&nbsp;TRUE&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;SetTime()&nbsp;没必要&nbsp;HOOK</p><p>EXPORT&nbsp;UINT_PTR&nbsp;WINAPI&nbsp;&nbsp;MySetTimer&nbsp;(HWND&nbsp;hWnd,&nbsp;UINT_PTR&nbsp;nIDEvent,&nbsp;UINT&nbsp;uElapse,&nbsp;TIMERPROC&nbsp;lpTimerFunc)<br/>{</p><p>if&nbsp;(nIDEvent&nbsp;==&nbsp;1003)<br/>{<br/>MessageBox&nbsp;(NULL,&nbsp;m_szMuMsg,&nbsp;"mu",&nbsp;0);<br/>}</p><p>return&nbsp;(SetTimer&nbsp;(hWnd,&nbsp;nIDEvent,&nbsp;uElapse,&nbsp;lpTimerFunc))&nbsp;;<br/>}</p><p>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;send()</p><p>EXPORT&nbsp;int&nbsp;WINAPI&nbsp;MySend&nbsp;(SOCKET&nbsp;s,&nbsp;const&nbsp;char*&nbsp;buf,&nbsp;int&nbsp;len,&nbsp;int&nbsp;flags)<br/>{<br/>char&nbsp;szSendHex&nbsp;;<br/>int&nbsp;i&nbsp;=&nbsp;0&nbsp;;<br/>BYTE&nbsp;byte&nbsp;;<br/>BYTE&nbsp;*&nbsp;pByte&nbsp;=&nbsp;(BYTE*)buf&nbsp;;</p><p>for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0&nbsp;;&nbsp;j&nbsp;&lt;&nbsp;len&nbsp;;&nbsp;j++)<br/>{<br/>byte&nbsp;=&nbsp;*pByte&nbsp;&gt;&gt;&nbsp;4&nbsp;;<br/>if&nbsp;(byte&nbsp;&lt;&nbsp;10)&nbsp;byte&nbsp;+=&nbsp;48&nbsp;;<br/>else&nbsp;byte&nbsp;+=&nbsp;55&nbsp;;</p><p>szSendHex&nbsp;=&nbsp;byte&nbsp;;</p><p>byte&nbsp;=&nbsp;*pByte&nbsp;&amp;&nbsp;0x0F&nbsp;;<br/>if&nbsp;(byte&nbsp;&lt;&nbsp;10)&nbsp;byte&nbsp;+=&nbsp;48&nbsp;;<br/>else&nbsp;byte&nbsp;+=&nbsp;55&nbsp;;</p><p>szSendHex&nbsp;=&nbsp;byte&nbsp;;<br/>szSendHex&nbsp;=&nbsp;'&nbsp;'&nbsp;;<br/>pByte&nbsp;++&nbsp;;<br/>}<br/>szSendHex&nbsp;=&nbsp;0&nbsp;;</p><p>static&nbsp;int&nbsp;iNumSend&nbsp;=&nbsp;0&nbsp;;<br/>iNumSend&nbsp;++&nbsp;&nbsp;;<br/><br/>m_strSendLen&nbsp;+=&nbsp;sprintf&nbsp;(m_lpsSend&nbsp;+&nbsp;m_strSendLen,&nbsp;<br/>TEXT("%s&nbsp;&nbsp;%d&nbsp;PackLen&nbsp;:&nbsp;%d:&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%s\n"),&nbsp;"Send",&nbsp;iNumSend,&nbsp;len,&nbsp;szSendHex)&nbsp;;&nbsp;<br/><br/>return&nbsp;send&nbsp;(s,&nbsp;buf,&nbsp;len,&nbsp;flags)&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;recv&nbsp;()<br/>EXPORT&nbsp;int&nbsp;WINAPI&nbsp;MyRecv&nbsp;(SOCKET&nbsp;s,&nbsp;char*&nbsp;buf,&nbsp;int&nbsp;len,&nbsp;int&nbsp;flags)<br/>{</p><p>int&nbsp;iRetn&nbsp;=&nbsp;recv&nbsp;(s,&nbsp;buf,&nbsp;len,&nbsp;flags)&nbsp;;<br/>char&nbsp;szRecvHex&nbsp;;<br/>int&nbsp;i&nbsp;=&nbsp;0&nbsp;;<br/>BYTE&nbsp;byte&nbsp;;<br/>BYTE&nbsp;*&nbsp;pByte&nbsp;=&nbsp;(BYTE*)buf&nbsp;;</p><p>//&nbsp;Get&nbsp;revc&nbsp;data&nbsp;len&nbsp;<br/>int&nbsp;iPackLen&nbsp;=&nbsp;(int)pByte&nbsp;;<br/>if&nbsp;(&nbsp;(!&nbsp;iPackLen)&nbsp;||&nbsp;iPackLen&nbsp;==&nbsp;1&nbsp;)&nbsp;&nbsp;<br/>iPackLen&nbsp;=&nbsp;2&nbsp;;</p><p>for&nbsp;(int&nbsp;j&nbsp;=&nbsp;0&nbsp;;&nbsp;j&nbsp;&lt;&nbsp;iPackLen&nbsp;;&nbsp;j++)<br/>{<br/>byte&nbsp;=&nbsp;*pByte&nbsp;&gt;&gt;&nbsp;4&nbsp;;<br/>if&nbsp;(byte&nbsp;&lt;&nbsp;10)&nbsp;byte&nbsp;+=&nbsp;48&nbsp;;<br/>else&nbsp;byte&nbsp;+=&nbsp;55&nbsp;;</p><p>szRecvHex&nbsp;=&nbsp;byte&nbsp;;</p><p>byte&nbsp;=&nbsp;*pByte&nbsp;&amp;&nbsp;0x0F&nbsp;;<br/>if&nbsp;(byte&nbsp;&lt;&nbsp;10)&nbsp;byte&nbsp;+=&nbsp;48&nbsp;;<br/>else&nbsp;byte&nbsp;+=&nbsp;55&nbsp;;</p><p>szRecvHex&nbsp;=&nbsp;byte&nbsp;;<br/>szRecvHex&nbsp;=&nbsp;'&nbsp;'&nbsp;;<br/>pByte&nbsp;++&nbsp;;<br/>}<br/>szRecvHex&nbsp;=&nbsp;0&nbsp;;</p><p>static&nbsp;int&nbsp;iNumRecv&nbsp;=&nbsp;0&nbsp;;<br/>iNumRecv&nbsp;++&nbsp;&nbsp;;<br/><br/>m_strSendLen&nbsp;+=&nbsp;sprintf&nbsp;(m_lpsSend&nbsp;+&nbsp;m_strSendLen,&nbsp;<br/>TEXT("%s&nbsp;&nbsp;%d&nbsp;PackLen&nbsp;:&nbsp;%d&nbsp;&nbsp;iRetn&nbsp;:&nbsp;%d&nbsp;:&nbsp;\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;%s\n"),&nbsp;"Recv",&nbsp;iNumRecv,&nbsp;iPackLen,&nbsp;iRetn,&nbsp;szRecvHex)&nbsp;;&nbsp;</p><p><br/>return&nbsp;iRetn&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;TextOut()&nbsp;没必要&nbsp;HOOK</p><p>EXPORT&nbsp;BOOL&nbsp;WINAPI&nbsp;MyTextOut&nbsp;(HDC&nbsp;hdc,&nbsp;int&nbsp;nXStart,&nbsp;int&nbsp;nYStart,&nbsp;LPCTSTR&nbsp;lpString,&nbsp;int&nbsp;cbString)<br/>{<br/>if&nbsp;(*lpString&nbsp;==&nbsp;'G')&nbsp;<br/>{<br/>MessageBox&nbsp;(NULL,&nbsp;m_szMuMsg,&nbsp;"GameGaurd&nbsp;?",&nbsp;0)&nbsp;;<br/>}<br/>return&nbsp;TextOut&nbsp;(hdc,&nbsp;nXStart,&nbsp;nYStart,&nbsp;lpString,&nbsp;cbString)&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp; ChangeDisplay()&nbsp;直接返回&nbsp;不出现黑屏了<br/>EXPORT&nbsp;LONG&nbsp;WINAPI&nbsp;MyChangeDisplay&nbsp;(LPDEVMODE&nbsp;lpDevMode,&nbsp;DWORD&nbsp;dwflags)<br/>{<br/>return&nbsp;0&nbsp;;<br/>}<br/>///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////</p><p><br/>EXPORT&nbsp;void&nbsp;SetMuHandle(HANDLE&nbsp;hProcess,&nbsp;HANDLE&nbsp;hThread)<br/>{<br/>m_hMuProcess&nbsp;=&nbsp;hProcess&nbsp;;<br/>m_hMuThread&nbsp;=&nbsp;hThread&nbsp;;<br/>}</p><p>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;</p><p></p><p><br/>//&nbsp;MuDll.h&nbsp;文件</p><p>#pragma&nbsp;once<br/>#include&nbsp;&lt;Winsock2.h&gt;<br/>#pragma&nbsp;comment(lib,&nbsp;"Ws2_32")<br/>#include&nbsp;&lt;windows.h&gt;<br/>#include&nbsp;&lt;stdio.h&gt;<br/>#include&nbsp;&lt;process.h&gt;</p><p>#include&nbsp;&lt;Dbghelp.h&gt;<br/>#pragma&nbsp;comment(lib,&nbsp;"Dbghelp")</p><p>#include&nbsp;&lt;Crtdbg.h&gt;&nbsp;</p><p>#ifdef&nbsp;__cplusplus<br/>#define&nbsp;EXPORT&nbsp;extern&nbsp;"C"&nbsp;__declspec&nbsp;(dllexport)<br/>#else<br/>#define&nbsp;EXPORT&nbsp;__declspec&nbsp;(dllexport)<br/>#endif</p><p>#define&nbsp;NP_ADDRESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x005A2470<br/>#define&nbsp;NP_ADDRESS_V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x1824448D<br/>#define&nbsp;NP_ADDRESS_END_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x005A2498<br/>#define&nbsp;GREAYE_PROCESS_A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0C6E0374<br/>#define&nbsp;GREAYE_PROCESS_V&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x6AEC8B55</p><p><br/>LRESULT&nbsp;CALLBACK&nbsp;MuSubclassProc&nbsp;(HWND&nbsp;hwnd,&nbsp;UINT&nbsp;message,&nbsp;WPARAM&nbsp;wParam,&nbsp;LPARAM&nbsp;lParam)&nbsp;;</p><p>//&nbsp;读写&nbsp;MU.exe进程空间&nbsp;代码&nbsp;的&nbsp;线程<br/>unsigned&nbsp;__stdcall&nbsp;ThreadReadWrite&nbsp;(PVOID&nbsp;pvoid)&nbsp;;</p><p>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;下面函数导出&nbsp;给&nbsp;InsertDll.exe&nbsp;使用<br/>EXPORT&nbsp;void&nbsp;&nbsp;SetMuHandle&nbsp;(HANDLE&nbsp;hProcess,&nbsp;HANDLE&nbsp;&nbsp;hThread)&nbsp;;</p><p>&nbsp;&nbsp;</p><p>//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////<br/>//&nbsp;下面定义&nbsp;HOOK&nbsp;API&nbsp;都以&nbsp;My&nbsp;开头<br/>//&nbsp;Hook&nbsp;CreateWindowEx&nbsp;Func<br/>EXPORT&nbsp;HWND&nbsp;WINAPI&nbsp;MyCreateWindowEx&nbsp;(<br/>DWORD&nbsp;dwExStyle,<br/>LPCTSTR&nbsp;lpClassName,<br/>LPCTSTR&nbsp;lpWindowName,<br/>DWORD&nbsp;dwStyle,<br/>int&nbsp;x,<br/>int&nbsp;y,<br/>int&nbsp;nWidth,<br/>int&nbsp;nHeight,<br/>HWND&nbsp;hWndParent,<br/>HMENU&nbsp;hMenu,<br/>HINSTANCE&nbsp;hInstance,<br/>LPVOID&nbsp;lpParam)&nbsp;;<br/>EXPORT&nbsp;LONG&nbsp;WINAPI&nbsp;MyChangeDisplay&nbsp;(LPDEVMODE&nbsp;lpDevMode,&nbsp;DWORD&nbsp;dwflags)&nbsp;;&nbsp;</p><p>EXPORT&nbsp;BOOL&nbsp;WINAPI&nbsp;MyCreateProcess(<br/>LPCTSTR&nbsp;lpApplicationName,<br/>LPTSTR&nbsp;lpCommandLine,<br/>LPSECURITY_ATTRIBUTES&nbsp;lpProcessAttributes,<br/>LPSECURITY_ATTRIBUTES&nbsp;lpThreadAttributes,<br/>BOOL&nbsp;bInheritHandles,<br/>DWORD&nbsp;dwCreationFlags,<br/>LPVOID&nbsp;lpEnvironment,<br/>LPCTSTR&nbsp;lpCurrentDirectory,<br/>LPSTARTUPINFO&nbsp;lpStartupInfo,<br/>LPPROCESS_INFORMATION&nbsp;lpProcessInformation<br/>);<br/>EXPORT&nbsp;UINT_PTR&nbsp;WINAPI&nbsp;&nbsp;MySetTimer&nbsp;(HWND&nbsp;hWnd,&nbsp;UINT_PTR&nbsp;nIDEvent,&nbsp;UINT&nbsp;uElapse,&nbsp;TIMERPROC&nbsp;lpTimerFunc); <br/>EXPORT&nbsp;DWORD&nbsp;WINAPI&nbsp;MyWaitForSingleObject&nbsp;(HANDLE&nbsp;hHandle,&nbsp;DWORD&nbsp;dwMilliseconds);<br/>EXPORT&nbsp;BOOL&nbsp;WINAPI&nbsp;&nbsp;MyTextOut&nbsp;(HDC&nbsp;hdc,&nbsp;int&nbsp;nXStart,&nbsp;int&nbsp;nYStart,&nbsp;LPCTSTR&nbsp;lpString,&nbsp;int&nbsp;cbString);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>EXPORT&nbsp;int&nbsp;WINAPI&nbsp;MySend&nbsp;(SOCKET&nbsp;s,&nbsp;const&nbsp;char*&nbsp;buf,&nbsp;int&nbsp;len,&nbsp;int&nbsp;flags);<br/>EXPORT&nbsp;int&nbsp;WINAPI&nbsp;MyRecv(SOCKET&nbsp;s,&nbsp;char*&nbsp;buf,&nbsp;int&nbsp;len,&nbsp;int&nbsp;flags);</p>
页: [1]
查看完整版本: 实现 MU 窗口化 过程