VEH帮你定位程序崩溃地址
之前朋友有一个服务端程序,总是受到一些人的恶意漏洞攻击,没有源代码,只好反汇编修复了漏洞,并且使用WinLicense加保护授权.
漏洞总不是一次可以修复完的,恶意攻击并没有停止,然后加了WL保护程序在崩溃的时候在没有提示信息,服务器日志中也没有记录任何有用的信息了,这里所需要有用的信息即是崩溃时候汇编代码运行的内存地址.c++写的程序崩溃的时候我们经常可以看到这种包含了运行址,以及访问内存地址相关信息的对话框.
首先想到的办法是使用windbg的adplus -crash dump内存分析,cdb刚attach上目标进程就直接退出了,不错,WL检查到了调试器,自动触发了保护,程序退出进程了.所以通过windbg,od类似的调试器方案是行不通了.
还有一次,攻击影响了客户端,使部分客户端崩溃,通过日志看到的错误内存地址,经过分析发现是在SEH中,即我们平常代码__try{}__except{}的__except{}代码中,关键是这层SEH还被上一层SEH包着,找了很久还是没能有效的定位到崩溃的内存地址.
后来只好电话求助了小明哥,没说别的,就VEH向量化异常处理解决问题.
更多的知识可以看雪http://bbs.pediy.com/showthread.php?t=173853
通过看雪上的这篇文章我们可以了解到,在没有调试器的情况下,程序发生异常,如果有安装VEH,则VEH先处理异常,然后才是SEH,TopLevelEH.
我要的东西很简单,就是程序崩溃的内存地址,即当时发生崩溃的时候,cpu EIP寄存器的值.
代码就很简单了
#define DBG_PRINTEXCEPTION_C ((DWORD )0x40010006L)
LONG WINAPI ExceptionHandler(EXCEPTION_POINTERS * pExceptionInfo)
{
char lpMsg[512]={0};
switch( pExceptionInfo->ExceptionRecord->ExceptionCode )
{
case DBG_PRINTEXCEPTION_C:
break;
default:
{
memset(lpMsg,0,512);
wsprintfA(lpMsg,"Exp EIP:%x ExpAddr:%x",pExceptionInfo->ContextRecord->Eip,pExceptionInfo->ExceptionRecord->ExceptionAddress);
OutputDebugStringA(lpMsg);
}
}
return EXCEPTION_CONTINUE_SEARCH;
}
BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
{
AddVectoredExceptionHandler(1, (PVECTORED_EXCEPTION_HANDLER)ExceptionHandler);
}
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
不错,写一个dll,然后Exe程序启动进入Main函数后,直接反汇编写段代码,loadlibrary一下dll,即可.
打开DbgView,运行目标进程,崩溃一出现,dbgview中就输出了Eip地址,在反汇编定位到代码处理,具体问题具体分析即可!
VEH帮你定位程序崩溃地址的更多相关文章
- 使用MAP文件快速定位程序崩溃代码行 (转)
使用MAP文件快速定位程序崩溃代码行 =========================================================== 作者: lzmfeng(http://lz ...
- dump文件定位程序崩溃代码行
1.dump文件 2.程序对应的pdb 步骤一:安装windbg 步骤二:通过windbg打开crash dump文件 步骤三:设置pdb文件路径,即符号表路径 步骤四:运行命令!analyze -v ...
- 如何定位Release 版本中程序崩溃的位置 ---利用map文件 拦截windows崩溃函数
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- Win32环境下的程序崩溃异常定位
1 案例描述 作为Windows程序员,平时最担心见到的事情可能就是程序发生了崩溃(异常),这时Windows会提示该程序执行了非法操作,即将关闭.请与您的供应商联系.呵呵,这句微软的“名 ...
- VS2005(vs2008,vs2010)使用map文件查找程序崩溃原因
VS 2005使用map文件查找程序崩溃原因 一般程序崩溃可以通过debug,找到程序在那一行代码崩溃了,最近编一个多线程的程序,都不知道在那发生错误,多线程并发,又不好单行调试,终于找到一个比较好的 ...
- 【iOS】iOS 调试快速定位程序在哪崩溃
iOS 开发过程中经常遇到程序崩溃.快速定位程序在哪崩溃的步骤如下: 1. 2. 3. 这样设置后,程序崩溃时会定位到崩溃的语句,如下: 原文链接:iOS开发何如在调试的时候轻松找到程序在哪里崩溃
- [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
from:http://article.ityran.com/archives/1143 有这样一种情形:当我们正在快乐的致力于我们的app时,并且什么看都是无比顺利,但是突然,坑爹啊,它崩溃了.(悲 ...
- iOS - 捕获应用程序崩溃日志
作为一名iOS移动应用开发者,为了确保你的应用程序正确无误,在将应用程序提交到应用商店之前,你必定会进行大量的测试工作:而且在你测试的过程中应用程序运行的很好,但是在应用商店上线之后,还是有用户抱怨应 ...
- 【转】 当程序崩溃的时候怎么办 Part-2
转自:http://www.tairan.com/archives/1143 欢迎回到当程序崩溃的时候怎么办 教程! 在这个教程的第一部分,我们介绍了SIGABRT和EXC_BAD_ACCESS错误, ...
随机推荐
- FileNotFoundError: [WinError 2] 系统找不到指定的文件
用Idle运行Python脚本的时候发现如下错误: Traceback (most recent call last): File "D:\Python\Python36-32\lib\s ...
- Linux 常用工具iptables
iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火 ...
- 一步一步安装配置Ceph分布式存储集群
Ceph可以说是当今最流行的分布式存储系统了,本文记录一下安装和配置Ceph的详细步骤. 提前配置工作 从第一个集群节点开始的,然后逐渐加入其它的节点.对于Ceph,我们加入的第一个节点应该是Moni ...
- std::wstring_convert处理UTF8
扔掉MultiByteToWideChar 吧,使用std::wstring_convert和 std::codecvt_utf8 来处理UTF8与WChar之间的互转. VC和Clang都支持哦~ ...
- 每日一练PAT_B_PRAC_1005斐波那契凤尾
NowCoder号称自己已经记住了1-100000之间所有的斐波那契数.为了考验他,我们随便出一个数n,让他说出第n个斐波那契数.当然,斐波那契数会很大.因此,如果第n个斐波那契数不到6位,则说出该数 ...
- python序列化对象和反序列化
1.首先不管哪种语言都会用到序列化和反序列化的过程, 2.序列化:把对象转换为字节序列的过程称为对象的序列化: 反序列化:把对象转换为字节序列的过程称为对象的序列化. 3.序列化的作用:把对象(变 ...
- Mutual Information
Mutal Information, MI, 中文名称:互信息. 用于描述两个概率分布的相似/相关程度. 常用于衡量两个不同聚类算法在同一个数据集的聚类结果的相似性/共享的信息量. 给定两种聚类结果\ ...
- Codeforces_729_C
http://codeforces.com/problemset/problem/729/C 二分找最小容量,然后找符合的最小花费. #include<iostream> #include ...
- shell命令之一天一见:awk
AWK是一种优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一. 这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·溫伯格和布萊恩·柯林漢姓氏的首个字 ...
- 通过Python包来剪枝、蒸馏DNN
用 Distiller 压缩 PyTorch 模型 作者: PyTorch 中文网发布: 2018年7月15日 5,101阅读 0评论 近日,Intel 开源了一个用于神经网络压缩的开源 Python ...