日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

記一次 .NET某工控WPF程序被人惡搞的卡死分析

來源: 責編: 時間:2024-05-29 08:57:02 217觀看
導讀一、背景1. 講故事這一期程序故障除了做原理分析,還順帶吐槽一下,熟悉我的朋友都知道我分析dump是免費的,但免費不代表可以濫用我的寶貴時間,我不知道有些人故意惡搞卡死是想干嘛,不得而知,希望后面類似的事情越來越少吧!廢

一、背景

1. 講故事

這一期程序故障除了做原理分析,還順帶吐槽一下,熟悉我的朋友都知道我分析dump是免費的,但免費不代表可以濫用我的寶貴時間,我不知道有些人故意惡搞卡死是想干嘛,不得而知,希望后面類似的事情越來越少吧!廢話不多說,我們來看看是如何被惡搞的。Ui028資訊網——每日最新資訊28at.com

二、WinDbg 分析

1. 程序是如何卡死的

既然是窗體程序自然就是看主線程,我們使用 k 命令即可。Ui028資訊網——每日最新資訊28at.com

0:000> k  # Child-SP          RetAddr               Call Site00 00000036`e1f7da18 00007ffe`70bf30ce     ntdll!NtWaitForSingleObject+0x1401 00000036`e1f7da20 00007ffd`eff74910     KERNELBASE!WaitForSingleObjectEx+0x8e...05 (Inline Function) --------`--------     coreclr!CLREventBase::Wait+0x12 [D:/a/_work/1/s/src/coreclr/vm/synch.cpp @ 412] 06 00000036`e1f7db20 00007ffd`f00c9afa     coreclr!Thread::WaitSuspendEventsHelper+0xc8 [D:/a/_work/1/s/src/coreclr/vm/threadsuspend.cpp @ 4626] 07 (Inline Function) --------`--------     coreclr!Thread::WaitSuspendEvents+0x8 [D:/a/_work/1/s/src/coreclr/vm/threadsuspend.cpp @ 4663] 08 00000036`e1f7dbe0 00007ffd`f0009c80     coreclr!Thread::RareEnablePreemptiveGC+0x7d99a [D:/a/_work/1/s/src/coreclr/vm/threadsuspend.cpp @ 2414] 09 (Inline Function) --------`--------     coreclr!Thread::EnablePreemptiveGC+0x16 [D:/a/_work/1/s/src/coreclr/vm/threads.h @ 2044] 0a 00000036`e1f7dc20 00007ffd`f0075d10     coreclr!Thread::RareDisablePreemptiveGC+0xc8 [D:/a/_work/1/s/src/coreclr/vm/threadsuspend.cpp @ 2156] 0b 00000036`e1f7dca0 00007ffd`f0096a5f     coreclr!JIT_ReversePInvokeEnterRare2+0x18 [D:/a/_work/1/s/src/coreclr/vm/jithelpers.cpp @ 5462] 0c 00000036`e1f7dcd0 00007ffd`907afe09     coreclr!JIT_ReversePInvokeEnterTrackTransitions+0xaf [D:/a/_work/1/s/src/coreclr/vm/jithelpers.cpp @ 5509] 0d 00000036`e1f7dd00 00007ffe`72e0e858     0x00007ffd`907afe090e 00000036`e1f7dd80 00007ffe`72e0e3dc     user32!UserCallWinProcCheckWow+0x2f80f 00000036`e1f7df10 00007ffe`72e20c93     user32!DispatchClientMessage+0x9c10 00000036`e1f7df70 00007ffe`730f0e64     user32!_fnDWORD+0x3311 00000036`e1f7dfd0 00007ffe`70b31104     ntdll!KiUserCallbackDispatcherContinue12 00000036`e1f7e058 00007ffe`72e21c0e     win32u!NtUserGetMessage+0x1413 00000036`e1f7e060 00007ffe`711e28f2     user32!GetMessageW+0x2e...1d 00000036`e1f7e460 00007ffd`f009ba53     xxx!xxx.App.Main+0x5e...2a 00000036`e1f7f140 00007ffe`4cd4e1e6     hostfxr!execute_app+0x2fa [D:/a/_work/1/s/src/native/corehost/fxr/fx_muxer.cpp @ 145] ...34 00000036`e1f7f890 00000000`00000000     ntdll!RtlUserThreadStart+0x21

