Shell's Home

链式网络协议封装

Aug 12, 2005 - 1 minute read - Comments

今天设计了一个通讯接口,准备运行在TCP/IP上。实现反扫描,反通讯分析,反IDS,反嗅探。其中反扫描需要使用Sniffer来做侦听诱导或者是反穿诱导(我更倾向后者),反通讯分析需要封装整个协议到ICMP层或者一些比较不容易被察觉很跟踪的协议层上去,还要兼顾反IDS的行为分析。最后反嗅探需要数据加密。这些能力还要能动态叠加和消除,这样只有设计一个动态的通讯接口了。 我先设计了一个虚基类,保证用于每个子类继承后可以自动产生链。通过链式规则,我们从上层将数据层层递推。任何层都可以发出数据,并且终止链的递推。基类有六个虚方法,链接,监听,发送,接收,判断数据进入,关闭。构造函数可以接收一个基类指针作为参数,并且传递给基类构造函数。基类构造函数将会自动产生链,并且加以管理。每次我们调用某个方法时,虚方法会自动按照链的结构依次被调用。同时基类的管理作用也作用于缓冲区,使得所有子类构成链后共享同一个缓冲。当我们设定缓冲并且发送时,最上层的发送函数就被调用,然后处理缓冲内容(如果这个子类是反嗅探用的话)。然后调用下个链上的节点,下个节点继续处理。每个节点都可以决定是否要终止调用链。 我正在编写并且测试整个系统,如果运行良好的话,我准备将虚基类的代码和部分的实现代码公开。可能数据加密方法不会公开(我可能会使用一些比较巧妙而非严谨的方法来保证安全)。使用者可以利用整个接口来收发数据(即使不是网络通讯),并且自行扩展能力。当然,作为普通的网络通讯接口,这个东西也是比较好用的。

论反利益潜规则的补偿

Aug 11, 2005 - 1 minute read - Comments

我们认为,人类是符合利益驱动模式的。如果一个人要做某个事情,那么必定有某种利益。也许是经济,也许是别的。或者仅仅是让自己觉得更好,例如献血(当然,在中国现在献血已经不是一种义务而更多是种功利行为。),或者资助失学儿童。 但是,在社会中,有一类的行为,是反利益的。这种行为不为当事人带来任何好处,并且没有任何明文推进这种行为,或者禁止相反的行为。例如,盗窃是可耻的,或者,再嫁的女人是可耻的,等等。并且,不但我们自己会被禁止这种行为,我们还会推进别人的这种行为,或者阻止相反的行为。这种行为我们称之为反利益潜规则。 举个例子来说,我们认为万般皆下品,唯有读书高。学而优则仕,当官好办事。那么,我们就推行了两个不符合利益的行为,一个是按照学历而不是能力来任用官吏,还有一个是官吏的权利是为了个人而不是群体来服务的。我们知道,这两个行为都不是有利的,但是我们确实的推行了这两个行为。其中不止因为权利的管理者和权利的所有者相异导致的权利集中所致。我们,作为权利的所有者,也推行了这种潜规则。想想当一个人没有学历而当官时,社会的评论。 没有利益的潜规则,必定存在某种个人的动力。我们认为反利益潜规则的动力有二。一个是人类的盲从现象,一个是报复和导向意识。首先我们有跟随大流的趋势,如果没有涉及切身利益,那么我们很容易对无辜的人喊过分的话。然后是报复和导向。大致就是,别人都让我这么做了,那么我一定要让别人这么做。当自己获利被规则阻止后,自己就会主动去阻止别人违反规则来获利。当自己通过某个规则获利了,那么就会推行这个规则。所以一旦规则存在了,那么他就不容易被打破。 这两个动力的结合,使得某人在推行一个规则时,一旦对某人实行了。并且这个规则具备延递性(就是说受者可以转换为施者,作为反例,如果超市店员有多收钱的潜规则,由于买者不会做超市店员,潜规则链就会断裂)。那么这个人就很可能成为规则的下个拥护者,这样规则的链条就产生了。同时可能产生大量的追随者。并且,如果规则形成很大规模,还有两个附加现象。规模保证和社会意识。所谓规模保证,指,如果一个小的规则,那么就有可能被违反,从而不会获得广泛的推行。而一个规模化的潜规则,则很难抵抗。例如如果我们说新的员工可以被戏弄,并且在很小的员工中实行。那么很可能造成新来的员工反抗,而我们是失败的一方。而如果整个公司有了这种风气,新的员工是不可能实行反抗措施的。同样的道理作用于社会意识,如果一个强潜规则大规模长期作用,那么我们很容易认为这个规则是天经地义的。例如君权神授,或者三纲五常等等。只要由君主去实施了,下个君主多数也会照做。所以打破这种潜在规则是很苦难的,因为多数人已经将这种潜在规则认为是一种常识,从而拒绝加以考虑或者抵抗。 由于以上几者对于反利益潜规则的补偿,使得反利益潜规则可以长期存在。并且作为一个群体行为使得群体趋于反常。

