CSK.Blog--个人原创Weblog

连载:《windows亲手灭毒宝典》完结


都快忘记自己还有没写完的东西~那今天把它结束了,呵呵

前几篇写得不太好,所以打算把精华都在一篇里写好。

今后如果怀疑自己机器中毒了,看看这篇文章也许你就能把毒清理掉!

-------------------------------------------

上一篇:http://www.csksoft.net/blog/post/killvirusDIY3.html.html

....... 点击标题阅读全文

把CrazyBall的所有代码开源~

按照原先的计划,是因该去开源了。


已经在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祝你一路走好

--------------------------------------

作者保留原代码和程序的版权,请在引用时注明原作者信息

ajax缺陷的解决和自动xml分析器

可恶……你现在看到的文章之前我已经写过几乎一样的一篇,但随着IE突然崩溃,我也只好重新打了一篇,也就是你看到的……

最近要同时开发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版本暂时不打算公开
转载和修改时请保留原作者信息。
上述函数库js下载地址:
http://www.csksoft.net/data/legacyftp/Products/code_and_lib/reformcore_xmlparser.rar
好了,终于写完了

连载:《windows亲手灭毒宝典》之三

作为对曾经我提过的要写些教程的兑现,这里先把我在交大计算机协会作的讲座《windows亲手灭毒宝典》放上来。当然其中的内容比我实际讲的要多,且要难。
由于第一次写教程,加上自己水平有限,文中出现的问题希望各位及时指正,谢谢!
文章为CSK原创,转载请保留原作者和引用作者的版权信息。
CSK版权所有

---------------------------------------------------------------------------------
第二回的地址:http://www.csksoft.net/blog/post/killvirusDIY2.html

第三回:亲手杀毒的一般步骤

本文不需要你具有诸如程序开发等方面的专业技能,但如果有一定的经验可以帮助你更好的理解

如果你还没有看过前一篇文章,不要紧,但是本文是建立在你已经掌握前篇文章所提及知识的基础之上的,所以遇到不明白的可以参考前一篇

其实事情很简单,自然就是先找出那些病毒文件,然后将他们删除

但是硬盘上保存了那么多程序,哪些才是病毒文件呢?本文将告诉你一个快速确定并找出病毒文件方位的方法

由前文我们了解到,所有在windows环境中运作的病毒,一般都是以具体的文件形式存在的,并且往往是那些可执行文件。但是,单单是这些保存在硬盘上的文件还是不能起什么作用的。一个程序的运行必须是由系统将它们从磁盘的文件中读取出来,然后存放在内存中并加以执行。这个过程常被我们称作:加载。

病毒也是一种程序体,自然的,他也需要有系统事先加载到内存中执行才能做恶。当然这种加载有2种途径:

  1. 你可能不小心点击打开了一个病毒文件(你主动加载了它,往往是你第一次感染病毒的途径)
  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 c:\windows\winsys.exe
  • Explorer c:\windows\system32\explorer.exe
  • (默认) c:\commond.com

首先,这里只能说是可能是病毒,并不能马上确定,但是为什么说这些文件的嫌疑最大呢?下面给出一些规则

  1. 在加载清单中大部分程序都是系统中安装的应用程序,而很少是系统自身的组件
  2. 由第一条得出,系统组件几乎不会出现在清单中
  3. 有第一条得出,清单中的程序并不是系统所必须的,也就是说即使不去加载他们,你的windows还是照样可以运行。
  4. 正常情况下,(默认)这个条目应该是空白的
  5. 病毒喜欢隐藏:多藏于windows目录之下或者是很简单的路径格式:如C:\virus.com。这样有利于其传播
  6. 为了伪装自己,目前大多是病毒喜欢将自己的名字伪造成系统中的一些组件名

所以对于第一次尝试手工杀毒的人来说,如果很难确定哪些是病毒的话不妨删除所有的清单条目(注意,那个叫做“默认”的条目是无法清除的,但你可以把它的内容删除)