從卦中的調用棧可以看到,主線程通過 GetMessageW 從消息隊列中拿到了數據,在處理時被 coreclr 押解到 WaitSuspendEventsHelper 處等待一個event事件,接下來看下這個方法的源碼到底是怎么寫的?簡化后如下:Ui028資訊網——每日最新資訊28at.com

BOOL Thread::WaitSuspendEventsHelper(void){    if (m_State & TS_DebugSuspendPending)    {        ThreadState oldState = m_State;        while (oldState & TS_DebugSuspendPending)        {            ThreadState newState = (ThreadState)(oldState | TS_SyncSuspended);            if (InterlockedCompareExchange((LONG*)&m_State, newState, oldState) == (LONG)oldState)            {                result = m_DebugSuspendEvent.Wait(INFINITE, FALSE);                break;            }            oldState = m_State;        }    }    return result != WAIT_OBJECT_0;}

從上面的代碼可以明顯的看到當前Thread 處于 TS_DebugSuspendPending 狀態,從名字上看貌似和調試有關,接下來查下這個枚舉的注解。Ui028資訊網——每日最新資訊28at.com

enum ThreadState{    TS_DebugSuspendPending = 0x00000008,    // Is the debugger suspending threads?}

從注解看是因為調試器阻塞了這個線程,我去,哪里來的調試器呢?這引起了我的巨大興趣。。。Ui028資訊網——每日最新資訊28at.com

2. 哪里來的調試器

我剛開始是抱有巨大的善意,我以為他的程序被人惡意注入導致卡死,但分析下來我還是太單純了,繼續往下看吧,既然有調試器,一般來說PEB.BeingDebugged=Yes狀態,命令的輸出結果也得到了證實。Ui028資訊網——每日最新資訊28at.com

0:000> !pebPEB at 00000036e1c11000    ...    BeingDebugged:            Yes    ...                    Base TimeStamp                     Module            7ff7f5230000 65310000 Oct 19 18:08:00 2023 G:/xxx/C#/Projects/NugetApplications/Applications/xxx/bin/Debug/net6.0-windows/xxx.exe            ...

我以為到這里就可以告訴朋友答案,你的程序可能被人惡意注入了,但眼尖的我發現了一點異常,他的 xxx.exe 啟動目錄怎么會有 /bin/Debug/net6.0-windows/ 呢?很明顯這是用 VS 直接跑起來的呀。。。。Ui028資訊網——每日最新資訊28at.com

3. 真的是 VS 跑起來的嗎

首先大家要知道 Visual Studio 是托管調試器,托管調試器在調試程序的時候會在 coreclr 層面設置一個全局變量 g_CORDebuggerControlFlags=0x0200,這也是 Debugger.IsAttached 的底層判斷依據,不相信的朋友可以看下這個方法的底層實現:Ui028資訊網——每日最新資訊28at.com

FCIMPL0(FC_BOOL_RET, DebugDebugger::IsDebuggerAttached){    CORDebuggerAttached();}inline bool CORDebuggerAttached(){    return (g_CORDebuggerControlFlags & DBCF_ATTACHED);}enum DebuggerControlFlag{    DBCF_ATTACHED                   = 0x0200,};

有了這些基礎知識之后,接下來就可以用 x 命令去驗證下。Ui028資訊網——每日最新資訊28at.com

看到上面的答案基本就可以實錘了,有些朋友可能還是不大相信,我們可以這樣看,VisualStudio 是 WPF 寫的,如果用 VS 來調試,那么線程棧里面應該會有很多類似的 VisualStudio 字符串。Ui028資訊網——每日最新資訊28at.com

從卦中看,你說正常發布的程序怎么可能會有 9 個 Microsoft.VisualStudio.DesignTools 字符串呢?Ui028資訊網——每日最新資訊28at.com

4. 這個dump是如何生成的

這個問題我相信可能有一些朋友會比較疑惑,其實沒什么疑惑的,Visual Studio 有生成Dump的功能,操作步驟為:Debug -> Save Dump As... , 接下來通過一個小例子觀察一下。Ui028資訊網——每日最新資訊28at.com

internal class Program    {        static void Main(string[] args)        {            Console.WriteLine($"托管調試器:{Debugger.IsAttached}");            Console.WriteLine($"非托管調試器:{IsDebuggerPresent()}");            Console.ReadLine();        }        [DllImport("kernel32.dll")]        static extern bool IsDebuggerPresent();    }

調試起來后,截圖如下:Ui028資訊網——每日最新資訊28at.com

最后打開生成好的 Dump 文件,使用 kc 觀察主線程的輸出:Ui028資訊網——每日最新資訊28at.com

0:000> kc # Call Site00 ntdll!NtWaitForSingleObject01 KERNELBASE!WaitForSingleObjectEx02 coreclr!CLREventWaitHelper203 coreclr!CLREventWaitHelper04 coreclr!CLREventBase::WaitEx05 coreclr!CLREventBase::Wait06 coreclr!Thread::WaitSuspendEventsHelper07 coreclr!Thread::WaitSuspendEvents08 coreclr!Thread::RareEnablePreemptiveGC09 coreclr!Thread::EnablePreemptiveGC0a coreclr!Thread::RareDisablePreemptiveGC0b coreclr!Thread::DisablePreemptiveGC...19 ConsoleApp4!ConsoleApp4.Program.Main...30 ntdll!RtlUserThreadStart

從卦中看,正是停留在 WaitSuspendEventsHelper 函數里,一摸一樣,徹底被360°無死角的證實......Ui028資訊網——每日最新資訊28at.com

三、總結

這是一次人為的故意惡搞,大概率就是想看下我到底是騾子是馬。我分析的結果對他和他所在的公司來說沒有任何價值,只能白白的浪費我的時間,真是分析多了,什么樣的人都能遇到,謹以此文告知后來者,免費但請不要濫用!Ui028資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-91362-0.html記一次 .NET某工控WPF程序被人惡搞的卡死分析

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 每個前端開發人員都應該了解的軟件工程原理

下一篇: 面試官:你能實現一個 JavaScript 模板引擎嗎?

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品乱码妇女bbbb| 午夜精品一区二区三区电影天堂 | 国产精品色网| 国产精品自在欧美一区| 极品日韩av| 99视频超级精品| 欧美一级夜夜爽| 牛牛国产精品| 欧美性猛交一区二区三区精品| 国产日韩欧美中文| 亚洲精品你懂的| 欧美一级播放| 欧美激情影院| 国产亚洲精品bt天堂精选| 亚洲人成在线观看| 亚洲欧美影院| 欧美高清视频一区二区| 国产精品美女久久久| 狠狠久久亚洲欧美专区| 一区二区三区导航| 久久青草福利网站| 国产精品国产三级国产专播精品人| 黄网站免费久久| 中国av一区| 免费一区二区三区| 国产欧美日韩一区二区三区| 日韩一级片网址| 久久久久久尹人网香蕉| 欧美性事免费在线观看| 永久域名在线精品| 亚洲欧美在线一区二区| 欧美连裤袜在线视频| 激情久久综合| 校园春色综合网| 欧美日韩亚洲一区二区三区在线观看| 狠狠综合久久| 亚洲欧美日韩一区二区在线| 欧美女同在线视频| 激情成人在线视频| 翔田千里一区二区| 欧美色视频在线| 亚洲欧洲日韩综合二区| 久久影视精品| 国产日韩欧美在线观看| 亚洲一区不卡| 欧美日韩国产页| 亚洲精品美女91| 久久中文字幕一区二区三区| 国产美女精品视频免费观看| 在线视频欧美精品| 欧美伦理91i| 亚洲激情社区| 麻豆精品视频| 黄色亚洲免费| 久久精品国产精品亚洲精品| 国产精品天天看| 亚洲午夜一区二区| 欧美日韩视频在线观看一区二区三区| 亚洲精美视频| 免费观看欧美在线视频的网站| 国产在线欧美日韩| 欧美制服丝袜第一页| 国产女主播视频一区二区| 亚洲一本视频| 欧美天天影院| 亚洲视频1区2区| 欧美日韩免费在线| 99国产欧美久久久精品| 欧美日韩成人综合在线一区二区| 亚洲激情一区二区| 欧美成人小视频| 亚洲激情视频在线播放| 女仆av观看一区| 亚洲国产精品一区二区第一页| 久久久www| 禁断一区二区三区在线| 久久久噜噜噜久久| 一区二区三区在线免费视频| 久久婷婷一区| 18成人免费观看视频| 一区二区三区欧美激情| 性欧美18~19sex高清播放| 欧美日韩日本网| 99ri日韩精品视频| 欧美日韩国产免费观看| 日韩亚洲成人av在线| 欧美人妖另类| 一二三区精品| 国产精品v日韩精品v欧美精品网站| 亚洲美女尤物影院| 欧美日韩亚洲一区二区三区在线观看| 日韩午夜免费| 欧美日韩综合另类| 亚洲私人影院在线观看| 国产精品黄视频| 欧美亚洲日本一区| 国内久久婷婷综合| 久久婷婷色综合| 亚洲欧洲日本国产| 欧美日韩三级| 午夜精彩国产免费不卡不顿大片| 国产精品一区二区你懂得| 午夜在线a亚洲v天堂网2018| 韩日精品视频一区| 欧美国产一区二区在线观看| av成人免费| 欧美视频官网| 亚洲尤物视频网| 国产一区二区三区成人欧美日韩在线观看| 久久精品天堂| 91久久精品一区| 欧美日韩一区国产| 午夜免费在线观看精品视频| 韩国免费一区| 欧美精品国产精品日韩精品| 夜夜爽av福利精品导航| 国产欧美精品久久| 欧美gay视频激情| 中文日韩在线| 国产亚洲精品久久飘花| 欧美成人激情在线| 亚洲视频欧美在线| 国产在线视频欧美| 欧美精品成人| 欧美一级成年大片在线观看| 亚洲黄色影院| 国产精品三级久久久久久电影| 另类尿喷潮videofree| 9人人澡人人爽人人精品| 国产毛片精品国产一区二区三区| 免费不卡中文字幕视频| 亚洲视频欧洲视频| 一区在线影院| 欧美午夜精彩| 麻豆精品视频在线| 亚洲欧美日韩在线观看a三区| …久久精品99久久香蕉国产| 国产精品a久久久久| 久久尤物视频| 亚洲欧美日韩国产另类专区| 亚洲第一精品电影| 国产精品日韩专区| 欧美日精品一区视频| 国产精品久久久久久久浪潮网站 | 国产伊人精品| 欧美精品一区二区三区很污很色的| 亚洲欧美在线一区二区| 亚洲毛片在线观看| 国产日韩综合一区二区性色av| 欧美国产日韩一区二区| 欧美在线关看| 99国产麻豆精品| 狠狠v欧美v日韩v亚洲ⅴ| 欧美日韩亚洲一区在线观看| 免费精品视频| 久久国产精品99久久久久久老狼| 一区二区成人精品| 亚洲国产精品嫩草影院| 国产日韩一区欧美| 欧美视频在线观看视频极品| 欧美成人免费在线| 久久免费少妇高潮久久精品99| 亚洲一区二区三区欧美 | 亚洲最新在线视频| 亚洲大胆女人| 国产一区二区三区在线观看精品| 欧美视频在线观看免费| 欧美gay视频激情| 久久精品视频一| 亚洲欧美视频一区二区三区| 99re热精品| 亚洲黄色天堂| 一区视频在线播放| 国产区欧美区日韩区| 国产精品美女久久久| 欧美日韩在线不卡| 欧美激情视频在线播放| 噜噜噜91成人网| 久久午夜电影| 久久精品人人做人人爽电影蜜月| 午夜精品一区二区三区电影天堂| 一区二区高清视频在线观看| 亚洲精品视频免费| 亚洲国产小视频| 亚洲观看高清完整版在线观看| 国产一区二区三区丝袜 | 久久精品日产第一区二区| 亚洲综合第一| 一区二区三区三区在线| 日韩午夜在线播放| 亚洲第一偷拍| 在线免费观看视频一区| 黄色精品网站| 狠狠色综合日日| 国产一区二区三区不卡在线观看| 国产欧美日韩免费看aⅴ视频| 国产美女一区二区| 国产午夜精品理论片a级大结局| 国产欧美日韩综合| 国产午夜精品一区二区三区视频 | 亚洲桃花岛网站| 亚洲欧美国产日韩中文字幕| 午夜日韩在线观看| 欧美一区二区三区四区高清|