2004年01月31日

 第三章 Windows运行机理

3.1 内核分析
 3.1.1 运行机理
 1. 概述
 VxD中的“x”代表任意的设备。可以把VxD看作是32位的DOS。Windows实现一个多任务的操作系统的方法是把运算时间轮流地分给每个虚拟器。
 VMM是一个32位的保护模式程序。它的主要任务是建立和维护一个支持虚拟机的框架,并对每个VM提供服务。VMM是第一个被加载到内存的VxD程序,放在系统目录下的VMM32.VxD中。
 在DOS程序中,虚拟设备驱动程序能控制系统的一切资源。当它们在虚拟机中运行时,Windows需要为每一个设备建立一种虚拟的设备来模拟DOS对硬件的操作。一个VxD程序通常控制真正的硬件设备,并对该设备在各个虚拟机之间的共享进行管理。尽管如此,并不是每个VxD程序必须和一个硬件设备相联。我们可以把VxD程序看做是在第0级别的DLL。
 Windows95下有两种VxD,静态VxD和动态VxD。静态VxD是那些从系统启动就被加载,在系统关闭前一直存在于内存中的VxD程序。动态VxD程序可以在需要的时候,通过程序本身加载或卸载。
 2. 虚拟机管理器
 虚拟机管理器(VMM)是Windows 9x的真正内核。VMM中使用了虚拟存储的技术,能够克服物理内存的限制。尽管再物理上不存在,但理论上4GB的空间是能被访问的。
 当一个Win32程序访问4MB空间内时,它其实访问的时映射的某物理空间。Windows中是按4KB的大小来对内存空间进行分页的。
 3. 虚拟设备
 静态VxD的加载过程:
 (1) 直接在system.ini中加入下一行代码:
  Device=VxD_NAME
 (2) 可以在Windows9x注册表中的HLM\System\CurrentControlSet\Services\VxD\key\StaticVxD子键下加入如下的VxD的路径和名字:VxD_NAME=PATHNAME
 3.1.2 LE文件的格式
 LE文件中代码和数据被存放在几类运行属性不同的段中:LCODE PCODE PDATA ICODE DBOCODE SCODE RCODE 16ICODE MCODE。
 总的说来,应该尽可能多地使用PCODE和PDATA,因为这样,VMM就可以在需要的时候把段调入调出内存。另外,硬件中断程序及其所用到的服务必须放在LCODE段里。
 在一个汇编的VxD项目中,段的定义是不必要的,段的定义主要用于C的VxD项目编写。
 3.1.3 VxD的设计实现
 系统消息Sys_Critical_Init:大多数VxD程序不要用到这个消息,除非VxD程序要接管一些其他VxD程序或者保护模式要用到的中断。
 在VMM加载VxD程序的时候,它是按照初始化顺序值小的VxD先加载的顺序加载的。
 动态VxD除了加载机制和接收到的初始化/结束消息跟静态VxD不通以外,它能做静态VxD所能做的一切。
 要在一个段里面定义函数,应该首先定义一个段,然后把函数放进去。
 VxD程序可以使用所有的寄存器,但是在改动段寄存器的时候一定要小心,一定不要改动CS和SS的内容,除非你对将发生的事情有绝对的把握。你可以使用DS和ES,但一定要记住在返回时恢复它们的初值。调用寄存器法服务函数时,通过各种寄存器来传递服务函数的参数。当调用堆栈服务函数时,你把要传递的参数压栈,在eax得到返回值。


3.2 消息的运行方式
 在16位时代,Windows的整个内核是32位的、分时的、抢占的。


(未完待续)

2004年01月26日

病毒名称:Trojan.ZYPass


中文名称:QQ杀手


病毒类型:特洛伊木马


病毒行为:先将自身拷贝到很多个随机分区的一级目录,并取随机文件名,并在注册表启动项添加键值,修改Exe,Reg,Txt,ini,chm,scr文件关联,使其能获得运行机会,然后在后台以Esplorer.exe文件名运行。


昨天晚上由于鼠标故障,单击有时会变成双击,加上Norton没有开,一不小心运行了机器上的一个未知程序,就中毒了。中这个毒后不能上网(因为要上网需要先运行认证程序),所有exe文件都无法打开,控制面板的大部分功能都不能使用。norton发现了其他的拷贝并将之隔离,停止未知进程似乎也不行。茫然中。


但是我知道,只要能修改注册表里面的文件关联就可以了。所以关键在于如何能修改到这台机器上的注册表?百思不得其解。“远程操作”突然一个想法跳了出来,对了,试试看!


于是请出我的笔记本(幸亏有2台电脑),两机对联。使用Dameware NT Utilities打开中毒的电脑上的Remote Registry Control服务(忘记试了,不知道中了毒后服务管理程序能不能运行),然后在Dameware NT Utilities里面远程操纵中毒机器上的注册表,修改键值如下:


