欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

TsFltMgr.sys系統(tǒng)藍(lán)屏的原因就在于QQ電腦管家!

系統(tǒng) 1718 0

同事一WindowsXP系統(tǒng),正常執(zhí)行,關(guān)閉后,第二天無法啟動,詳細(xì)癥狀為:

(1)安全模式以及帶網(wǎng)絡(luò)功能的安全模式都能夠進(jìn)入;

(2)正常模式,還沒出現(xiàn)WindowXP滾動欄就開始重新啟動;

(3)進(jìn)安全模式,禁用自己主動重新啟動后,再正常啟動,出現(xiàn)藍(lán)屏,報TsFltMgr.sys內(nèi)存錯誤!

經(jīng)過互聯(lián)網(wǎng)查詢,和不斷摸索,最后發(fā)現(xiàn)居然是可惡的QQ軟件管家惹的禍,進(jìn)安全模式果斷卸載QQ軟件管家后,再重新啟動,系統(tǒng)全然正常了。


以下轉(zhuǎn)載了一篇分析QQ電腦管家的文章,請參考:

QQ電腦管家中的TsFltMgr?Hook框架分析


新版的QQ電腦管家中多了一個名字叫TsFltMgr.sys的驅(qū)動(應(yīng)該是Sysnap大牛開發(fā)的,膜拜),對該驅(qū)動進(jìn)行了一些簡單的分析,看見了一套美麗的Hook框架,發(fā)出來與大家分享。分析不正確的地方請多多包涵。

首先TsFltMgr掛鉤了KiFastCallEntry函數(shù),Hook點(diǎn)在這里:

代碼:
        kd>?u?KiFastCallEntry+e3
nt!KiFastCallEntry+0xe3:
8053dbb3?c1e902????????shr?????ecx,2
-------------------------------------------------------------------------
8053dbb6?90????????????nop
8053dbb7?90????????????nop
8053dbb8?90????????????nop
8053dbb9?e962170c77????jmp?????TsFltMgr+0x2320?(f75ff320)
-------------------------------------------------------------------------
8053dbbe?0f83a8010000??jae?????nt!KiSystemCallExit2+0x9f?(8053dd6c)
8053dbc4?f3a5??????????rep?movs?dword?ptr?es:[edi],dword?ptr?[esi]
8053dbc6?ffd3??????????call????ebx

      
原始的KiFastCallEntry在?shr?ecx,?2?指令后面應(yīng)該是?mov?edi,esp;cmp?esi,?MmUserProbeAddress,共8個字節(jié),在這里被?TsFltMgr?替換成了3個nop和一個jmp。

該jmp會跳轉(zhuǎn)到?KiFastCallEntry_Detour?函數(shù)中,KiFastCallEntry_Detour?函數(shù)代碼例如以下:

代碼:
        //?保存現(xiàn)場
pushfd????????
pushad????????

//?調(diào)用?KiFastCallEntry_Filter?函數(shù),實(shí)現(xiàn)過濾
push?edi????????????????????//?本次系統(tǒng)調(diào)用相應(yīng)的SysCall?Table的地址(SSDT或SSDTShadow的地址)
push?ebx????????????????????//?本次系統(tǒng)調(diào)用在SysCall?Table中相應(yīng)的內(nèi)核函數(shù)地址
push?eax????????????????????//?本次系統(tǒng)調(diào)用相應(yīng)的內(nèi)核函數(shù)在SysCall?Table中的功能號
call?KiFastCallEntry_Filter?//?調(diào)用KiFastCallEntry_Filter,實(shí)現(xiàn)過濾
mov??[esp+10h],?eax?????????//?更改本次調(diào)用相應(yīng)的內(nèi)核函數(shù)地址!

//?恢復(fù)現(xiàn)場
popad????????
popfd

//?運(yùn)行?KiFastCallEntry?函數(shù)中被替換掉的指令,并跳回原函數(shù)
mov?????edi,esp
cmp?????esi,?g_7fff0000
push????g_JmpBack
ret

      
這里須要注意的是?call?KiFastCallEntry_Filter?之后的?mov?[esp+10h],?eax。之前保存現(xiàn)場時的指令pushad會導(dǎo)致寄存器EAX,?ECX,?EDX,?EBX,?ESP,?EBP,?ESI,?EDI依次入棧,并通過后面的popad指令恢復(fù)這些寄存器的值。因此此處的mov?[esp+10h],?eax實(shí)際上是用?KiFastCallEntry_Filter?函數(shù)的返回值來改寫堆棧中保存的ebx的值,即改寫本次系統(tǒng)調(diào)用相應(yīng)的內(nèi)核函數(shù)地址。

KiFastCallEntry_Filter?是真正實(shí)現(xiàn)過濾的函數(shù),該函數(shù)的參數(shù)和返回值上文已經(jīng)說明了,其詳細(xì)實(shí)現(xiàn)分析整理后,C語言描寫敘述例如以下:

