<?xml version="1.0" encoding="gb2312"?>
<rss version="2.0">
<channel>
<title><![CDATA[网络笔记本]]></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/adifk</link>
<language>zh-cn</language>
<generator>www.baidu.com</generator>
<ttl>5</ttl>


<item>
        <title><![CDATA[对于win7 kis 死锁的dump文件分析]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/e3a332895318dbb90f2444a6.html]]></link>
        <description><![CDATA[
		
		<p>问题出在kis的klbg.sys这个minifilter上。</p>
<p>windbg查看死锁</p>
<p>!locks</p>
<p>Resource @ nt!IopDriverLoadResource (0x83db3820)&nbsp;&nbsp;&nbsp;  Exclusively owned<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads: 855a6020-01&lt;*&gt; <br>
KD: Scanning for held locks..</p>
<p>Resource @ klbg (0x87e18180)&nbsp;&nbsp;&nbsp;  Shared 1 owning threads<br>
&nbsp;&nbsp;&nbsp;  Contention Count = 399<br>
&nbsp;&nbsp;&nbsp;  NumberOfExclusiveWaiters = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads: 862fcd48-01&lt;*&gt; <br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads Waiting On Exclusive Access:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  855a6020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>KD: Scanning for held locks.....</p>
<p>Resource @ 0x863b1800&nbsp;&nbsp;&nbsp;  Exclusively owned<br>
&nbsp;&nbsp;&nbsp;  Contention Count = 2<br>
&nbsp;&nbsp;&nbsp;  NumberOfExclusiveWaiters = 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads: 855a6020-01&lt;*&gt; <br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads Waiting On Exclusive Access:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  862fcd48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  863b6268&nbsp;&nbsp;  <br>
-------------------------------------------------------------------------------------------------------------------</p>
<p>查看具体信息，堆栈信息是拥有这个锁的堆栈信息。</p>
<p>1: kd&gt; !locks -v 0x87e18180</p>
<p>Resource @ klbg (0x87e18180)&nbsp;&nbsp;&nbsp;  Shared 1 owning threads<br>
&nbsp;&nbsp;&nbsp;  Contention Count = 399<br>
&nbsp;&nbsp;&nbsp;  NumberOfExclusiveWaiters = 1<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads: 862fcd48-01&lt;*&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  THREAD 862fcd48 Cid 0004.00bc Teb: 00000000 Win32Thread: 00000000 WAIT: (WrResource) KernelMode Non-Alertable<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  8637f580 SynchronizationEvent<br>
&nbsp;&nbsp;&nbsp;&nbsp;  IRP List:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  864545f8: (0006,01fc) Flags: 00000884 Mdl: 00000000<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  86306258: (0006,01fc) Flags: 00000884 Mdl: 00000000<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Not impersonating<br>
&nbsp;&nbsp;&nbsp;&nbsp;  DeviceMap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  88e08b98<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Owning Process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  85523170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Image:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Wait Start TickCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2324&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Ticks: 238 (0:00:00:03.712)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Context Switch Count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  1424&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  UserTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  00:00:00.0000<br>
&nbsp;&nbsp;&nbsp;&nbsp;  KernelTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  00:00:00.0624<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Win32 Start Address Ntfs!EfspCheckVolumeForRecoveryLog (0x880946dd)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Stack Init 8d368fd0 Current 8d3682b0 Base 8d369000 Limit 8d366000 Call 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Priority 14 BasePriority 8 PriorityDecrement 96<br>
&nbsp;&nbsp;&nbsp;&nbsp;  ChildEBP RetAddr <br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3682c8 83cbbb15 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368300 83cba403 nt!KiSwapThread+0x266<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368328 83cb42cf nt!KiCommitThreadWait+0x1df<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3683a4 83cec193 nt!KeWaitForSingleObject+0x393<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3683fc 83cb76ae nt!ExpWaitForResource+0x16f<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368448 843bec3b nt!ExAcquireResourceExclusiveLite+0x1cf //ExAcquireResourceExclusiveLite等待863b1800 <br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368494 843b37f4 fltmgr!FltpDoFilterNotificationForNewVolume+0x3d (FPO: [Non-Fpo])<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3684d8 83c894bc fltmgr!FltpCreate+0x206 (FPO: [Non-Fpo])<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3684f0 83e8d62d nt!IofCallDriver+0x63<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3685c8 83e6e1d7 nt!IopParseDevice+0xed7<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368644 83e9424d nt!ObpLookupObjectName+0x4fa<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d3686a4 83e8c5ab nt!ObOpenObjectByName+0x159<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368720 83e97eb6 nt!IopCreateFile+0x673<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d36876c 83c9042a nt!NtCreateFile+0x34<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d36876c 83c8decd nt!KiFastCallEntry+0x12a (FPO: [0,3] TrapFrame @ 8d3687a0)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  8d368810 87e14846 nt!ZwCreateFile+0x11 (FPO: [11,0,0])<br>
WARNING: Stack unwind information not available. Following frames may be wrong.<br>
&nbsp;&nbsp;&nbsp;&nbsp;  00000000 00000000 klbg+0x3846 //ZwCreateFile ： 从kis某函数1调用过来。<br>
&nbsp;&nbsp;  callstack错误，查看堆栈补齐后续的callstack<br>
&nbsp;&nbsp;  8d368888 87e16361 klbg+0x5361<br>
&nbsp;&nbsp;  8d3688e4 87e14cb5 klbg+0x3cb5<br>
&nbsp;&nbsp;  8d3688f8 8439caeb fltmgr!FltpPerformPreCallbacks+0x34d<br>
&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads Waiting On Exclusive Access:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  855a6020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>1 total locks, 1 locks currently held</p>
<p>1: kd&gt; !locks -v 0x863b1800&nbsp;&nbsp;&nbsp;</p>
<p>Resource @ 0x863b1800&nbsp;&nbsp;&nbsp;  Exclusively owned<br>
&nbsp;&nbsp;&nbsp;  Contention Count = 2<br>
&nbsp;&nbsp;&nbsp;  NumberOfExclusiveWaiters = 2<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Threads: 855a6020-01&lt;*&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  THREAD 855a6020 Cid 0004.0008 Teb: 00000000 Win32Thread: 00000000 WAIT: (WrResource) KernelMode Non-Alertable<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  863822d0 SynchronizationEvent<br>
&nbsp;&nbsp;&nbsp;&nbsp;  IRP List:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  863bc6b8: (0006,01fc) Flags: 00000884 Mdl: 00000000<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  863b57d0: (0006,01fc) Flags: 00000884 Mdl: 00000000<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Not impersonating<br>
&nbsp;&nbsp;&nbsp;&nbsp;  DeviceMap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  88e08b98<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Owning Process&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  85523170&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Image:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  System<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Wait Start TickCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  2324&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Ticks: 238 (0:00:00:03.712)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Context Switch Count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  3578&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <br>
&nbsp;&nbsp;&nbsp;&nbsp;  UserTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  00:00:00.0000<br>
&nbsp;&nbsp;&nbsp;&nbsp;  KernelTime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  00:00:02.0714<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Win32 Start Address nt!Phase1Initialization (0x83dd846f)<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Stack Init 80786fd0 Current 80785c50 Base 80787000 Limit 80784000 Call 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;  Priority 31 BasePriority 8 PriorityDecrement 0<br>
&nbsp;&nbsp;&nbsp;&nbsp;  ChildEBP RetAddr <br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785c68 83cbbb15 nt!KiSwapContext+0x26 (FPO: [Uses EBP] [0,0,4])<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785ca0 83cba403 nt!KiSwapThread+0x266<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785cc8 83cb42cf nt!KiCommitThreadWait+0x1df<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785d44 83cec193 nt!KeWaitForSingleObject+0x393<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785d9c 83cb76ae nt!ExpWaitForResource+0x16f<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785de8 87e163f9 nt!ExAcquireResourceExclusiveLite+0x1cf // ExAcquireResourceExclusiveLite等待0x87e18180<br>
WARNING: Stack unwind information not available. Following frames may be wrong.<br>
&nbsp;&nbsp;&nbsp;&nbsp;  80785e4c 87e14cb5 klbg+0x3cb5<br>
&nbsp;&nbsp;&nbsp;&nbsp;  83c19700 c6640000 fltmgr!FltpPerformPreCallbacks+0x34d (FPO: [Non-Fpo])</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;  Threads Waiting On Exclusive Access:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  862fcd48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  863b6268&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>1 total locks, 1 locks currently held</p>
<p>87e163ec 6a01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  1<br>
87e163ee 688081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  offset klbg+0x7180 (87e18180)<br>
87e163f3 ff15cc70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60cc (87e170cc)] //ExAcquireResourceExclusiveLite</p>
<p>//搜索87e163ee 688081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  offset klbg+0x7180 (87e18180) opcode， 主要是看另一个线程那个地方调用了ExAcquireResourceExclusiveLite，后来发现是同一个函数里面出问题，这个结果也没有什么意义了。<br>
87e148fe 68 80 81 e1 87 ff 15 b0-70 e1 87 8b 35 1c 81 e1 h.......p...5...<br>
87e15eb2 68 80 81 e1 87 ff 15 cc-70 e1 87 a1 6c 81 e1 87 h.......p...l...<br>
87e15ff5 68 80 81 e1 87 a3 6c 81-e1 87 a3 68 81 e1 87 ff h.....l....h....<br>
87e16037 68 80 81 e1 87 c7 05 6c-81 e1 87 68 81 e1 87 c7 h......l...h....<br>
87e162d5 68 80 81 e1 87 ff 15 b0-70 e1 87 8b 35 68 81 e1 h.......p...5h..<br>
87e163ee 68 80 81 e1 87 ff 15 cc-70 e1 87 8b 54 24 28 8b h.......p...T$(.<br>
87e16412 68 80 81 e1 87 89 56 1d-c6 46 10 01 ff 15 f0 70 h.....V..F.....p</p>
<p>---------------------------------------------------------------------------------------------------------------------------</p>
<p>调用堆栈中都有87e14cb5 klbg+0x3cb5<br>
87e14ca4 ff15ac70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60ac (87e170ac)]<br>
87e14caa ff15a870e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60a8 (87e170a8)]<br>
87e14cb0 e80b160000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x52c0 (87e162c0)<br>
87e14cb5 eb02&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  jmp&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x3cb9 (87e14cb9)</p>
<p>---------------------------------------------------------------------------------------------------------------------------<br>
klbg+0x52c0:<br>
87e162c0 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebp<br>
87e162c1 8bec&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ebp,esp<br>
87e162c3 83e4f8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  and&nbsp;&nbsp;&nbsp;&nbsp;  esp,0FFFFFFF8h<br>
87e162c6 83ec40&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sub&nbsp;&nbsp;&nbsp;&nbsp;  esp,40h<br>
87e162c9 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e162ca 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebp<br>
87e162cb 56&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  esi<br>
87e162cc 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edi<br>
87e162cd ff15b470e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60b4 (87e170b4)] //KeEnterCriticalRegion<br>
87e162d3 6a01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  1<br>
87e162d5 688081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  offset klbg+0x7180 (87e18180)&nbsp;&nbsp;  <br>
87e162da ff15b070e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60b0 (87e170b0)] // ExAcquireResourceSharedLite(87e18180, 1)<br>
87e162e0 8b356881e187&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  esi,dword ptr [klbg+0x7168 (87e18168)]<br>
87e162e6 81fe6881e187&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  esi,offset klbg+0x7168 (87e18168)<br>
87e162ec 0f8458010000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x544a (87e1644a)</p>
<p>klbg+0x52f2:<br>
87e162f2 33db&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  xor&nbsp;&nbsp;&nbsp;&nbsp;  ebx,ebx</p>
<p>klbg+0x52f4:<br>
87e162f4 385e10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  byte ptr [esi+10h],bl<br>
87e162f7 8b4625&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,dword ptr [esi+25h]<br>
87e162fa 8d7c3029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  edi,[eax+esi+29h]<br>
87e162fe 0f8538010000&nbsp;&nbsp;&nbsp;  jne&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x543c (87e1643c)</p>
<p>klbg+0x5304:<br>
87e16304 66391f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  word ptr [edi],bx<br>
87e16307 0f842f010000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x543c (87e1643c)</p>
<p>klbg+0x530d:<br>
87e1630d 837e08ff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esi+8],0FFFFFFFFh<br>
87e16311 0f8425010000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x543c (87e1643c)</p>
<p>klbg+0x5317:<br>
87e16317 6867725442&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  42547267h<br>
87e1631c 6800030000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  300h<br>
87e16321 6a01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  1<br>
87e16323 ff157470e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x6074 (87e17074)]<br>
87e16329 8be8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ebp,eax<br>
87e1632b 3beb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  ebp,ebx<br>
87e1632d 0f8409010000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x543c (87e1643c)</p>
<p>klbg+0x5333:<br>
87e16333 8b4e08&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ecx,dword ptr [esi+8]<br>
87e16336 6880010000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  180h<br>
87e1633b 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebp<br>
87e1633c 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edi<br>
87e1633d 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ecx<br>
87e1633e e80dffffff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x5250 (87e16250)<br>
87e16343 84c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  test&nbsp;&nbsp;&nbsp;  al,al<br>
87e16345 0f84e9000000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x5434 (87e16434)</p>
<p>klbg+0x534b:<br>
87e1634b 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebp<br>
87e1634c 8d54241c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  edx,[esp+1Ch]<br>
87e16350 52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edx<br>
87e16351 ff151471e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x6114 (87e17114)]<br>
87e16357 8d442418&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  eax,[esp+18h]<br>
87e1635b 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  eax<br>
87e1635c e82fe4ffff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x3790 (87e14790) //会调用ZwCreateFile（导致THREAD 862fcd48 死锁）<br>
87e16361 8bf8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  edi,eax<br>
87e16363 3bfb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  edi,ebx<br>
87e16365 0f84c9000000&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x5434 (87e16434)</p>
<p>klbg+0x536b:<br>
87e1636b 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e1636c 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e1636d 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e1636e 6a20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  20h<br>
87e16370 6a01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  1<br>
87e16372 6a07&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  7<br>
87e16374 6880000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  80h<br>
87e16379 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e1637a 8d542440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  edx,[esp+40h]<br>
87e1637e 52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edx<br>
87e1637f 8b152081e187&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  edx,dword ptr [klbg+0x7120 (87e18120)]<br>
87e16385 8d44245c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  eax,[esp+5Ch]<br>
87e16389 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  eax<br>
87e1638a 8d4c2440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  ecx,[esp+40h]<br>
87e1638e 6801001000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  100001h<br>
87e16393 894c246c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+6Ch],ecx<br>
87e16397 8d4c2440&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  ecx,[esp+40h]<br>
87e1639b 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ecx<br>
87e1639c 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edi<br>
87e1639d 52&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edx<br>
87e1639e 895c244c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+4Ch],ebx<br>
87e163a2 c744247018000000 mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+70h],18h<br>
87e163aa 895c2474&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+74h],ebx<br>
87e163ae c744247c40020000 mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+7Ch],240h<br>
87e163b6 899c2480000000 mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+80h],ebx<br>
87e163bd 899c2484000000 mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esp+84h],ebx<br>
87e163c4 e8c5000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x548e (87e1648e)<br>
87e163c9 85c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  test&nbsp;&nbsp;&nbsp;  eax,eax<br>
87e163cb 7c61&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  jl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x542e (87e1642e)</p>
<p>klbg+0x53cd:<br>
87e163cd 8b4c2414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ecx,dword ptr [esp+14h]<br>
87e163d1 8d442428&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  lea&nbsp;&nbsp;&nbsp;&nbsp;  eax,[esp+28h]<br>
87e163d5 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  eax<br>
87e163d6 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edi<br>
87e163d7 51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ecx<br>
87e163d8 e883fcffff&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x5060 (87e16060)<br>
87e163dd 84c0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  test&nbsp;&nbsp;&nbsp;  al,al<br>
87e163df 7443&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x5424 (87e16424)</p>
<p>klbg+0x53e1:<br>
87e163e1 b98081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ecx,offset klbg+0x7180 (87e18180)<br>
87e163e6 ff15ac70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60ac (87e170ac)] // ExReleaseResourceLite(87e18180)<br>
87e163ec 6a01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  1<br>
87e163ee 688081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  offset klbg+0x7180 (87e18180)<br>
87e163f3 ff15cc70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60cc (87e170cc)] //ExAcquireResourceExclusiveLite (导致THREAD 855a6020 死锁)<br>
87e163f9 8b542428&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  edx,dword ptr [esp+28h]<br>
87e163fd 8b44242c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,dword ptr [esp+2Ch]<br>
87e16401 8b4c2430&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ecx,dword ptr [esp+30h]<br>
87e16405 895611&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esi+11h],edx<br>
87e16408 8b542434&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  edx,dword ptr [esp+34h]<br>
87e1640c 894615&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esi+15h],eax<br>
87e1640f 894e19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esi+19h],ecx<br>
87e16412 688081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  offset klbg+0x7180 (87e18180)<br>
87e16417 89561d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  dword ptr [esi+1Dh],edx<br>
87e1641a c6461001&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  byte ptr [esi+10h],1<br>
87e1641e ff15f070e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60f0 (87e170f0)] //ExConvertExclusiveToSharedLite</p>
<p>klbg+0x5424:<br>
87e16424 8b442414&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,dword ptr [esp+14h]<br>
87e16428 50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  eax<br>
87e16429 e854000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x5482 (87e16482)</p>
<p>klbg+0x542e:<br>
87e1642e 57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  edi<br>
87e1642f e854000000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  klbg+0x5488 (87e16488)</p>
<p>klbg+0x5434:<br>
87e16434 53&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebx<br>
87e16435 55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  push&nbsp;&nbsp;&nbsp;  ebp<br>
87e16436 ff15fc70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60fc (87e170fc)]</p>
<p>klbg+0x543c:<br>
87e1643c 8b36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  esi,dword ptr [esi]<br>
87e1643e 81fe6881e187&nbsp;&nbsp;&nbsp;  cmp&nbsp;&nbsp;&nbsp;&nbsp;  esi,offset klbg+0x7168 (87e18168)<br>
87e16444 0f85aafeffff&nbsp;&nbsp;&nbsp;  jne&nbsp;&nbsp;&nbsp;&nbsp;  klbg+0x52f4 (87e162f4)</p>
<p>klbg+0x544a:<br>
87e1644a b98081e187&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  ecx,offset klbg+0x7180 (87e18180)<br>
87e1644f ff15ac70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60ac (87e170ac)] // ExReleaseResourceLite(87e18180)<br>
87e16455 ff15a870e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60a8 (87e170a8)] //KeLeaveCriticalRegion<br>
87e1645b 5f&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  edi<br>
87e1645c 5e&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  esi<br>
87e1645d 5d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  ebp<br>
87e1645e 5b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  ebx<br>
87e1645f 8be5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  esp,ebp<br>
87e16461 5d&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  ebp<br>
87e16462 c3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ret</p>
<p>解决方法（未验证）：<br>
修改下面的指令<br>
87e162da ff15b070e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60b0 (87e170b0)] // ExAcquireResourceSharedLite<br>
改为：<br>
87e162da ff15cc70e187&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  dword ptr [klbg+0x60cc (87e170cc)] //ExAcquireResourceExclusiveLite</p>
<p>这样这个函数就不会出现重入问题，不过带来的就是效率问题。</p> <a href="http://hi.baidu.com/adifk/blog/item/e3a332895318dbb90f2444a6.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/e3a332895318dbb90f2444a6.html#comment">查看评论</a>]]></description>
        <pubDate>2009-11-27  23:57</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/e3a332895318dbb90f2444a6.html</guid>
