都快忘记自己还有没写完的东西~那今天把它结束了,呵呵
前几篇写得不太好,所以打算把精华都在一篇里写好。
今后如果怀疑自己机器中毒了,看看这篇文章也许你就能把毒清理掉!
-------------------------------------------
上一篇:http://www.csksoft.net/blog/post/killvirusDIY3.html.html
....... 点击标题阅读全文都快忘记自己还有没写完的东西~那今天把它结束了,呵呵
前几篇写得不太好,所以打算把精华都在一篇里写好。
今后如果怀疑自己机器中毒了,看看这篇文章也许你就能把毒清理掉!
-------------------------------------------
上一篇:http://www.csksoft.net/blog/post/killvirusDIY3.html.html
....... 点击标题阅读全文按照原先的计划,是因该去开源了。
已经在emsky上发布,这里也象征性的贴上来吧~
如果有可能,暑假里会把CrazyGT完成
CrazyBall.这个令我在高三差点吧高考给Crazy掉的东西
主要包括了我当时制作的所有版本的Crazyball的代码,以及原始的图片资源文件,和windows端的地图编辑器的VC工程代码。
其中还包括我编写的VC程序的通用界面库Cl的代码。
地址:ftp://FTP_visitor:visitor@ftp.csksoft.net/Public/Products/OtherOS/WQX_LAVA/crazyball_final_src_csk.rar
Crazyball
呵呵,不知今后会不会出现CrazyBall xxx修改版这种东西呢~
总之,wqx祝你一路走好
--------------------------------------
作者保留原代码和程序的版权,请在引用时注明原作者信息
最近要同时开发PRP的“强人隧道”网站、法学院网站的第2期开发,同时要管理计协,当然还有学业。所以基本上时间要精确到秒来用了。不过周末还是能和gf稍微过一点悠闲的生活,哪怕那只有短暂的2小时。
那么这个blog似乎又要死下去了,不过我承诺过每周至少一篇文章,所以就把最近开发中对ajax的体会和一些作品发布出来吧。
首先允许我评论下这个目前正被捧得大红大紫的AJAX技术。如果你不知道他是什么就先去google以下,关于他的教程和介绍到处都是。
ajax并不是最近才有的,更不是有些人所说的在asp.net中附带而来的。她很早就被MS采用,大家看看msdn网站的那个树形目录,如果你展开一个分支,它就会“非同步的”去更新这个分支的内容。我想似乎也只有js+xml才能做到吧。而且在我上高一时,第一次上msdn就有这个功能了,我现在读大二,那么就算算这项技术出现了多少年吧……
那么为什么他现在如此的红火呢?我想其中一个原因是gmail,他的web管理界面就是彻底的ajax应用。google似乎正企图破坏微软帝国的神话,成为新一代霸主,他对新技术的使用自然是空前的。第二个原因就是企图用这个技术来达到Flash网站同样的效果。也就是不需要刷新页面来获取新内容。Flash中可以采用loadMovie方法来加载新的对象,同时也支持xml文报(我的ReformPost就是很好的例子)。我想比起asp.net中的采用,更多的可能应该是需要模拟出和flash具有同样效果的页面罢了。
不过ajax似乎并没有传说的那么十全十美。
首先
它需要浏览器支持,并不是所有平台和所有浏览器都能显示ajax页面,而且一但不支持,整个页面可能都无法显示。
第二个缺陷
由于它不需要刷新页面而获得新的数据,很多人认为这有违于利用URL来唯一定位资源的规范。因为同一个url指向的页面可以用ajax显示截然不同的数据。那么你如果需要把你正在浏览的信息给别人看的话,复制url给他显然就是没有用的。
不过我并不这样认为,首先这并不是ajax才有的问题,使用flash的页面也是如此。而且所谓“有违于利用URL来唯一定位资源的规范”是错误的。我见过很多聪明的flash网站已经做到了解决方法,下面我稍微介绍一下:
如果你原先采用静态页面,那么很自然,每篇文章都是和url地址挂钩的:
比如本文保存在:http://www.csksoft.net/blog/post/XML_Parser_and_comments.html
那么用url地址就能来访问本文。
现在我把文章保存在数据库,采用asp页面动态的显示本文,那么利用QueryString还是能用url地址唯一的去定义本文:
http://www.csksoft.net/blog/cmd.asp?act=tb&id=84
那么在ajax和flash网站的情况下,我们也可以采用类似于QueryString的做法:把上面的?改为#即可
众所周知,url字符串中#字符之后的内容都会在发送http请求时被略去,所以网页的书签就是在页面url后面加上一个以#为前缀的参数,这样一方面不影响服务器获取正确的参数,另一方面可以在客户端利用JS来获取#之后的参数。
那么,在今后的flash网站中,或者今后本blog采用了ajax,这篇文章也能采用如下的url地址获得了:
http://www.csksoft.net/blog/index.asp#act=tb&id=84
不过这个页面目前是不起作用的。
下面提供一个能从像上面url地址格式中提取像指定参数数据的函数,它本是action代码,相信稍作修改就能用于js。
使用和转载时请保留我的作者信息。
//from ReformCore::mainsite
//Copyrights 2005-2006 CSK,csk@citiz.net
function GetQueryString(strURL:String, strStringName:String):String {
if (strURL == undefined || strURL == ) {
strURL = _root._url;
}
var strQueryStub:String;
strQueryStub = strURL.slice(strURL.lastIndexOf(#)+1);
if (strStringName == undefined || strStringName == ) {
return strQueryStub;
}
var nSubPosA:Number, nSubPosB:Number;
strQueryStub = &+strQueryStub;
nSubPosA = strQueryStub.lastIndexOf(&+strStringName+=);
if (nSubPosA == -1) {
return ;
}
nSubPosA += length(&+strStringName+=);
nSubPosB = strQueryStub.indexOf(&, nSubPosA);
if (nSubPosB == -1) {
nSubPosB = strQueryStub.length;
}
return unescape(strQueryStub.slice(nSubPosA, nSubPosB));
};
如果要获取www.csksoft.net/mypage#id=3 中的id的内容,只要这样写:
var id=GetQueryString(www.csksoft.net/mypage#id=3,id);用了上述的方法,这个缺陷自然也就不复存在了
第三个缺陷
是由于很多情况下需要对xml文档进行翻译,因而即使像获取服务器时间这样简单的功能,也要专门写xml分析代码来从服务器传回的xml中得到需要的时间信息。
如果flash或者ajax页面需要采用高级的xml文报实现与服务器进行更强大的RPC远程交互(类似于SOAP),那么就需要编写常常的xml分析代码。
对于ReformPost,如果需要获得主服务器的时间,客户端的发送的文报是这样的:
<ReformCorePost><Type Ver=1.0>generaPost</Type><PosterInfo type=desktop;fla>FlashMainSite</PosterInfo><Core_RPC><Name>GetServerTime</Name><args /></Core_RPC></ReformCorePost>ReformCore传回的xml文报是这样的:
<ReformCorePost><Type Ver=1.0>CmdResponse</Type><PosterInfo type=WebCoreServer /><RPC_result><DTYPE>date;servertime</DTYPE><CurrentTime>2006-3-5 15:20:09</CurrentTime></RPC_result></ReformCorePost>如果要实现上面的xml交互,首先客户端必须编写生成指定格式xml的代码,而对于每种请求xml的不同,也需要不同的代码,同时分析服务器返回的xml也需要相当多的代码来完成。
这样无疑是加重了ajax开发的复杂性和延长了开发周期。
我在开发PRP项目时写了一套函数,它可以做到下面的功能:
1.如果我要生成如下的xml文档:
<MyXML>
<MyItem>
<Item>a</Item>
</MyItem>
</MyXML>里用接下来提供的函数,开发者只需要写如下代码:
var objXML,objArglist;
objArglist = new Object();
objArglist.MyItem = new Object();
objArglist.MyItem.Item = a;
objXML=ConstructXmlDoc(MyXML,objArguList);这样,上述xml已经自动产生并保存在objXML中了。这样就免去了繁琐的CreateElements、appendChild之类的操作函数了。
2.如果服务器传回了下面的xml文档:
<ReformCorePost><Type Ver=1.0>CmdResponse</Type><PosterInfo type=WebCoreServer /><RPC_result><DTYPE>date;servertime</DTYPE><CurrentTime>2006-3-5 15:20:09</CurrentTime></RPC_result></ReformCorePost>假设采用objResponseXML保存这个文报,那么采用下面代码:var objParsedXML;
objParsedXML = ParseXml(objResponseXML);上述XML已经自动转化为等价的object类型,如果我要读取xml中CurrentTime字段的数据,只需用代码:var strCurrentTime = objParsedXML.RPC_result[0].CurrentTime[0].value;是不是简单多了?这两个函数就是将Object对象中的成员数据和xml文档进行了互换,由于篇幅有限,其中的函数我就作为附件给出下载地址。具体的使用可以直接来询问我。对于asp版本暂时不打算公开转载和修改时请保留原作者信息。
作为对曾经我提过的要写些教程的兑现,这里先把我在交大计算机协会作的讲座《windows亲手灭毒宝典》放上来。当然其中的内容比我实际讲的要多,且要难。
由于第一次写教程,加上自己水平有限,文中出现的问题希望各位及时指正,谢谢!
文章为CSK原创,转载请保留原作者和引用作者的版权信息。
CSK版权所有
---------------------------------------------------------------------------------
第二回的地址:http://www.csksoft.net/blog/post/killvirusDIY2.html
第三回:亲手杀毒的一般步骤
本文不需要你具有诸如程序开发等方面的专业技能,但如果有一定的经验可以帮助你更好的理解
如果你还没有看过前一篇文章,不要紧,但是本文是建立在你已经掌握前篇文章所提及知识的基础之上的,所以遇到不明白的可以参考前一篇
其实事情很简单,自然就是先找出那些病毒文件,然后将他们删除
但是硬盘上保存了那么多程序,哪些才是病毒文件呢?本文将告诉你一个快速确定并找出病毒文件方位的方法
由前文我们了解到,所有在windows环境中运作的病毒,一般都是以具体的文件形式存在的,并且往往是那些可执行文件。但是,单单是这些保存在硬盘上的文件还是不能起什么作用的。一个程序的运行必须是由系统将它们从磁盘的文件中读取出来,然后存放在内存中并加以执行。这个过程常被我们称作:加载。
病毒也是一种程序体,自然的,他也需要有系统事先加载到内存中执行才能做恶。当然这种加载有2种途径:
自然,我们更关心第二种情况,因为你应该知道中毒的机器就算是重新启动,病毒还是照样会驻留在内存中运行(除非那个病毒自身也有缺陷……)这就是通过系统自动加载完成的。
作为病毒自然是希望一直在你机器中生存着,等待它发作的那一天……所以他肯定要告诉系统:每次启动的时候也加载我把~,然后为了让系统去加载他,病毒还会告诉自己文件保存的地点-文件路径
正因为这样,病毒就在我们的系统中留下了它的作案痕迹。我们的杀毒过程也就是从查找这些作案痕迹开始的。
所以,第一步就是:找到病毒在系统中留下的痕迹,从而找出那些可能的病毒
2.1.系统的备忘录-注册表
或许你很早就知道很多程序在系统启动时也会自己启动,比如你在使用的MSN Messenger或者QQ,他们在系统每次启动完毕后都会自己“弹”出来。
图:每次开机后你的QQ程序是不是会自己“弹”出来呢?
其实在这个过程中,那些该死的病毒也偷偷的进入你的内存开始运作了,只不过做贼心虚,不会“弹”出来说“喂,小样,我是病毒,嘿嘿,有种来杀我啊”之类的话
这些程序其实都是由系统自动加载运行的,那么windows就必须要有一张“清单”好使他在启动时仍然记得要去启动这些程序。而这里说的清单其实就是注册表
或许你听过这个名字,而且可能对他有一种神秘的感觉。其实他的作用就上上面所说的那样:只是一个清单。用来记录一些系统需要记住的事,同时很多应用程序也用它来记录一些配置:比如IE会用它记录主页的地址。
不过我们这里只对其中一小部分感兴趣,那就是系统用来记录开机时需要启动哪些程序的地方
windows提供了一个程序来供我们察看和修改注册表,那就是regedit
图:注册表编辑器(regedit.exe)
你可以从[开始]菜单->[运行],输入regedit.exe启动他,如果系统提示找不到该文件,很不幸的,可能病毒已经删除它了:-<,如果这样你就需要从别人那里复制来一份。
regedit和资源管理器很类似,也提供了类似目录和文件方式的界面。其中系统把每一种清单保存在不同的目录下面,而具体清单的信息就是那些“文件”了。
那么系统每次启动时加载的程序清单在哪里呢?其中一个清单你可以根据下面的这个路径找到:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
你可能会看到这样的画面:
其中最左边一栏是程序的名字,当然他们作用不大,而最右边的就是程序的路径了。系统启动后就会按照这张清单一次加载文件。
不过很不巧的时,其实病毒已经隐藏在了上面这个清单中了。或许你已经有所发现。你也可以看看自己注册表中的那些条目。
就上面这张图中,下面这些路径下的文件都可能是病毒:
首先,这里只能说是可能是病毒,并不能马上确定,但是为什么说这些文件的嫌疑最大呢?下面给出一些规则
所以对于第一次尝试手工杀毒的人来说,如果很难确定哪些是病毒的话不妨删除所有的清单条目(注意,那个叫做“默认”的条目是无法清除的,但你可以把它的内容删除)
那么为什么那些文件可能为病毒呢?首先我们看“AutoUpdate ”这个文件。第一从他的名字上,很多人会以为他是windows的自动更新程序。而且它的途径:windows系统目录下,又叫做winsys.exe(暗示你它是windows system的一部分),似乎他是个正常的程序?如果你这么想就是中了全套。按照上面给出的第2条规则,如果真的是“自动更新程序”,他不太可能出现在这个清单中(真正的自动更新程序是一个系统服务,具体会在今后的文章中论述)。那么这个家伙就非常可疑了
其次是explorer。或许你也会觉得这很正常,造成这种想法的原因可能是他正好是windows资源管理器的名字。而且细心的你可能发现每次系统开机的确会有个叫做explorer.exe的文件在运行(其实它是在其他地方加载的,今后的文章中你会知道,explorer.exe叫做系统外壳:shell,除了资源管理器的功能外,你的桌面也是他“变”成的)。但是真正的资源管理器是位于windows\目录下而非windows\system32\下。并且根据第二条规则,自然也就有很大嫌疑了
那么这个叫做(默认)项目为什么也会是病毒呢?其实注册表的每个目录下都会有一个(默认)的项目。它是注册表自动产生的。而根据规则第四条,这里的“默认”条目一般是留空的,所以马上就能确定c:\commond.com有很大嫌疑了。并且很高笑的是,这个程序的作者似乎想和以前DOS系统的命令行提示程序command.com取同样名字来欺骗我们。但是,他拼错了……
事实上,上面提到的的确就是病毒,不过这里只是我为了演示所以加进去的,但现实中如果你真看到了这样的项目,那么别犹豫,他们99%就是病毒或恶意程序!
接下来要做的就是先找到那些文件的位置,然后将他们清除即可,最后再删除注册表中的那些项目。不过为了预防万一,往往删除前我们还需要一个确认的过程。而且很糟糕的时,windows一项混乱的作风使得启动程序的清单并不是只有这一个,并且还有一类叫做系统服务的程序,他们也会自我启动。所以在下回中,我将告诉你所有的启动清单的地方,同时介绍系统服务的一些事情
不过60%-70%的病毒都是在上述的清单中加入自己的作案痕迹的,所以今后如果怀疑自己系统中毒那么先看看这里吧
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
但怎么来记住这么长的目录呢?下面给一个敲门:
最后附上一些清单中常见程序的说明
Rundll32.exe C:\WINDOWS\DOWNLO~1\CnsMin.dll,Rundll32
3721中文实名hook的主进程,难怪一段时间被诺顿视为病毒
C:\WINDOWS\system32\rundll32.exe C:\PROGRA~1\3721\helper.dll,Rundll32
3721上网助手,一个熊样……就是毒!
C:\Program Files\Common Files\Real\Update_OB\realsched.exe -osboot
RealPlayer的广告客户端,可以del掉
C:\WINDOWS\system32\ctfmon.exe
M$别出心裁的为了配合office XP以上版本进行输入法监控(就是微软拼音)和文档检索用的监控进程
好了,这回就到这里,最后祝各位情人节快乐
CSK 2006.2.14
CSK版权所有,演讲ppt在ftp.csksoft.net中下载。
==================Asc Tree View=================== H / \ D J / \ \ A F K \ B ================== End Of View ===================
好了不说废话了,附上一次作业程序的运行画面和下载地址:
Data Structure Act 5 Demos Designed By CSK(www.csksoft.net)
---------------------------------------- Please Select Demos:
[1].Get Strongly Spanning Graphs(Problem 1,2)
[2].KRUSKAL algorithm Demo(Problem 1,3)
[3].Dijkstra algorithm Demo(Problem 1,4)
[4].DFS & BFS Demo(Problem 1,4)
[0].Exit Load Demo Num:
=============================
Act 1 Problem 2:Multiply two polynomials
=============================
Would you like to use the default two polynomials?[Y/N]y
the first default polynomial is +7x^2+3.5x^3+2x^4+2x^9
the second default polynomial is +2.3x^2+4.4x^3+1x^4+6x^10
请按任意键继续. . .
polynomial1 * polynomial2 = +16.1x^4+38.85x^5+27x^6+12.3x^7+2x^8+4.6x^11+50.8x^1 2+23x^13+12x^14+12x^19
----------------------------
Demo Finished
请按任意键继续. . .
我的实践作业下载:
http://www.csksoft.net/data/legacyftp/Products/APP/DataStructProduct_BY_CSK.rar
原题下载(可能SJTU有版权..):
ftp://FTP_visitor:visitor@ftp.csksoft.net/Public/Article/DataStruct_Instruction.rar
最后真心祝愿每一位将要考数构的朋友都能通过
VS.net 2003出来以后,我第一感觉就是今后不太会使用VC6.0了,因为操作很人性(当然VC6的编译器好)。但有个问题时有时候你的工程要在别人机器上打开,比如我现在学数据结构要交作业。而对方用VC6就打不开VS.net2003的程序了。 现在VS.net 2005又出来了,但同样2003打不开2005的工程。这时候就要用到工程转化器了。 其实2005->2003的转化不难,改几个版本信息就可以,但VS.net->VC6的转化就要涉及重新翻译的问题。以前国外有人写了个命令行的2003->VC6的转化器,但有一定bug,同时操作不方便,所以我就做了修改,同样也是开源的^_^
下载地址:
http://www.csksoft.net/data/legacyftp/Products/APP/UnPrjConvertor.rar
源代码:
http://www.csksoft.net/data/legacyftp/Products/APP/SRC_AllVersionPrj.rar