<?xml version="1.0" encoding="GB2312"?>  
<rss version="2.0" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" 
xmlns:admin="http://webns.net/mvcb/" 
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
  
<channel> 
<title><![CDATA[EVA的回收站]]></title> 
<link>http://zzzevazzz.bokee.com/index.html</link> 
<description><![CDATA[<b>目的</b>：把点滴想法都扔进回收站保存，以便多年后看清自己的成长轨迹。<br><br>
<b>内容</b>：基本上是网络安全方面，只原创不转载。<br>]]></description> 
<dc:language>zh-cn</dc:language> 
<dc:creator>zzzevazzz@126.com</dc:creator> 
<dc:date>2007-01-03T23:12:34Z</dc:date> 
<admin:generatorAgent rdf:resource="http://blog.bokee.com.com" /> 

<item> 
<title><![CDATA[又到年终总结的时候了]]></title> 
<link>http://zzzevazzz.bokee.com/6014998.html</link> 
<description><![CDATA[<p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 又到年终总结的时候了。去年一年只更新了两次Blog，实在是有违“记录点滴想法”的初衷呢。一年的时间里我的精力完全放在工作上，即便是业余时间也有一半的心思在思考工作上的问题，最后剩下的一点时间则花在卡通、漫画和电子小说上了。虽然在工作中得到了不少关于安全和Win内核的“想法”，但我无法轻易地将这些与大家共享。因为我发现安全环境的可靠度在某种意义上依赖的是“无知”。比如0DAY，当漏洞没有被发现或没有在补丁发布前被公开，那么大家是安全的，反之则蠕虫、病毒、木马流行。虽然我那些“想法”无法与0DAY的杀伤力媲美，而且刀可以杀人也可以救人，但如今这个资讯发达的年代，坏事总是传千里，破坏总比建设容易。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 我知道，草原上维持适当数量的狼对羊群是有好处的。黑客们每天都在发现安全漏洞，尝试入侵Internet的每个角落，但世界并没有变得更糟，而是更安全了。因此，除去前面说的冠冕堂皇的理由，让“想法”留在自己脑中的另一个原因是，我要靠它们混口饭吃。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 在安全行业混了一段时间后，我有两点体会：一是搞安全（或做黑客）拼的是灵感、创意。这一点我早就意识到了，这也是我最初对黑客技术产生浓厚兴趣的原因，现在我更确定这一点了。二是国内的安全产品（特别是软件）普遍缺乏核心技术。AV、防火墙、“防水墙”等传统的安全产品就不用说了，最近热门起来的电子文档保护产品也充斥着夸夸其谈、技术雷同等问题。要么是把机密文档转换为私有格式，完全把用户体验丢在一边（专用编辑器做的再好，能好过Word？）。要么是拿“驱动级透明加解密”当尚方宝剑，自以为所向无敌，结果连个线程插入读文件都对付不了。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 在我看来，缺乏核心技术的原因并不是技术实力差，而是产品设计思想落后。比如“透明加解密”，几乎所有人都认为，用文件系统过滤驱动来实现通用性好，效率高，安全性自然也强。事实上，他们忽略了一个朴素的道理——加密要尽可能早，解密要尽可能晚。也就是说，当应用程序产生机密数据的时候就应该加密它，直到应用程序需要使用数据的前一刻才解密它。这样才最大程度的降低了机密信息被截取的可能。一味地追求底层，恰恰和这种原则背道而驰（现在是要保护文档，不是写rootkit啊）。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 相比之下，国外的文档保护产品要好一点。特别是起步较早的韩国，几款产品水准较高（产品名字我就不说了，免得成为免费广告）。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 介于国内文档保护产品的保护措施普遍薄弱的现状，我还是让我的那些“想法”烂在肚子里吧。希望明年的这个时候，我可以一吐为快。呵呵。</p>]]></description> 
<guid isPermaLink="false">6014998@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Other</dc:subject> 
<dc:date>2007-01-03T23:12:33Z</dc:date> 
</item> 
<item> 
<title><![CDATA[一个反键盘记录工具的分析]]></title> 
<link>http://zzzevazzz.bokee.com/6014637.html</link> 
<description><![CDATA[<p><strong>(下面的文字本是我在某个论坛的回贴，后来发现跑题了，食之无味弃之可惜，于是转贴到这里<img src="http://www.blogdriver.com/jsp/face/22.gif" />)</strong></p><p /><p>除了nProtect，国外还有一些反键盘记录工具，比如下面这个还不错：<br /><a href="http://www.anti-keyloggers.com/">http://www.anti-keyloggers.com/</a></p><p /><p>是个通用型的，与QQ的nProtect专门用于保护密码不同。<br />而且反破解做的不错（对我这种破解外行而言，呵呵）。</p><p /><p>它的原理我简单的说一下，就是替换键盘类驱动的KeyboardClassServiceCallback，然后把得到的ScanCode传递到用户态，由位于Winlogon.exe的一个线程负责调用NtUserSendInput，将按键消息发给当前焦点窗口。</p><p /><p>应该说这款反键盘工具的设计思想是很先进的：<br />1，选用KeyboardClassServiceCallback的好处是，比键盘过滤驱动更底层，对PS/2或USB键盘通用。<br />2，用Winlogon转发消息的好处是，自动适应多用户(session)的情况。<br />3，用NtUserSendInput的好处是，不会被Windows消息钩子挂钩。<br />4，虽然它没有构建起完全独立的键盘输入通道（这么做太复杂，兼容性不好），但对于没有重建的部分，通过检测钩子的方式弥补。</p><p /><p>它的钩子检测功能对于用户态不错，遗憾的是，居然漏掉了中断服务挂钩的检测，实在是个大疏忽。另外，作为通用型保护机制，不可避免的具有一些局限性，比如无法防御用窗口子类化来做键盘记录。</p><p /><p>还有一款产品：</p><p><a href="http://www.anti-keylogger.net/">http://www.anti-keylogger.net/</a></p><p>以后有空再看看，呵呵。</p>]]></description> 
<guid isPermaLink="false">6014637@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Security</dc:subject> 
<dc:date>2007-01-03T21:22:01Z</dc:date> 
</item> 
<item> 
<title><![CDATA[Any2Bat.vbs]]></title> 
<link>http://zzzevazzz.bokee.com/5913260.html</link> 
<description><![CDATA[<p>一个把任何文件转成批处理的脚本。<br />用Base64编码数据，好处是压缩了大小（相对bin2str而言），缺点是增加处理时间和脚本复杂度。<br />由于效率瓶颈是在bat生成vbs这一步，所以总的来说还是合算了。<br />写文件用ADODB.Recordset，比debug好使多了。<br />大部分事都是脚本做的，批处理只是用echo来生成脚本而已。<br />echo版的好处是，全选复制粘贴到cmd shell里就把文件上传了。</p><p>下面是代码。版面限制，排版有点乱:(</p><p>'Any2Bat.vbs by zzzEVAzzz<br />on error resume next<br />set arg=wscript.arguments<br />if arg.count=0 then wscript.quit<br />with CreateObject(&amp;quot;ADODB.Stream&amp;quot;)<br />.type=1:.open:.loadfromfile arg(0):bs=.read:l=.size:.close<br />end with<br />if err.number&amp;lt;&amp;gt;0 then wscript.quit<br />set fso=CreateObject(&amp;quot;Scripting.FileSystemObject&amp;quot;)<br />with fso.opentextfile(arg(0)&amp;amp;&amp;quot;.bat&amp;quot;,2,true)<br />if err.number&amp;lt;&amp;gt;0 then wscript.quit<br />.writeline &amp;quot;@echo bs=_&amp;gt;xx.vbs&amp;quot;<br />for k=1 to l step 129<br />.write &amp;quot;@echo &amp;quot;&amp;quot;&amp;quot;<br />.write b64b(midb(bs,k,129))<br />.writeline &amp;quot;&amp;quot;&amp;quot;+_&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />next<br />.writeline &amp;quot;@echo &amp;quot;&amp;quot;&amp;quot;&amp;quot;:set rs=CreateObject(&amp;quot;&amp;quot;ADODB.Recordset&amp;quot;&amp;quot;)&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo set ado=CreateObject(&amp;quot;&amp;quot;ADODB.Stream&amp;quot;&amp;quot;)&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo l=len(bs):ss=&amp;quot;&amp;quot;&amp;quot;&amp;quot;:for k=1 to l step 4096:ss=ss+ub64(mid(bs,k,4096)):next:l=len(ss)&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo rs.fields.append &amp;quot;&amp;quot;b&amp;quot;&amp;quot;,205,l/2:rs.open:rs.addnew:rs(&amp;quot;&amp;quot;b&amp;quot;&amp;quot;)=ss+chrb(0):rs.update&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo ado.mode=3:ado.type=1:ado.open:ado.write rs(&amp;quot;&amp;quot;b&amp;quot;&amp;quot;).getchunk(l/2)&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo ado.savetofile &amp;quot;&amp;quot;&amp;quot;+fso.getfilename(arg(0))+&amp;quot;&amp;quot;&amp;quot;,2:ado.close&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo function ub64(s):dim t(4),b(3):ub64=&amp;quot;&amp;quot;&amp;quot;&amp;quot;:n=len(s):r=2 &amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo if n mod 4^&amp;lt;^&amp;gt;0 then exit function:end if:for i=1 to n step 4:for j=0 to 3 &amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo a=asc(mid(s,i+j,1)):if a=43 then:a=62:else if a=47 then:a=63:else if a^&amp;gt;47 and a^&amp;lt;58 then:_&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo a=a+4:else if a=61 then:a=0:if r=2 then r=j-2:end if:else if a^&amp;gt;64 and a^&amp;lt;91 then:_&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo a=a-65:else if a^&amp;gt;96 and a^&amp;lt;123 then:a=a-71:else:exit function:_&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo end if:end if:end if:end if:end if:end if:t(j)=a:next&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo b(0)=t(0)+t(1)*64 mod 256:b(1)=t(1)\4+t(2)*16 mod 256:b(2)=t(2)\16+t(3)*4 &amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo for j=0 to r:if b(j)^&amp;lt;16 then ub64=ub64+&amp;quot;&amp;quot;0&amp;quot;&amp;quot;:end if:ub64=ub64+hex(b(j))&amp;gt;&amp;gt;xx.vbs&amp;quot;<br />.writeline &amp;quot;@echo next:next:end function&amp;gt;&amp;gt;xx.vbs&amp;amp;&amp;amp;cscript.exe //nologo xx.vbs&amp;amp;del xx.vbs&amp;quot;<br />end with<br />const b64 = &amp;quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&amp;quot;<br />function b64b(bin)<br />b64b=&amp;quot;&amp;quot;<br />n=lenb(bin)<br />for i=1 to n step 3<br />a=ascb(midb(bin,i,1))<br />b64b=b64b+mid(b64,a mod 64+1,1)<br />if ib=ascb(midb(bin,i+1,1))<br />b64b=b64b+mid(b64,(a\64+b*4)mod 64+1,1)<br />if i+1c=ascb(midb(bin,i+2,1))<br />b64b=b64b+mid(b64,(b\16+c*16)mod 64+1,1)<br />b64b=b64b+mid(b64,c\4+1,1)<br />else<br />b64b=b64b+mid(b64,b\16+1,1)<br />b64b=b64b+&amp;quot;=&amp;quot;<br />end if<br />else<br />b64b=b64b+mid(b64,a\64+1,1)<br />b64b=b64b+&amp;quot;==&amp;quot;<br />end if<br />next<br />end function</p><p>用法很简单，就一个参数——要转换的文件全路径。<br />也可以直接拖放文件到这个vbs的图标上。 <br /></p>]]></description> 
<guid isPermaLink="false">5913260@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Scripts</dc:subject> 
<dc:date>2006-11-30T18:22:43Z</dc:date> 
</item> 
<item> 
<title><![CDATA[评所谓的“主动防御软件”]]></title> 
<link>http://zzzevazzz.bokee.com/4943427.html</link> 
<description><![CDATA[<p><span class="tpc_content"><font size="2"><strong>真是好久没更新Blog了-_- 发一个我在EST论坛的回帖(第48楼)</strong></font></span></p><p><span class="tpc_content"><font size="2"><strong>原贴位置：<a href="http://forum.eviloctal.com/read-htm-tid-15522.html">http://forum.eviloctal.com/read-htm-tid-15522.html</a></strong></font></span></p><p><span class="tpc_content"><font size="2">&amp;nbsp;&amp;nbsp;&amp;nbsp; </font></span></p><p><span class="tpc_content"></span></p><p><span class="tpc_content"><font size="2"></font></span></p><p><span class="tpc_content"><font size="2">&amp;nbsp;&amp;nbsp;&amp;nbsp; 所谓的主动防御技术，目的是解决“病毒总是出现在杀毒软件更新病毒特征码之前”这个问题，但是，应用主动防御之后，仍然是杀毒软件在明，病毒/木马在暗。病毒/木马制作者可以在自己的电脑上安装一套所谓的主动防御软件，然后慢慢研究，不用费多少时间，无法“主动防御”的病毒/木马就会诞生。所以，说主动防御能解决AV软件杀毒能力滞后的问题，只是一种炒作。据我所知，主动防御或行为检测的概念，在DOS时代就有了，只是没有明确提出来而已。国内的AV要么是买国外的引擎（以至于没有版权，不能深入开发，甚至不能修正bug），要么烂得可以。只好搞点“新概念”吸引眼球，特别是在市场已经被瓜分完毕，新的AV想分杯羹的情况。我前段时间见到一个据说是国内最早(比江民早)搞AV的人，在他看来，国内的查杀毒技术，10几年来就没有大的进步，搞来搞去就那一套。<br /><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 主动防御依赖于行为检测，即所谓的“病毒行为动作特征库”。显然，这个行为特征库也存在信息滞后问题。比如对于木马修改注册表实现自启动这类行为，正常与否取决于注册表键值，没有一劳永逸的办法，只能是知道一个识别一个。大家可能都用过hijackThis或Autoruns，它们能列出系统中各种能实现自启动的地方，尤其是注册表特别多。随版本的升级，自启动项还在不多增加。再比如，我在《深入挖掘Windows脚本技术》中提到的WMI永久事件，这也是自启动，不知道现在市面上的AV有没有检测这个行为的。群众的创造力是无限的，再举个极端的例子，ACPI是可编程的，仍然写在注册表中(HKEY_LOCAL_MACHINE\HARDWARE\ACPI)，有AV想到了吗？还有，写个dll取名和系统常用dll一样，导出的函数也一样，放在WINNT目录，当explorer.exe启动时，先加载的是这个Trojan Dll。有AV管这个吗？仅仅一个自启动，行为就层出不穷，再来个文件感染行为呢？<br /><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果说，从病毒特征值检测到行为检测，一定程度上减少了“特征库”更新的频率，这是个进步。那么另一方面，误报率恐怕反而会增加。仔细想想就会知道，“擦边球”实在太多了。比如金山词霸（消息钩子、远程线程），Serv-U（安装服务），SoftIce和VMWare（安装驱动），BT和eMule（修改防火墙规则）等等。当然，AV会采取加权方式，只有行为的权值累积到某个阈值才报警。再复杂点的算法是把行为分组，一些普通的行为连贯起来就有了权值。这类方案算不上创新，任谁来设计都能想到。且不论该方案本身的复杂度，即使实现了，离“智能”还差得远着呢。当行为检测碰上QQ——自启动、安装驱动、监听端口、文件传输、屏幕截图、远程控制、安装IE插件、弹出广告，这么多“恶意行为”集中在一个程序里，是木马吗？？我开发安全产品的经验告诉我，控制粒度越精细，例外越多。QQ特例处理了，MSN呢？Skype呢？3721算不算木马？yahoo助手、网易泡泡，IE插件何其多。假设AV记录某个程序的各种行为，列成一张表，隐去文件名等信息后，交给“专家”来判断，能确定该程序是否木马吗？我看难说得很。人做不了的事，程序更搞不定了。<br /><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 最后，我统计了一下我的电脑（刚安装不久）上Program File下的30个软件，一半以上具有至少一个“恶意行为”，1/3具有两个或两个以上“恶意行为”。从概率上说，全世界有1/3的程序可能被拦截并提示用户，行为拦截机制多数情况在制造麻烦。要知道，多数AV用户是不熟悉计算机的，别指望拦截行为后给出提示，交给用户判断，就能“明辨是非”。而且，不是由用户自己装的就一定是正常的软件，也许是文件捆绑、伪装、欺骗用户执行，或者漏洞溢出执行，或者黑客入侵并像正常用户一般执行程序。当然，这种问题稍稍超出主动防御的范畴了。<br /><br />&amp;nbsp;&amp;nbsp;&amp;nbsp; 总之，我认为目前的主动防御技术，仅仅是原有技术的补充（很多AV已经这么做了），再往多的说就是炒作了。</font></span><br /></p>]]></description> 
<guid isPermaLink="false">4943427@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Security</dc:subject> 
<dc:date>2006-04-25T11:28:10Z</dc:date> 
</item> 
<item> 
<title><![CDATA[又是一年春来到]]></title> 
<link>http://zzzevazzz.bokee.com/4324963.html</link> 
<description><![CDATA[&amp;nbsp;&amp;nbsp;&amp;nbsp; 过去的一年，我的生活经历很大转变。从象牙塔走入社会，我感触很多，学到了很多，也成长了很多。这一年我过得很充实，充实得都没时间更新Blog^_^。今年是个暖冬，没有下雪。回首去年元旦，雪夜，我在寝室上网写Blog，心情与现在相比，就像那天气一样，冷暖分明。人生真是充满了机遇和挑战，就看你能否抓得住、扛得住。在此，我要感谢所有帮助支持我的人，祝你们，也祝自己，新年新气象，狗年旺旺旺！ ]]></description> 
<guid isPermaLink="false">4324963@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Other</dc:subject> 
<dc:date>2006-01-29T01:59:38Z</dc:date> 
</item> 
<item> 
<title><![CDATA[给Blog换了个皮肤]]></title> 
<link>http://zzzevazzz.bokee.com/3616485.html</link> 
<description><![CDATA[&amp;nbsp;&amp;nbsp;&amp;nbsp; 默认的模板没几个看得顺眼的，而且都看腻了，所以决定自己搞一个出来玩玩。可惜艺术细胞实在太少，只好抄milw0rm.com的，哈哈。不知道各位感觉如何。<p>&amp;nbsp;&amp;nbsp;&amp;nbsp; BTW, 由于广告泛滥，所以暂时关闭匿名评论。若有话说，请用“在线留言”。</p>]]></description> 
<guid isPermaLink="false">3616485@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Other</dc:subject> 
<dc:date>2005-11-23T00:27:41Z</dc:date> 
</item> 
<item> 
<title><![CDATA[破解QQ2005Beta3的“键盘加密保护技术”]]></title> 
<link>http://zzzevazzz.bokee.com/3352321.html</link> 
<description><![CDATA[<p>　　今天升级QQ，发现登陆界面的软键盘没有了，取而代之的是一个带金锁图标的密码框。试了两个键盘记录工具，原理分别是GetAsyncKeyState和键盘类过滤驱动，发现无效，恩，有点意思，正好用来打发时间。<br />　　先看腾讯是怎么吹的：“QQ2005 Beta3采用了国际先进的nProtect键盘加密保护技术，能最大限度地防止用户的密码输入不被病毒、键盘记录程序所窃取，大大提高了QQ用户的帐号安全性。”<br />　　nProtect是什么？从来没听过。还是老老实实看代码吧。既然能对付驱动级的嗅探，显然也用了驱动。对比QQ启动前后的驱动列表，很容易就定位到npkcrypt.sys。光凭这一点就让我不看好这个功能，这么容易就找到研究目标，设计者的反破解意识实在不怎么样。把驱动改名，重启系统，然后保护功能就失效了！当然，事情可没这么简单，因为这时那把金锁上多了个“禁用”图标，提醒用户保护功能已失效。<br />　　明的不行就来暗的——代码级破解。首先看导入函数，用到了IoAttachDeviceToDeviceStack，似乎走的还是设备栈的老路。于是祭出WinDbg查看KeyboardClass0/1的设备栈，居然没有异常，那八成就是挂键盘中断了，导入的函数HalGetInterruptVector就是用来干这个的。列出所有中断向量（WinDbg没有类似SoftICE的idt命令，不爽的很），一眼就发现n个80开头的地址中有个f7开头的，哈，就是它。<br />　　再次重启系统，先列出原先的IDT，启动QQ后还原被修改的条目，然后尝试键盘记录，无效。再看IDT，靠，又被改回去了！在这个中断向量的地址上设内存读写断点，只断到了读操作，却没有写操作。但明明就被改回去了啊。郁闷了一分钟之后，我开始看驱动的反汇编代码。从被断到的读操作开始跟踪，我发现读到的值被保存在全局变量里，而所有对这个变量的操作中，几乎都是赋值，只有一个cmp指令，比较保存的值和读取的值，如果不同就关中断，然后修改成QQ自己的中断服务地址（难怪断不到，关中断了嘛）。<br />　　到这里问题就算解决了，把紧随cmp之后的jz改为jnz，中断向量再也不会被改回去啦，键盘记录（不管是哪种）当然也有效了，金锁还是老样子。所谓的“国际先进技术”原来只是从DOS时代就被大玩特玩的中断挂钩，钩住键盘中断后直接把ScanCode传给应用程序。如果QQ能绕过Windows的中断映射机制，控制PIC或APIC重新映射键盘中断，那还有点看头。（一个聊天工具而已，至于吗？）当然至于，因为她也许是世界上使用人数最多的聊天工具啊。<br />　　详细的破解过程就不说了（我只是打发时间，不是存心和腾讯过不去哦），只说说一字节补丁的位置：npkcrypt.sys驱动模块（文件版本2005.6.22.1，大小20,386字节）加载基址偏移0x14b3，从0x74(jz)改为0x75(jnz)，当然键盘中断向量也要还原。还有一种改法更简单，直接在QQ的键盘中断服务入口添加跳转指令，跳回到原服务地址。注意，这些都只是内存补丁，文件补丁比较麻烦，QQ似乎会在加载驱动前先对文件做校验。这就不是我所感兴趣的了，闪人。 </p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; <strong>2005-11-29 补充：</strong> QQ密码输入框失去键盘焦点后，会还原中断向量。再次得到焦点时，又会修改IDT。这个修改不判断原中断向量，与前文说的jz指令无关。具体代码位置是基址偏移0x1e06(cli)至0x1e26(sti)这一段。用jmp指令跳过这段代码，IDT终于不会再被改了。实际破解时，还是在QQ的中断服务入口加jmp的办法简便易行。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; <strong>2006-01-23 补充</strong>：原来WinDbg是有!idt命令的，但自带的帮助文档里没有提到，我只能说——郁闷！</p>]]></description> 
<guid isPermaLink="false">3352321@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Security</dc:subject> 
<dc:date>2005-10-29T01:13:38Z</dc:date> 
</item> 
<item> 
<title><![CDATA[IceSword似乎被研究的差不多了]]></title> 
<link>http://zzzevazzz.bokee.com/2997142.html</link> 
<description><![CDATA[&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 驱动开发网上悬赏破解IceSword，重赏之下必有勇夫啊。<p>&amp;nbsp;&amp;nbsp;&amp;nbsp; <a href="http://bbs.zndev.com/read.php?tid=97320">http://bbs.zndev.com/read.php?tid=97320</a></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; <a href="http://bbs.zndev.com/read.php?tid=98377">http://bbs.zndev.com/read.php?tid=98377</a></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 最让我“吃惊”的是IS列举进程的办法竟然是通过PspCidTable，晕啊。我记得很久以前我写knlps0.4的时候，就在幻影论坛提到过这个办法。这个办法被公开就完全失效了，所以我没有用它来实现knlps0.5。我本以为，IS应该是利用了某些无法被轻易修改的系统数据结构来列举进程。线程调度链表算一种，但IS不是用它。我能想到的就只有在非分页内存里搜索EPROCESS了。其它各种各样的“表”都可以很容易的涂改掉，只要知道是哪张“表”。虽然非分页内存也可以看作一张“表”，但改起来比较麻烦。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 关于IS的反调试，知道谜底了自然觉得没什么大不了的。不过我是个完全不会猜谜的人，所以没猜到也不觉得可惜。既然pjf是挑战赛的裁判，估计IS2.0会有不小的改进吧。希望将来谜底公开的时候，不会让我“不觉得可惜”，呵呵。</p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; wuyanfeng对IS驱动的分析，没说是什么版本。所以我下载了一个1.12en版，看看有啥变化。反WinDbg调试有点不一样了，以前（1.06）是只在启动的时候判断一次<font size="2">KdDebuggerEnabled，如果非零就调用KdDisableDebugger，现在是不断地检查它。我把KdDisableDebugger入口改成了ret指令，结果调试器不会被断开了，但CPU占用100%。一计不成又生一计，我在KdDebuggerEnabled上设内存读断点，想等IS读的时候，给IS打个“补丁”。结果在调试状态下，总是系统的KeUpdateSystemTime和KdPollBreakIn例程在读取，IS完全没有机会动。两个系统例程读取KdDebuggerEnabled的值后，紧接着是jz和jnz指令，哈，分别改成jnz和jz，再把KdDebuggerEnabled改成0，搞定！建议pjf用关闭调试端口的办法反WinDbg。靠判断KdDebuggerEnabled实在太容易pass了。</font></p><p>&amp;nbsp;&amp;nbsp;&amp;nbsp; 涂改了PspCidTable，发现还是可以隐藏进程，失望ing。</p>]]></description> 
<guid isPermaLink="false">2997142@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Security</dc:subject> 
<dc:date>2005-09-22T02:32:05Z</dc:date> 
</item> 
<item> 
<title><![CDATA[3个月没更新了]]></title> 
<link>http://zzzevazzz.bokee.com/2115179.html</link> 
<description><![CDATA[<p>近3个月没更新，接下去的3个月恐怕也没时间。虽有千言万语，只能随时间流逝了。</p>]]></description> 
<guid isPermaLink="false">2115179@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Other</dc:subject> 
<dc:date>2005-06-30T03:42:12Z</dc:date> 
</item> 
<item> 
<title><![CDATA[沉痛悼念我的手机]]></title> 
<link>http://zzzevazzz.bokee.com/1148586.html</link> 
<description><![CDATA[<p>我的Nokia3200于北京时间2005年4月9日11时25分</p><p>不慎掉入厕所下水管道</p><p>历时90分钟抢救无效（打捞失败）</p><p>不幸&amp;quot;光荣牺牲&amp;quot;</p><p>享年一岁零34天</p><p>在此</p><p>我沉痛悼念我的Nokia3200</p><p>........................（默哀三秒钟）</p><p>追授&amp;quot;<strong>EVA一等手机功勋奖章</strong>&amp;quot;</p><p>!@#$%^&amp;amp;*（奏Nokia开机铃声）</p><p>向遗体告别——敬礼</p><p>&amp;nbsp;</p><br />]]></description> 
<guid isPermaLink="false">1148586@http://zzzevazzz.bokee.com/</guid> 
<dc:subject>Other</dc:subject> 
<dc:date>2005-04-09T13:27:21Z</dc:date> 
</item> 

</channel> 
</rss> 