</item>

<item>
        <title><![CDATA[等待线程退出为什么不用wait线程句柄？]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/b45b7afac7488116a9d3115d.html]]></link>
        <description><![CDATA[
		
		<p>  书上告诉我们等待线程退出使用WaitForSingleObject（hThread）是正确的做法。</p>
<p>我觉得并不是很好，为什么？</p>
<p>假设有这么一种情况：</p>
<p>用户在一个button中点击一个停止线程操作（OnThreadStop），正确的做法我们必须要在OnThreadStop中等待线程退出才可以返回。</p>
<p>假设这个线程在退出的时候需要通过某种回调机制，通知用户界面更新某些界面的东西，这个时候我们用户的GUI的线程却阻塞在OnThreadStop消息处理中，从而造成了死锁。</p>
<p>所以我觉得还是用一个事件来接受结束的通知，这样OnThreadStop在接受到事件后就退出了。不会造成死锁的情况。</p> <a href="http://hi.baidu.com/adifk/blog/item/b45b7afac7488116a9d3115d.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/b45b7afac7488116a9d3115d.html#comment">查看评论</a>]]></description>
        <pubDate>2009-03-16  16:28</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/b45b7afac7488116a9d3115d.html</guid>
</item>

<item>
        <title><![CDATA[windows登陆验证]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/4c3a40231839cf4992580787.html]]></link>
        <description><![CDATA[
		
		windows登陆时会调用msv1_0!LsaApLogonUserEx2来进行登陆验证。在这个函数中又会调用msv1_0!MsvpPasswordValidate来验证密码，如果把这个函数的返回值修改就可以用任意密码登陆了，是不是很强大！！！ 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/4c3a40231839cf4992580787.html#comment">查看评论</a>]]></description>
        <pubDate>2009-01-09  23:59</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/4c3a40231839cf4992580787.html</guid>
</item>

<item>
        <title><![CDATA[解决了一个bug]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/dfda03ed373638d0b31cb1dc.html]]></link>
        <description><![CDATA[
		
		<p>切记不要在内核函数的栈上分配太多空间，结构体和数组必须用动态分配，不能用栈空间。</p>
<p>x86系统的内核栈大小是12k大小，由于每个线程都会分配一个内核栈，所以这个大小变大一点，系统的内存开销就会大大增加，所以一个系统的内核栈大小是固定。</p>
<p>如果栈空间被占完，有可能返回下面几个错误</p>
<p>0x7F: UNEXPECTED_KERNEL_MODE_TRAP with Parm1 set to EXCEPTION_DOUBLE_FAULT, which is caused by running off the end of a kernel stack.</p>
<p>0x1E: KMODE_EXCEPTION_NOT_HANDLED, 0x7E: SYSTEM_THREAD_EXCEPTION_NOT_HANDLED, or 0x8E: KERNEL_MODE_EXCEPTION_NOT_HANDLED, with an exception code of STATUS_ACCESS_VIOLATION, which indicates a memory access violation.</p>
<p>0x2B: PANIC_STACK_SWITCH, which usually occurs when a kernel-mode driver uses too much stack space.</p>
<p> </p> <a href="http://hi.baidu.com/adifk/blog/item/dfda03ed373638d0b31cb1dc.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/dfda03ed373638d0b31cb1dc.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-06  09:50</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/dfda03ed373638d0b31cb1dc.html</guid>
</item>

<item>
        <title><![CDATA[浅谈IA64下函数HOOK]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/1cb6f53e0ea798fe838b1361.html]]></link>
        <description><![CDATA[
		
		<p>这里我只是简单谈谈我所关心的一些问题，至于IA64体系的其他细节就不提了，因为还没有学习过，并且我工作也很难涉及到这些。这里我只关心GP register，为什么只关心这个呢？ IA64下在我们进行Hook时，我们必须手动的设置这个寄存器。所以必须先弄清楚这个寄存器的作用。</p>
<p>首先先谈谈一些基本知识点：</p>
<p>IA64具有128个通用寄存器，这样大大提高了函数的执行速度，因为一些局部变量不再需要保存在栈上，可以直接使用寄存器来操作。128个寄存器分别是R0-R127，其中R1就是GP register（GLOBAL POINTER）。在说明这个寄存器作用前，我们先比较下x86和IA64 opcode的在访问全局地址时的差别。</p>
<p>X86指令：MOV ECX, [78001234h] ，由于X86是32位，所以在一条指令中，可以直接包含一个32位地址（78001234h）。</p>
<p>而IA64中是64位，而每个IA64指令只有41位长，所以在一条指令中不可能包含一个64位地址。所以这里GP register就起作用了。我们看看一个典型的IA64指令：add r29 = 0x123456, gp 这个指令将0x123456加上gp寄存器的值保存到R29中，这样R29就包含了一个完整的64位地址。</p>
<p>那GP寄存器的值是怎么来的呢？</p>
<p>GP的值是同模块相关的，这个值得对于上层程序员是透明的，在模块间的调用时调用函数会设置GP为被调用函数模块的GP值，这样在被调用函数中访问数据时就是相对于被调用模块的GP值。</p>
<p>那在HOOK时为什么要注意GP呢？</p>
<p>上面提到了，在模块间调用时，GP的值是由调用者设置的。如果我们HOOK一个函数后，进入到我们HOOK函数时，GP的值就是被HOOK函数模块的GP值，我们在访问数据时就会出错了，所以在我们HOOK函数内，我们第一步就要手动设置GP的值，从而保证我们后续程序的正确性。</p>
<p>这些只是本人的一些粗浅的理解，由于还没有在IA64下开发过，所以也不知道是否正确。等以后有机会从事相关开发时在仔细研究。这里先记录下，方便以后好找资料。呵呵。</p>
<p> </p>
<p>参考资料：<a href="http://msdn2.microsoft.com/zh-cn/magazine/bb985017(en-us).aspx">http://msdn2.microsoft.com/zh-cn/magazine/bb985017(en-us).aspx</a></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  <a href="http://msdn2.microsoft.com/zh-cn/magazine/cc301708(en-us).aspx">http://msdn2.microsoft.com/zh-cn/magazine/cc301708(en-us).aspx</a></p> <a href="http://hi.baidu.com/adifk/blog/item/1cb6f53e0ea798fe838b1361.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/1cb6f53e0ea798fe838b1361.html#comment">查看评论</a>]]></description>
        <pubDate>2008-03-02  15:52</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/1cb6f53e0ea798fe838b1361.html</guid>
</item>

<item>
        <title><![CDATA[简单看了下这个各个保护软件都感兴趣的函数]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/6b685495333ba60c7bf480d7.html]]></link>
        <description><![CDATA[
		
		<p>KeUserModeCallback 分析</p>
<p>KeUserModeCallback (<br>
&nbsp;&nbsp;&nbsp;  IN ULONG ApiNumber,<br>
&nbsp;&nbsp;&nbsp;  IN PVOID InputBuffer,<br>
&nbsp;&nbsp;&nbsp;  IN ULONG InputLength,<br>
&nbsp;&nbsp;&nbsp;  OUT PVOID *OutputBuffer,<br>
&nbsp;&nbsp;&nbsp;  IN PULONG OutputLength<br>
&nbsp;&nbsp;&nbsp;  )</p>
<p>/*++</p>
<p>Routine Description:</p>
<p>&nbsp;&nbsp;&nbsp;  This function call out from kernel mode to a user mode function.</p>
<p>Arguments:</p>
<p>&nbsp;&nbsp;&nbsp;  ApiNumber - Supplies the API number.</p>
<p>&nbsp;&nbsp;&nbsp;  InputBuffer - Supplies a pointer to a structure that is copied<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  to the user stack.</p>
<p>&nbsp;&nbsp;&nbsp;  InputLength - Supplies the length of the input structure.</p>
<p>&nbsp;&nbsp;&nbsp;  Outputbuffer - Supplies a pointer to a variable that receives<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  the address of the output buffer.</p>
<p>&nbsp;&nbsp;&nbsp;  Outputlength - Supplies a pointer to a variable that receives<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  the length of the output buffer.</p>
<p>Return Value:</p>
<p>&nbsp;&nbsp;&nbsp;  If the callout cannot be executed, then an error status is<br>
&nbsp;&nbsp;&nbsp;  returned. Otherwise, the status returned by the callback function<br>
&nbsp;&nbsp;&nbsp;  is returned.</p>
<p>--*/</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;  ULONG Length;<br>
&nbsp;&nbsp;&nbsp;  ULONG NewStack;<br>
&nbsp;&nbsp;&nbsp;  ULONG OldStack;<br>
&nbsp;&nbsp;&nbsp;  NTSTATUS Status;<br>
&nbsp;&nbsp;&nbsp;  PULONG UserStack;<br>
&nbsp;&nbsp;&nbsp;  PVOID ValueBuffer;<br>
&nbsp;&nbsp;&nbsp;  ULONG ValueLength;<br>
&nbsp;&nbsp;&nbsp;  PEXCEPTION_REGISTRATION_RECORD ExceptionList;<br>
&nbsp;&nbsp;&nbsp;  PTEB Teb;</p>
<p>&nbsp;&nbsp;&nbsp;  ASSERT(KeGetPreviousMode() == UserMode);</p>
<p>&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;  // Get the user mode stack pointer and attempt to copy input buffer<br>
&nbsp;&nbsp;&nbsp;  // to the user stack.<br>
&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;  UserStack = KiGetUserModeStackAddress(); //获得用户堆栈地址<br>
&nbsp;&nbsp;&nbsp;  OldStack = *UserStack;<br>
&nbsp;&nbsp;&nbsp;  try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Compute new user mode stack address, probe for writability,<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // and copy the input buffer to the user stack.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //将inputBuffer里面的值拷贝到用户堆栈<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Length = (InputLength + sizeof(CHAR) - 1) &amp; ~(sizeof(CHAR) - 1);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NewStack = OldStack - Length;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ProbeForWrite((PCHAR)(NewStack - 16), Length + 16, sizeof(CHAR));<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  RtlCopyMemory((PVOID)NewStack, InputBuffer, Length);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Push arguments onto user stack.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //设置用户堆栈<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *(PULONG)(NewStack - 4) = (ULONG)InputLength;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *(PULONG)(NewStack - 8) = (ULONG)NewStack;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *(PULONG)(NewStack - 12) = ApiNumber;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *(PULONG)(NewStack - 16) = 0;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  NewStack -= 16;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Save the exception list in case another handler is defined during<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // the callout.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Teb = (PTEB)KeGetCurrentThread()-&gt;Teb;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ExceptionList = Teb-&gt;NtTib.ExceptionList;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Call user mode.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *UserStack = NewStack;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Status = KiCallUserMode(OutputBuffer, OutputLength);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // Restore exception list.<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  Teb-&gt;NtTib.ExceptionList = ExceptionList;</p>
<p>&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;  // If an exception occurs during the probe of the user stack, then<br>
&nbsp;&nbsp;&nbsp;  // always handle the exception and return the exception code as the<br>
&nbsp;&nbsp;&nbsp;  // status value.<br>
&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;  } except (EXCEPTION_EXECUTE_HANDLER) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  return GetExceptionCode();<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;  // When returning from user mode, any drawing done to the GDI TEB<br>
&nbsp;&nbsp;&nbsp;  // batch must be flushed.<br>
&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;  if (Teb-&gt;GdiBatchCount &gt; 0) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  // call GDI batch flush routine<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  //</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *UserStack -= 256;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  KeGdiFlushUserBatch();<br>
&nbsp;&nbsp;&nbsp;  }</p>
<p>&nbsp;&nbsp;&nbsp;  *UserStack = OldStack;<br>
&nbsp;&nbsp;&nbsp;  return Status;<br>
}</p>
<p>; NTSTATUS<br>
; KiCallUserMode (<br>
;&nbsp;&nbsp;&nbsp;  IN PVOID *Outputbuffer,<br>
;&nbsp;&nbsp;&nbsp;  IN PULONG OutputLength<br>
;&nbsp;&nbsp;&nbsp;  )<br>
{<br>
//关键代码<br>
Kcb15: mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,_KeUserCallbackDispatcher ; st address of callback dispatchr<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  [esp].TsEip,eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; //将KeUserCallbackDispatcher设置位Eip<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,PCR[PcExceptionList] ; get current exception list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  [esp].TsExceptionList,eax ; set previous exception list<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,[edx].TsPreviousPreviousMode ; get previous mode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  [esp].TsPreviousPreviousMode,eax ; set previous mode<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  sti&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;  ; enable interrupts</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  SET_DEBUG_DATA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; set system call debug data for exit</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  jmp&nbsp;&nbsp;&nbsp;&nbsp;  _KiServiceExit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; exit through service dispatch //跳到KiSystemService的退出历程，这样KeUserCallbackDispatcher将被调用。</p>
<p>}</p>
<p>;<br>
; VOID<br>
; KiUserCallbackDispatcher (<br>
;&nbsp;&nbsp;&nbsp;  IN ULONG ApiNumber,<br>
;&nbsp;&nbsp;&nbsp;  IN PVOID InputBuffer,<br>
;&nbsp;&nbsp;&nbsp;  IN ULONG INputLength<br>
;&nbsp;&nbsp;&nbsp;  )<br>
{<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  add&nbsp;&nbsp;&nbsp;&nbsp;  esp,4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; skip over return address<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  pop&nbsp;&nbsp;&nbsp;&nbsp;  edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; get address of callback function</p>
<p>&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;&nbsp;&nbsp;&nbsp;  ; get peb pointer from teb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,fs:[PcTeb]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,[eax].TebPeb<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  mov&nbsp;&nbsp;&nbsp;&nbsp;  eax,[eax].PebKernelCallbackTable&nbsp;&nbsp;&nbsp;  ; get address of callback table</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  call&nbsp;&nbsp;&nbsp;  [eax+edx*4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ; call specified function //调用实际的函数。APINumber是索引，inputbuffer是参数。<br>
}</p>
<p>用windbg可以查看PebKernelCallbackTable的内容，xp sp2 的42h是user32!_ClientLoadLibrary函数地址，知道为什么密保呀，盒子呀要hook这个函数了吧。呵呵。</p>
<p>_ClientLoadLibrary 里面会调用LoadLibraryW</p>
<p>__ClientLoadLibrary的参数是个buffer指针，LoadLibraryW调用参数是buffer中的一段，调用前会调用下面这个函数来调整buffer中的地址，这里的pcb就是__ClientLoadLibrary的buffer， 相当与PE文件里面的Relocation的作用。</p>
<p>VOID FixupCallbackPointers(<br>
&nbsp;&nbsp;&nbsp;  PCAPTUREBUF pcb)<br>
{<br>
&nbsp;&nbsp;&nbsp;  DWORD i;<br>
&nbsp;&nbsp;&nbsp;  LPDWORD lpdwOffset;<br>
&nbsp;&nbsp;&nbsp;  PVOID *ppFixup;</p>
<p>&nbsp;&nbsp;&nbsp;  lpdwOffset = (LPDWORD)((PBYTE)pcb + pcb-&gt;offPointers);<br>
&nbsp;&nbsp;&nbsp;  for (i = 0; i &lt; pcb-&gt;cCapturedPointers; ++i, ++lpdwOffset) {<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  ppFixup = (PVOID *)((PBYTE)pcb + *lpdwOffset);<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  *ppFixup = (PBYTE)pcb + (LONG_PTR)*ppFixup;<br>
&nbsp;&nbsp;&nbsp;  }<br>
}</p>
<p>在buffer的0xIC偏移保存的就是DLL的路径的地址。</p> <a href="http://hi.baidu.com/adifk/blog/item/6b685495333ba60c7bf480d7.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/6b685495333ba60c7bf480d7.html#comment">查看评论</a>]]></description>
        <pubDate>2008-02-28  16:06</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/6b685495333ba60c7bf480d7.html</guid>
</item>

<item>
        <title><![CDATA[如何定位网页控件函数地址]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/18fb437b797918f70ad18787.html]]></link>
        <description><![CDATA[
		
		<p>今天看到一个网页空间的exploit，从来没有搞过这方面的研究，一时好奇就分析了下，下面是我分析的步骤。</p>
<p>1.找到clid对应的ocx（我这里分析的是个ocx控件）,使用pexplorer.exe查看ocx的接口函数。</p>
<p>2.编写测试程序，用vc创建一个MFC工程，然后选择project－》add project－》components and controls， 在Registered ActiveX Controls中查找控件，然后insert，如果这里面没有，就需要先用regsrv32注册。</p>
<p>3.导入后vc自动就会生成一个控件的包装类，这样我们就可以new一个包装类，然后调用create函数创建控件的实例，接下来就可以使用控件的函数了。</p>
<p>4.用od打开我们生成的测试程序，找到函数调用的地方，为了方便查找，可以在函数调用前printf一个字符串，在函数调用的地方下断，断下来后，我们在ocx的text段下内存访问断点，这样操作n次（n&gt;1），当堆栈的参数是我们函数调用的参数时，这时就是我们要找的函数在ocx中的地址了，然后你就可以呵呵呵呵。。一起东西都在你面前啦。</p> <a href="http://hi.baidu.com/adifk/blog/item/18fb437b797918f70ad18787.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/18fb437b797918f70ad18787.html#comment">查看评论</a>]]></description>
        <pubDate>2007-10-16  16:51</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/18fb437b797918f70ad18787.html</guid>