[HKEY_CLASSES_ROOT\exefile\shell\open\command]@=”\”%1\” %*”


[HKEY_CLASSES_ROOT\regfile\shell\open\command]@=”regedit %1″


[HKEY_CLASSES_ROOT\txtfile\shell\open\command]@=”notepad.exe %1″


[HKEY_CLASSES_ROOT\inifile\shell\open\command]@=”notepad.exe %1″


[HKEY_CLASSES_ROOT\Scrfile\shell\open\command]@=”\”%1\” %*”


[HKEY_CLASSES_ROOT\chmfile\shell\open\command]@=”hh.exe %1″


然后修改启动项,把可疑的键值都删除,重启机器,这样就可以了。


另:如果中毒机器的Remote Registry Control服务已经打开了,直接用另外一台机器的注册表程序远程连接中毒机器就可以了,但是事先要建立IPC$会话连接。

2004年01月22日

大家都知道,在国际象棋规则中规定,马的走法是“日”字形。而无论马从棋盘上的哪个位置出发,总能找到一个走法可以遍历整个棋盘而且同一位置只走一次。

这里提供一种递归解法:
在VC6.0编译运行通过

#include
#include
#include

int deltai[]={2,1,-1,-2,-2,-1,1,2};
int deltaj[]={1,2,2,1,-1,-2,-2,-1};

int board[8][8];

int exitn(int i,int j,int s,int a[])
{
int i1,j1,k,count;
for(count=k=0;k<8;k++)
{

i1=i+deltai[(s+k)%8];
j1=j+deltaj[(s+k)%8];

if(i1>=0&&i1<8 && j1>=0 && j1<8 && board[i1][j1]==0)
a[count++]=(s+k)%8;
}
return count;
}

