<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/intercept-and-capture-sys-function-html/</link>
<title><![CDATA[截获系统函数]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[编程杂谈]]></category>
<pubDate>Wed, 27 Oct 2010 02:54:34 +0000</pubDate> 
<guid>https://www.heckjj.com/intercept-and-capture-sys-function-html/</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 微软雅黑;">系统函数重定位的例子,从&lt;&lt;计算机世界日报&gt;&gt;上Copy出来的.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//源程序 relocate.c<br/>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;WINDOWS.H&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;dos.h&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;BOOL WINAPI MyExtTextOut(HDC hDC, int x, int y, UINT nIn<br/>t1, const RECTFAR*p Rect,LPCSTR lpStr, UINT nInt2, int FAR* <br/>lpInt);<br/>&nbsp;&nbsp;&nbsp;&nbsp;WORD FAR PASCAL AllocCStoDSAlias(WORD code_sel);<br/>&nbsp;&nbsp;&nbsp;&nbsp;typedef struct tagFUNC<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FARPROC lpFarProcReplace;&nbsp;&nbsp;//替代函数地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;FARPROC lpFarProcWindows;&nbsp;&nbsp;//Windows函数地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;&nbsp;&nbsp;bOld;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存原函数第一字节<br/>&nbsp;&nbsp;&nbsp;&nbsp;LONG&nbsp;&nbsp;&nbsp;&nbsp;lOld;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存原函数接后的四字节长值<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;FUNC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;FUNC&nbsp;&nbsp;Func=&#123;MyExtTextOut,ExtTextOut&#125;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//Windows主函数<br/>&nbsp;&nbsp;&nbsp;&nbsp;int PASCAL WinMain(HINSTANCE hInstance,HINSTANCE hPrevIn<br/>stance,LPSTR lpCmdi ne,int nCmdShow)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HANDLE hMemCode;&nbsp;&nbsp;//代码段句柄<br/>&nbsp;&nbsp;&nbsp;&nbsp;WORD hMemData;&nbsp;&nbsp;&nbsp;&nbsp;//相同基址的可写数据段别名<br/>&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp; wOffset;&nbsp;&nbsp; //函数偏移</span> <span style="font-family: 微软雅黑;"><br/>&nbsp;&nbsp;&nbsp;&nbsp;LPSTR&nbsp;&nbsp;lpStr;<br/>&nbsp;&nbsp;&nbsp;&nbsp;LPLONG lpLong;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp; lpNotice[96];<br/>&nbsp;&nbsp;&nbsp;&nbsp;hMemCode=HIWORD((LONG) Func.lpFarProcWindows );<br/>&nbsp;&nbsp;&nbsp;&nbsp;wOffset=LOWORD((LONG) Func.lpFarProcWindows );<br/>&nbsp;&nbsp;&nbsp;&nbsp;wsprintf(lpNotice,&quot;函数所在模块句柄 0x%4xH,偏移 0x%4xH&quot;,<br/>hMemCode,wOffset);<br/>&nbsp;&nbsp;&nbsp;&nbsp; MessageBox(NULL,lpNotice,&quot;提示&quot;,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp; //取与代码段有相同基址的可写数据段别名<br/>&nbsp;&nbsp;&nbsp;&nbsp; hMemData=AllocCStoDSAlias(hMemCode);<br/>&nbsp;&nbsp;&nbsp;&nbsp; lpStr=GlobalLock(hMemData);<br/>&nbsp;&nbsp;&nbsp;&nbsp; lpLong=(lpStr+wOffset+1 );<br/>&nbsp;&nbsp;&nbsp;&nbsp; //保存原函数要替换的头几个字节<br/>&nbsp;&nbsp;&nbsp;&nbsp;Func.bOld=*(lpStr+wOffset);<br/>&nbsp;&nbsp;&nbsp;&nbsp;Func.lOld=*lpLong;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*(lpStr+wOffset)=0xEA;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*lpLong=Func.lpFarProcReplace;<br/>&nbsp;&nbsp;&nbsp;&nbsp;GlobalUnlock(hMemData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,&quot;改为自己的函数&quot;,&quot;提示&quot;,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp;//将保留的内容改回来<br/>&nbsp;&nbsp;&nbsp;&nbsp;hMemData=AllocCStoDSAlias(hMemCode);<br/>&nbsp;&nbsp;&nbsp;&nbsp;lpStr=GlobalLock(hMemData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;lpLong=(lpStr+wOffset+1 );<br/>&nbsp;&nbsp;&nbsp;&nbsp;*(lpStr+wOffset)=Func.bOld;<br/>&nbsp;&nbsp;&nbsp;&nbsp;*lpLong=Func.lOld;<br/>&nbsp;&nbsp;&nbsp;&nbsp;GlobalUnlock(hMemData);<br/>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,&quot;改回原Windows函数&quot;,&quot;提示&quot;,MB_OK);<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//自己的替代函数<br/>&nbsp;&nbsp;&nbsp;&nbsp;BOOL WINAPI MyExtTextOut(HDC hDC, int x, int y, UINT nIn<br/>t1, const RECT FAR lpRect, LPCSTR lpStr, UINT nInt2, int FAR<br/>* lpInt)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;BYTE NameDot[96]=&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x09, 0x00, 0xfd, 0x08, 0x09, 0x08, 0x09, 0x10, 0x09, 0x<br/>20,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x79, 0x40, 0x41, 0x04, 0x47, 0xfe, 0x41, 0x40, 0x79, 0x<br/>40,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x09, 0x20, 0x09, 0x20, 0x09, 0x10, 0x09, 0x4e, 0x51, 0x<br/>84,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x21, 0x00, 0x02, 0x00, 0x01, 0x04, 0xff, 0xfe, 0x00, 0x<br/>00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x1f, 0xf0, 0x10, 0x10, 0x10, 0x10, 0x1f, 0xf0, 0x00, 0x<br/>00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x7f, 0xfc, 0x40, 0x04, 0x4f, 0xe4, 0x48, 0x24, 0x48, 0x<br/>24,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x4f, 0xe4, 0x40, 0x0c, 0x10, 0x80, 0x10, 0xfc, 0x10, 0x<br/>88,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x11, 0x50, 0x56, 0x20, 0x54, 0xd8, 0x57, 0x06, 0x54, 0x<br/>20,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x55, 0xfc, 0x54, 0x20, 0x55, 0xfc, 0x5c, 0x20, 0x67, 0x<br/>fe,<br/>&nbsp;&nbsp;&nbsp;&nbsp;0x00, 0x20, 0x00, 0x20, 0x00, 0x20<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HBITMAP hBitmap,hOldBitmap;<br/>&nbsp;&nbsp;&nbsp;&nbsp;HDC&nbsp;&nbsp;&nbsp;&nbsp; hMemDC;<br/>&nbsp;&nbsp;&nbsp;&nbsp;BYTE far *lpDot;<br/>&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp; i;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for ( i=0;i&lt;3;i++ )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;lpDot=(LPSTR)NameDot+i*32;<br/>&nbsp;&nbsp;&nbsp;&nbsp;hMemDC=CreateCompatibleDC(hDC);<br/>&nbsp;&nbsp;&nbsp;&nbsp;hBitmap=CreateBitmap(16,16,1,1,lpDot);<br/>&nbsp;&nbsp;&nbsp;&nbsp;SetBitmapBits(hBitmap,32L,lpDot);<br/>&nbsp;&nbsp;&nbsp;&nbsp;hOldBitmap=SelectObject(hMemDC,hBitmap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;BitBlt(hDC,x+i*16,y,16,16,hMemDC,0,0,SRCCOPY);<br/>&nbsp;&nbsp;&nbsp;&nbsp;DeleteDC(hMemDC);<br/>&nbsp;&nbsp;&nbsp;&nbsp;DeleteObject(hBitmap);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return TRUE;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;//模块定义文件&nbsp;&nbsp;relocate.def<br/>&nbsp;&nbsp;&nbsp;&nbsp;NAME&nbsp;&nbsp;&nbsp;&nbsp;RELOCATE<br/>&nbsp;&nbsp;&nbsp;&nbsp;EXETYPE&nbsp;&nbsp; WINDOWS<br/>&nbsp;&nbsp;&nbsp;&nbsp;CODE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRELOAD MOVEABLE DISCARDABLE<br/>&nbsp;&nbsp;&nbsp;&nbsp;DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PRELOAD MOVEABLE MULTIPLE<br/>&nbsp;&nbsp;&nbsp;&nbsp;HEAPSIZE&nbsp;&nbsp;1024<br/>&nbsp;&nbsp;&nbsp;&nbsp;EXPORTS</span><br/>Tags - <a href="https://www.heckjj.com/tags/%25E6%2588%25AA%25E8%258E%25B7/" rel="tag">截获</a> , <a href="https://www.heckjj.com/tags/%25E7%25B3%25BB%25E7%25BB%259F%25E5%2587%25BD%25E6%2595%25B0/" rel="tag">系统函数</a>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/intercept-and-capture-sys-function-html/#blogcomment</link>
<title><![CDATA[[评论] 截获系统函数]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/intercept-and-capture-sys-function-html/#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>