最新要闻
- 翻开孩子作业本,妈妈懵了:终于知道为啥成绩不好_观焦点
- 瞭望·瞭望访谈|找准好的科学问题——专访广东省人民医院院长余学清
- 榆林:斑马线前不礼让行人酿事故,负全责!-当前聚焦
- 世界今日报丨水利部和中国气象局6月26日18时联合发布蓝色山洪灾害气象预警
- 环球观热点:新城法院与西北政法大学共建企业合规研究基地
- 【环球速看料】张家口南壕堑镇招商引资精准发力
- 临颍县王岗镇组织开展夏季安全生产工作
- 中信建投:AI应用持续落地 暑期内容消费旺季来临
- 当前要闻:马云回归,淘宝还有机会吗?
- 焦点速看:超市分切水果引担忧:早晨切的西瓜,傍晚还新鲜吗?
- 天天快资讯:甘肃省酒泉市金塔县发生一起高压锅爆炸事故 2人受伤
- 俄总统普京发表电视讲话感谢全国民众和社会的团结
- 蓝牙gps模拟定位_蓝牙GPS的问题!!_全球微头条
- 铁拳8宣布将于7月在Steam上对PS5及XboxSeriesX/S和PC进行封闭网络测试
- 中国芯片的一个问题:很多都是低端、重复内卷,自己人打自己人
- 联合能源集团早盘涨超5% 天气炎热+LNG出口前景看好 美国天然气价格周一升至近四个月来最高水平
手机
每日短讯:官方通报深圳一大厦异响振动:房屋基础薄弱,将进行加固处理
2023郑州6月份人才公寓申请时间+房源-当前动态
- 每日短讯:官方通报深圳一大厦异响振动:房屋基础薄弱,将进行加固处理
- 2023郑州6月份人才公寓申请时间+房源-当前动态
- 掌握这些拍摄技巧,你也能拍出好看的月亮照片!
- 皇马空出9号球衣,不是为了引进姆巴佩,谁都知道他喜欢几号
- 福建:促消费政策协同发力 前五月全省消费品市场持续恢复向好|独家焦点
- 第六批省级工业设计中心申报推荐工作通知
家电
当前消息!记一次 .NET 某企业采购平台 崩溃分析
前段时间有个朋友找到我,说他们的程序有偶发崩溃的情况,让我帮忙看下怎么回事,针对这种 crash 的程序,用 AEDebug 的方式抓取一个便知,有了 dump 之后接下来就可以分析了。
(资料图片仅供参考)
二:Windbg 分析1. 为什么会崩溃既然是程序的崩溃,我们可以像看蓝屏一下看dump文件,使用 !analyze -v
命令即可。
0:000> !analyze -v******************************************************************************** ** Exception Analysis ** ********************************************************************************CONTEXT: (.ecxr)rax=0000000000000000 rbx=0000000000f7ccb0 rcx=00007ffe23af7ab0rdx=00000000013e3b10 rsi=0000000000f7ccb0 rdi=0000000000f7c7c0rip=00007ffe538e7044 rsp=0000000000f7cf60 rbp=0000000000f7d770 r8=0000000000000001 r9=000000f7000006bd r10=0000000000f7d640r11=0000000000f7cf50 r12=0000000000000001 r13=0000000000000001r14=000000005c520126 r15=00000000013e3b10iopl=0 nv up ei pl nz na po nccs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010204clr!ComPreStubWorker+0xf2e54:00007ffe`538e7044 f6403820 test byte ptr [rax+38h],20h ds:00000000`00000038=??Resetting default scopeEXCEPTION_RECORD: (.exr -1)ExceptionAddress: 00007ffe538e7044 (clr!ComPreStubWorker+0x00000000000f2e54) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000001NumberParameters: 2 Parameter[0]: 0000000000000000 Parameter[1]: 0000000000000038Attempt to read from address 0000000000000038PROCESS_NAME: xxx.exeREAD_ADDRESS: 0000000000000038 ERROR_CODE: (NTSTATUS) 0xc0000005 - 0x%p 0x%p %sEXCEPTION_CODE_STR: c0000005EXCEPTION_PARAMETER1: 0000000000000000EXCEPTION_PARAMETER2: 0000000000000038STACK_TEXT: 00000000`00f7cf60 00007ffe`538e7044 clr!ComPreStubWorker+0xf2e5400000000`00f7d590 00007ffe`53712d62 clr!ComCallPreStub+0x6200000000`00f7d660 00007ffe`1de3ba83 wwkrn64+0xba8300000000`00f7d740 00007ffe`638ebc70 ole32!CPrivDragDrop::PrivDragDrop+0x2b000000000`00f7d790 00007ffe`638eb98c ole32!PrivDragDrop+0x19800000000`00f7d830 00007ffe`638a9c1e ole32!CDragOperation::GetDropTarget+0xee00000000`00f7d8b0 00007ffe`638ac239 ole32!CDragOperation::UpdateTarget+0x4cd....
从上面的信息看,这个程序是一个经典的 访问违例
异常,违例是因为 rax=0
导致读取了不该读取的地方,接下来我们切到异常上下文看下为什么会是 0 ?
要想切到异常上下文,先使用 .ecxr
命令,再使用 ub 反汇编。
0:000> .ecxrrax=0000000000000000 rbx=0000000000f7ccb0 rcx=00007ffe23af7ab0rdx=00000000013e3b10 rsi=0000000000f7ccb0 rdi=0000000000f7c7c0rip=00007ffe538e7044 rsp=0000000000f7cf60 rbp=0000000000f7d770 r8=0000000000000001 r9=000000f7000006bd r10=0000000000f7d640r11=0000000000f7cf50 r12=0000000000000001 r13=0000000000000001r14=000000005c520126 r15=00000000013e3b10iopl=0 nv up ei pl nz na po nccs=0033 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010204clr!ComPreStubWorker+0xf2e54:00007ffe`538e7044 f6403820 test byte ptr [rax+38h],20h ds:00000000`00000038=??0:000> ub 00007ffe`538e7044clr!ComPreStubWorker+0xf2e20:00007ffe`538e7010 0f8591d3f0ff jne clr!ComPreStubWorker+0x1b4 (00007ffe`537f43a7)00007ffe`538e7016 488b0e mov rcx,qword ptr [rsi]00007ffe`538e7019 488d81b8ffffff lea rax,[rcx-48h]00007ffe`538e7020 48898424c0050000 mov qword ptr [rsp+5C0h],rax00007ffe`538e7028 48898424b8050000 mov qword ptr [rsp+5B8h],rax00007ffe`538e7030 488b89c0ffffff mov rcx,qword ptr [rcx-40h]00007ffe`538e7037 e8fcfcebff call clr!MethodTable::GetComCallWrapperTemplate (00007ffe`537a6d38)00007ffe`538e703c 48898424b0050000 mov qword ptr [rsp+5B0h],rax
从汇编代码看,rax 是 clr!MethodTable::GetComCallWrapperTemplate
方法的返回值,从方法名字看是一个经典的 COM 和 .NET 互操作,接下来继续用 uf
反汇编看下这个方法,精简后的代码如下:
0:000> uf clr!MethodTable::GetComCallWrapperTemplate00007ffe`537a6d38 48895c2408 mov qword ptr [rsp+8],rbx00007ffe`537a6d3d 57 push rdi...00007ffe`537a6d57 488bcb mov rcx,rbx00007ffe`537a6d5a e8c943f7ff call clr!MethodTable::GetClass (00007ffe`5371b128)00007ffe`537a6d5f 488b4030 mov rax,qword ptr [rax+30h]...
再结合 coreclr 源码:
inline ComCallWrapperTemplate *MethodTable::GetComCallWrapperTemplate(){ LIMITED_METHOD_CONTRACT; return GetClass()->GetComCallWrapperTemplate();}class EEClass // DO NOT CREATE A NEW EEClass USING NEW!{ ComCallWrapperTemplate* m_pccwTemplate; // points to interop data structures used when this type is exposed to COM inline ComCallWrapperTemplate *GetComCallWrapperTemplate() { LIMITED_METHOD_CONTRACT; return m_pccwTemplate; }}
到这里大概能推测到是因为 EEClass.m_pccwTemplate
字段为 null 所致,从注释看,他是 CLR 用来暴露给 COM 使用的数据结构,那为什么暴露给 COM 使用的数据结构为 NULL 呢? 这个分析起来就复杂了。
但有一点可以确定,像这种逻辑必然是 坚如磐石
,受过日月精华,经历过500年的风吹雨打,不可能无缘无故的出篓子。
要寻找突破口还得从调用栈入手,我们用 k
命令洞察一下。
0:000> k *** Stack trace for last set context - .thread/.cxr resets it # Child-SP RetAddr Call Site00 00000000`00f7cf60 00007ffe`53712d62 clr!ComPreStubWorker+0xf2e5401 00000000`00f7d590 00007ffe`1de3ba83 clr!ComCallPreStub+0x6202 00000000`00f7d660 00007ffe`638ebc70 wwkrn64+0xba8303 00000000`00f7d740 00007ffe`638eb98c ole32!CPrivDragDrop::PrivDragDrop+0x2b0 [com\ole32\com\rot\getif.cxx @ 659] 04 00000000`00f7d790 00007ffe`638a9c1e ole32!PrivDragDrop+0x198 [com\ole32\com\rot\getif.cxx @ 920] 05 00000000`00f7d830 00007ffe`638ac239 ole32!CDragOperation::GetDropTarget+0xee [com\ole32\ole232\drag\drag.cpp @ 1128] 06 00000000`00f7d8b0 00007ffe`638ac91c ole32!CDragOperation::UpdateTarget+0x4cd [com\ole32\ole232\drag\drag.cpp @ 2026] 07 00000000`00f7d9a0 00007ffe`2443f664 ole32!DoDragDrop+0x10c [com\ole32\ole232\drag\drag.cpp @ 3007] 08 00000000`00f7dc80 00007ffe`244ccd8d System_Windows_Forms_ni+0x9cf664...
仔细观察线程栈信息,不难发现用户是在用 DoDragDrop
方法实现控件的拖拽,不过在执行流中有一个陌生的动态链接库 wwkrn64
,它到底是何方神圣呢?我们用 lmvm 观察下。
0:000> lmvm wwkrn64Browse full module liststart end module name00007ffe`1de30000 00007ffe`1df1e000 wwkrn64 C (export symbols) wwkrn64.dll Loaded symbol image file: wwkrn64.dll Image path: D:\xxx\wwall\wwkrn64.dll Image name: wwkrn64.dll Browse all global symbols functions data Timestamp: Wed Apr 26 10:18:26 2023 (644889F2) CheckSum: 00000000 ImageSize: 000EE000 Translations: 0000.04b0 0000.04e4 0409.04b0 0409.04e4 Information from resource tables:
从输出信息看,果然是一个外来物种,经过网上一顿搜索,发现是一款 信息安全软件
,哪家公司就模糊了哈,截图如下:
到这里就真相大白了,让朋友把这款软件卸载掉再试试看,问题就解决了。
4. 安全软件为什么要介入我这里只能简单推测一下,ComCallPreStub
和 ComPreStubWorker
方法是 JIT 在编译某一个方法时的前缀路径,也是很多 加壳软件
以及 永恒之蓝
这样的蠕虫病毒重点关注的方法,所以这些高危方法自然也是 安全软件
重点监视的,如果 安全软件
没处理好,自然就会误杀。。。
当然真正的原因只能问 系铃人
。
可能有些朋友要说了,怎么验证这两个方法就是 JIT 编译的前缀,这里我们用 普通方法+windbg 的方法简单验证下吧,参考代码如下:
internal class Program { static void Main(string[] args) { Debugger.Break(); Test(); Console.ReadLine(); } static void Test() { Console.WriteLine("Test1"); } }
接下来我们重点观察下 Test
方法的编译过程,看过程之前先上一张架构图:
从架构图看 Test() 方法的编译最终是由 clrjit!jitNativeCode
来处理的,要想验证很简单用 bp clrjit!jitNativeCode
下一个断点即可。
0:000> bp clrjit!jitNativeCode0:000> gBreakpoint 0 hitclrjit!jitNativeCode:00007ffb`590cc040 4c894c2420 mov qword ptr [rsp+20h],r9 ss:0000009c`5efed218=00000000000000000:000> k # Child-SP RetAddr Call Site00 0000009c`5efed1f8 00007ffb`5917d683 clrjit!jitNativeCode [D:\a\_work\1\s\src\coreclr\jit\compiler.cpp @ 6941] 01 0000009c`5efed200 00007ffb`594d3091 clrjit!CILJit::compileMethod+0x83 [D:\a\_work\1\s\src\coreclr\jit\ee_il_dll.cpp @ 279] 02 (Inline Function) --------`-------- coreclr!invokeCompileMethodHelper+0x86 [D:\a\_work\1\s\src\coreclr\vm\jitinterface.cpp @ 12774] 03 (Inline Function) --------`-------- coreclr!invokeCompileMethod+0xc5 [D:\a\_work\1\s\src\coreclr\vm\jitinterface.cpp @ 12839] 04 0000009c`5efed270 00007ffb`594d274d coreclr!UnsafeJitFunction+0x7f1 [D:\a\_work\1\s\src\coreclr\vm\jitinterface.cpp @ 13355] 05 0000009c`5efed760 00007ffb`594d22ce coreclr!MethodDesc::JitCompileCodeLocked+0x1f1 [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 1051] 06 0000009c`5efed930 00007ffb`59472009 coreclr!MethodDesc::JitCompileCodeLockedEventWrapper+0x466 [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 920] 07 0000009c`5efeda90 00007ffb`59473f58 coreclr!MethodDesc::JitCompileCode+0x2a9 [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 860] 08 (Inline Function) --------`-------- coreclr!MethodDesc::PrepareILBasedCode+0x5ae [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 439] 09 (Inline Function) --------`-------- coreclr!MethodDesc::PrepareCode+0x5ae [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 332] 0a 0000009c`5efedb40 00007ffb`5947340c coreclr!CodeVersionManager::PublishVersionableCodeIfNecessary+0x7f8 [D:\a\_work\1\s\src\coreclr\vm\codeversion.cpp @ 1701] 0b 0000009c`5efee070 00007ffb`5947316b coreclr!MethodDesc::DoPrestub+0x16c [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 2215] 0c 0000009c`5efee190 00007ffb`595abec5 coreclr!PreStubWorker+0x21b [D:\a\_work\1\s\src\coreclr\vm\prestub.cpp @ 2039] 0d 0000009c`5efee320 00007ffa`f9a0296e coreclr!ThePreStub+0x550e 0000009c`5efee3d0 00007ffb`595aae93 Example_19_1_1!Example_19_1_1.Program.Main+0x2e [D:\skyfly\19.20230624\src\Example\Example_19_1_1\Program.cs @ 10] ...
如果想在 jitNativeCode
方法中把 md
提取出来的话,可以取 r9 参数。
0:000> !dumpmd poi(r9)Method Name: Example_19_1_1.Program.Test()Class: 00007ffaf9abd520MethodTable: 00007ffaf9ac8880mdToken: 0000000006000006Module: 00007ffaf9ac6908IsJitted: noCurrent CodeAddr: ffffffffffffffffVersion History: ILCodeVersion: 0000000000000000 ReJIT ID: 0 IL Addr: 000001f865be20a7 CodeAddr: 0000000000000000 (MinOptJitted) NativeCodeVersion: 0000000000000000
三:总结这次崩溃事故的直接原因是由于第三方安全软件的介入导致的,因 ComPreStubWorker
是加壳程序和蠕虫病毒注入的突破口,不管怎样还是希望安全软件对高危函数 ComPreStubWorker
的照护逻辑再优化下吧,减少误杀的发生。
关键词:
当前消息!记一次 .NET 某企业采购平台 崩溃分析
环球焦点!普查收集资源7513份,山东省摸清农作物种质资源家底
翻开孩子作业本,妈妈懵了:终于知道为啥成绩不好_观焦点
日经225指数早盘探底回升,曾一度跌至两周低点,机构:下半年日本股市涨势恐有所降温
繁星墨夜,利剑出鞘!
6月份以来4家A股公司主动终止GDR发行|全球信息
什么素食能代替肉的营养
中国航天新高度!核动力探测器:要去太阳系边际,或对准天问四号 新消息
最新消息:一起来看电影!九亭镇7月露天电影放映安排表来啦
2023全球人工智能产品应用博览会苏州举办
紧盯关键环节,畅通投诉渠道,快速妥善处置!兰州市纪委监委跟进监督保障稳岗就业
力合微:发行可转债3.80亿元,申购日为6月28日 环球关注
A股午评:创业板指跌幅收窄 电力板块多股涨停
全球视点!全球连线|2023夏季达沃斯论坛准备工作基本就绪
1—5月 云南警方缴获毒品6.5吨
全球热消息:有研新材: 公司积极开拓国际市场,多款产品出口海外
最快将于11月完成上市?盒马回应:不予置评-世界微资讯
全球头条:人民银行:5月债券市场共发行各类债券54561.6亿元
聚焦:美国重大动作曝光,紧急成立工作组,什么信号?一夜暴跌37%,超级巨头崩盘,影响多大?
每日短讯:官方通报深圳一大厦异响振动:房屋基础薄弱,将进行加固处理
当前热议!邮报:阿森纳将在48小时内,为赖斯提出第三次报价
乔治力挺普尔:他去任何其他地方都能成球星 勇士给不了他同等机会|天天热点
2023郑州6月份人才公寓申请时间+房源-当前动态
焦点资讯:天津港澳台地区华侨及外国人申请摇号需要什么条件?
高通骁龙4 Gen 2芯片发布,4nm制程工艺,红米手机或将首发
上海建工医院招聘岗位及条件|速讯
爱情喜剧《透明侠侣》首映,好友助阵现场变“喜剧人团建” 每日看点
赫莲娜绿宝瓶面霜要多少钱?|全球信息
掌握这些拍摄技巧,你也能拍出好看的月亮照片!
北向资金抄底AI方向 机构青睐机器人概念股丨龙虎榜
每日消息!既有商品房又有公租房,小区换物业该听谁的?
最新资讯:“存款特种兵”不是心态而是经济问题
瞭望·瞭望访谈|找准好的科学问题——专访广东省人民医院院长余学清
天天精选!备战联赛,王大雷社媒晒出进行扑救训练的照片:启动……
拉尔萨与乔丹二儿子秀恩爱,48岁皮二嫂身材丰腴,皮蓬:受不了 时快讯
理论·智库丨力推投资非洲银行 深化中非经贸合作|环球新资讯
镇平县贾宋镇财政所:全面提升服务质量 持续优化营商环境|精彩看点
每日看点!闪电深1度|山东新经济发展如何?从这份独角兽榜单看门道
【独家焦点】全网整理出2023高考一分一段表
井岗红糯、钱岗糯米糍,北回归线上的“明珠”上市 环球简讯
皇马空出9号球衣,不是为了引进姆巴佩,谁都知道他喜欢几号
榆林:斑马线前不礼让行人酿事故,负全责!-当前聚焦
福建:促消费政策协同发力 前五月全省消费品市场持续恢复向好|独家焦点
高顿教育:cicpa和acca有什么区别?快来了解!
短讯!乔布斯 18 年前神预言 Vision Pro!深扒 13 个背后故事,国内真机上海见
世界即时看!山海杨阳:黄金进入震荡循环,关注重点点位得失!
驻马店实验小学走进武警支队军营开放日
阿维塔11为何能成为智能驾驶的标杆?它究竟有哪些「硬实力」?-环球今亮点
周大福黄金价格今天多少一克(2023年06月26日)_焦点快播
网约车进入发展新阶段 合规仍是监管重点
逆水寒手游区服列表 苹果/安卓区服名字大全[多图]
热门看点:科大讯飞遭主力净流出超2亿元,主力资金加仓数字经济ETF(159658)丨ETF观察
世界今日报丨水利部和中国气象局6月26日18时联合发布蓝色山洪灾害气象预警
2023创新纯电动 BMW i7西区超凡之旅震撼启程
推动北粮南运向产业链合作转型|当前讯息
环球观热点:新城法院与西北政法大学共建企业合规研究基地
9644名学生参加!2023年越秀区公办小升初电脑派位举行_全球滚动
微宏AlphaFlow BPM签约上海汇众汽车制造(SHAC)-世界快看点
杭州网约车新门槛:须新车 非新能源纯电动车车价需过15万 当前快报
电动汽车崛起搅乱汽车市场 品牌忠诚度正遭受猛烈冲击 当前视点
贝壳-W反弹逾4% 机构称市场对二手房挂牌量担忧略显过度
《命运2》未经允许使用艺术家设计 官方:将会补偿 天天头条
环球最资讯丨肝硬化有癌变风险吗
每日消息!蔡徐坤塌房后李现惹担忧!同一品牌五艺人“陨落”,蔡母50万和解
上市公司重要公告集锦2023年06月27日
当前快播:“国际禁毒日”高新区开展禁毒主题宣传活动 现场展示15种吸毒工具模型
第六批省级工业设计中心申报推荐工作通知
能控制情绪,就能更好地掌控自己的人生|聚焦
一男子误入停车场51秒收费8元,多方回应 世界观天下
【环球速看料】张家口南壕堑镇招商引资精准发力
淘宝专卖店的都是正品吗?和专柜一样吗?
5 月份智能手机出货量 2519.6 万部,同比增长 22.6%
一个利空!A股,新的行情启动了!-环球观热点
临颍县王岗镇组织开展夏季安全生产工作
热点!药师帮:将香港IPO股票定价在20港元/股,股票将从6月28日开始交易
天天讯息:国家发改委财金司组织召开扩大制造业中长期贷款投放现场会
今日快讯:鲁山县:野生“茶叶”火爆市场供不应求
【资本市场农业板块周报】实控人、控股股东变更,蓝丰生化大涨17.49%;主力资金连续7日净流出,道道全跌13.07%;动保、农化板块跌幅居前
私募消息
中信建投:AI应用持续落地 暑期内容消费旺季来临
每经操盘必知(晚间版)丨北向资金净买入21.18亿,买入浪潮信息8.36亿;龙虎榜资金抢筹焦点科技1.21亿;高盛下调特斯拉评级,但上调目标价至248美元 世界
高质量发展调研行|科技“关键变量”撬动产业“最大增量”——三亚崖州湾科技城建设观察
激发创新活力 增添发展动能_世界快报
湘医保怎么绑定家人账户 湘医保绑定家人账户教程
从未来不可知到量子不可测,这些认知极限有可能突破吗
拇指课堂怎么使用(拇指课堂)
中信银行成都分行成功举办 “英国如意签”活动
世界新消息丨大城:万亩西瓜甜农心
快讯:沪指震荡反弹 旅游、酒店板块领涨 当前报道
当前要闻:马云回归,淘宝还有机会吗?
世界新消息丨我国最大淡水湖鄱阳湖今年首次突破2000平方公里:距“满血”还差一半
陕西持续优化县城获得用水领域营商环境_时讯
1-5月南川区新增50家科技型企业_环球今头条
【环球速看料】云南边检总站上半年缴毒4.7吨
全球观天下!惠州博罗县2.2亿元挂牌2宗商住地 预计7月31日出让
江西省庐山市开展眼镜制配场所计量仪器专项检查 全球新消息
焦点速看:超市分切水果引担忧:早晨切的西瓜,傍晚还新鲜吗?
短期借款平台30天,这10个正规平台能满足你的需求
热点!NoSQL简介
ubuntu下java安装|世界独家