那么为什么那些文件可能为病毒呢?首先我们看“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

但怎么来记住这么长的目录呢?下面给一个敲门:

  • HKEY_LOCAL_MACHINE表示本地系统
  • SOFTWARE记录的都是软件信息(区别于硬件的驱动信息)
  • Microsoft windows是微软公司自己的产品
  • Windows\CurrentVersion 当前版本的windows系统
  • Run 要运行的清单

最后附上一些清单中常见程序的说明

  • CnsMin:

Rundll32.exe C:\WINDOWS\DOWNLO~1\CnsMin.dll,Rundll32
3721中文实名hook的主进程,难怪一段时间被诺顿视为病毒

  • helper.dll:

C:\WINDOWS\system32\rundll32.exe C:\PROGRA~1\3721\helper.dll,Rundll32
3721上网助手,一个熊样……就是毒!

  • TkBellExe:

C:\Program Files\Common Files\Real\Update_OB\realsched.exe  -osboot
RealPlayer的广告客户端,可以del掉

  • ctfmon.exe:

C:\WINDOWS\system32\ctfmon.exe
M$别出心裁的为了配合office XP以上版本进行输入法监控(就是微软拼音)和文档检索用的监控进程

好了,这回就到这里,最后祝各位情人节快乐

CSK 2006.2.14

CSK版权所有,演讲ppt在ftp.csksoft.net中下载。

如何自动让你的blog和msn space同步内容