ViaVoice初步试用评估

Aug 8, 2005 - 1 minute read - Comments

今天Boss打字累了,准备在公司内部加个加速输入的方法。说实在我对此没有啥想法,对于我来说打字说不定还比说话快。但是总不能因此就和Boss说以后我来打字吧。所以大致想下来有三个方案,一个是ViaVoice,一个是扫描笔,一个是写字板。 扫描笔看来是最好用的一个,只要不是手写体,一扫全部搞定,没有要动脑子的部分。但是也只能用于一般印刷体,手写体花体啥的都不行的。成本也是最高的。 其次就是写字板,不过这个东西纯属鸡肋。写字的话一般人还不如打字,只有老头老太这种学不会打字的人才考虑写字板。虽然还有签名画画的辅助功能,不过有多少机会能用到呢。 最后就是ViaVoice了,成本可高可低。(IBM原装USB话筒啥价钱啊)一般来说是最廉价的快速输入方法。不过就是还要费心念字,而且要经过语音训练。公司鉴于经济价值上的考虑,决定使用ViaVoice。(说明白就是便宜啦,毕竟不好用当二十白花还可以换别的。要用了扫描笔不好用也得用了) 家里用ED下了一个ViaVoice9.1Pro的光盘版,然后安装,现场就有一个高级话筒。经过将近一个钟头的测试,试用和训练。我总算掌握了成功让ViaVoice识别九成以上文字的方法。简单来说,就是说话要靠近话筒!每次我嘴向后移动一厘米,识别率立刻降低两成,我Ft……在离话筒一厘米左右,说话可以直接拾音但是气流又不直接接触话筒的时候效果是最好的。在良好的拾音条件和阅读速度基础上,识别率还是令人满意的。不过我很奇怪,ViaVoice的低系统耗用识别非常差,高耗用也没有增加多少耗用,为啥IBM还这么定位呢?尤其是默认还是低系统耗用…… 总的来说,ViaVoice的试用结果还是让人满意的。如果正确使用,周岚的输入速度说不定尤在我上。但是如果运气不好,恐怕就……难说了。对于我们这种打字像吃饭一般的人来说,这种东西只是减轻负担的辅助工具,毕竟天天打字手还是会累的。(虽然念东西多了也会累,尤其是念那个训练文本的时候。)对于输入速度比较慢的人来说,这个不啻为一个非常好的输入手段。可惜他和扫描一样,要求你至少会一点的输入法。否则一旦出现根本不搭边的错误就无法修改了。而手写板就可以避免这点,理论上说手写板是不会遇到无法识别的东西的,除非你写的东西我都不认识。

网络实施

Aug 3, 2005 - 1 minute read - Comments

