<?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/"
	>

<channel>
	<title>mengxp杂谈</title>
	<atom:link href="http://www.deadc0de.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.deadc0de.com</link>
	<description>a piece world of win32asm</description>
	<pubDate>Sat, 26 Jun 2010 14:54:38 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>关于完全识别4G内存</title>
		<link>http://www.deadc0de.com/archives/more-about-4gb.html</link>
		<comments>http://www.deadc0de.com/archives/more-about-4gb.html#comments</comments>
		<pubDate>Thu, 24 Jun 2010 03:52:45 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=97</guid>
		<description><![CDATA[对于windows xp 32bit版本
给内核文件ntkrnlpa.exe打补丁，就算完全识别4G内存系统也会无法正常工作。
因为对于32bit版本winxp，不但ntkrnlpa.exe有问题，他的hal.dll文件有问题。
是阉割版本…它永远假设设备是32Bit DMA。
还有。完全识别4G内存的关键不在于是32位操作系统还是64位操作系统。
因为32位操作系统开启PAE可以寻址64GB物理内存。xp不支持只能说微软tmd太孙子了阉割了hal.dll
完全识别4G内存的关键在于你的芯片组是否支持memory remap技术，假设你使用915芯片组
这个芯片组不支持memory remap技术。然后你插了4g内存，又安装了64位的winxp
那么你的可用内存仍然不足4G！大概在3G~3.25G之间！！
大多数人认为只要安装了64位操作系统就能完全识别4G内存，这是一个错误的认识。
关键其实不在64位操作系统，而在于memory remap这项技术。

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.deadc0de.com/wp-content/uploads/2010/06/91564xp.png"></a><a href="http://www.deadc0de.com/wp-content/uploads/2010/06/91564xp.png"></a>对于windows xp 32bit版本<br />
给内核文件ntkrnlpa.exe打补丁，就算完全识别4G内存系统也会无法正常工作。<br />
因为对于32bit版本winxp，不但ntkrnlpa.exe有问题，他的hal.dll文件有问题。<br />
是阉割版本…它永远假设设备是32Bit DMA。</p>
<p>还有。完全识别4G内存的关键不在于是32位操作系统还是64位操作系统。<br />
因为32位操作系统开启PAE可以寻址64GB物理内存。xp不支持只能说微软tmd太孙子了阉割了hal.dll</p>
<p>完全识别4G内存的关键在于你的芯片组是否支持memory remap技术，假设你使用915芯片组<br />
这个芯片组不支持memory remap技术。然后你插了4g内存，又安装了64位的winxp<br />
那么你的可用内存仍然不足4G！大概在3G~3.25G之间！！</p>
<p>大多数人认为只要安装了64位操作系统就能完全识别4G内存，这是一个错误的认识。<br />
关键其实不在64位操作系统，而在于memory remap这项技术。</p>
<p><a href="http://www.deadc0de.com/wp-content/uploads/2010/06/91564xp.png"><img class="alignnone size-full wp-image-100" title="91564xp" src="http://www.deadc0de.com/wp-content/uploads/2010/06/91564xp.png" alt="91564xp" width="500" height="315" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/more-about-4gb.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>32位的xp为什么不支持4G内存</title>
		<link>http://www.deadc0de.com/archives/about-xp-4g-limit.html</link>
		<comments>http://www.deadc0de.com/archives/about-xp-4g-limit.html#comments</comments>
		<pubDate>Sat, 19 Jun 2010 10:19:37 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=93</guid>
		<description><![CDATA[最近在研究给xp内核打补丁，让其完全支持4G内存。但还没有试验成功，补丁发不出来先发个文出来吧……
 
随着计算机的不断发展。个人PC的内存不断更新换代，4G内存也将马上成为标配，然而对于一个32位操作系统而言，究竟能否完全使用这4G内存呢？
如果你有4G内存，然后又安装了32位的winxp系统，那么你会发现在系统属性里看到你的内存总数却不足4G，有的电脑能用到3.25G，有的电脑只能用到3G。这是为什么呢？
对于一个32位系统而言，他的物理寻址上限是4G，那么是说cpu最多可以对4G的物理内存操作吗？不！在这4G地址范围中，有很大一部分是保留给PCI设备的，为什么呢？因为cpu如果使用传统I/O端口与这些pci设备通讯，传输速率受到很大的限制。但是如果将这些设备映射出来，使用内存地址空间来工作，性能就大大地提高了。
因此这4G地址空间，有很大一部分被PCI设备占用了。4G内存中有一部分是不能被使用的，这部分被占用的地址空间叫MMIO空间。
由于MMIO占用的空间过于巨大——可以接近1GB左右，浪费了大量有限的内存。因此，芯片组厂商们如Intel就开始考虑采用一些技术来回收利用这部分丢失的MMIO内存空间（实际上，MMIO的存在可以说是PCI标准所规定的，而PCI标准，就是Intel制定并力推的，因此解决这个问题，Intel责无旁贷）。Intel在服务器/工作站芯片组上率先布署了Memory Remapping（内存重映射）技术，用以解决这个问题。这项技术不依赖于操作系统，可以将把MMIO占用的那些物理内存映射到系统地址空间更高的位置上去，比如超过4G的位置。
等等，刚才说，超过4G的位置？32位cpu不是只能寻址4G地址空间吗？映射到4G之外，cpu仍然不能对他们进行寻址啊？
其实。自从奔腾Pro开始IA32 CPU就有36条地址总线了，而不是32条，这项技术，叫做物理地址扩展(PAE)。PAE使32位cpu拥有36条地址总线最多可以寻址打到64G的地址范围。
这样一来，通过PAE+MemRemap技术，就可以使4G内存得以完全使用了。
但是内存重映射技术出现的较晚，对于Intel平台，965及以后的芯片组都支持这项技术。对于915或945这些不支持内存重映射技术的芯片组而言，即使打开了PAE功能，也不能完全识别4G内存。
但是有人想说了，那为什么我的P965主板插了4G内存，在xp里面仍然显示3.25G内存呢？是xp不支持吗？
不是这样的，XP内核完全支持PAE技术，理论上是可以支持4G以上内存的，可是微软为了赚钱，在内核里设置了一项许可检查——假如当前的许可不是Server版本，那么将阉割掉4G以上地址空间上的全部物理内存。因此，即使你开了PAE技术，即使你的主板支持内存重映射，使用32位的xp操作系统，仍然不能使用全部的4G内存。因为内核刻意地设置了最高地址上限为4G。
windows所有版本的内存限制可以参考MSDN Memory Limits for Windows Releases（注意微软这里指的内存限制，其实就是最高物理内存寻址上限）
细心读者可能发现，windows2000 advance server 支持8GB版本，windows2000 datacenter 支持32G内存。连win2000都支持，xp是没道理不支持的。这就能得出一个结论——XP阉割掉了多余的内存……
]]></description>
			<content:encoded><![CDATA[<p>最近在研究给xp内核打补丁，让其完全支持4G内存。但还没有试验成功，补丁发不出来先发个文出来吧……</p>
<p> </p>
<p>随着计算机的不断发展。个人PC的内存不断更新换代，4G内存也将马上成为标配，然而对于一个32位操作系统而言，究竟能否完全使用这4G内存呢？</p>
<p>如果你有4G内存，然后又安装了32位的winxp系统，那么你会发现在系统属性里看到你的内存总数却不足4G，有的电脑能用到3.25G，有的电脑只能用到3G。这是为什么呢？</p>
<p>对于一个32位系统而言，他的物理寻址上限是4G，那么是说cpu最多可以对4G的物理内存操作吗？不！在这4G地址范围中，有很大一部分是保留给PCI设备的，为什么呢？因为cpu如果使用传统I/O端口与这些pci设备通讯，传输速率受到很大的限制。但是如果将这些设备映射出来，使用内存地址空间来工作，性能就大大地提高了。</p>
<p>因此这4G地址空间，有很大一部分被PCI设备占用了。4G内存中有一部分是不能被使用的，这部分被占用的地址空间叫MMIO空间。</p>
<p>由于MMIO占用的空间过于巨大——可以接近1GB左右，浪费了大量有限的内存。因此，芯片组厂商们如Intel就开始考虑采用一些技术来回收利用这部分丢失的MMIO内存空间（实际上，MMIO的存在可以说是PCI标准所规定的，而PCI标准，就是Intel制定并力推的，因此解决这个问题，Intel责无旁贷）。Intel在服务器/工作站芯片组上率先布署了Memory Remapping（内存重映射）技术，用以解决这个问题。这项技术不依赖于操作系统，可以将把MMIO占用的那些物理内存映射到系统地址空间更高的位置上去，比如超过4G的位置。</p>
<p>等等，刚才说，超过4G的位置？32位cpu不是只能寻址4G地址空间吗？映射到4G之外，cpu仍然不能对他们进行寻址啊？</p>
<p>其实。自从奔腾Pro开始IA32 CPU就有36条地址总线了，而不是32条，这项技术，叫做物理地址扩展(PAE)。PAE使32位cpu拥有36条地址总线最多可以寻址打到64G的地址范围。</p>
<p>这样一来，通过PAE+MemRemap技术，就可以使4G内存得以完全使用了。</p>
<p>但是内存重映射技术出现的较晚，对于Intel平台，965及以后的芯片组都支持这项技术。对于915或945这些不支持内存重映射技术的芯片组而言，即使打开了PAE功能，也不能完全识别4G内存。</p>
<p>但是有人想说了，那为什么我的P965主板插了4G内存，在xp里面仍然显示3.25G内存呢？是xp不支持吗？</p>
<p>不是这样的，XP内核完全支持PAE技术，理论上是可以支持4G以上内存的，可是微软为了赚钱，在内核里设置了一项许可检查——假如当前的许可不是Server版本，那么将阉割掉4G以上地址空间上的全部物理内存。因此，即使你开了PAE技术，即使你的主板支持内存重映射，使用32位的xp操作系统，仍然不能使用全部的4G内存。因为内核刻意地设置了最高地址上限为4G。</p>
<p>windows所有版本的内存限制可以参考MSDN Memory Limits for Windows Releases（注意微软这里指的内存限制，其实就是最高物理内存寻址上限）</p>
<p>细心读者可能发现，windows2000 advance server 支持8GB版本，windows2000 datacenter 支持32G内存。连win2000都支持，xp是没道理不支持的。这就能得出一个结论——XP阉割掉了多余的内存……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/about-xp-4g-limit.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>2010暑假假期开发计划</title>
		<link>http://www.deadc0de.com/archives/vx-vacation-plan.html</link>
		<comments>http://www.deadc0de.com/archives/vx-vacation-plan.html#comments</comments>
		<pubDate>Tue, 01 Jun 2010 02:56:04 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=91</guid>
		<description><![CDATA[依照开发顺序排列如下。
VxArpDefender - 【免费】单向ARP防火墙 独特技术 防御力超强。
VxQos - 【收费】 Windows QoS客户端，用于网吧网络优化。需配合支持QoS的路由器。
VxNetLimiter - 【免费】进程带宽调控软件，对每个进程带宽分配，对P2P控制能力超强，技术、性能超越NetLimiter。
VxGate免费版 - 【免费】软网关，支持反共享封锁。突破中低过滤等级的网络尖兵、南京信风。
VxGate专业版 - 【收费】软网关，功能绝对专业，可应用于网吧，中小企业。
]]></description>
			<content:encoded><![CDATA[<p>依照开发顺序排列如下。</p>
<p>VxArpDefender - 【免费】单向ARP防火墙 独特技术 防御力超强。</p>
<p>VxQos - 【收费】 Windows QoS客户端，用于网吧网络优化。需配合支持QoS的路由器。</p>
<p>VxNetLimiter - 【免费】进程带宽调控软件，对每个进程带宽分配，对P2P控制能力超强，技术、性能超越NetLimiter。</p>
<p>VxGate免费版 - 【免费】软网关，支持反共享封锁。突破中低过滤等级的网络尖兵、南京信风。</p>
<p>VxGate专业版 - 【收费】软网关，功能绝对专业，可应用于网吧，中小企业。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/vx-vacation-plan.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>VxGate 正式发布</title>
		<link>http://www.deadc0de.com/archives/vxgate-%e6%ad%a3%e5%bc%8f%e5%8f%91%e5%b8%83.html</link>
		<comments>http://www.deadc0de.com/archives/vxgate-%e6%ad%a3%e5%bc%8f%e5%8f%91%e5%b8%83.html#comments</comments>
		<pubDate>Sun, 23 May 2010 14:34:56 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=89</guid>
		<description><![CDATA[官方网站：http://www.vxgate.net
目前只被xdowns收录，而且还只给打了2分。悲剧。。
 
下一步打算再做一款本地限速软件，类似NetLimiter。
不过之前用过NetLimiter。不稳定，会蓝屏，
而且。NetLimiter对P2P的支持简直是……一塌糊涂……毛用没有。。
叫啥捏。名字还没想好。。暑假再想，再做啦。。
]]></description>
			<content:encoded><![CDATA[<p>官方网站：<a href="http://www.vxgate.net">http://www.vxgate.net</a></p>
<p>目前只被xdowns收录，而且还只给打了2分。悲剧。。</p>
<p> </p>
<p>下一步打算再做一款本地限速软件，类似NetLimiter。</p>
<p>不过之前用过NetLimiter。不稳定，会蓝屏，</p>
<p>而且。NetLimiter对P2P的支持简直是……一塌糊涂……毛用没有。。</p>
<p>叫啥捏。名字还没想好。。暑假再想，再做啦。。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/vxgate-%e6%ad%a3%e5%bc%8f%e5%8f%91%e5%b8%83.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>多人共享上网网关 VxGate 测试版。征求内测…</title>
		<link>http://www.deadc0de.com/archives/%e5%a4%9a%e4%ba%ba%e5%85%b1%e4%ba%ab%e4%b8%8a%e7%bd%91%e7%bd%91%e5%85%b3-vxgate-%e6%b5%8b%e8%af%95%e7%89%88%e3%80%82%e5%be%81%e6%b1%82%e5%86%85%e6%b5%8b%e2%80%a6.html</link>
		<comments>http://www.deadc0de.com/archives/%e5%a4%9a%e4%ba%ba%e5%85%b1%e4%ba%ab%e4%b8%8a%e7%bd%91%e7%bd%91%e5%85%b3-vxgate-%e6%b5%8b%e8%af%95%e7%89%88%e3%80%82%e5%be%81%e6%b1%82%e5%86%85%e6%b5%8b%e2%80%a6.html#comments</comments>
		<pubDate>Thu, 06 May 2010 05:38:35 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=85</guid>
		<description><![CDATA[这是一个带有限速功能的Ip网关 名为VxGate。本人业余开发。
主要解决小宽带多人共享上网，由于一方看电影或开迅雷下载导致另一方游戏网络卡的问题。
未来企业版计划开发很多功能诸如
WAN直接接入支持、ARP防火墙、报文过滤、端口过滤、IP过滤、报文优先级(游戏网络优化)、HTTP访问日志、DHCP、DMZ、XXX、XXXXX
刚起步。只做了NAT、带宽限制2个功能。而且带宽限制功能目前对主机无效 -_-!。
未来开发版本会有选项对主机限制带宽。而且配套兄弟软件VxXXX(名字未想好)可以限制硬件路由方法上网的带宽
现对于VxGate进行小范围征求测试。
由于时间问题，此阶段只做修正bug，不开发新功能了
有意向加QQ群 20922282
VxGate官方：
  http://www.vxgate.net (没有内容 - -!)
VxGate支持：
  QQ群 20922282 (验证内容标注  &#8220;VxGate测试&#8221; 不然不通过验证)
  Email  masm@live.cn
]]></description>
			<content:encoded><![CDATA[<p>这是一个带有限速功能的Ip网关 名为VxGate。本人业余开发。</p>
<p>主要解决小宽带多人共享上网，由于一方看电影或开迅雷下载导致另一方游戏网络卡的问题。</p>
<p>未来企业版计划开发很多功能诸如</p>
<p>WAN直接接入支持、ARP防火墙、报文过滤、端口过滤、IP过滤、报文优先级(游戏网络优化)、HTTP访问日志、DHCP、DMZ、XXX、XXXXX</p>
<p>刚起步。只做了NAT、带宽限制2个功能。而且带宽限制功能目前对主机无效 -_-!。</p>
<p>未来开发版本会有选项对主机限制带宽。而且配套兄弟软件VxXXX(名字未想好)可以限制硬件路由方法上网的带宽</p>
<p>现对于VxGate进行小范围征求测试。</p>
<p>由于时间问题，此阶段只做修正bug，不开发新功能了</p>
<p>有意向加QQ群 20922282</p>
<p>VxGate官方：<br />
  <a href="http://www.vxgate.net">http://www.vxgate.net</a> (没有内容 - -!)</p>
<p>VxGate支持：<br />
  QQ群 20922282 (验证内容标注  &#8220;VxGate测试&#8221; 不然不通过验证)<br />
  Email  <a href="mailto:masm@live.cn">masm@live.cn</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/%e5%a4%9a%e4%ba%ba%e5%85%b1%e4%ba%ab%e4%b8%8a%e7%bd%91%e7%bd%91%e5%85%b3-vxgate-%e6%b5%8b%e8%af%95%e7%89%88%e3%80%82%e5%be%81%e6%b1%82%e5%86%85%e6%b5%8b%e2%80%a6.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>war3 1.20e dota反互通图作弊 及 war3对战平台原理</title>
		<link>http://www.deadc0de.com/archives/war3_1_20e_anti_cheat.html</link>
		<comments>http://www.deadc0de.com/archives/war3_1_20e_anti_cheat.html#comments</comments>
		<pubDate>Tue, 17 Nov 2009 04:29:54 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[未分类]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=83</guid>
		<description><![CDATA[大部分互通图在作弊的时候都需要输入作弊指令 -xxx
而且为了掩人耳目有些指令具有迷惑作用比如 -ma空格空格空格
但是如果设置聊天对象为ob那么队友也看不到你输入的指令
但事实上这一切尽在服务器眼中
玩家输入的任何游戏指令(-打头)
都会通过26号游戏协议包(F7 26 xx xx)发送到服务器
假如我们做了一个服务器插件
监控玩家使用的游戏指令
就可以达到一定的监测作弊效果
然后配合踢人功能惩罚作弊者&#8230;那么&#8230;
 
另外在分析魔兽协议的时候又学习了一下iocp模型
war3为每个连接创建了一个线程接收网络数据包
使用WSARecv接收数据
如果返回-1并且WSAGetLastError = ERROR_IO_PENDING
那么就使用GetQueuedCompletionStatus等待IO完成
另外通过lpCompletionKey结构，可以得知被等待的socket句柄和缓冲区
 
至此我们也可以猜测各种游戏平台的工作原理
hook socket把TCP改成UDP
hook connect返回成功
hook AcceptEx或其他。。
hook send通过sendto把数据传到服务器由服务器转发，要确保数据正确到达
hook WSARecv，貌似可以阻塞也可以不阻塞，总之数据来了就返回，如果不阻塞。那么再
hook GetQueuedCompletionStatus，等待数据到来
大体应该就是这样子，全是猜测，下一步可以构想一下自己实现的对战平台的网络模型
另外我想数据可以是由服务器中转的，也可以是用UDP穿墙技术实现的。
区别就是经过服务器中转。还可以多实现一些功能
比如聊天监控，作弊监控……
]]></description>
			<content:encoded><![CDATA[<p>大部分互通图在作弊的时候都需要输入作弊指令 -xxx<br />
而且为了掩人耳目有些指令具有迷惑作用比如 -ma空格空格空格<br />
但是如果设置聊天对象为ob那么队友也看不到你输入的指令</p>
<p>但事实上这一切尽在服务器眼中<br />
玩家输入的任何游戏指令(-打头)<br />
都会通过26号游戏协议包(F7 26 xx xx)发送到服务器</p>
<p>假如我们做了一个服务器插件<br />
监控玩家使用的游戏指令<br />
就可以达到一定的监测作弊效果</p>
<p>然后配合踢人功能惩罚作弊者&#8230;那么&#8230;</p>
<p> </p>
<p>另外在分析魔兽协议的时候又学习了一下iocp模型<br />
war3为每个连接创建了一个线程接收网络数据包<br />
使用WSARecv接收数据<br />
如果返回-1并且WSAGetLastError = ERROR_IO_PENDING<br />
那么就使用GetQueuedCompletionStatus等待IO完成<br />
另外通过lpCompletionKey结构，可以得知被等待的socket句柄和缓冲区</p>
<p> </p>
<p>至此我们也可以猜测各种游戏平台的工作原理<br />
hook socket把TCP改成UDP<br />
hook connect返回成功<br />
hook AcceptEx或其他。。<br />
hook send通过sendto把数据传到服务器由服务器转发，要确保数据正确到达<br />
hook WSARecv，貌似可以阻塞也可以不阻塞，总之数据来了就返回，如果不阻塞。那么再<br />
hook GetQueuedCompletionStatus，等待数据到来<br />
大体应该就是这样子，全是猜测，下一步可以构想一下自己实现的对战平台的网络模型</p>
<p>另外我想数据可以是由服务器中转的，也可以是用UDP穿墙技术实现的。<br />
区别就是经过服务器中转。还可以多实现一些功能<br />
比如聊天监控，作弊监控……</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/war3_1_20e_anti_cheat.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>ping monitor 监测ping的小工具</title>
		<link>http://www.deadc0de.com/archives/ping-monitor.html</link>
		<comments>http://www.deadc0de.com/archives/ping-monitor.html#comments</comments>
		<pubDate>Sat, 24 Oct 2009 06:03:38 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<category><![CDATA[ping]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=74</guid>
		<description><![CDATA[点此下载(3.6KB)
PingMonitor是一个专门监测网络线路ping值的小工具
你完全可以在命令行中使用 ping ip -t 代替它
但这个小工具使用起来将更加便捷直观。
这个工具可以同时监控2个ip
在Options.ini里.你可以设置电信、网通、铁通或局域网等任何IP地址
还可以个性化设定界面的颜色。
 
如果你的线路是ADSL，而且是你是个在线游戏爱好者。
我相信这个工具将会对你很有用。

]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.deadc0de.com/wp-content/uploads/2009/10/pingmonitor.rar">点此下载(3.6KB)</a></p>
<p>PingMonitor是一个专门监测网络线路ping值的小工具</p>
<p>你完全可以在命令行中使用 ping ip -t 代替它</p>
<p>但这个小工具使用起来将更加便捷直观。</p>
<p>这个工具可以同时监控2个ip</p>
<p>在Options.ini里.你可以设置电信、网通、铁通或局域网等任何IP地址</p>
<p>还可以个性化设定界面的颜色。</p>
<p> </p>
<p>如果你的线路是ADSL，而且是你是个在线游戏爱好者。</p>
<p>我相信这个工具将会对你很有用。</p>
<p><img class="alignnone" src="http://www.deadc0de.com/wp-content/uploads/2009/10/pingmonitor.png" alt="" width="507" height="272" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/ping-monitor.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>单步跟踪引擎.太慢</title>
		<link>http://www.deadc0de.com/archives/step-trace-bullsh1t.html</link>
		<comments>http://www.deadc0de.com/archives/step-trace-bullsh1t.html#comments</comments>
		<pubDate>Wed, 21 Oct 2009 12:49:13 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=68</guid>
		<description><![CDATA[原本想做个注入dll式的单步跟踪软件，记录某个线程的执行记录
现在看来这想法太离谱了，现在引擎做出来了，发现跟踪30000行指令需要10秒，加上记录也是10秒左右
想想我准备调试的那些可怕的程序，运行起来的话。。这。。。太扯了 :&#60;
还是改做调试器吧 :&#62;
 
00401343: push 00402169h
00401348: push 00402162h
0040134D: call 004012C5h
004012C5: push ebp
004012C6: mov ebp , esp
004012C8: add esp , F4h
004012CB: lea eax , dword ptr [ebp-04h]
004012CE: push eax
004012CF: push 04h
004012D1: push 00h
004012D3: push dword ptr [ebp+08h]
004012D6: push 80000002h
004012DB: call RegOpenKeyExA (advapi32.dll)
004013B4: jmp RegOpenKeyExA (advapi32.dll)
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;
004012E0: or eax , eax
004012E2: [...]]]></description>
			<content:encoded><![CDATA[<p>原本想做个注入dll式的单步跟踪软件，记录某个线程的执行记录<br />
现在看来这想法太离谱了，现在引擎做出来了，发现跟踪30000行指令需要10秒，加上记录也是10秒左右<br />
想想我准备调试的那些可怕的程序，运行起来的话。。这。。。太扯了 :&lt;</p>
<p>还是改做调试器吧 :&gt;</p>
<p> </p>
<p>00401343: push 00402169h<br />
00401348: push 00402162h<br />
0040134D: call 004012C5h<br />
004012C5: push ebp<br />
004012C6: mov ebp , esp<br />
004012C8: add esp , F4h<br />
004012CB: lea eax , dword ptr [ebp-04h]<br />
004012CE: push eax<br />
004012CF: push 04h<br />
004012D1: push 00h<br />
004012D3: push dword ptr [ebp+08h]<br />
004012D6: push 80000002h<br />
004012DB: call RegOpenKeyExA (advapi32.dll)<br />
004013B4: jmp RegOpenKeyExA (advapi32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
004012E0: or eax , eax<br />
004012E2: jne 00401322h<br />
004012E4: push dword ptr [ebp+0Ch]<br />
004012E7: push dword ptr [ebp-04h]<br />
004012EA: call RegDeleteKeyA (advapi32.dll)<br />
004013A8: jmp RegDeleteKeyA (advapi32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
004012EF: lea eax , dword ptr [ebp-0Ch]<br />
004012F2: push eax<br />
004012F3: lea eax , dword ptr [ebp-08h]<br />
004012F6: push eax<br />
004012F7: push 00h<br />
004012F9: push 00h<br />
004012FB: push 01h<br />
004012FD: push 00h<br />
004012FF: push 00h<br />
00401301: push dword ptr [ebp+0Ch]<br />
00401304: push dword ptr [ebp-04h]<br />
00401307: call RegCreateKeyExA (advapi32.dll)<br />
004013A2: jmp RegCreateKeyExA (advapi32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
0040130C: push dword ptr [ebp-04h]<br />
0040130F: call RegCloseKey (advapi32.dll)<br />
0040139C: jmp RegCloseKey (advapi32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
00401314: cmp dword ptr [ebp-0Ch] , 02h<br />
00401318: je 004012E4h<br />
0040131A: push dword ptr [ebp-08h]<br />
0040131D: call RegCloseKey (advapi32.dll)<br />
0040139C: jmp RegCloseKey (advapi32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
00401322: leave<br />
00401323: retn 0008h<br />
00401352: push 40h<br />
00401354: push 00402184h<br />
00401359: push 00402171h<br />
0040135E: push 00h<br />
00401360: call MessageBoxA (user32.dll)<br />
00401378: jmp MessageBoxA (user32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;<br />
00401365: push 00h<br />
00401367: call ExitProcess (kernel32.dll)<br />
0040137E: jmp ExitProcess (kernel32.dll)<br />
&#8230;&#8230;..: Out of watch limit, wait for ret &#8230;&#8230;&#8230;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/step-trace-bullsh1t.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>Dr.Com客户端的替代 - Free Dr.COM win32/linux</title>
		<link>http://www.deadc0de.com/archives/free-drcom.html</link>
		<comments>http://www.deadc0de.com/archives/free-drcom.html#comments</comments>
		<pubDate>Mon, 19 Oct 2009 12:55:09 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<category><![CDATA[drcom]]></category>

		<category><![CDATA[free drcom]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=64</guid>
		<description><![CDATA[点此下载&#8230;
 
Dr.COM是北京城市热点开发的一款基于局域网的宽带接入服务器，广泛应用于高校校园网、小区宽带。
邮电学院南校区使用的就是Dr.COM服务器做宽带接入，使用了专用的客户端进行直通方式认证。
该客户端的功能很强大，但我们学校使用的客户端比较简单。主要做了如下2条限制。
 
绑定ARP缓冲中所有IP为非法MAC，阻塞局域网内TCPIP通讯，防止做共享网络。同时也无法玩局域网游戏(TCP/IP)
检测常见的共享网络的软件，并加以提示，停止激活Dr.COM网关。拒绝服务。
 
我们只需模拟Dr.COM客户端激活Dr.COM网关的方法。即可抛弃官方客户端及如上限制。
 
使用方法
拨号宽带连接，运行本软件。提示已经激活即可上网。
最小化后隐藏窗口，再次运行本软件可以调出窗口。
本软件没有设置自动运行，可以在程序-&#62;启动中创建快捷方式。
 
常见问题
1.如果提示无法绑定 UDP 61440 端口，请检查是否已经卸载原来的客户端。(官方客户端为ishare_user.exe进程)
2.如果提示接收数据2超时，请检查程序的连接是否被 Windows阻止。必要时可以关闭 Windows 的防火墙。
   XP环境下服务名为 Windows Firewall/Internet Connection Sharing (ICS)
   Vista/Win7环境下服务名为 Windows Firewall
  禁用这个服务即可。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.deadc0de.com/wp-content/uploads/2009/10/freedrcom.rar">点此下载&#8230;</a></p>
<p> </p>
<p>Dr.COM是北京城市热点开发的一款基于局域网的宽带接入服务器，广泛应用于高校校园网、小区宽带。</p>
<p>邮电学院南校区使用的就是Dr.COM服务器做宽带接入，使用了专用的客户端进行直通方式认证。</p>
<p>该客户端的功能很强大，但我们学校使用的客户端比较简单。主要做了如下2条限制。</p>
<p> </p>
<p>绑定ARP缓冲中所有IP为非法MAC，阻塞局域网内TCPIP通讯，防止做共享网络。同时也无法玩局域网游戏(TCP/IP)</p>
<p>检测常见的共享网络的软件，并加以提示，停止激活Dr.COM网关。拒绝服务。</p>
<p> </p>
<p>我们只需模拟Dr.COM客户端激活Dr.COM网关的方法。即可抛弃官方客户端及如上限制。</p>
<p> </p>
<p>使用方法</p>
<p>拨号宽带连接，运行本软件。提示已经激活即可上网。</p>
<p>最小化后隐藏窗口，再次运行本软件可以调出窗口。</p>
<p>本软件没有设置自动运行，可以在程序-&gt;启动中创建快捷方式。</p>
<p> </p>
<p>常见问题</p>
<p>1.如果提示无法绑定 UDP 61440 端口，请检查是否已经卸载原来的客户端。(官方客户端为ishare_user.exe进程)</p>
<p>2.如果提示接收数据2超时，请检查程序的连接是否被 Windows阻止。必要时可以关闭 Windows 的防火墙。</p>
<p>   XP环境下服务名为 Windows Firewall/Internet Connection Sharing (ICS)<br />
   Vista/Win7环境下服务名为 Windows Firewall</p>
<p>  禁用这个服务即可。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/free-drcom.html/feed</wfw:commentRss>
		</item>
		<item>
		<title>NBP开发手记</title>
		<link>http://www.deadc0de.com/archives/nbpdevelopment.html</link>
		<comments>http://www.deadc0de.com/archives/nbpdevelopment.html#comments</comments>
		<pubDate>Tue, 18 Aug 2009 03:22:20 +0000</pubDate>
		<dc:creator>mengxp</dc:creator>
		
		<category><![CDATA[Win32编程]]></category>

		<category><![CDATA[NBP]]></category>

		<category><![CDATA[PXE]]></category>

		<category><![CDATA[无盘]]></category>

		<guid isPermaLink="false">http://www.deadc0de.com/?p=58</guid>
		<description><![CDATA[以前对PXE只有一点点了解，最近在研究PXE无盘启动XP，所以学习了PXE的spec文档，对PXE有了初步的认识，同时又在调试时遇到了很多的很挫的问题。现在把它们记录下来。

所谓NBP是来自PXE文档的说法，全称 Network Bootstrap Program，也就是我以前理解的 PXE Boot File。他的作用就是 Hook Int 13h 虚拟一个硬盘，对硬盘的读写，通过 PXE API(通常使用UDP)定向到网络，返回数据给调用者，达到通过网络启动的目的。

 

一、NBP工作流程
]]></description>
			<content:encoded><![CDATA[<p>以前对PXE只有一点点了解，最近在研究PXE无盘启动XP，所以学习了PXE的spec文档，对PXE有了初步的认识，同时又在调试时遇到了很多的很挫的问题。现在把它们记录下来。</p>
<p>所谓NBP是来自PXE文档的说法，全称 Network Bootstrap Program，也就是我以前理解的 PXE Boot File。他的作用就是 Hook Int 13h 虚拟一个硬盘，对硬盘的读写，通过 PXE API(通常使用UDP)定向到网络，返回数据给调用者，达到通过网络启动的目的。</p>
<p> </p>
<p>一、NBP工作流程</p>
<p>1.Int 1Ah 获取PXE接口，这没什么说的。分2.0和2.1或以上版本2种区别，一般只需要兼容2.1就行。<br />
2.PXENV_GET_CACHED_INFO 的3号功能，获取自己的IP和服务器IP。<br />
3.PXENV_UDP_OPEN 初始化 UDP 网络接口。<br />
4.Hook Int13h,I/O PXENV_UDP_READ/PXENV_UDP_WRITE<br />
5.读 MBR 到 0000:7C00。<br />
6.跳转 0000:7C00。</p>
<p>这些流程除了第四步Hook Int13h都不难，只是UDP部分需要注意处理丢包的问题。C/S用会话ID，很好解决。<br />
另外那个UDP接口，收到大于4K的包，容易卡死在UDP_RECV里很久才返回一个错误。所以一次收发包最好小于4KB……<br />
二、Hook Int13h</p>
<p>对于无盘启动XP，需要处理如下的功能号。并尽量按照标准来处理。。</p>
<p>FUN00: IO复位<br />
FUN02: 读扇区<br />
FUN03: 写扇区<br />
FUN08: 读磁盘参数<br />
FUN15: 读磁盘类型<br />
FUN41: 检验扩展功能是否存在<br />
FUN42: 扩展读<br />
FUN43: 扩展写<br />
FUN48: 扩展读磁盘参数</p>
<p>貌似对于无盘启动XP，处理写操作好像并不是必要的。一般情况XP在内核启动前不需要写操作。内核启动后加载磁盘驱动，然后才会有写操作，那时候已经不需要Int13h了。不过NTLDR是设计了写操作接口的，说不准，没准啥时候来个FUN03/43，所以最好还是处理了吧。</p>
<p>而且我在做NBP之前还在想，如果进入保护模式后，还使用Int13h怎么办？因为PXE文档中对保护模式中使用PXE API的说明很模糊。SDK中也没有例子，做起来会很烦，可是真正做的时候发现，在进入保护模式后，根本不需要Int13h了，系统会使用磁盘驱动来完成IO。</p>
<p>而且我发现XP在启动的时候并没有使用扩展Int13h功能，不过调试发现Win7的 Boot Sector/Mgr 会使用Int13x。</p>
<p> <br />
三、万恶的 CHS 寻址</p>
<p>（以下段落引用互联网。。。有更正）<br />
&#8212;&#8211; Quote Start&#8212;&#8211;<br />
到目前为止，人们常说的硬盘参数还是古老的 CHS (Cylinder/Head/Sector)参数。那么为什么要使用这些参数，它们的意义是什么？它们的取值范围是什么？<br />
很久以前(long long ago &#8230;)，硬盘的容量还非常小的时候，人们采用与软盘类似的结构生产硬盘。也就是硬盘盘片的每一条磁道都具有相同的扇区数。由此产生了所谓的3D参数 (Disk Geometry)。即磁头数(Heads)，柱面数(Cylinders)，扇区数(Sectors)，以及相应的寻址方式。</p>
<p>其中:<br />
磁头数(Heads) 表示硬盘总共有几个磁头，也就是有几面盘片，最大为 255 (用 8 个二进制位存储)；<br />
柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道，最大为 1023(用 10 个二进制位存储)；<br />
扇区数(Sectors) 表示每一条磁道上有几个扇区， 最大为 63 (用 6个二进制位存储)。<br />
每个扇区一般是 512个字节，理论上讲这不是必须的，但好象没有取别的值的。</p>
<p>所以磁盘最大容量为：<br />
256 * 1024 * 63 * 512 / 1048576 = 8064 MB ( 1M = 1048576 Bytes ) 或硬盘厂商常用的单位：<br />
256 * 1024 * 63 * 512 / 1000000 = 8263 MB ( 1M = 1000000 Bytes )</p>
<p>在 CHS 寻址方式中，磁头，柱面，扇区的取值范围分别为 0到 Heads - 1， 0到 Cylinders - 1，1到 Sectors (注意是从1开始)。<br />
&#8212;&#8211; Quote End&#8212;&#8211;</p>
<p>上述段落阐述了什么是 CHS 寻址，按照上文的理解Heads是磁头数单位应该是最大的，但是其实不是酱紫的~<br />
按照寻址高低位排序，Cylinder &gt; Head &gt; Sector。</p>
<p>而且 H 不是表示硬盘总共有几个磁头，是最大磁头号。C 不是有几个柱面，是最大柱面号。要注意！</p>
<p> </p>
<p>要把 CHS 转换成绝对地址，可以使用下面的公式<br />
BlockAddr = ( Cylinder * NumberOfHeads + Head ) * SectorsPerTrack + Sector - 1;</p>
<p>NumberOfHeads 是磁盘的磁头数，假如最大磁头号码为255，那么NumberOfHeads = 256<br />
SectorsPerTrack 是磁盘每磁道的扇区数 值为 63。</p>
<p>而且注意最后有一个-1。因为Sector取值范围是1-63而不是0-63。<br />
Int13h 8号功能会返回 MAX HEAD，也就是最大磁头号。不要和上面公式的 NumberOfHeads 混淆。</p>
<p> <br />
四、万恶的 BootSector 程序</p>
<p>照理来说 XP 的 BootSector 应该使用Int13h的8号功能首先获取磁盘最大磁头号。<br />
而他却使用了 BPB(BIOS Parameter Block) 结构中定义 HeadsPerCylinder。。。<br />
注意这个 HeadsPerCylinder 不是最大磁头号而是磁头数，同上面公式中的 NumberOfHeads。<br />
一般情况这里的值是FF，那么最大磁头号应该是 254！！</p>
<p>;======================================================<br />
; BPB( BIOS Parameter Block )<br />
;======================================================<br />
BytesPerSector  DW ? ; 每个扇区的字节数 (512 1024 2048 4096)<br />
SectorsPerCluster DB ? ; 每个簇的扇区数 ( 1 2 4 8 16 32 64 128 )<br />
    ; 两者相乘不能超过32K(簇最大大小)<br />
ReservedSectors  DW ? ; 从卷的第一个扇区开始的保留扇区数目<br />
    ; 该值不能为0，对于FAT12/FAT16，该值通常为1<br />
    ; 对于FAT32，典型值为32<br />
NumberOfFATs  DB ? ; 卷上FAT数据结构的数目，该值通常应为2<br />
RootEntries  DW ? ; 对于FAT12/FAT16,该值表示32字节目录项的数目<br />
    ; 对于FAT32，该值必须为0<br />
NumberOfSectors16 DW ? ; 该卷上的扇区总数，该字段可以为0，如果该字段<br />
    ; 为0，则NumberOfSectors32不能为0；对于FAT32<br />
    ; 该字段必须为0<br />
MediaDescriptor  DB ? ; 介质类型<br />
SectorsPerFAT16  DW ? ; 该字段标识一个FAT结构占有的扇区数（FAT12/FAT16）<br />
    ; 对于FAT32卷，该字段必须为0<br />
SectorsPerTrack  DW ? ; 用于INT 0&#215;13中断的每个磁道的扇区数<br />
HeadsPerCylinder DW ? ; 用于INT 0&#215;13中断的每个柱面的磁头数<br />
HiddenSectors  DD ? ; 包含该FAT卷的分区之前的隐藏扇区数<br />
NumberOfSectors32 DD ? ; 该字段包含该卷上的所有扇区数目，对于FAT32，该字段<br />
    ; 不为0；FAT12/FAT16可根据实际大小是否超过65536个扇<br />
    ; 区数决定是否采用该字段</p>
<p> </p>
<p>To Be Continued..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.deadc0de.com/archives/nbpdevelopment.html/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