好东西自然不敢独享,于是我把ReformCore的这部分代码专门抽出来写了个插件,如果你有自己的空间,并且使用Z-blog([url]http://www.rainbowsoft.org/zblog/[/url]),那你直接就可以用这个插件并且按照此文的设置便可实现将你在blog上的文章自动发往MSN space。 不过我希望你在传播和修改这些文件时保留里面的原始作者信息,不但是我的,也最好能保留Z-blog的作者信息。 首先简要介绍下原理:其实我都不好意思说,因为比较没“技术含量”呵呵。 这以前能轻松实现要多亏MSN space支持通过发送给他email内容作为新发布的文章。如果你的网站空间支持通过编写脚本来发送邮件,那么只要修改下你使用的blog的代码,让他在你发表新文章以后自动发一份带有文章内容和标题的email到msn space的专门地址后便能做到自动更新MSN space了。 所以这里很遗憾的是如果你有自己的空间,但Blog仍旧是其他运营商提供的话,那仍旧没有办法实现的。 下面来看看MSN space这头如何设置: 1.进入space的管理页面,选择[设置]->[电子邮件发布]: 2.就像上图看到的那样,先把“打开电子邮件发布”钩上 3.填入你用来发送日志的email地址。这里要注意,如果你的空间附带了企业邮局,建议用它,外面服务上提供的email地址最好不要作为发送email。当然你也可以留一个自己常用的邮箱 4.填写机密字,其实只要胡乱填写一通便可,他只是简单的加载生成的用以接受你日志的email地址用户名后面罢了 5.选择"立即发布网络日志项"。这个不用解释了 6.记下那个"xxx.xxx@spaces.msn.com"的邮件地址,今后日志就是发到这里面去的,最好不要将他公布。 ok,MSN space的必要设置已经结束了,如果你在用Z-blog。那么只要把我写的插件覆盖到blog目录下,并且修改下那个"helper_mail_packer.asp"里面关于你email信息的配置就能使用了。在编写文章时,你会发现编辑页面多出了“将此文发送至MSN space”。把它钩上就以为这系统会把这篇文章发送到space上。 对于其他blog系统的朋友我就稍微说明一些注意点了。首先我推荐用CDO组件而不是Jmail。其中的原因是我原先使用Jmail一旦文章正文由中文字符,msn上就会显示乱码。我怀疑是编码不一致,但jmail把发信编码改为utf-8后发出的信件也成乱码了。但可能是我水平不够,所以你也可以尝试一下。 对于CDO组件唯一缺点就是有些人反映支持他的空间服务商不多,如果你的空间不支持那就只能用jmail了,至少发过去的标题是正常的。CDO的使用外面有很多资料,我就不多说了,同时这里提供的Z-blog的插件中发信时作为单独的函数提供的,所以也可以直接用里面的代码。 至于具体如何修改你的blog就看各位本事了,也可以问问这个blog的开发者,如果是自己做的那就更不用说了吧。 好了,下面是Z-blog的msn space同步更新插件下载地址: [url]ftp://FTP_visitor:visitor@ftp.csksoft.net/Public/Products/Misc/pug_msnspace_updater_by_csk.rar[/url]

连载:《windows亲手灭毒宝典》之二

前沿:作为对曾经我提过的要写些教程的兑现,这里先把我在交大计算机协会作的讲座《windows亲手灭毒宝典》放上来。当然其中的内容比我实际讲的要多,且要难。 由于第一次写教程,加上自己水平有限,文中出现的问题希望各位及时指正,谢谢! 文章为CSK原创,转载请保留原作者和引用作者的版权信息。 CSK版权所有 --------------------------------------------------------------------------------- 呵呵,上次第一篇还是很久前写的了~~ 第一回的地址:[url]http://www.csksoft.net/blog/post/7.html[/url] 第二回:进入正题 windows下亲手灭毒之完全解决方案 本文不需要你具有诸如程序开发等方面的专业技能,但如果有一定的经验可以帮助你更好的理解 1.感性认识的建立-病毒的文件形式和各自特征 所谓病毒,一般都是指可以执行的数据体,说白了就是那些exe,dll等程序文件,当然情况也许更复杂,程序这个概念是脱离与具体的文件形式的,他们只是一段数据而以,应该所谓的病毒可能包括与诸如txt文件中,但很少见(.txt就算包含病毒也是无法自我加载的)。 目前在win32环境下,常见的病毒是以exe;com;dll;scr等扩展名存在的。同时也能见到cmd;bat;vbs这类脚本性病毒(你可以了解些脚本script的知识)。 一般情况下,我们把.exe的文件叫做应用程序,这样说的原因一方面是因为他是可执行的,也就是无需借助其他程序而自我启动(严格的说都无法做到自我启动,这里就不涉及了)。对于病毒体,为了能在复制后马上感染侵占系统,它需要这方面的特征。 所以在下面的文章中,你会发现给出的病毒例子都是.exe文件 dll文件叫做“动态链接库”(dynamic link library),它的名字含义这里不再深究,不过你需要明白他是无法自我启动,也就是不可直接执行的。dll文件中同样也包含程序的代码,但他们是需要被其他可执行程序,如exe加载以后才能执行其中的代码部分的。
图:作为系统核心之一的user32.dll,正因为是dll文件,它能结合到每个程序进程,提供必要的系统支持
所以我们就知道,以dll格式存在的病毒无法直接运行,他们需要另一个如exe的程序事先加载后才能工作(有3种可供参考的方式,一是另一个exe程序也是病毒体,它直接加载dll文件作为自身一部分,第二种方式采用系统自带的rundll32.exe加载,第三种是比较讨厌的情况,dll文件开始又另一个exe文件主动加载后,利用被称为钩子hook技术将dll注入到其他的程序进程中。这用的病毒是最难清除的)。
图:在任务管理器中看到的rundll32.exe的进程实际起作用是加载了的dll文件
如果病毒主体以dll文件存在以后,他必须指明加载它的程序,这可能给其传播造成一定障碍,但有带来了很多优势。比如: 1.由于windows自带的进程管理器(WindowNT)只能以主进程文件为单位察看进程,可以认为是只能看到正在运行的exe文件,而一般看不到正在执行的dll文件(因为dll是exe加载的,它映射到了exe为进程的地址空间了)。所以一般在没有第3放工具的情况下,是无法通过任务管理器找到正在运行的dll文件病毒的。 2.无法直接将正在运行的dll文件病毒关闭,这样说是因为dll文件都映射到了加载它的exe文件中了,利用进程管理器只能将它属于的进程程序一起关闭。比如word因中毒而加载了virus.dll病毒的文件体,那么想从内存中清除病毒只能把word也关闭了 3.利用上面的特点,可以做到病毒体永远驻留内存而无法清除。其实方法很简单,利用钩子技术,将dll注入到系统所有的进程中,同时这些dll监控着每个进程是否被自己注入,如果没有则重新注入。这样除非关闭所有程序,否则永远无法关闭运行中的病毒。
图:采用PEid自带的任务察看器,可以发现实际上所有进程都加载了其他的dll文件。而且无法把其中莫一个dll关闭
当然还有更极端的情况,那就是利用驱动程序来编写病毒(几乎没有这种情况,所以你可以跳过)。 首先这里说一下x86保护模式的事情。你应该知道目前你正在运行windows的CPU工作在成为32位保护模式的环境下。你不用被这个神秘的名词吓倒,他其实就是一种等级管理机制:程序在运行时有ring0和ring3的2种权限,ring0程序拥有很高的权利,它能操作计算机所有的硬件设备,而ring3程序则十分可怜,他只能乖乖受ring0程序管理,同时基本上无法直接对硬件进行操作,而必须通过ring0的程序中转。 这就是windows中各类程序的现状:操作系统的内核、一些服务程序、驱动程序都是ring0级别的,他们能对你的电脑做任何能做的事情,而一般意义上的程序,如exe文件的程序都是ring3的。 这样做一方面是为了实现多任务环境,同时更重要的是能使系统运行的非常稳定:ring3程序无法直接控制硬件,必须通过ring0程序,这样如果有个设计有缺陷或者不怀好意的程序企图进行破坏性操作时,他就能被ring0程序截获并强行中止。 所以可以知道,如果病毒写成了一个驱动程序(ring0级别),那是很危险的,最好的例子就是CIH! 这类病毒的名字往往以wdm和drv为主(后者是win9x的标准,在最新的windows内核中以被淘汰)。不果他们和dll文件一样,无法自我加载。 上面以程序文件的角度分析了几类病毒格式的工作方式,当然大家不用被提到的极端例子吓怕了。下回将告诉你这些病毒是如何感染并永久的在系统中存活下去的 CSK版权所有,演讲ppt在ftp.csksoft.net中下载。

用令牌信息来验证Flash提交信息的合法性

(详情请点击文章标题) 今天GRE学好回来的比较早,那就说一下昨天提到的问题: 搞过动态网页脚本比如ASP的朋友都知道,有一个HTTP_REFER的系统变量可以获得本次请求是又那个页面提交的。换句话说,可以用这个东西来知道用户是通过那个页面或其他网站上页面的连入本网站的。 ..... 那Flash和HTTP_REFER有什么关系呢?这里就不是单纯的盗链问题。我认为一般下面几种情况是需要判断HTTP_REFER的。 比如我在网站上写了一个Flash游戏,游戏结束后允许玩家上传自己的姓名和得分。这就会出现安全问题: 做过Flash交互的人都知道,Flash和后台网页脚本的交互手段目前一般是用MovieClip.LoadVarible();和XML.sendAndLoad()方法。这没什么问题,但服务器是不会判断提交数据的真实性的,只要我协议和语法格式一致,任何人在任何地方都能提交一个伪造的“得分”到服务器。而如果那个游戏时对高分进行奖励的,那损失可不小。 那么是不是也能用HTTP_REFER来解决呢?理论上似乎可以,但试过人会发现,那该死的FlashPlayer是不会发送Refer数据的(可能为了安全性)。这样HTTP_REFER就完全失效了。 ...... 但现在Flash完全是透明的东西。外面各种反编译软件可以很轻松的把swf高保真的还原到fla格式。这个密码也自然形同虚设……而且上面的登陆办法也有问题:如果玩家本人提交伪造数据呢? ..... 呵呵,想起来了吗?Flash8开始有了个新特性,可以利用ExternalInterface类随意访问外部JavaScript函数,也可以从外部JavaScript调用Flash中的用户函数。 ..... 首先调用外面的GetToken函数,然后GetToken调用了flash中注册的OnGetToken,并把Token作为参数传递回来。

数据结构课程实践

这个学期的数据结构课终于告一段落了,虽然数构我高中就看过一些,但现在学好了还是觉得这是门比较复杂的学科。今天附上的就是这门课的每章的大作业。 虽然我不想对学校这门课作太多评价,感觉上的很不好,而且其实没有多少人是自己完成作业的(其实那应该是学校造成的)。但如果每次每道题目都能去做,尤其是那些打星号的题目也作的话,那的确能学到不少知识的。 我附上的文件是我的作业代码,当然我放上来的目的不是为了让大家抄袭,而且也不可能,因为关键代码我都留有个人信息。主要目的有这几个: 1.每次大作业对我都是个相当不好受的经历,每次都要花2-4天的时间去完成(当然我可以保证作业质量)。特别是最近刚完成的图那一章的作业更是令我痛苦。每次大作业其实已经不亚于编写Stereoic一半的工程量了。同时里面大部分题目我都尽力做了,除了AVL树和AOV网络求所有可能的拓扑序列这2道外。所以即使作业中仍有不足,我相信能给各位起到一些微弱的参考意义可已经足够了 2.我编写作业过程中尽力以符合工程强度的要求来书写代码,而不是简单的应付作业,所以其中每个组建,每个数据类型都可以立刻用于其他的实际应用中,同时可以保证运行的效率和健壮性。 这一套作业集是自成体系的,比如前面实现的双向链表,堆栈,将会在后面的使用中用到。 作业中已经提供的现成数据结构有: 双向链表,单链表,和他们的相关常用操作函数 多项式类,支持多项式乘法和加法 基于链表的队列和堆栈 基于数组的共享堆栈 带有父节点指针的二叉树 BST树 基于多重邻接表的无向图、基于十字链表的有向图 基于数组的并查集 二叉树的前序、中序、后序、广度优先遍历算法 图的广度、深度优先算法 图的KRUSKAL \ Dijkstra算法 有向图求解强连同分量的算法 以上的类型和相关算法在作业中是以单独的类形式封装的,同时以独立的头文件保存。所有代码采用C++模版。程序没有采用任何STL元素,同时支持异常处理。 正如我前面说的,实现数据结构并非是什么轻松的事,所以如果需要也可以采用我现成的代码来实现更高级的功能,而不需要花大力气去实现原始结构了。至于具体如何大家还是开代码吧。 同时程序中还附上一个自己写的将二叉树打印成文本形式的函数,这个在编写二叉树相关的程序是使相当直观的。比如下面就是函数直接显示的一颗BST的画面:
==================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

 最后真心祝愿每一位将要考数构的朋友都能通过

Win32编程经验

呵呵,其实也不是什么原创的东西。只是拿出来和大家分享^_^ 第一回 1.如何减小程序尺寸 有没有发现如下短短的代码用VC编译出来的Release版也要46kb呢? 而如果你用MASM写换等效的汇编只有2kb左右。虽然我们可以用AsPack或者UPX加壳,但如果本来程序就能控制的很小岂不更好? 2.如何删除程序本身和正在运行的程序 其实不算删除,只是移位。但对付病毒和流氓软件足矣! 3.如何变出在一行上显示比如"正在计算:80%完成"的console?

[开源][下载]VC工程转化器

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

 

 

 

分页:[«][1][2][3]4[5][»]

日历

<< 2015-6 >>

Sun

Mon

Tue

Wed

Thu

Fri

Sat

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)