记一次 .NET某股票交易软件 灵异崩溃分析.docx

记一次 .NET某股票交易软件 灵异崩溃分析.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

记一次.NET某股票交易软件灵异崩溃分析

1.讲故事

在dump分析的旅程中也会碰到一些让我无法解释的灵异现象,追过这个系列的朋友应该知道,上一篇我聊过宇宙射线导致的程序崩溃,后来我又发现了一例,而这一例恰恰是高铁的列控连锁一体化程序,所以更加让我确定这是由于电离辐射干扰了计算机的数字信号导致程序的bit翻转,而这一篇也是一个我认为的灵异现象,拿出来给朋友们分享一下。

前段时间有位朋友找到我,说他的程序会偶发性崩溃,一直找不到原因很纠结,看我在这一块非常有经验让我帮忙看一下怎么回事,既然是有备而来自然dump也准备好了,接下来开始分析之旅吧。

二:WinDbg分析

1.为什么会崩溃

要想分析崩溃的原因还得windbg自带的自动化分析命令!analyze-v,输出如下:

0:117!analyze-v

*******************************************************************************

*ExceptionAnalysis*

*******************************************************************************

CONTEXT:(.ecxr)

rax=0000000000000001rbx=0000000000000000rcx=0000000000000002

rdx=000000000005001brsi=000000000000000erdi1b8c718

rip=00007ffdd0961abdrsp=000000341547b370rbp=000000341547b250

r8=0000000000000005r9=000000000000003dr10=0000000000000000

r11=7007f0b8d350316ar12=0000000000000000r13=0000000000000003

r14=000000341547b5c0r15=0000000000000001

iopl=0nvupeiplnznapenc

cs=0033ss=002bds=002bes=002bfs=0053gs=002beflclr!_report_gsfAIlure+0x1d:

00007ffd`d0961abdcd29int29h

Resettingdefaultscope

EXCEPTION_RECORD:(.exr-1)

ExceptionAddress:00007ffdd0961abd(clr!_report_gsfailure+0x000000000000001d)

ExceptionCode:c0000409(Securitycheckfailureorstackbufferoverrun)

ExceptionFlags:

NumberParameters:1

Parameter[0]:0000000000000002

Subcode:0x2FAST_FAIL_STACK_COOKIE_CHECK_FAILURE

SYMBOL_NAME:clr!_report_gsfailure+1d

卦中有一句话叫Securitycheckfailureorstackbufferoverrun,浅层意思就是:安全检查失败或缓冲区溢出,行话就是:栈上的cookie遭到了破坏。

可能有些朋友对cookie不是很了解,这个cookie非web的cookie,而是在方法栈上藏的一个随时值,在方法的退出前会检查这个值有没有被破坏,目的就是防止有人无意或者恶意攻击线程栈,如果遭到破坏,会触发int29即nt!KiRaiseSecurityCheckFailure函数让程序快速硬性崩溃。

如果有些朋友不明白,画个图如下:

2.cookie被破坏了吗

既然说cookie被破坏了,说明有栈溢出的情况,那到底溢出了什么东西呢?这需要分析崩溃处附近的汇编代码才能知道,接下来使用.ecxr;k3切到崩溃前的上下文。

0:117.ecxr;k3

rax=0000000000000001rbx=0000000000000000rcx=0000000000000002

rdx=000000000005001brsi=000000000000000erdi1b8c

文档评论(0)

139****7676 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档