代碼:
        ULONG?__stdcall?KiFastCallEntry_Filter(ULONG?ulSyscallId,?ULONG?ulSyscallAddr,?PULONG?pulSyscallTable)?
{
????PFAKE_SYSCALL?pFakeSysCall?=?NULL;

????if?(?ulSyscallId?>=?0x400?)?
????????return?ulSyscallAddr;

????if?(?pulSyscallTable?==?g_KiServiceTable?&&?ulSyscallId?<=?g_ServiceNum/*?0x11c?*/?)?
????{
????????pFakeSysCall?=?g_FakeSysCallTable[ulSyscallId];????????//?SSDT
????}
????else?if?(pulSyscallTable?==?g_KeServiceDescriptorTable?&&?
?????????????g_KeServiceDescriptorTable?&&?ulSyscallId?<=?g_ServiceNum/*?0x11c?*/)
????{
????????pFakeSysCall?=?g_FakeSysCallTable[ulSyscallId];????????//?SSDT
????}
????else?if?(pulSyscallTable?==?g_W32pServiceTableAddr?&&?ulSyscallId?<=?g_ShadowServiceNum/*?0x29b?*/)
????{
????????pFakeSysCall?=?g_FakeSysCallTable[ulSyscallId?+?1024];?//?ShadowSSDT
????}

????if?(?pFakeSysCall?&&?pFakeSysCall->ulFakeSysCallAddr?)
????{
????????pFakeSysCall->ulOrigSysCallAddr?=?ulSyscallAddr;
????????return?pFakeSysCall->ulFakeSysCallAddr;
????}
????return?ulSyscallAddr;
}

      
這里須要說明的是,TsFltMgr內(nèi)部有一張表,暫且命名為?g_FakeSysCallTable,該表中存放的是指向?FAKE_SYSCALL?結(jié)構(gòu)的指針。表中的每個?FAKE_SYSCALL?結(jié)構(gòu)相應(yīng)一個系統(tǒng)調(diào)用,表的前半部分相應(yīng)SSDT中的系統(tǒng)調(diào)用,1024項(xiàng)以后相應(yīng)ShadowSSDT里的系統(tǒng)調(diào)用。

當(dāng)中?FAKE_SYSCALL?結(jié)構(gòu)大致例如以下(當(dāng)中非常多域的作用沒弄明確):

代碼:
        typedef?struct?__FAKE_SYSCALL__?{
????ULONG?xxx1;
????ULONG?ulSyscallId;????????//?該系統(tǒng)調(diào)用的功能號
????ULONG?xxx3;
????ULONG?ulTableIndex;????
????ULONG?xxx5;
????ULONG?ulCountForPreWork;
????ULONG?ulCountForPostWork;
????ULONG?xxx8;
????ULONG?ulOrigSysCallAddr;????//?真實(shí)的系統(tǒng)調(diào)用地址
????ULONG?ulFakeSysCallAddr;????//?假的系統(tǒng)調(diào)用地址
????ULONG?xxx11;
????ULONG?xxx12;
????ULONG?xxx13;
????……
}?FAKE_SYSCALL,?*PFAKE_SYSCALL,?**PPFAKE_SYSCALL;

      
因此?KiFastCallEntry_Filter?函數(shù)的所做的就是依據(jù)系統(tǒng)調(diào)用的功能號在?g_FakeSysCallTable?中索引出相應(yīng)的?pFakeSysCall?對象,然后推斷該系統(tǒng)調(diào)用是否須要hook,假設(shè)須要則將真實(shí)的系統(tǒng)調(diào)用地址保存到?pFakeSysCall->ulOrigSysCallAddr?中,并將?pFakeSysCall->ulFakeSysCallAddr?作為假系統(tǒng)調(diào)用的地址返回。

這樣的調(diào)用過程中動態(tài)獲取真實(shí)系統(tǒng)調(diào)用地址的方法使?TsFltMgr?的Hook框架有較高的兼容性,比如不會使載入順序晚于TsFltMgr的驅(qū)動中的SSDT?Hook失效,比如QQ電腦管家本身帶的TSKsp.sys驅(qū)動。

對于我的測試系統(tǒng)(XP_SP2),TsFltMgr?hook的函數(shù)有:

代碼:
        //?SSDT中:
NtCreateFile、NtCreateKey、NtCreateSection、NtCreateSymbolicLinkObject、NtCreateThread、NtDeleteFile、NtDeleteKey、NtDeleteValueKey、NtDeviceIoControlFile、NtDuplicateObject、NtEnumerateValueKey、NtLoadDriver、NtOpenProcess、NtOpenSection、NtProtectVirtualMemory、NtQueryValueKey、NtRequestWaitReplyPort、NtSetContextThread、NtSetInformationFile、NtSetSystemInformation、NtSetValueKey、NtSuspendThread、NtSystemDebugControl、NtTerminateProcess、NtTerminateThread、NtWriteFile、NtWriteVirtualMemory

