150求翻译:保护sendmessage函数 ( 积分: 150 )

  • 主题发起人 主题发起人 axfv
  • 开始时间 开始时间
A

axfv

Unregistered / Unconfirmed
GUEST, unregistred user!
以下代码转自:ALGO&nbsp;RESEARCH&nbsp;CENTRE<br>感觉有点不劳而获,先SORRY了,我的C++停留在概念水平。。有几处实在看不明白。<br>//---------------------------------------------------------------------------&nbsp;<br><br>#ifndef&nbsp;ApiHelperH&nbsp;<br>#define&nbsp;ApiHelperH&nbsp;<br><br>#include&nbsp;&lt;windows.h&gt;&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>#define&nbsp;&nbsp;&nbsp;OS2000_F1&nbsp;&nbsp;&nbsp;0x55&nbsp;<br>#define&nbsp;OS2000_F2&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br>#define&nbsp;OS2000_F3&nbsp;&nbsp;&nbsp;0xec&nbsp;<br>#define&nbsp;OS2000_F4&nbsp;&nbsp;&nbsp;0x56&nbsp;<br>#define&nbsp;OS2000_F5&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br><br>#define&nbsp;&nbsp;&nbsp;OS2000_2_F1&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br>#define&nbsp;OS2000_2_F2&nbsp;&nbsp;&nbsp;0xc0&nbsp;<br>#define&nbsp;OS2000_2_F3&nbsp;&nbsp;&nbsp;0x55&nbsp;<br>#define&nbsp;OS2000_2_F4&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br>#define&nbsp;OS2000_2_F5&nbsp;&nbsp;&nbsp;0xec&nbsp;<br><br>#define&nbsp;OS98_F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xe8&nbsp;<br>#define&nbsp;OS98_F2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x15&nbsp;<br>#define&nbsp;OS98_F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xf6&nbsp;<br>#define&nbsp;OS98_F4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xff&nbsp;<br>#define&nbsp;OS98_F5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xff&nbsp;<br><br>#define&nbsp;OSME_F1&nbsp;<br>#define&nbsp;OSME_F2&nbsp;<br>#define&nbsp;OSME_F3&nbsp;<br>#define&nbsp;OSME_F4&nbsp;<br>#define&nbsp;OSME_F5&nbsp;<br><br>#define&nbsp;OSXP_F1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br>#define&nbsp;OSXP_F2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xff&nbsp;<br>#define&nbsp;OSXP_F3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x55&nbsp;<br>#define&nbsp;OSXP_F4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x8b&nbsp;<br>#define&nbsp;OSXP_F5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0xec&nbsp;<br><br>typedef&nbsp;BOOL&nbsp;(WINAPI&nbsp;*&nbsp;SendMessageProc&nbsp;)&nbsp;(&nbsp;&nbsp;HWND&nbsp;hWnd,&nbsp;UINT&nbsp;value,&nbsp;WPARAM&nbsp;wp,&nbsp;LPARAM&nbsp;lp&nbsp;);&nbsp;<br><br>extern&nbsp;&nbsp;SendMessageProc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_MySendMessage;&nbsp;<br>bool&nbsp;ProtectFunction();&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>#endif&nbsp;<br>&nbsp;<br>代码:&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br><br>#pragma&nbsp;hdrstop&nbsp;<br><br>#include&nbsp;&quot;ApiHelper.h&quot;&nbsp;<br>#include&nbsp;&quot;Common.h&quot;&nbsp;<br>#include&nbsp;&quot;Log.h&quot;&nbsp;<br><br>extern&nbsp;&nbsp;cLog&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;g_pLog;&nbsp;<br><br>SendMessageProc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_MySendMessage;&nbsp;<br>SendMessageProc&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OldSendMessageFunc;&nbsp;<br>BYTE&nbsp;&nbsp;&nbsp;&nbsp;fnFuncEntry[255];&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;旧函数入口&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>bool&nbsp;Func_2k()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;OldSendMessageFunc;&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp1&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;_MySendMessage;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;fnFuncEntry[7]&nbsp;=&nbsp;0xe9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;jump&nbsp;指令&nbsp;<br>&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;p&nbsp;=&nbsp;(int*)(fnFuncEntry+8);&nbsp;<br>&nbsp;&nbsp;&nbsp;*p&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;pp&nbsp;-&nbsp;pp1&nbsp;-&nbsp;5;&nbsp;<br><br>#ifdef&nbsp;LOG&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;g_pLog-&gt;AddText(&nbsp;&quot;//&nbsp;Protect&nbsp;function&nbsp;success....(Window2000)!&quot;&nbsp;);&nbsp;<br>#endif&nbsp;<br><br>&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;true;&nbsp;<br>}&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>bool&nbsp;Func_2k_2()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;OldSendMessageFunc;&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp1&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;_MySendMessage;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;fnFuncEntry[9]&nbsp;=&nbsp;0xe9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;jump&nbsp;指令&nbsp;<br>&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;p&nbsp;=&nbsp;(int*)(fnFuncEntry+10);&nbsp;<br>&nbsp;&nbsp;&nbsp;*p&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;pp&nbsp;-&nbsp;pp1&nbsp;-&nbsp;5;&nbsp;<br><br>#ifdef&nbsp;LOG&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;g_pLog-&gt;AddText(&nbsp;&quot;//&nbsp;Protect&nbsp;function&nbsp;success....(Window2000&nbsp;V20050603)!&quot;&nbsp;);&nbsp;<br>#endif&nbsp;<br><br>&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;true;&nbsp;<br>}&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>bool&nbsp;Func_xp()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;OldSendMessageFunc;&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp1&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;_MySendMessage;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;fnFuncEntry[6]&nbsp;=&nbsp;0xe9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;jump&nbsp;指令&nbsp;<br>&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;p&nbsp;=&nbsp;(int*)(fnFuncEntry+7);&nbsp;<br>&nbsp;&nbsp;&nbsp;*p&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;pp&nbsp;-&nbsp;pp1&nbsp;-&nbsp;5;&nbsp;<br><br>#ifdef&nbsp;LOG&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;g_pLog-&gt;AddText(&nbsp;&quot;//&nbsp;Protect&nbsp;function&nbsp;success....(WindowsXP)!&quot;&nbsp;);&nbsp;<br>#endif&nbsp;<br><br>&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;true;&nbsp;<br>}&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>bool&nbsp;Func_98()&nbsp;<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;OldSendMessageFunc;&nbsp;<br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;pp1&nbsp;&nbsp;&nbsp;=&nbsp;(DWORD)&nbsp;_MySendMessage;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;int&nbsp;*&nbsp;p&nbsp;=&nbsp;(int*)(fnFuncEntry&nbsp;+&nbsp;1&nbsp;);&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;重新计算出call的位置&nbsp;<br>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;offset&nbsp;=&nbsp;(DWORD)pp&nbsp;+&nbsp;*p&nbsp;+&nbsp;5;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;jj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;offset&nbsp;-&nbsp;pp1&nbsp;-&nbsp;5;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;*p&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;jj;&nbsp;<br>&nbsp;&nbsp;&nbsp;offset&nbsp;=&nbsp;(DWORD)pp1&nbsp;+&nbsp;*p&nbsp;+&nbsp;5;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;fnFuncEntry[5]&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;0xe9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;将后的面的指令改为一个jump&nbsp;<br>&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;(int*)&nbsp;(fnFuncEntry&nbsp;+&nbsp;6);&nbsp;<br>&nbsp;&nbsp;&nbsp;*p&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;pp&nbsp;-&nbsp;pp1&nbsp;-&nbsp;5;&nbsp;<br><br>#ifdef&nbsp;LOG&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;g_pLog-&gt;AddText(&nbsp;&quot;//&nbsp;Protect&nbsp;function&nbsp;success....(Windows98)!&quot;&nbsp;);&nbsp;<br>#endif&nbsp;<br><br>&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;true;&nbsp;<br>}&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br>bool&nbsp;ProtectFunction(&nbsp;)&nbsp;<br>{&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;HMODULE&nbsp;hInst&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;LoadLibrary(&nbsp;&quot;User32.dll&quot;&nbsp;);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;OldSendMessageFunc&nbsp;=&nbsp;&nbsp;&nbsp;(&nbsp;SendMessageProc&nbsp;)&nbsp;GetProcAddress(&nbsp;hInst,&nbsp;&quot;SendMessageA&quot;&nbsp;);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;OldSendMessageFunc&nbsp;==&nbsp;NULL&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;&quot;Protect&nbsp;Win32&nbsp;function&nbsp;failed.&quot;,&nbsp;&quot;Warning&quot;,&nbsp;MB_OK&nbsp;);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;false;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;memcpy(&nbsp;fnFuncEntry,&nbsp;(BYTE*)OldSendMessageFunc,&nbsp;50&nbsp;);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;fnFuncEntry[0]&nbsp;==&nbsp;0xE9&nbsp;)&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;发现已经修改过的指令&nbsp;<br>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;&quot;Protect&nbsp;Win32&nbsp;function&nbsp;failed.(pls&nbsp;reset&nbsp;lineage&nbsp;client)&quot;,&nbsp;&quot;Warning&quot;,&nbsp;MB_OK&nbsp;);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;false;&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br><br><br>&nbsp;&nbsp;&nbsp;DWORD&nbsp;dwAddress&nbsp;=&nbsp;reinterpret_cast&lt;DWORD&gt;(fnFuncEntry);&nbsp;<br>&nbsp;&nbsp;&nbsp;_MySendMessage&nbsp;=&nbsp;(SendMessageProc)dwAddress;&nbsp;<br><br>&nbsp;&nbsp;&nbsp;//&nbsp;-----------------&nbsp;2000&nbsp;判断&nbsp;<br>&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(fnFuncEntry[0]&nbsp;==&nbsp;OS2000_F1)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[1]&nbsp;==&nbsp;OS2000_F2)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[2]&nbsp;==&nbsp;OS2000_F3)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[3]&nbsp;==&nbsp;OS2000_F4)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[4]&nbsp;==&nbsp;OS2000_F5)&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;Func_2k();&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;//&nbsp;-----------------&nbsp;2000&nbsp;判断&nbsp;v2&nbsp;<br>&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(fnFuncEntry[0]&nbsp;==&nbsp;OS2000_2_F1)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[1]&nbsp;==&nbsp;OS2000_2_F2)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[2]&nbsp;==&nbsp;OS2000_2_F3)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[3]&nbsp;==&nbsp;OS2000_2_F4)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[4]&nbsp;==&nbsp;OS2000_2_F5)&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;Func_2k_2();&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;//&nbsp;-----------------&nbsp;98&nbsp;判断&nbsp;<br>&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(fnFuncEntry[0]&nbsp;==&nbsp;OS98_F1)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[1]&nbsp;==&nbsp;OS98_F2)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[2]&nbsp;==&nbsp;OS98_F3)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[3]&nbsp;==&nbsp;OS98_F4)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[4]&nbsp;==&nbsp;OS98_F5)&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;Func_98();&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;//&nbsp;-----------------&nbsp;xp&nbsp;判断&nbsp;<br>&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;(fnFuncEntry[0]&nbsp;==&nbsp;OSXP_F1)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[1]&nbsp;==&nbsp;OSXP_F2)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[2]&nbsp;==&nbsp;OSXP_F3)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[3]&nbsp;==&nbsp;OSXP_F4)&nbsp;&amp;&amp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(fnFuncEntry[4]&nbsp;==&nbsp;OSXP_F5)&nbsp;)&nbsp;<br>&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;&nbsp;Func_xp();&nbsp;<br>&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;&quot;Your's&nbsp;os&nbsp;unprotected&nbsp;win32&nbsp;api&nbsp;function.&quot;,&nbsp;&quot;Warning&quot;,&nbsp;MB_OK&nbsp;);&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;&nbsp;true;&nbsp;<br>}&nbsp;<br><br>//---------------------------------------------------------------------------&nbsp;<br><br>#pragma&nbsp;package(smart_init)
 
有哪位大侠能翻译成delphi版的?
 
后退
顶部