</item>

<item>
        <title><![CDATA[&#34;av终结者&#34;木马专杀的驱动分析]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/4aac9c6289c3d2dfe6113a02.html]]></link>
        <description><![CDATA[
		
		<p>最近看到“av木马终结者”中有个保护毒霸的驱动，抱着学习的态度，分析了下这个驱动，下面是DriverEntry的代码。</p>
<p><br>
.text:00011A10 ; int __stdcall DriverEntry(PDRIVER_OBJECT DriverObject,PIRP Irp)<br>
.text:00011A10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public DriverEntry<br>
.text:00011A10 DriverEntry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proc near<br>
.text:00011A10<br>
.text:00011A10 SymbolicLinkName= UNICODE_STRING ptr -20h<br>
.text:00011A10 bInitOk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr -18h<br>
.text:00011A10 var_14&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr -14h<br>
.text:00011A10 var_10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr -10h<br>
.text:00011A10 DeviceName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = UNICODE_STRING ptr -0Ch<br>
.text:00011A10 DeviceObject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr -4<br>
.text:00011A10 DriverObject&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br>
.text:00011A10 Irp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = dword ptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0Ch<br>
.text:00011A10<br>
.text:00011A10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ebp<br>
.text:00011A11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ebp, esp<br>
.text:00011A13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; esp, 20h<br>
.text:00011A16&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+DeviceObject], 0<br>
.text:00011A1D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_14], 0C0000001h<br>
.text:00011A24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], 0<br>
.text:00011A2B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegValueInit<br>
.text:00011A2B<br>
.text:00011A30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, eax<br>
.text:00011A32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11A3E<br>
.text:00011A32<br>
.text:00011A34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A34<br>
.text:00011A39 ; ---------------------------------------------------------------------------<br>
.text:00011A39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A39<br>
.text:00011A3E ; ---------------------------------------------------------------------------<br>
.text:00011A3E<br>
.text:00011A3E loc_11A3E:&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; ; CODE XREF: DriverEntry+22 j<br>
.text:00011A3E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DriverObject]<br>
.text:00011A41&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_pDriverObject, eax<br>
.text:00011A46&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset g_PsLoadedModuleResource<br>
.text:00011A4B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset g_PsLoadedModuleList<br>
.text:00011A50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetModuleListAndModuleResource<br>
.text:00011A50<br>
.text:00011A55&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], eax<br>
.text:00011A58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], 0<br>
.text:00011A5C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11A68<br>
.text:00011A5C<br>
.text:00011A5E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A5E<br>
.text:00011A63 ; ---------------------------------------------------------------------------<br>
.text:00011A63&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A63<br>
.text:00011A68 ; ---------------------------------------------------------------------------<br>
.text:00011A68<br>
.text:00011A68 loc_11A68:&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; ; CODE XREF: DriverEntry+4C j<br>
.text:00011A68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&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; ; dwUnkown<br>
.text:00011A6A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, offset g_val<br>
.text:00011A6F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; globalInit<br>
.text:00011A6F<br>
.text:00011A74&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], eax<br>
.text:00011A77&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], 0<br>
.text:00011A7B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11A87<br>
.text:00011A7B<br>
.text:00011A7D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A7D<br>
.text:00011A82 ; ---------------------------------------------------------------------------<br>
.text:00011A82&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A82<br>
.text:00011A87 ; ---------------------------------------------------------------------------<br>
.text:00011A87<br>
.text:00011A87 loc_11A87:&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; ; CODE XREF: DriverEntry+6B j<br>
.text:00011A87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>
.text:00011A89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, offset g_ntkrnlInfo<br>
.text:00011A8E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetNtosInfo<br>
.text:00011A8E<br>
.text:00011A93&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], eax<br>
.text:00011A96&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], 0<br>
.text:00011A9A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11AA6<br>
.text:00011A9A<br>
.text:00011A9C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011A9C<br>
.text:00011AA1 ; ---------------------------------------------------------------------------<br>
.text:00011AA1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011AA1<br>
.text:00011AA6 ; ---------------------------------------------------------------------------<br>
.text:00011AA6<br>
.text:00011AA6 loc_11AA6:&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; ; CODE XREF: DriverEntry+8A j<br>
.text:00011AA6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0<br>
.text:00011AA8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, offset g_SystemParam<br>
.text:00011AAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InitSystemRelativeParam<br>
.text:00011AAD<br>
.text:00011AB2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], eax<br>
.text:00011AB5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+bInitOk], 0<br>
.text:00011AB9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11AC5<br>
.text:00011AB9<br>
.text:00011ABB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011ABB<br>
.text:00011AC0 ; ---------------------------------------------------------------------------<br>
.text:00011AC0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011AC0<br>
.text:00011AC5 ; ---------------------------------------------------------------------------<br>
.text:00011AC5<br>
.text:00011AC5 loc_11AC5:&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; ; CODE XREF: DriverEntry+A9 j<br>
.text:00011AC5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; size<br>
.text:00011ACA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset g_szKavInstallPath ; pszValue<br>
.text:00011ACF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetKAVInstallPath<br>
.text:00011ACF<br>
.text:00011AD4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_dwKavInstallPathSize, eax<br>
.text:00011AD9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_dwKavInstallPathSize, 2<br>
.text:00011AE0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ja&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11AEC<br>
.text:00011AE0<br>
.text:00011AE2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011AE2<br>
.text:00011AE7 ; ---------------------------------------------------------------------------<br>
.text:00011AE7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Exit0<br>
.text:00011AE7<br>
.text:00011AEC ; ---------------------------------------------------------------------------<br>
.text:00011AEC<br>
.text:00011AEC loc_11AEC:&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; ; CODE XREF: DriverEntry+D0 j<br>
.text:00011AEC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, g_dwKavInstallPathSize<br>
.text:00011AF2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, 2<br>
.text:00011AF5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; g_dwKavInstallPathSize, ecx<br>
.text:00011AFB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sub_14350<br>
.text:00011AFB<br>
.text:00011B00&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SSDTHook<br>
.text:00011B00<br>
.text:00011B05&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServiceTableShadowHook<br>
.text:00011B05<br>
.text:00011B0A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset SourceString ; "<a href="file://  Device  KAVBase">\\Device\\KAVBase</a>"<br>
.text:00011B0F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+DeviceName]<br>
.text:00011B12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DestinationString<br>
.text:00011B13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:RtlInitUnicodeString<br>
.text:00011B19&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DeviceObject]<br>
.text:00011B1C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceObject<br>
.text:00011B1D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; Exclusive<br>
.text:00011B1F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&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; ; DeviceCharacteristics<br>
.text:00011B21&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8300h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceType<br>
.text:00011B26&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [ebp+DeviceName]<br>
.text:00011B29&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceName<br>
.text:00011B2A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceExtensionSize<br>
.text:00011B2C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+DriverObject]<br>
.text:00011B2F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverObject<br>
.text:00011B30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:IoCreateDevice<br>
.text:00011B36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_14], eax<br>
.text:00011B39&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_14], 0<br>
.text:00011B3D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short loc_11B9E<br>
.text:00011B3D<br>
.text:00011B3F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DeviceObject]<br>
.text:00011B42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [eax+28h]<br>
.text:00011B45&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_10], ecx<br>
.text:00011B48&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; offset s_DosdevicesKav ; "<a href="file://  DosDevices  KAVBase">\\DosDevices\\KAVBase</a>"<br>
.text:00011B4D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+SymbolicLinkName]<br>
.text:00011B50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DestinationString<br>
.text:00011B51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:RtlInitUnicodeString<br>
.text:00011B57&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DeviceName]<br>
.text:00011B5A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceName<br>
.text:00011B5B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lea&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [ebp+SymbolicLinkName]<br>
.text:00011B5E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; SymbolicLinkName<br>
.text:00011B5F&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:IoCreateSymbolicLink<br>
.text:00011B65&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_14], eax<br>
.text:00011B68&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+DriverObject]<br>
.text:00011B6B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [edx+70h], offset DispatchCreateAndClose ; IRP_MJ_DEVICE_CONTROL<br>
.text:00011B72&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DriverObject]<br>
.text:00011B75&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [ebp+DriverObject]<br>
.text:00011B78&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ecx+70h]<br>
.text:00011B7B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [eax+40h], edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; IRP_MJ_CLOSE<br>
.text:00011B7E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DriverObject]<br>
.text:00011B81&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [ebp+DriverObject]<br>
.text:00011B84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ecx+40h]<br>
.text:00011B87&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [eax+38h], edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; IRP_MJ_CREATE<br>
.text:00011B8A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+DriverObject]<br>
.text:00011B8D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dword ptr [eax+78h], offset Dispatch ; IRP_MJ_SHUTDOWN<br>
.text:00011B94&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, [ebp+DeviceObject]<br>
.text:00011B97&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceObject<br>
.text:00011B98&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:IoRegisterShutdownNotification<br>
.text:00011B98<br>
.text:00011B9E<br>
.text:00011B9E loc_11B9E:&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; ; CODE XREF: DriverEntry+12D j<br>
.text:00011B9E&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+var_14], 0<br>
.text:00011BA2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jge&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short Exit0<br>
.text:00011BA2<br>
.text:00011BA4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ebp+DeviceObject], 0<br>
.text:00011BA8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short Exit0<br>
.text:00011BA8<br>
.text:00011BAA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx, [ebp+DeviceObject]<br>
.text:00011BAD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; edx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DeviceObject<br>
.text:00011BAE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ds:IoDeleteDevice<br>
.text:00011BAE<br>
.text:00011BB4<br>
.text:00011BB4 Exit0:&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;&nbsp; ; CODE XREF: DriverEntry+24 j<br>
.text:00011BB4&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverEntry+29 j<br>
.text:00011BB4&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverEntry+4E j<br>
.text:00011BB4&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverEntry+53 j<br>
.text:00011BB4&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverEntry+6D j<br>
.text:00011BB4&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ; DriverEntry+72 j ...<br>
.text:00011BB4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eax, [ebp+var_14]<br>
.text:00011BB7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; esp, ebp<br>
.text:00011BB9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pop&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ebp<br>
.text:00011BBA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8<br>
.text:00011BBA<br>
.text:00011BBA DriverEntry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; endp</p>
<p> </p>
<p>保护的代码都在SSDTHook 和ServiceTableShadowHook中</p>
<p>分别hook了servicetable中的ZwCreatekey，ZwOpenProcess，ZwSetValueKey和servicetableshadow中的NtUserFindWindowEx，NtUserQueryWindow。</p>
<p>保护规则如下：首先从注册表中读取kav的安装路径，如果是此路径下的程序调用上面的函数通通放行。如果注册表操作中有image file option，同时后面是kavmain.exe就返回失败。对于查找窗口，如果不是kav目录下的程序，findwindowex都返回null。</p>
<p>下面是重要的两个结构，中间有些没有分析出来，好像程序中没有操作这些变量，也可能是自己看漏了。</p>
<p>00000000 GlobalVal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struc ; (sizeof=0x1C)<br>
00000000 dwVersion&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000004 InitSafeBootMode dd ?<br>
00000008 ActiveProcessListEntry dd ?<br>
0000000C dwimageFileNameOffsetInEprocess dd ?<br>
00000010 ActiveProcessLinksOffset dd ?<br>
00000014 dwNtosKrnlbase&nbsp;&nbsp;&nbsp; dd ?<br>
00000018 dwNtosKrnlSize&nbsp;&nbsp;&nbsp; dd ?<br>
0000001C GlobalVal&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ends<br>
0000001C<br>
00000000 ; ---------------------------------------------------------------------------<br>
00000000<br>
00000000 g_NTosInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struc ; (sizeof=0x8C)<br>
00000000 dwNtosKrnlbase_0 dd ?<br>
00000004 dwNtosKrnlSize_4 dd ?<br>
00000008 dwNtosKrnlbase_8 dd ?<br>
0000000C dwNtokrnlNtHeader_C dd ?<br>
00000010 SectionHeader_10 dd ?<br>
00000014 EntryExport_14&nbsp;&nbsp;&nbsp; dd ?<br>
00000018 EntryImport_18&nbsp;&nbsp;&nbsp; dd ?<br>
0000001C BaseReloc_1C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000020 field_20&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000024 field_24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000028 field_28&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
0000002C field_2C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000030 field_30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000034 dwNtosKrnlbase_34 dd ?<br>
00000038 dwNtosKrnlSize_38 dd ?<br>
0000003C ObQueryNameStringAddress_3C dd ?<br>
00000040 KeUnstackDetachProcessAddress_40 dd ?<br>
00000044 KeStackAttachProcessAddress_44 dd ?<br>
00000048 ExEnumHandleTableAddress_48 dd ?<br>
0000004C PsLookupProcessByProcessIdAddress_4C dd ?<br>
00000050 field_50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000054 field_54&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000058 field_58&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
0000005C field_5C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000060 ObOpenObjectByPointerAddress_60 dd ?<br>
00000064 KeAttachProcessAddress_64 dd ?<br>
00000068 KeDetachProcessAddress_68 dd ?<br>
0000006C NtQuerySystemInformationAddress_6C dd ?<br>
00000070 IoDriverObjectTypeAddress_70 dd ?<br>
00000074 PsThreadTypeAddress_74 dd ?<br>
00000078 KeServiceDescriptorTableShadowAddress_78 dd ?<br>
0000007C LockedServiceTableAddress_7C dd ?<br>
00000080 field_80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000084 field_84&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
00000088 field_88&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd ?<br>
0000008C g_NTosInfo&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ends<br>
</p>
<p>驱动中发现了同处理消息相关的冬冬，但是好像没有使用，是不是下次升级才放呢？<br>
</p> <a href="http://hi.baidu.com/adifk/blog/item/4aac9c6289c3d2dfe6113a02.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/4aac9c6289c3d2dfe6113a02.html#comment">查看评论</a>]]></description>
        <pubDate>2007-07-02  17:26</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/4aac9c6289c3d2dfe6113a02.html</guid>
