<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>中文 &#187; lijie45655</title>
	<atom:link href="http://software.intel.com/zh-cn/blogs/author/lijie45655/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/zh-cn/blogs</link>
	<description></description>
	<lastBuildDate>Sat, 26 May 2012 06:34:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>游戏远程代码注入和动态连接库的使用</title>
		<link>http://software.intel.com/zh-cn/blogs/2011/05/31/400007635/</link>
		<comments>http://software.intel.com/zh-cn/blogs/2011/05/31/400007635/#comments</comments>
		<pubDate>Tue, 31 May 2011 04:54:52 +0000</pubDate>
		<dc:creator>lijie45655</dc:creator>
				<category><![CDATA[博客征文专栏]]></category>
		<category><![CDATA[并行计算]]></category>
		<category><![CDATA[游戏]]></category>

		<guid isPermaLink="false">http://software.intel.com/zh-cn/blogs/2011/05/31/400007635/</guid>
		<description><![CDATA[  前提是已经用汇编语言对远程基址进行了成功的捕获。 在VC中，读取远程基址比较常用的方法有几种：可以采用hook钩子函数，也可采用windows API 远程进程函数对内存进行读取，然后获得远程进程在本机中的数据，并进行相关代码的注入，获取更高的执行效率。 比较常见的API函数： FindWindow（）；//查找当前游戏运行窗口， GetWindowThreadProcessID();//得到游戏句柄 OpenProcess（）；//获得游戏进程的访问权限 ReadProcessMemory（）；//读写内存空间，这里包含了游戏改变数值的基址，注入函数的函数名 CreateRemoteThread（）；//创建远程线程，注入代码 动态链接库的创建和调用 1创建动态链接库； 2 添加函数代码；3 在def文件中做一个套出的处理；4 运行发布版本，win32 release;5 创建MFC程序，将动态链接库和函数库文件套入MFC程序文件夹中，并且设置文件寻找路径link下写上文件名；6调用 先声明 -declspec(dllimport) int 函数名 （参数），或者#pragma comment（lib，“mydll.lib”） 2 注入游戏中:以键盘为例: 1 键盘回调函数 KeyboarProc;SetWindowsHook（创建键盘钩子函数，使用这个函数的时候，通过监视键盘动作，自动的调用回调函数。将游戏代码注入到游戏中去，完成所需操作。 //安装线程钩子 HHOOK SetWindowsHookEx( int idHook,//回调函数的类型 HOOKPROC lpfn, //钩子回调函数 ,键盘回调函数 HINSTANCE hMod, DWORD dwThreadId //游戏线程的ID ); 相应的回调函数也是不同的，如：callWndProc CBTProc ，KeyboardProc MouseProc 有按钮按下回调函数，键盘回调函数，鼠标回调函数。 由以上可以看出，要将代码注入，需要安装钩子函数产生相应的钩子函数，通过钩子函数产生回调函数，回调函数里写上注入代码。同时回调函数，可以考虑写入动态连接库中 LRESULT CallNextHookEx( HHOOK hhk, [...]]]></description>
			<content:encoded><![CDATA[<p> </p>
<p>前提是已经用汇编语言对远程基址进行了成功的捕获。</p>
<p>在VC中，读取远程基址比较常用的方法有几种：可以采用hook钩子函数，也可采用windows API 远程进程函数对内存进行读取，然后获得远程进程在本机中的数据，并进行相关代码的注入，获取更高的执行效率。</p>
<p>比较常见的API函数：</p>
<p>FindWindow（）；//查找当前游戏运行窗口，</p>
<p>GetWindowThreadProcessID();//得到游戏句柄</p>
<p>OpenProcess（）；//获得游戏进程的访问权限</p>
<p>ReadProcessMemory（）；//读写内存空间，这里包含了游戏改变数值的基址，注入函数的函数名</p>
<p>CreateRemoteThread（）；//创建远程线程，注入代码</p>
<p>动态链接库的创建和调用</p>
<p>1创建动态链接库； 2 添加函数代码；3 在def文件中做一个套出的处理；4 运行发布版本，win32 release;5 创建MFC程序，将动态链接库和函数库文件套入MFC程序文件夹中，并且设置文件寻找路径link下写上文件名；6调用 先声明 -declspec(dllimport) int 函数名 （参数），或者#pragma comment（lib，“mydll.lib”）</p>
<p>2 注入游戏中:以键盘为例:</p>
<p>1 键盘回调函数 KeyboarProc;SetWindowsHook（创建键盘钩子函数，使用这个函数的时候，通过监视键盘动作，自动的调用回调函数。将游戏代码注入到游戏中去，完成所需操作。</p>
<p>//安装线程钩子</p>
<p>HHOOK SetWindowsHookEx(</p>
<p>int idHook,//回调函数的类型<br />
HOOKPROC lpfn, //钩子回调函数 ,键盘回调函数<br />
HINSTANCE hMod,<br />
DWORD dwThreadId //游戏线程的ID<br />
);<br />
相应的回调函数也是不同的，如：callWndProc CBTProc ，KeyboardProc MouseProc 有按钮按下回调函数，键盘回调函数，鼠标回调函数。</p>
<p>由以上可以看出，要将代码注入，需要安装钩子函数产生相应的钩子函数，通过钩子函数产生回调函数，回调函数里写上注入代码。同时回调函数，可以考虑写入动态连接库中</p>
<p>LRESULT CallNextHookEx(</p>
<p>HHOOK hhk,<br />
int nCode,<br />
WPARAM wParam,<br />
LPARAM lParam<br />
);<br />
LRESULT CALLBACK KeyboardProc(</p>
<p>int code,<br />
WPARAM wParam,<br />
LPARAM lParam<br />
);</p>
<p>安装游戏函数：</p>
<p>创建游戏程序：加入以上动态链接库，当在游戏界面上按下键盘时，打开任务管理器，进程里可以发现游戏里注入了我们自己写的动态链接库。</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/zh-cn/blogs/2011/05/31/400007635/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