//?ShadowSSDT中:
NtUserBuildHwndList、NtUserFindWindowEx、NtUserGetForegroundWindow、NtUserMoveWindow、NtUserQueryWindow、NtUserSendInput、NtUserSetParent、NtUserSetWindowLong、NtUserSetWindowPlacement、NtUserSetWindowPos、NtUserShowWindow、NtUserShowWindowAsync、NtUserWindowFromPoint

      
全部假系統(tǒng)函數(shù)都有統(tǒng)一的代碼框架,假系統(tǒng)函數(shù)的代碼框架大致例如以下:

代碼:
        NTSTATUS?__stdcall?FakeNt_XXX(xxx)
{
????PFAKE_SYSCALL?pFakeSysCall;
????ULONG?ulXXX?=?0;
????ULONG?ulStatus;
????NTSTATUS?status;
????ULONGLONG?ullTickCount;
????
????pFakeSysCall?=?g_pFakeSysCall_Nt_XXX;??//?該系統(tǒng)調(diào)用相應(yīng)的?pFakeSysCall?對象
????
????status?=?STATUS_ACCESS_DENIED;
??

????//?貌似是做性能測試時候須要的,實(shí)際版本號中?g_bPerformanceTest?為?FALSE
????if?(?g_bPerformanceTest?)?{
????????ullTickCount?=?KeQueryInterruptTime();
????}


????//?系統(tǒng)調(diào)用的調(diào)用前處理!
????//?+++
????InterlockedIncrement(&pFakeSysCall->ulCountForPreWork);
????ulStatus?=?PreWork(&ulXXX,?pFakeSysCall);
????InterlockedDecrement(&pFakeSysCall->ulCountForPreWork);
????//?---
????
????if?(?ulStatus?!=?0xEEEE0004?&&?ulStatus?!=?0xEEEE0005)?
????{????
????????OrigSysCall?*?pOrigSysCall?=?pFakeSysCall->ulOrigSysCallAddr;

????????//?調(diào)用原始系統(tǒng)調(diào)用!
????????if?(?pOrigSysCall?&&?NT_SUCCESS(pOrigSysCall(xxx))?)?
????????{
????????????//?系統(tǒng)調(diào)用的調(diào)用后處理!
????????????//?+++
????????????InterlockedIncrement(&pFakeSysCall->ulCountForPostWork),
????????????ulStatus?=?PostWork(&ulXXX),
????????????InterlockedDecrement(&pFakeSysCall->ulCountForPostWork),
????????????//?---
????????}
????}

????//?0xEEEE0004?應(yīng)該是拒絕調(diào)用的意思,0xEEEE0005?應(yīng)該是同意調(diào)用的意思
????if?(ulStatus?==?0xEEEE0005)
????????status?=?STATUS_SUCCESS;

????//?PsGetCurrentProcessId?這個調(diào)用的返回值后面并沒實(shí)用到,可能是多余的
????PsGetCurrentProcessId();

????//?貌似是做性能測試時候須要的
????if?(?g_pFakeSysCall_NtTerminateProcess->xxx5?&&?ullTickCount?&&?g_bPerformanceTest)?{
????????PerformanceTest(&g_pFakeSysCall_NtTerminateProcess->xxx13,?ullTickCount);
????}

????return?status;
}

      
以上就是對TsFltMgr?Hook框架的一些分析,祝大家元宵快樂~?

TsFltMgr.sys系統(tǒng)藍(lán)屏的原因就在于QQ電腦管家!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!?。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 丁香激情五月 | 国产区精品在线 | 亚洲免费视频网 | 亚洲激情一区 | 欧美在线观看一区二区 | 涩涩屋av | 欧美三级不卡 | 亚洲精品视频在线 | 国产精品人妻无码久久久郑州 | 香蕉久草 | 精品免费视频 | 亚洲精品97福利在线 | 久久久精品国产 | 日本一区二区三区四区 | 久草在线视频免费看 | 欧美日韩一区在线观看 | 一区二区日韩 | 国产高清网址 | 国产精品资源在线 | 日韩在线 在线播放 | 99热久久这里只精品国产9 | 老妇激情毛片免费 | 国产精品成人一区二区三区 | 国产福利资源在线 | 片在线观看免费观看视频 | 久久久久无码国产精品一区 | 天天影院 | 亚洲精品不卡 | 亚洲视频在线一区 | 日本高清www午色夜黄 | 国产综合视频在线观看 | 亚洲一区视频在线 | 成人午夜视频网站 | 久久天天躁狠狠躁夜夜躁2014 | 国内精品一区二区三区最新 | 激情综合欧美 | 日本大黄视频 | 亚洲国产第一区二区香蕉 | 一区二区视频在线 | 欧美无乱码久久久免费午夜一区 | 国产乱精品一区二区三区 |