最近上班了,实在很懒。回来没事做,上班没做事,累嘛累的要死,天天跑来跑去。为了拿钱阿…… 很久没写过blog了,最近也没有时间研究啥技术的。就把在单位里面实施的一个网络系统描述下,权当技术文好咯。 首先是原来状况。一个路由连接外面,路由密码没有更改(太扯淡了)。内部一个10M的大HUB(还不是交换机,我可以嗅探的哦),九台机器,其中两台本本,不定量的本本随时接入。台式win2k,本本XP,结构很干净,不过补丁一个没打(汗……)。有一个服务器,主要打印使用,别的也用。OK,下面着手实施整体网络。 首先别的不说,路由密码我会放着就是白痴了。然后是一个个打补丁(还要看人家机器空不空,头痛阿)。然后用SSS扫描内部,果然漏洞少了。下面修改每个机器的配置,禁止SMB连接中的不严格现象(里面开了SMB文件共享哦,贝壳改成了允许的话使用加密形式),然后禁止客户机器的空连接和guest用户。打印服务器要打印,关闭了guest管理不大方便。这样客户上面基本没有漏洞了。 然后主机上面转换一个空盘到NTFS,实施大共享,做成文件服务器。给每个客户机做一个映射,这样基本可以将零散的文件共享集中到主机上,方便共享和备份。然后主机上面做一个FTP,路由上面开启部分路由映射进来,这样做成了远程FTP。严格来说,这样的FTP是瑕疵的,因为贝壳没有申请外网域名映射。FTP在被动方式时候发送的连接字符中IP是内网IP。如果FTP软件严格照来的话是连接不上的。但是FlashFXP等软件在PASV模式的时候只要返回数据中的端口部分,这个被映射了,所以可以正常使用。 然后在集中共享上放了很多软件,声明要装软件能从这里拿就必须从这里拿。找不到的下载安装后要放这里备份。这样削弱了软件后门的隐患。同时推荐了Mozllia,防止网页木马。使用Iris检测网络,防止内部攻击。其实这里应该放IDS的,而且应该更换成交换机,增快速度,防止嗅探。基本实施就结束了,等大家把文件整理到集成共享中,就可以备份刻盘出来了。

无常

Jul 24, 2005 - 1 minute read - Comments

世界就是这么无常,种下一颗苗。人说,会得到一颗树。但是真实的世界里面,种下一颗树的结果可能是被雷劈了,然后在你不想种的地方张出个头。 人喊老吾老以及人之老,幼吾幼以及人之幼,天下大同,非攻兼爱。喊己所不欲勿施于人。恐怕已经喊了上千年了吧。我们都同意,人是一种动物。那么,按动物间斗争的天性,人为何会喊出爱这个词呢?怕是在为自己种树吧。种下冤冤想报何时了的苗,结下自己的后路。可是一如生活,种下的苗没有张出想要的树,反到经常在不要的地方张了个头。 有的人对此是反过来喊,物竞天择,适者生存。可是将来落魄漂泊时如何能忍受一身的萧索?有人明知无奈,却还只能种树。无形中形同靠天吃饭的无奈。有人以因果报应以解,可是世界即使有因果,又何尝是我们能揣测的呢?以自己的因果为世界的因果,刻舟求剑掩耳盗铃就是这种人了。 有志者不惮以数代人,试图构建一个大同。使得世界所无法贯彻的因果可以得到补偿,善有善报恶有恶报。但只要有几个关键人物在其中得到了自己没有种的树,大同世界立时便会瓦解。若要天下大同,先必天下无人为私。人类若实现大同,想必也是一种悲哀吧。 所谓大同,不过仅仅是种理想。我们一般认为为天下大同的,便是对的。是为了万民的,是高尚的。需倾天下而从之。即使自己需为天下而牺牲,亦要在所不辞。其实天下无定规,我们认为天经地义的东西,何尝不是我们加给自己的枷锁呢?例如兄妹不相婚,天下岂有天然的此种道理?此乃为了延续后代而订,若说广而流传会遗毒天下故必弃之。那无意中悉知秘密,又何必视之如蛇蝎非欲去之而后快。然而人就是无法褪去自己身上的枷锁,清末有人如此,坚持王天下必刘氏。帝王将相安有种乎?今天亦有人如此,以为位高必能,岂知富不过三泽不过五的道理。天下的规矩就是没有规矩。面对种种非我可解的因果,我何去何从? 罢了,还是搞我的计算机罢。

磁悬浮列车

Jul 23, 2005 - 1 minute read - Comments

