卡巴为了对程序可能出现的溢出进行检测对部分API进行了挂钩,其中之一就是LoadLibraryA。在对detours库的1.5版本进行测试的时候发现在没有装卡巴的时候DetourCreateProcessWithDllA函数能够顺利运行,但是装了卡巴之后DetourCreateProcessWithDllA函数执行没有反应,程序并没有启动,而且也没有提示溢出。由于detours1.5中的DetourCreateProcessWithDllA使用的是在栈中执行代码,再看了
基于栈指纹检测缓冲区溢出的一点思路之后想到可能是被卡巴带到坟墓里去了。于是跟了一下发现程序在f6d9f6ab repne scas byte ptr es:[edi]出现了异常,似乎是应用层访问了只有ring0才能访问的内存。
klif+0x32bd0: ;这个就是卡巴对LoadLibraryA函数的处理部分
f6d9fbd0 51 push ecx
f6d9fbd1 8b442408 mov eax,dword ptr [esp+8]
f6d9fbd5 53 push ebx
f6d9fbd6 56 push esi
f6d9fbd7 57 push edi
f6d9fbd8 6a00 push 0
f6d9fbda 50 push eax
f6d9fbdb 680801d7f6 push offset klif+0x3108 (f6d70108)
f6d9fbe0 8d4c2420 lea ecx,[esp+20h]
f6d9fbe4 6a00 push 0
f6d9fbe6 51 push ecx
f6d9fbe7 c744242000000000 mov dword ptr [esp+20h],0
f6d9fbef e8acf6ffff call klif+0x322a0 (f6d9f2a0);这个函数判断是否溢出了,在这里F11
f6d9fbf4 84c0 test al,al
klif+0x322a0:
f6d9f2a0 8b442408 mov eax,dword ptr [esp+8]
f6d9f2a4 8b542404 mov edx,dword ptr [esp+4]
f6d9f2a8 56 push esi
f6d9f2a9 8d4c240c lea ecx,[esp+0Ch]
f6d9f2ad 50 push eax
f6d9f2ae 51 push ecx
f6d9f2af 52 push edx
f6d9f2b0 e8fbfdffff call klif+0x320b0 (f6d9f0b0);F10
f6d9f2b5 8bf0 mov esi,eax
f6d9f2b7 85f6 test esi,esi
f6d9f2b9 7434 je klif+0x322ef (f6d9f2ef)
f6d9f2bb 56 push esi
f6d9f2bc e8ef070000 call klif+0x32ab0 (f6d9fab0); F10
f6d9f2c1 85c0 test eax,eax
f6d9f2c3 742a je klif+0x322ef (f6d9f2ef)
f6d9f2c5 8b4c2418 mov ecx,dword ptr [esp+18h]
f6d9f2c9 8b44240c mov eax,dword ptr [esp+0Ch]
f6d9f2cd 8b542410 mov edx,dword ptr [esp+10h]
f6d9f2d1 81e1ff000000 and ecx,0FFh
f6d9f2d7 50 push eax
f6d9f2d8 8b442418 mov eax,dword ptr [esp+18h]
f6d9f2dc 51 push ecx
f6d9f2dd 52 push edx
f6d9f2de 50 push eax
f6d9f2df 56 push esi
f6d9f2e0 e8fb020000 call klif+0x325e0 (f6d9f5e0); F11
f6d9f2e5 85c0 test eax,eax
klif+0x325e0:
f6d9f5e0 81eccc030000 sub esp,3CCh
f6d9f5e6 53 push ebx
f6d9f5e7 55 push ebp
f6d9f5e8 56 push esi
f6d9f5e9 57 push edi
f6d9f5ea 8bbc24e4030000 mov edi,dword ptr [esp+3E4h]
f6d9f5f1 33ed xor ebp,ebp
f6d9f5f3 3bfd cmp edi,ebp
f6d9f5f5 c744241807000000 mov dword ptr [esp+18h],7
f6d9f5fd c644241300 mov byte ptr [esp+13h],0
f6d9f602 896c2414 mov dword ptr [esp+14h],ebp
f6d9f606 0f84e6000000 je klif+0x326f2 (f6d9f6f2)
f6d9f60c 39ac24ec030000 cmp dword ptr [esp+3ECh],ebp
f6d9f613 7456 je klif+0x3266b (f6d9f66b)
f6d9f615 81ff00000100 cmp edi,10000h
f6d9f61b 7318 jae klif+0x32635 (f6d9f635)
f6d9f61d 8d442420 lea eax,[esp+20h]
f6d9f621 57 push edi
f6d9f622 50 push eax
f6d9f623 e8c8feffff call klif+0x324f0 (f6d9f4f0)
f6d9f628 8d4c2420 lea ecx,[esp+20h]
f6d9f62c 898c24e4030000 mov dword ptr [esp+3E4h],ecx
f6d9f633 8bf9 mov edi,ecx
f6d9f635 803f00 cmp byte ptr [edi],0
f6d9f638 0f84b4000000 je klif+0x326f2 (f6d9f6f2)
f6d9f63e 57 push edi
f6d9f63f ff15a000daf6 call dword ptr [klif+0x330a0 (f6da00a0)]
f6d9f645 8d740002 lea esi,[eax+eax+2]
f6d9f649 8b8424ec030000 mov eax,dword ptr [esp+3ECh]
f6d9f650 83c404 add esp,4
f6d9f653 3bc5 cmp eax,ebp
f6d9f655 747c je klif+0x326d3 (f6d9f6d3)
f6d9f657 50 push eax
f6d9f658 ff15a000daf6 call dword ptr [klif+0x330a0 (f6da00a0)]
f6d9f65e 8d540002 lea edx,[eax+eax+2]
f6d9f662 83c404 add esp,4
f6d9f665 89542414 mov dword ptr [esp+14h],edx
f6d9f669 eb68 jmp klif+0x326d3 (f6d9f6d3)
f6d9f66b 81ff00000100 cmp edi,10000h
f6d9f671 7318 jae klif+0x3268b (f6d9f68b)
f6d9f673 8d442420 lea eax,[esp+20h]
f6d9f677 57 push edi
f6d9f678 50 push eax
f6d9f679 e8f2feffff call klif+0x32570 (f6d9f570)
f6d9f67e 8d4c2420 lea ecx,[esp+20h]
f6d9f682 898c24e4030000 mov dword ptr [esp+3E4h],ecx
f6d9f689 8bf9 mov edi,ecx
f6d9f68b 66392f cmp word ptr [edi],bp
f6d9f68e 7462 je klif+0x326f2 (f6d9f6f2)
f6d9f690 83c9ff or ecx,0FFFFFFFFh
f6d9f693 33c0 xor eax,eax
f6d9f695 f2ae repne scas byte ptr es:[edi]
f6d9f697 8bbc24e8030000 mov edi,dword ptr [esp+3E8h]
f6d9f69e f7d1 not ecx
f6d9f6a0 49 dec ecx
f6d9f6a1 8bf1 mov esi,ecx
f6d9f6a3 46 inc esi
f6d9f6a4 3bfd cmp edi,ebp
f6d9f6a6 740b je klif+0x326b3 (f6d9f6b3)
f6d9f6a8 83c9ff or ecx,0FFFFFFFFh
f6d9f6ab f2ae repne scas byte ptr es:[edi] ;这里的edi指向字符串"LoadLibraryA",在这里出现了异常,可能是应用层无法访问edi所指向的内存,所以程序崩溃了,而且无声无息
f6d9f6ad f7d1 not ecx
f6d9f6af 894c2414 mov dword ptr [esp+14h],ecx
不知道卡巴是怎么样让处于内核中的驱动代码也能在ring3环境下执行?怎么没有把必要的数据也相应处理?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!