起到系统文件保护作用的是sfc_os.dll这个文件
他被注入到了Winlogon中
我的思路就是在Winlogon中的进程找到这个DLL的线程然后挂起掉自然就失效了
以下是Powerbasic写的源代码XPSP3通过测试
#编译的EXE
#暗淡
#INCLUDE“Win32Api.inc”
#包括“TlHelp32.inc的”
只要长UniqueThread 完型型CLIENT_ID UniqueProcess AS
型
的AS龙
TebBaseAddress只要
ClientID的, 只要 BasePriority CLIENT_ID
为LONG AffinityMask
优先的
长
端型THREAD_BASIC_INFORMATION ExitStatus
声明的功能GetModuleFileNameEx的LIB“PSAPI.DLL”的别名_的
“GetModuleFileNameExA”(_
BYVAL hProcess,
_ DWORD BYVAL HMODULE,为dword ,
_ 的ASCIIZ lpFileName的对象,
0的DWORD n大小),只要
申报的功能GetMappedFileName的LIB“PSAPI.DLL”的别名“GetMappedFileNameA”(_
BYVAL hProcess为dword,
BYVAL LPV为dword,
_ 的ASCIIZ lpFileName的对象,
_ 0的DWORD n大小
)为dword
函数RtlAdjustPrivilege的LIB _
“NTDLL.DLL”别名“RtlAdjustPrivilege”(只要BYVAL特权, _
BYVAL启用只要,只要客户BYVAL,_
WasEnabled了如龙)只要
申报功能ZwQueryInformationThread的LIB“NTDLL.DLL的”别名“ZwQueryInformationThread”(ThreadHandle BYVAL AS LONG,BYVAL _
只要ThreadInformationClass,BYVAL ThreadInformation只要BYVAL ThreadInformationLength, AS长期,BYVAL ReturnLength只要DWORD)的
函数NtSuspendThread _
的LIB“NTDLL.DLL”别名“NtSuspendThread的”(0龙ThreadHandle,
为ByRef PreviousSuspendCount为LONG)的AS,长期
函数NtResumeThread的_
的LIB“NTDLL.DLL”别名“ NtResumeThread“(0龙ThreadHandle,
为LONG LONG为ByRef PreviousSuspendCount)
%ThreadBasicInformation = 0
%ThreadQuerySetWin32StartAddress = 9的
功能PBMAIN()只要
当地hSnapshot的AS DWORD,LRESULT为dword,TE32,原样THREADENTRY32,PE32为PROCESSENTRY32的
RtlAdjustPrivilege(20,1,0,0)
hSnapshot = CreateToolHelp32SnapShot(%TH32CS_SNAPPROCESS BYVAL 0)
PE32.dwSize = LEN(PE32)
LRESULT = Process32First(hSnapshot,PE32)
IF hSnapshot <>%INVALID_HANDLE_VALUE,那么
LRESULT <> 0
如果InStr(LCASE $(PE32.szExeFile),LCASE $(“Winlogon.exe中”))> 0,THEN
hSnapshot = CreateToolHelp32SnapShot(%TH32CS_SNAPTHREAD或%TH32CS_SNAPMODULE的,PE32.th32ProcessID BYVAL)
hSnapshot <> INVALID_HANDLE_VALUE THEN
TE32.dwSize = SIZEOF(TE32)
LRESULT = Thread32First(hSnapshot,TE32)
而ISTRUE LRESULT
如果TE32.th32OwnerProcessID = PE32.th32ProcessID THEN
如果InStr(LCASE $((TE32.th32ThreadID)GetImageNameByThread),LCASE $(“sfc_os.dll”))> 0,
然后作为长期本地hThread
hThread = OpenThread(THREAD_SUSPEND_RESUME%, %的假,TE32.th32ThreadID)
NtSuspendThread(hThread,0)
结束IF LRESULT = Thread32Next(hSnapshot,TE32) WEND CloseHandle hSnapshot 完 如果end IF LRESULT = Process32Next(hSnapshot,PE32)
WEND CloseHandle hSnapshot 完如果 end 功能
的功能GetImageNameByThread(BYVAL工业贸易署为LONG)字符串
局部脑外伤作为THREAD_BASIC_INFORMATION
本地状态,只要
当地hThread
本地hProcess 长只要
当地StartAddr作为长期
局部模组名称AS的ASCIIZ *%MAX_PATH个
本地ImageName的ASCIIZ *%MAX_PATH个
hThread = OpenThread
STATUS = ZwQueryInformationThread(hThread VARPTR(StartAddr)的,LEN(StartAddr),ThreadQuerySetWin32StartAddress%;%空)(的的BYVAL%THREAD_QUERY_INFORMATION,BYVAL%的假,BYVAL工贸署)
STATUS = ZwQueryInformationThread(hThread,的%ThreadBasicInformation,VARPTR(脑外伤)大小(TBI)的,NULL)
hProcess =调用OpenProcess(%或%PROCESS_VM_READ PROCESS_QUERY_INFORMATION,虚假%,TBI.ClientId.UniqueProcess)
GetMappedFileName(hProcess,BYVAL StartAddr,ImageName sizeof(ImageName)的)'可执行代码所在模块
ImageName = TRIM的$(ImageName)
如果ImageName =“”或ImageName =“?” 然后ImageName =“NULL”的
CloseHandle(hThread)
CloseHandle(hProcess)
函数=的ImageName
完功能
本文介绍了一段使用PowerBasic编写的代码,该代码旨在找到并挂起Winlogon进程中注入的sfc_os.dll,从而实现对其保护。代码通过调用多个Windows API函数来定位目标进程和DLL,最终通过调用NtSuspendThread实现对特定线程的禁用。
1678

被折叠的 条评论
为什么被折叠?