前两天小姚出国,十点的飞机。本来不准备去机场送行的。无奈去给孙Kaka和小明送钱的时候居然没带够钱,结果不去送行也不行了。查查时间,大Bus肯定来不及,坐出租过去也要50多。所以干脆奢侈一把,直接坐次磁悬浮,过过世界第一快的瘾。 说快也真的蛮快的,七点半出来,八点不到到龙阳磁悬浮站。八点二十五给小姚发了个消息说到龙阳了,三十分开车,三八分到机场,四二分已经找到人了。当时说从家出来多少时间,估计也就半个钟头的行车。如果不是时间算的太差,白白等了半个小时的话……然后一堆同学以为我开玩笑,还问是否是走过来的。(贝壳的神行功夫一流哦,和体形超不衬的。)最后拿出磁悬浮的票来,吓的N多人鬼叫鬼叫。 小姚出国的时候还真是麻烦多多,毕竟是头次,下次就好了。先是瞿感冒了,然后要喝水。接下来找不到人,天知道两个主角跑到M区去做甚,明明登机口在E区的说。还有通关时间啥的问题,零零碎碎一大套,小明的摄像机还临时没电凑凑热闹。然后通关前面瞿的行李居然超重,被迫临时拆包换重量(小姚的差很多……),还拆走堆书。勉强过关,希望他们旅途顺利吧。(貌似晚了,毕竟猥琐都到了……) 下面聊聊磁悬浮的感受吧。开始的时候非常平稳,后来速度超过300公里后有明显的震动。总的来说还是不错的,毕竟除了飞机,没有东西超过300公里运行。震动是在所难免的,飞机是通过种种方法来减轻的。转弯的时候,曲率半径和公路的三次转角曲率半径大致相当。但是转角倾斜高达三十到四十度(其实这样已经可以推算出速度了),仅仅略小于飞机。飞机这个家伙转角倾斜可以达到八十度以上,就不用说了。飞驰而过的时候东西全部都看不清楚,远处的东西还算凑合。至于啥电视上速度快了会有怎么怎么的多数是体感速度造成的主观感觉。也许飞机上看不清楚,磁悬浮可是430Km/h运行的,没有更快的车了吧。(如果你是超级汽车的试驾,当我没说)可是磁悬浮上看地面的时候只有快的感觉……没别的了。 不过说回来,磁悬浮的价钱还真是蛮贵的。单程五十来回八十,坐大巴估计是二十。磁悬浮的上座率大约是二到三成。回来的时候人比较多,不会超过五成,简直和过山车无异。如果价格下降一倍,达到单程二十五来回四十。那么估计坐大巴的人会跑过来六成以上,上座率铁定超过一百。这样回收的资金保持不变或者会更高,如此可能是比较有利的方式。不过磁悬浮的乘坐的却不方便。行李都要自己拉,居然还有X光检测……

If

Jul 18, 2005 - 2 minute read - Comments

Lyrics:David Gates Music:David Gates 演唱:莫文蔚 If a man could be two places at one time, I’d be with you. Tomorrow and today, beside you all the way. If the world should stop revolving spinning slowly down to die, I’d spend the end with you.And when the world was through. Then one by one the stars would all go out, and you and I would simply fly away. If a picture paints a thousand words, Then why can’t I paint you?

windows系统四、五

Jul 15, 2005 - 1 minute read - Comments