/*选择出口数最少的出口,s为顺序选择的开始序号*/
int next(int i,int j,int s)
{
int m,k,kk,min,a[8],b[8],temp;
m=exitn(i,j,s,a);
if(m==0)
return -1;

for(min=9,k=0;k{
temp=exitn(i+deltai[a[k]],j+deltaj[a[k]],s,b);
if(temp{
min=temp;
kk=a[k];
}
}
return kk;
}

void main()
{
cout<<"========== 马的遍历问题 ==========="<cout<<"数字是代表该格子是第几步走到的:"<cout<<"按任意键可查看其他走法:"<
int sx,sy,i,j,step,no,start;
for(sx=0;sx<8;sx++)
for(sy=0;sy<8;sy++)
{
start=0;
do
{
for(i=0;i<8;i++)
for(j=0;j<8;j++)
board[i][j]=0;
board[sx][sy]=1;
i=sx;
j=sy;
for(step=2;step<=64;step++)
{
if((no=next(i,j,start))==-1)
break;
i+=deltai[no];
j+=deltaj[no];
board[i][j]=step;
}
if(step>64)
break;
start++;
}while(step<=64);

for(i=0;i<8;i++)
{
???? for(j=0;j<8;j++)
???? cout<<"--"<???? cout<<"--"<}
cout<getch();
}
}

七星”牌香烟是日本国际烟草株式会社的“扛鼎之作”,在全球烟草界,它与“555”、“万宝路”等名牌以各自特有的品味称雄世界,在消费者中享有较高的地位和殊荣。

“7”这个阿拉伯数字在日本人的文化生活中是一个吉祥的数字,民间把每年一月七日专称谓七日正月,并在家里布置七福神等吉祥装饰物祷敬诸神以祈福祉。用“七星”做标名,可否理解为七福之星既是生活平安幸福的象征,又同样是企业和品牌兴旺发达的寓意呢?也许这就是“七星”牌烟标设计的创意之所在罢。

以大面积白色作为主体视觉语言的一部分,兼以欧美设计用抽象的点、线、面及色形构成风格相融合的设计方法,既保留了民族的审美思想、审美情趣和文化个性,又不失其设计的现代感、时代感,这既是“七星”烟标的设计特色,也是日本商品包装装潢设计的特征之一。

烟标的形象设计在“7”和“星”上做文章,从构图上看,该烟标一反欧美设计的古典对称式,采用竖线、块面分割,3/4标面由小五角星规则地组成淡灰色的色块,色块中由同明度的黄色以等大的五角星巧妙地组成“7”的字样,犹如吴空群星闪烁,若隐若现,不失朦胧之美。烟标左侧用占整个画面1/4的位置经营品牌名称,且以竖式排列,可谓构思之巧、匠心独运、形式新颖。

“七星”英文牌名字体造型既精巧俊秀,又不失刚拔挺峻之美。更值品味之处在“MILD”与“SEVEN”之间,两小排横式外文与竖式名称形成横与竖、大与小、远与近、雄浑与优美的对比,并与右侧灰面底部横排黑色外文遥相呼应,此乃诗中之眼,画中点睛之笔。烟盒封签也是一个不可忽视的部分,深灰色衬以白色小星,不但与整体协调统一,而且与黑色标名以及灰面、白底色形成不同层次的节奏韵律,使烟标色彩语言以素雅取胜。综观整个烟标,其设计风格清馨素雅,恬淡自然,从中既可看到欧美现代商标设计之思想,也可窥见日本文化中积淀的中国儒、释、道精神之一斑。

  美国制造之ZIPPO防风打火机,创于1932年,性能超卓,终身保用。ZIPPO打火机永远忠诚如一的伴着它的拥有者,照亮他的生命。
防弹打火机。

  1911月12日,在南越战场上的一次攻击中,美国军曹安东尼在敌军炮火的攻击下,左胸口受到枪击,子弹正中了置于左胸口袋的ZIPPO打火机,机身一处被撞凹了,但却保住了安东尼的命。战后,尽管ZIPPO公司期望他能将那只打火机送修,但安东尼却视[它]为自己的救命恩人,不仅慎重收藏,更希望永久保存它那受伤的机体。

黑暗海域中的飞行员

  1974年10月1日,丹尼尔驾机飞离旧金山机场不久后,发现飞机的引擎油门不顺,不得已只好采取紧急迫降的行动。事后,报上出现了一则这样的消息—[空军飞行员丹尼尔在旧金山海域内,利用ZIPPO打火机的火焰发出求救讯号,并以火焰引导海岸警备队的直升机迅速发现其迫降位置而安全获救。让我们向ZIPPO公司表达最高的谢意。

  1932年,正值美国大萧条的中期,一个雾气蒙蒙的夏夜,在宾夕法尼亚洲的布拉福的乡村俱乐部里,乔治.布雷斯代与一个朋友在神侃,那朋友在用一个1美元的奥地利产的打火机点烟。那是一个难看的、拔下铜盖子就可点火的玩艺。 “凭你的穿戴,难道你不能用象样一点的打火机吗?”布雷斯代问。 “你知道吗?乔治,”他朋友说:“这玩艺管用!”布雷斯代受到启发,他买下了这种打火机在美国的分销权,但是销售并没给他带来什么利润。这种打火机用起来麻烦。布雷斯代开始设计好使而又好看的机型。

   布雷斯代很了解自己的实力。他年轻时就在父亲的车间里学手艺,每周工作59小时,每小时挣10美分。

   他将奥地利打火机改成方块盒,握在手中很合手。打火机盖用一合叶与机身相连,棉芯周围有个风网。

   “好使又好看”的打火机诞生了。受当时另一个伟大的发明—-拉链(ZIPPR)启发,布雷斯代决定把他的新打火机起名为ZIPPO。除了打火轮和机壳表面处理方面的一些改进外,布雷斯代的原作至今基本没变。

  ZIPPO所生产的三亿多只打火机都享有终身保养服务,一只不遗。

  1932年,第一只ZIPPO面世,10年后,生产量打破百万大关。到了1969年,市场上的ZIPPO打火机已超过一亿只,1996年4月15日,第三亿只ZIPPO出厂了。若把这三亿只打火机平放,足以把一个包括射门区在内的足球场铺满12.8厘米厚的一层。

2003-4-13 发于TIB


对于过去,我们可以流泪
对于现在,我们就得坚强
对于未来,我们必须微笑


如果有来世的话,我选择不当女人,除非你那时还能喜欢我。


事务总是变化发展的,是前进性和曲折性的统一,因此我们在每向前迈一步时总会碰到这样那样的阻碍,这阻碍可以小到一脚便可跳过,也可以大到一生都无法越过。


社会是一个墨砚,一个把人心和人性都染黑的墨砚。虚伪、冷漠、自私……各种丑恶的东西都会出现。也许现在我从镜中看到的还是我自己,几年后,十几年后,我看到的我早已面目全非。


感情是一种非可再生资源,清空了,就只剩下不值钱的残渣了。


爱情就像咖啡,会苦,会甜,会提神,但更会伤身。

2003-4-13 发于TIB


刚看完所有的信,已是0:30。


放着班得瑞德的《仙境》,点了一只烟,让它,静静地燃烧。


其实我本不是一个很怀旧的人,可是信会提醒你以前发生过的事,有些事需要你用一生来忘记。电子邮件和短消息的流行,让都市的人们早已不再习惯写信。可是,手机内存总是有限的,邮箱空间也是固定的,我们总是需要不停得删除旧的信息以留点空间给新的信息,可同时我们也在删除记忆。握信在手的感觉是什么也无法取代的。


这些信我会一直留着,其中的大部分告诉我当时的我是如何地幼稚和不理智。看着看着,突然很感伤,有个朋友,或许连朋友都做不成了,在信中问我外公好。可此时,他老人家却已不在人世,就这样,我的眼泪夺眶而出。


人都有脆弱的一面,特别是一个人的时候。宿舍早已熄灯,夜,显得特别的静。我喜欢这种感觉,一个人在静静的夜,慢慢地思考。不知道以后还有多少这样的机会,可以默默地看信,默默地流泪。


每天的太阳都是新的,每天的生活都需要我们自己掌握。

一个普通的朋友从未看过你哭泣。一个真正的朋友有双肩让你的泪水湿尽。

一个普通的朋友不知道你父母的姓氏。一个真正的朋友有他们的电话在通讯簿上。

一个普通的朋友会带瓶葡萄酒参加你的派对。一个真正的朋友会早点来帮你准备,为了帮你打扫而晚点走。

一个普通的朋友讨厌你在他睡了后打来。一个真正的朋友会问为什么现在才打来。

一个普通的朋友找你谈论你的困扰。一个真正的朋友找你解决你的困扰。

一个普通的朋友对你的罗曼史感到好奇。一个真正的朋友可以威胁你说出来。

一个普通的朋友在拜访时,像一个客人一样。一个真正的朋友会打开冰箱自己拿东西。

一个普通的朋友在吵架后就认为友谊已经结束。一个真正的朋友明白当你们还没打过架就不叫真正的友谊。

一个普通的朋友期望你永远在他身边陪他。一个真正的朋友期望他能永远陪在你身旁。

  从前,有一个脾气很坏的男孩.他的爸爸给了他一袋钉子,告诉他,每次发脾气或者跟人吵架的时候,就在院子的篱笆上钉一根。第一天,男孩钉了37根钉子。后面的几天他学会了控制自己的脾气,每天钉的钉子也逐渐减少了。他发现,控制自己的脾气,实际上比钉钉子要容易的多。终于有一天,他一根钉子都没有钉,他高兴的把这件事告诉了爸爸。

  爸爸说:”从今以后,如果你一天都没有发脾气,就可以在这天拔掉一根钉子.”

  日子一天一天过去,最后,钉子全被拔光了。爸爸带他来到篱笆边上,对他说:”儿子,你做得很好,可是看看篱笆上的钉子洞,这些洞永远也不可能恢复了。就象你和一个人吵架,说了些难听的话,你就在他心里留下了一个伤口,像这个钉子洞一样。”插一把刀子在一个人的身体里,再拔出来,伤口就难以愈合了。无论你怎么道歉,伤口总是在那儿。要知道,身体上的伤口和心灵上的伤口一样都难以恢复。你的朋友是你宝贵的财产,他们让你开怀,让你更勇敢。他们总是随时倾听你的忧伤。你需要他们的时候,他们会支持你,向你敞开心扉。”告诉你的朋友你多么爱他们,告诉所有你认为是朋友的人,你的行动可以从邮寄这个小小的故事开始。有一天,当这封信回到你的信箱里时。你会发现你有一个很大的朋友圈.

  最后,我要说:”友谊的幸福之一,是知道了可以向谁倾吐秘密。”如果你收到了这封信,是因为有人在默默的祝福你,因为你也爱你身边的一些人。如果你总说太忙,不能将这封信转寄出去,老是说:”改天再寄。”你将永远都不会去做这件事的。所以,不要找借口,静心的看看这篇古老印度来的故事,然后决定为你的朋友们作一些事,从传寄这封信开始。当你说:”你是我的好朋友”时,请认真的说出来。当你道歉时请看着对方的眼睛。

  永远不要嘲笑别人的梦想。不要随便给一个人定性。说话时要慢,思想时要快。

  打电话的时候请你微笑,对方一定感觉得到。

  一、行事有主见、有原则,不以别人的喜恶作为自己行事的标准。

  二、承认人性中有光明的一面和黑暗的一面,并有容,忍和谅解的胸襟。

  三、能够接受对方——包括一切优点和缺点。懂得怎样与对方相处。

  四、充分明白“人必先自爱而后人爱之;人必先自助而后人助之”的道理。

  五、明白到良好的动机未必会带来良好的效果,了解到手段与目的之不可分割。

  六、不“以人废言”,懂得“以事论事”而不“以人论事”。

  七、不会坠入“非此则彼”、“非黑则白”的两极端思考陷阱。明白到世事往往在两极端之间有一整系列的中间状态。

  八、明白到“人比人,气死人”的道理,不拿自己跟别人滥加比较。

  九、了解到人与人之间的沟通乃世上最困难也是最有意义的一回事,而封闭自傲的心灵,正是这一沟通的最大敌人。

  十、明白到世事万物——包括自己的思想和信念,都在变动前进,并且有“以今日之我战昨日之我”的勇气。