</item>

<item>
        <title><![CDATA[not only upx!!!]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/769ecb02ba1f680e4afb5144.html]]></link>
        <description><![CDATA[
		
		<p>&nbsp;&nbsp;&nbsp;&nbsp; 今天测试了下我的专业脱upx壳程序有6%的成功率,呵呵,不错.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 偶下午把程序调整了下,现在不去脱壳啦.直接在一些关键API下断点,这样很多样本都可以扫出来了哦.呵呵.估计能到10%的量.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 现在都没有考虑加密壳,无所谓啦,反正不多,只要能处理普通的压缩壳就ok啦.</p>
<p>不过摩托一直担心会跑飞,这个可能性还是存在的.想想有什么解决方法.</p> 
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%C4%AC%C8%CF%B7%D6%C0%E0">默认分类</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/769ecb02ba1f680e4afb5144.html#comment">查看评论</a>]]></description>
        <pubDate>2007-05-30  20:28</pubDate>
        <category><![CDATA[默认分类]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/769ecb02ba1f680e4afb5144.html</guid>
</item>

<item>
        <title><![CDATA[opcode学习之&#60;Intel Architectures software Developer&#39;s Manual&#62;使用]]></title>
        <link><![CDATA[http://hi.baidu.com/adifk/blog/item/82faedc2b8771b1a0ef477bd.html]]></link>
        <description><![CDATA[
		
		<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果要学习opcode,intel的这套工具书应该是权威啦.而且intel也是个大方的主,所有的书都可以免费申请.呵呵,我申请一次竟然发给我两套.这套书有两大好处1.装b,别人一看这书就会说牛呀(呵呵,其实都没有看过)2.防身,绝对砸的死人.好了.不忽悠了.进入正题.</div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关于opcode的格式这就不说啦,volume 2A中的chapter 2说的很详细,如果觉得鸟文看的不爽的话,可以看看老罗的&lt;学习opcode&gt;,(听说要有续集啦..呵呵期待...).这里只描述怎么用这本书将opcode翻译成汇编代码.其实就是查下面这个表.</div>
<div forimg="1">
<div forimg="1"><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/adifk/pic/item/ac197012b1a77354f919b854.jpg"></div>
<div forimg="1"></div>
</div>
<div forimg="1"><a target="_blank" href="http://hiphotos.baidu.com/adifk/pic/item/099d9eca4720c843f31fe73b.jpg"></a></div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先还是要大概描述下指令的构成.</div>
<div forimg="1"><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Intel的IA32-x86体系结构CPU的每条指令都可能由以下六个域组成，并且它们在指令中的排列顺序是不能改变的。<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这六个域分别是：<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prefixes </font><font face="Courier New">(1 Byte)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; code </font><font face="Courier New">(1/2/3 Bytes；2字节指令是第一个指令码为0x0f，而一般3字节指令的第3字节是</font><a name="baidusnap0"></a><font face="Courier New">ModR/</font><a name="baidusnap1"></a><font face="Courier New">M的一部分)<br>
</font><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModR/M </font><font face="Courier New">(1 Byte)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SIB </font><font face="Courier New">(1 Byte)<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; displacement </font><font face="Courier New">(1/2/4 Bytes)偏移量<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; immediate (1/2/4 Bytes)立即数</font></div>
<div forimg="1"><font face="Courier New">(上面是拷的,嘻嘻,敲的麻烦)</font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModR/M分三部分Mod(2 bits),Reg/opcode(3 bits),R/M(3 bits)</font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New">我要说的就是的ModR/M查表,</font><font face="Courier New">在intel的书中我们在每个指令的解释的地方都会看到/r /digit 的东东.这个就是modR/M的标志.</font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New" color="#ff0000">/r表示:ModR/M要使用<font color="#ff0000">ModR/M中的</font>reg和R/M操作数</font></div>
<div forimg="1"><font face="Courier New" color="#ff0000">/digit表示:opcode后面只使用ModR/M中的R/M操作数</font></div>
<div forimg="1"><font face="Courier New">还有其它一些标志,这里就不说了.</font></div>
<div forimg="1"><font face="Courier New">&nbsp;&nbsp;&nbsp;</font></div>
<div forimg="1"><font face="Courier New">&nbsp;&nbsp;</font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New">具体怎么查表就举个例子来说吧:</font></div>
<div forimg="1"><font face="Courier New"><font color="#ff0000">mov ecx, [esp]</font>---opcode是<font color="#ff0000">8B 4C 24 00</font></font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"><font face="Courier New">先找到mov在intel书的解释部分.发现opcode栏写的是"8B /r",intruction栏写的是"MOV r32,r/m32",这样我们就知道是有两个操作数啦.第一个是寄存器值,后一个是r/m值</font></div>
<div forimg="1"><font face="Courier New">然后来看ModR/M字节(4c).变成二进制就是01001100,根据ModR/M的格式6,7位(01)是Mod;5.4.3(001)位是Reg/opcode;2.1.0(100)是R/M.有了这些信息我们就可以查表啦.下面的图我把查询的关键部分标示出来了.</font></div>
<div forimg="1"><font face="Courier New"></font></div>
<div forimg="1"></div>
<div forimg="1"><font face="Courier New">
<div forimg="1"><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/adifk/pic/item/a6a235d9feabc2ec38012f4b.jpg"></div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 画圆圈的地方就是上面ModR/M字节对应的查表地方.最上面的圆圈标示我们找到的第一个操作数是ECX,第二个操作数是最左边的查询结果,这里是[--][--]+disp8,[--][--]后有个SIB字节,disp8标示有个8字节的displacement(偏移量,具体后面解释),SIB同样是要查表的.</div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 回到开始mov ecx, [esp]---opcode是8B 4C 24 00</div>
<div forimg="1">这里在SIB就是4c后面的24啦.对应的二进制是00100100,根据书中的SIB定义7.6位(00)是scale,5.4.3位(100)是index,2.1.0位(100)是Base.这样我们就可以查下表啦.我标示出了查询的位置:&nbsp;&nbsp;</div>
<div forimg="1"></div>
<div forimg="1">
<div forimg="1"><img class="blogimg" border="0" small="0" src="http://hiphotos.baidu.com/adifk/pic/item/ac82c31347f9a1d5f6039e36.jpg"></div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标示查出来的结果就是ESP,现在在看看上面提到的disp8,也就是8B 4C 24 00中的00来,这标示esp+00,所以解释出来的结果就是mov ecx, [esp].</div>
<div forimg="1">&nbsp;&nbsp;&nbsp;</div>
<div forimg="1">&nbsp;&nbsp;</div>
<div forimg="1"></div>
<div forimg="1"></div>
<div forimg="1"></div>
<div forimg="1">下面再来看看mov的另一个例子.</div>
<div forimg="1"><font color="#ff0000">mov dword ptr [ebp-4], 0</font> ---opcode是<font color="#ff0000">C745 FC 00000000</font></div>
<div forimg="1">查intel书得到C7 /0 MOV r/m32, imm32,这样我们就知道是有两个操作数啦.而且显然imm32标示是立即数也就是opcode中的00000000了.现在我们来看看opcode的45和FC这么解释.</div>
<div forimg="1">45当然是ModR/M,对应的二进制是01000101,还是按上面说的查表,查询结果是[EBP]+disp8,为什么是[EBP]+disp8,而不是上面的EAX呢?在intel书中有解释/0标示ModR/M位是reg为0,同时reg位不用来指示操作数.在看看disp8,这里就是FC啦.EBP+FC就是EBP-4,所以这就是mov dword ptr [EBP -4], 0的得来.</div>
<div forimg="1"></div>
<div forimg="1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就先讲这么多吧.关于opcode我还有好多不明白的地方,以后继续学习.</div>
<div forimg="1"></div>
</div>
</font></div> <a href="http://hi.baidu.com/adifk/blog/item/82faedc2b8771b1a0ef477bd.html">阅读全文</a>
		
		<br/><b>类别：</b><a href="http://hi.baidu.com/adifk/blog/category/%D1%A7%CF%B0%B1%B8%CD%FC%C2%BC">学习备忘录</a>&nbsp;<a href="http://hi.baidu.com/adifk/blog/item/82faedc2b8771b1a0ef477bd.html#comment">查看评论</a>]]></description>
        <pubDate>2007-05-29  17:16</pubDate>
        <category><![CDATA[学习备忘录]]></category>
        <author><![CDATA[adifk]]></author>
		<guid>http://hi.baidu.com/adifk/blog/item/82faedc2b8771b1a0ef477bd.html</guid>
</item>


</channel>
</rss>