四,内核对象和句柄 调用API的过程中,有必要区分调用的目的和对象。说的通俗点,就是为什么调用和对谁调用。例如打开哪个文件,或者终止什么进程。调用的目的是根据不同的API和状态或者属性参数而变化的,而调用的对象则是根据句柄而选择的。 句柄大致分为内核句柄和对象句柄两种。一般来说,申请打开句柄时需要你传入安全令牌的就是内核句柄,内核句柄具有可继承性(inherit)。而像窗口等等东西就是对象句柄。SDK编程中,程序根据句柄的不同而操作不同对象,实现程序的种种目的。可以说,句柄和API组成了程序对下层的接口。 而在系统实现中,句柄则是某个内核对象,这个对象在系统中有个编号。句柄实际返回的多数是这个编号。大家可以申请两个句柄出来玩玩看,一般都是09XX之类的数字。从大小上看还属于NULL地址段(具体请看jefferey的windows核心编程),所以多数就是内核对象表项编号。这种一般以非内核句柄居多,因为这种句柄的特性可以从一个进程直接传递到另外一个进程。而有的则是某个在进程地址空间(这里插句,windows中进程和线程的区别可以理解成为,进程拥有独立空间和句柄,线程拥有独立CPU调度)内的某个数据块。这个块指向了某个确定的内核对象,这种句柄数字上一般大于4M。一般以内核句柄居多,进程间不可以传递只能继承。(其实也可以传递的,不过要用API主动复制,而不是Copy句柄过去了事) 五,通讯方法 通讯方法,通俗的讲,任何程序必定涉及和其他程序的通讯。windows中的通讯肯定是要通过API实现的。具体方法最简单的是消息通讯。需要对方的线程ID(进程ID没用的),或者进程创立的windows句柄。如果使用sendmseeage发送消息,接收方又是本线程创立的窗口,则将窗口处理函数作为子例调用(因为sendmessage是阻塞调用,本线程阻塞了来调用本线程的派生,当然,也只能,直接调用)。否则将消息挂到对方的接收区域去,然后要么阻塞,要么直接返回。(注意到为何sendmessage给本线程要直接调用了吧。阻塞的线程是无法通过messageloop的。) 如果不高兴使用消息,那么可以使用文件映射。这个方法本来是自虚拟内存中引入的,后来渐渐用来做文件的系统缓冲处理,也用来处理系统通讯。将一个文件同时映射到两个进程空间,则任何空间的变化会引发另外一个空间的变化。注意所谓文件的变化和虚拟内存一样,是未必写入磁盘的。使用这个方法需要注意同步问题。 另外,这个方法有个变形。可执行文件是PE格式时,文件载入内存时会自动做文件内存映射。此时设定属性,让某个section自动的作为同步映射,这样所有的自这个文件派生的进程在此section上是内存共享的。具体还是可以看jefferey的windows核心编程。 再差就是使用管道了,管道是用来套接标准输入输出的。去找找CUI界面重定向的问题就知道管道的用途了。除了定向到网络上,管道还可以定向到text框中。例如VC编译的时候…… 再傻点?你两个程序各申请一个winsock通讯好咯,OLE,COM,都随便你用的阿。不过拿电脑间互相通讯的东西做进程通讯,你一定是头壳坏去了。

windows系统二、三

Jul 14, 2005 - 1 minute read - Comments

二,从程序到内核 程序是被CreateProcess载入的,中间过程就略去不说了。不过程序为何可以在不同系统上运行呢? 首先每个程序会调用一系列的库函数,具体视使用语言和编译工具,编程框架而定。程序或者框架会调用系统的API,这个部分是SDK编程的内容。具体调用哪个API,在什么DLL里面,传入啥参数,在所有windows系统中都是一样的。不过每个windows系统对于具体实现就完全不同了。调用的API会在程序文件中载明。然后系统会将每个DLL载入进程空间,于是就实现了具体和系统的链接。每个DLL最终都会调用int 2eh(或者SYSENTER)陷入系统来完成各种使用。这部分就是内核的事情了。由刚刚的程序载入(每个系统都相同的动作),到内核实现(每个内核都不同的事情)。中间具体的过程就是系统附带的DLL的所完成的。 三,MM,不是美媚 MM是MemoryMangermant的简称,而非美媚。windows的内存管理在程序来看是透明的,因为对于程序来说,地址空间是连续的。主要原因是系统通过段寄存器索引了某个表,通过此表来映射你的“连续”内存地址到真实内存地址上来。当然,也有可能映射到了硬盘上的某个区域。Windows的每个内存块都对应某个硬盘上的区域。不过如果在内存中,则区域保留等待写入。如果不在内存中,需要的时候读出来而已。在你“透明”访问内存的时候,段寄存器会访问这张表(实际一般不访问,表的项目会在首次访问的时候载入某个缓冲用的快速寄存器),而后映射到真实的内存地址。如果“真实”的内存地址不存在,则会发生异常。windows的异常捕获会直接将硬盘内数据调入,然后继续程序执行。所以在访问内存过程中,程序看来是“透明”的。

