二进制安全C/C++ [2021]微软的dll搜索源码 from windows XP ```cpp BOOL IsSvcInjected(DWORD dwPid) { HANDLE hProcess; HMODULE hMods[1024]; BOOL res = FALSE; hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPid); if (hProcess != NULL) { DWORD dwSize; // search through all loaded modules and see if we are injected if (EnumProcessModules(hProcess, hMods, sizeof(hMods), &dwSize)) { DWORD n; for (n = 0; n < (dwSize / sizeof(HMODULE)); n++) { WCHAR wszModName[MAX_PATH]; if (GetModuleBaseNameW(hProcess, hMods[n], wszModName, sizeof(wszModName) / sizeof(WCHAR))) { if (_wcsicmp(wszModName, SBIEDLL L".dll") == 0) { res = TRUE; break; } } } } // if (EnumProcessModules()) CloseHandle(hProcess); } // if (OpenProcess()) return res; } ``` 阅读全文 2021-12-09 huoji 0 条评论
系统安全二进制安全C/C++汇编一线开发 [2021]漫游微软屎山 win32kfull.sys (一) ssdt和shadow ssdt 微软的win32kfull.sys这玩意绝对是,微软整个操作系统上漏洞最多的驱动之一,因为他的代码是从win3.1一路贴屎山贴过来的,在如今windows 20h2最新系统上,你任然可以看到某些莫名其妙的函数  lszzz zzz qqqqzzzqx等奇怪的看起来就像是屎山的代码 过去二十年,微软这玩意一直是漏洞报告的重头戏,各种本地提权、rce层出不穷,其恶劣程度堪比rpc和wmi.因此我准备单独开一系列介绍这个win32kfull.sys(本人也在持续逆向他中) ## ssdt和shadow ssdt 总所周知,x64后大部分常规API进内核的方式是syscall,当有syscall指令后,cpu会把rip指向amd64_lstar这个寄存器里面的地址,操作系统则把这个寄存器改成自己的进内核的函数,微软windows下这个r3和内核交互的函数名字叫做 kisystemcall64 而操作系统的大部分跟R3交互的API 都是一套叫做SSDT的机制控制的,并且如果是涉及到图形的api 则是放在shadow ssdt也就是sssdt,为什么要这样放,因为内核实在是没办法塞下win3.1的垃圾屎山代码.也没办法重构,所以干脆分开 阅读全文 2021-09-04 huoji 0 条评论
二进制安全C/C++汇编Shellcode [2021]微软存在的一处内存泄露 在做EFI驱动的时候,会发现有疑似内存泄露,但不知道为什么.经过很久的调试,发现并不是EFI的代码的问题.而是微软自己的问题! 微软自己存在一处内存泄露.只不过EFI驱动多次调用这个API进行通讯导致从不明显的泄露成了明显的泄露 阅读全文 2021-05-21 huoji 0 条评论
系统安全C/C++汇编Shellcode [2021]微软如何检测到hypervisor以及如何预防 微软挺奇怪的,什么事都要管一腿.总所周知 win 1809后hypervisor的一些功能比如msr hook(通过替换msr_lstar寄存器)的方案已经无了.怎么无的呢?除了kva shadow的问题,还有如下几个问题: 翻开微软的内核,有如下函数 KiErrata361Present KiErrataSkx55Present KiErrata704Present ... 这些函数有如下特点: 1. 名字莫名其妙 2. 调用者也莫名其妙,比如KiErrata361Present在一个IDA分析都要半个小时的函数里面调用. 3. 大部分都是微软检测虚拟机的函数 KiErrata704Present: 他长这样: 阅读全文 2021-05-13 huoji 1 条评论