病毒编年史-当代

Jul 14, 2005 - 1 minute read - Comments

现代病毒的最大特征是混合化,商业化。可能同时具备文件病毒,木马,蠕虫的特征,很难界定其归属。也可能具备多种传播途径,在多方向传播。同时可能具备多个部分分别载入。病毒的意义也渐渐从无明确的多种意义渐渐转向商业化。 AD 2001.9.18,混合代码出现,代表作 W32.Nimda,作者未知。 蠕虫通过电子邮件发送自己,搜索开放的网络共享,试图将自己复制到未打补丁的或已经有漏洞的 Microsoft IIS 网站服务器上,是一种既影响本地文件又影响远程网络共享文件的病毒。 贝壳评论: 可以看出,蠕虫同时具备了邮件蠕虫,漏洞蠕虫,社会工程蠕虫三者的特征。并且蠕虫会在系统中留下一个后门,这又具备了木马的特征。这正是现代病毒非常明显的特征。 AD 2002.5,蠕虫中的病毒,W32.Klez中的W95.CIH.1049。上面曾经说BackOrifice2000感染过CIH,这次CIH又感染了W32.Klez蠕虫,W32.Klez的大规模流行使得CIH卷土重来。这是首次由大规模蠕虫引起的病毒流行。 AD 2003,IM混合型病毒大规模流行,代表作 QQ尾巴。 贝壳评论: QQ尾巴是比较有趣的混合型IM病毒(虽然很多人不这么认为……)。通过IM传递一个消息,驱动你去某个网站访问,然后通过IE漏洞使你中毒。结合了IM传递,AcitveX或者脚本病毒,蠕虫三者的特征。这表明现代的病毒正逐渐融合各种技术,各个有害代码的严格分界线正在渐渐消失。 IM病毒有很多有趣的分支,无论技术如何变革。其核心都在IM传递的语言如何驱动人获得病毒。最近有直接发送病毒文件的例子,还有通过URL用户名结合的特定传染的(http://www.sina.com.cn:80@18.com/1.scr)。甚至有你回复是否中毒时对方自动应答没有啊的例子。这个过程中一般用的是社会工程攻击的知识,通过人的心理去驱动人。 AD 2003.2,W32.SQLExp.Worm SQL注入病毒,相信众多网管一定感触多多。 AD 2003.8,W32.Blaster.Worm 史上赫赫有名的“冲击波”病毒。步了红码的后尘,也是一个蠕虫。不过2K/XP双溢出的特性加上2K中一分钟重起的“有趣”特性造就了它的名声。曾经有人说病毒自动设计了一分钟重起,防止更新补丁。根据贝壳的分析,这个应该是溢出失败导致系统进程关闭,而后系统自行决定重起的。这种防止下补丁的方法既不实用风险也大,而且对于病毒传播没有贡献。只有呆子才用他。 AD 2003,“无法删除”的3721。3721是一家公司的网络实名解决方案。为了防止软件被删除,该公司使用底层驱动阻止核心文件和注册表键值被删除,导致系统效率低下。 老实说我对诸多解决方案没有啥兴趣,严格来说左解决右解决就是为了抢实名到底谁用的问题。但是这个事情引申出来一个问题,无法删除是否是恶意代码。如果说非恶意吧,他确实的违背了用户的意志。要说恶意吧,谁能说防删除就是恶意呢?如果这么说,防修改的保护卡是否是恶意呢?同时,这个技术也为诸多病毒提供了借鉴。可以想见将来的诸多病毒左右删不掉的场景,届时恐怕就头痛多多了。 另外贝壳插句话,谁写个linux引导专门对付3721之类的东西阿?我已经被问的脑袋大死了。这个东西DOS下删不了,上NTFS4DOS是ReadOnly的。linux支持了NTFS的RW挂载恐怕内核在软盘上已经放不下了,那就是说要光引导或者是USB引导咯……多软件也可以考虑。哪位大大,出一个吧。 PS.后记,病毒编年史的更新曾经一度中断。最后贝壳偶尔想起是否是文字中的某些病毒特征码导致的呢?结果果然如此,哎……此天意也(旁:又开始打太极了)。