首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Windows反调试技术简单讲解(用户模式篇)

实验环境 Windows 11 22H2 x64 Visual Studio 2022 (安装了C++桌面开发组件) WinDbg Preview 备注:这个是笔者的实验环境...这两个结构很复杂,我们只关注PEB的BeingDebugged的标志 检测很简单,微软提供了一个API,叫IsDebuggerPresent 照着文档用就行 下面是一个简单的测试: 这里笔者使用了Windbg...,打断点断点不断,且程序会退出 原理是:Windows对设置了线程隐藏调试的线程,出现异常不会通知调试器,又因为异常没有处理,会直接终止进程 (说明:软硬件断点触发的方式都是引发异常,尤其软件断点...) 为啥有这么一招,这还要说说Windows调试器是如何在附加时让被调试器断下来的 原理太简单了:创建一个远程线程,执行DbgUiRemoteBreakin,DbgUiRemoteBreakin内部触发...4:自调试 Windows只允许一个被调试进程被一个调试进程调试,利用这一点,直接自己调试自己不香(注意不能直接自己调试自己,会用到双进程) 放一下微软的调试API,我们便是使用它 Mircosoft

92820

0x000000fc (ATTEMPTED EXECUTE OF NOEXECUTE MEMORY)

暂定各种错误码对照 //断点相关 bp + 地址 设置断点 bl 显示已经设定的断点 bu + 地址 设置断点,但是这种类型断点再下一次启动时被记录 bc 清除断点 对于断点范围,可以用...此方法来追踪堆栈。...(先看ebp,再用此方法) dd ebp + 4, 返回地址, ebp + 8 第一个参数 [[[[[[[[[]]]]]]]]] .kill 杀死调试进程 .restart 重新调试...使用这两个数值,基本可以搜索到程序使用的整个内存范围。 “Wrong”,就不用多解释了,就是我们要寻找的字符串。不过WinDbg不支持模糊搜索,所以这里输入的字符串必定要完全正确。...断点之于调试当然是非常重要的 常用命令: bp [Address]or[Symbol] 在指定地址下断 可以使用地址或符号, bp 80561259(Windbg默认使用16进制) bp

1.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

IDA 6.1调试驱动

设置完成后关闭设置窗口,然后执行菜单中的Debugger->Process options打开进程选项设置窗口,在Connet string中输入要连接的字符串,也就是com接口的名称,这里是com:port...图4 设置完成后关闭设置窗口,执行菜单中的Debugger->Attach Process,打开进程附加窗口,如图05所示。 图5 附加之后等待符号库加载完就可以进行调试了。...否则在调试的过程中如果设置断点将会询问本地文件与远程文件是否一样,并且设置断点将无法触发。...如果使用IDA 5.5 设置方法是类似的,与一篇文章《IDA调试内核》http://www.h4ck.org.cn/2011/05/kernel-debugging-with-ida-pro/ 不同的是本文的调试没有使用第三方的工具...注意: 需要注意的是前提已经配置好了Windbg的远程调试,否则使用IDA是无法连接虚拟机进行调试的,设置方法可以参考下面的连接: Windows 7:http://www.h4ck.org.cn/2010

1.1K20

为异常处理做准备,熟悉一下WinDbg工具

CTRL + N 命令浏览器 二丶熟悉WinDbg调试的时候的注意事项以及常用快捷键 1.注意符号路径的设置,如果不设置,那么你反汇编的时候,将看不到WinDbg翻译出来的函数了 这个是OD做不到的,...你调用什么函数,WinDbg都能知道,归功于符号路径的设置 CTRL + S 打开符号路径设置,或者在菜单点击 ?...:\symbolsloca,你可以随便改动,就是符号路径下载的位置是哪里. 2.常用调试手法 WinDbg和OD不一样,快捷键也有区别了 它的快捷键适合VC++6.0的一样 F9 设置断点 F5 运行...三丶WinDbg常用的命令 WinDbg常用的命令很多.具体可以搜索MSDN这里只简单列举一下 1.断点指令 bp 命令,设置断点 bm 命令,设置执行符号断点,可以多个符号下段点 ba  命令,设置内存访问断点...在基于x86处理器,显示器还包括调用约定信息 n 显示调用栈的每帧编号 f 显示调用栈的每帧占用字节数 默认情况下使用k显示当前线程栈,如果加上线程命令前缀,可以查看某个线程栈,~* k查看所有线程栈

1.1K110

10个用于C#.NET开发的基本调试工具

当你开始调试没有符号或者源代码的.NET进程时,dnSpy将向你显示反编译的代码。现在,这里有个魔术:你可以在反编译的代码本中放置断点。...遇到这些断点时,你将看到局部变量,线程,调用堆栈,并具有完整的调试经验。这使dnSpy成为调试第三方代码和调试生产环境的首选工具。 它轻巧,无需安装。只需将文件夹复制到任何生产机器,然后开始调试。...优化代码后,将不会遇到某些断点,也不会显示某些局部变量。这几乎破坏了调试体验。解决方案是使用dsSpy启动进程,而不是附加到进程中。...以下是它的一些功能: 立即创建转储 创建具有特定间隔的多个转储(例如3个转储,相隔5秒) 一旦超过CPU阈值,就创建转储 如果进程挂起,则创建转储 崩溃时创建转储 若要查找有关ProcDump和Dump...或重现特定请求发生的问题。 哪一个没有提到 你可能会想知道我未提及的某些工具,如果你已经做开发很长时间了,你可能会想到WinDbg

2.5K50

利用特殊协议加载本地文件, 绕过 HTML5 沙箱, 打开弹窗诸事

有一个快速的脏方法,我使用它来简单地杀死 Edge 进程和子进程,重新打开它并附加到使用 EdgeHtml.dll 的最新进程。当然还有更简单的方法,但是...yeah,我就是这么做的。...现在加载 WinDbg ,并将其附加到使用 EdgeHtml 的最新列出的 Edge 进程。记住在 WinDbg 中使用的符合。 ?...左边有我用来测试一切的页面,在右边, WinDbg 附加到特定的 Edge 进程。 ?...事实,他的名字让我觉得它是加载 HTML 的。在崩溃之前断下程序的话,这将会变得有意思多了,所以为什么不在 _LoadRMHTML 上面几行设置断点呢?...请重新按照上面描述的做一遍(杀掉 Edge 进程,打开它,加载页面,找到进程并附加上去)。 这个时候,不要运行(F5)进程,我们先设置一个断点

2.4K80

Windbg来分析.Net程序的dump

WinDbg是微软很重要的诊断调试工具: 可以查看源代码、设置断点、查看变量, 查看调用堆栈及内存情况。 Dump文件是进程的内存镜像, 可以把程序的执行状态通过调试器保存到dump文件中 2....Windbg可以解决以下问题 ◆ 内存高 ◆ CPU高 ◆ 程序异常 ◆ 程序Hang死 3. 使用windbg进行调试分析的两种方式 使用windbg调试器attach到需要调试的进程。...打开windbg之后,需要设置symbol path,可以按快捷键Ctrl+S。把下面的路径粘贴进去保存。...clrstack 看看这个线程再干嘛 执行那些方法 !clrstack –p addr addr:具体方法的参数值地址 !do 地址 查看参数值 !...dumpheap -mt < 查看该地址的对象 !gcroot > 查看对象根 **!

2.6K60

恶意代码分析实战总结

:第二个参数表示需要提取进程信息的类型,设为ProcessDebugPort OutputDebugString:用SetLastError设置错误码,如果在调试,错误码不变 手动检测数据结构:PEB...结构中的BeingDebugged、ProcessHeap(进程分配的第一个堆的位置)Flags属性字段 windbg使用禁用调试堆栈来启动进程 调试和正常模式下启动进程,它们创建的堆的方式不同,PEB...walker查看动态链接函数 Immunity Debugger的python编码脚本 snort编写网络特征码 windbg volatilit:抽取注入的dll程序,搜索隐藏进程 softice...:Alt+M 查看断点:Alt+B 你是如何进行病毒分析的 病毒行为鉴定如果鉴定样本是否为病毒,是通过行为来判断的,大多数病毒的行为有一下几种: (1) 拷贝自身文件到系统目录下,system目录,...,svchost.exe,explorer.exe,iexplore.exe等; (5) 创建服务,服务的执行路径为病毒文件,大多用来作为自启动; (6) 病毒文件被设置为隐藏属性; (7) 设置键盘钩子或鼠标钩子

2.3K20

驱动开发:WinDBG 常用调试命令总结

Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试。Windbg不仅可以调试应用程序,还可以进行Kernel Debug。...Windbg支持的平台包括X86、IA64、AMD64。...dlls -c ntdll.dll // 列出特定模块头信息 0:000> !dlls -s -c ntdll.dll // 列出ntdll.dll的节区 0:000> !...1 2 5 // 清除1号、2号、5号断点 be 1 2 5 // 启用1号、2号、5号断点 bd 1 2 5 // 禁用1号、2号、5号断点 bp main // 在main函数开头设置一个断点...kb // 打印出前3个函数参数的当前调用堆栈 kb 5 // 只显示最上的5层调用堆栈 kv // 在kb的基础增加了函数调用约定、FPO等信息 kp // 显示每一层函数调用的完整参数

79220

64位内核第三讲,Windbg的使用.以及命令

编写驱动免不了调试.所以这里介绍一下WinDbg的常用命令. 1.线程 命令 作用 ~* 显示所有线程 ~....长度的内存写断点 r读,e执行. bp /p eprocess [address][func] 可以对下进程断点,只用xx进程调用这个代码的时候才会断下来 bp /t ethread [address]...显示局部变量的值 dps dv 显示局部变量的值,看变量的起始地址是ebp-xxx是 p: DWORD或者Qword a: Ascii u: UNICODE 所以上面的命令可以解析一下 :...ChiEbp RetAddre Args 一层的EBP 当前函数返回地址 当前调用函数的参数 6.进程线程命令(内核命令) 命令 作用 !process 0 0 列出系统进程信息 !...显示的所有内容都重定向到xx.txt .logclose 上面设置了开关,下面就要进行关闭.

1.8K40

程序Crash了却无法捕获正确的函数调用栈?

问题描述 曾经碰到一种奇怪的Crash场景:Windows程序Crash,每次用windbg attach或者ntsd/cdb产生dump,总是不能捕获到程序出错时候的栈,而且crash的时候只能看到少数甚至只剩一个线程的信息...大家平时碰到的Crash,大多数都是非法资源的访问,实际还有一种可能存在的场景,就是进程被Kill/Terminate掉,此时捕获的Dump信息不一定是程序出错时候的栈。...>>,用gflag配置查找到程序退出的原因,如果是外部程序Kill了当前的进程,那么找到程序名称,也便有了线索;如果是当前进程调用了API自动退出呢? 本文便是讲述这种场景下的分析方法。...下一章节将分享一种常见的分析方法Windbg+TerminateProcess断点分析问题 本案例以VS2005中strcpy_s目标buffer不足为例触发TerminateProcess。...使用Windbg调试器附加到进程之后,在TerminateProcess处设置断点,并且运行程序(有时候也设置断点在ntdll!ZwTerminateProcess,kernel32!

96810

Windbg常用指令(笔记本)

Windbg常用指令(持续更新) 1、!drvobj 2、dt _DRIVER_OBJECT 地址 3、 bp 设定调试断点 4、P 5、U 6、R 7、D 8、 lmf 9、 lmf!...断点的位置可以用符号来表示,如上,也可以直接用地址以及windbg的Pseudo_Register(虚拟寄存器)。...比如,我们用 exentry表示进程的入口,那么可以用bp @ exentry在进程的入口设置断点。...foo3设置断点后,每次断下来后,先用k显示callstack,然后用.echo命令输出简单的字符串‘breaks’,最后g命令继续执行。...i)<0n40),在windbg中excepioninject!i符号表示符号所在的内存地址,而不是符号的数值,相当于c语言的&操作符的作用,poi命令就是取这个地址的值,相当于c语言的*操作符。

10510

IDA调试Windows 内核

今天在国外的一个博客偶然看到了用IDA实现内核调试的方法。 其实现在国内也有很多文章介绍了IDA通过串口进行调试的文章,如果大家想看的话可以搜索下。...Windbg调试器的方法设置pipe在使用IDA调试的时候是无法正常连接调试器的(话说这个东西我测试了好久,囧)。...设置IDA/Windbg 运行IDA不要选择任何输入数据库,执行菜单中的Debugger/Attach/Windbg debugger,如下图所示: 打开如下图所示的设置窗口: 在Connection...关闭所有的设置窗口之后将会打开如下图所示的附加进程列表: 此时只有一个进程id为0的进程,选择这个进程ok之后就可以进行内核的调试了。...不过这个进程的附加会异常的痛苦,尤其是下载符号库的时候,并且将进程挂起的时候可能会让ida假死掉,因而可以多等待一会儿,直到所有的符号库下载并且识别之后就可以真正的中断在系统的int3断点上了(这个过程简直是一种折磨啊

1.2K20

ObjectDataSource选择业务对象列表为空的探讨

很不情愿的安装了非常不熟悉的WinDbg。太久不用,都生疏了,光是设置就花了几个小时。...以前的WinDbg手册和SOS手册也都找不着了……到园子里找了十几二十篇文章临时看了一下,边看边折腾,基本的操作终于学会了。     1,设置符号路径。最好下载操作系统符号库安装。    ...3,附加进程后,.chain看看已加载的xxx,如果没有sos,用.load加载。...太可怜了,WinDbg就那么几个命令。至于SOS所有指令都是!开头,!help就可以看到,不懂的一个个试,要是不懂英文,就学英文去。     5,!Name2ee指令直接找到要跟踪的方法,!...6,bp下断点,OD中一直很讨厌的指令下断点,这里不得不用,谁让WinDbg只有这么一个呢!

1.4K70

常用问题排查工具和分析神器,值得收藏

1 进程分析工具 1.1 ProcessHacker 功能:ProcessHacker 是一款不错的进程分析工具,可查看所有进程信息,包括进程加载的 dll、进程打开的文件、进程读写的注册表……,也可以将特定进程的内存空间...在某种意味,还是比较方便的。 2.3 TCPView 功能:查看系统的网络连接详情,每一条连接对应的进程、协议、进程、源目地址、源目端口、连接状态…… 总之,可展示当前活跃连接的所有详细信息。...11.调试器工具Windbg   Windbg是windows系统强大的调试器,在解决软件异常崩溃时非常有用,是我们用的最多的一款工具。...我们可以静态分析一异常发生时捕获到的dump文件,也可以将Windbg动态地挂载到目标进程中进行调试。...比如遇到死循环时,可以采用动调试的方法,在Windbg设置代码断点,可以确定到底死循环发生在哪个函数中。  Windbg排查异常问题时,其效率比我们直接去排查代码要高很多。

2.3K20

DllMain中不当操作导致死锁问题的分析--导致DllMain中死锁的关键隐藏因子2

18c4线程是我们在windbg中输入ctrl+break,导致windbg在我们调试的进程中插入的一个中断线程。以后我们看到是这个线程的操作,就可以忽略。        ...7  dt_RTL_CRITICAL_SECTION 0x7c99e174 查看临界区状态,我们看到看到LockCount值为-1,那么我们通过给它设置“写”断点,从而在每次“关键”时刻予以监控。...8 baw2 0x7c99e178 对LockCount设置断点         9 g          10kb 我们看到线程号是1,即Windbg插入的线程导致的断点,我们忽略之(我们看到关闭线程时也会进入临界区...11 g         12 kb 同上,忽略之         13 g         14 kb 这次是主线程(0)触发了断点断点原因是LdrLoadDll中要加锁。 ?        ...28 control+break windbg要启动一个中断线程,中断线程触发了断点 ?         29 ~ 查看线程,ID为2的就是windbg插入的线程 ?

70230

内核漏洞利用:通过WARBIRD在Windows 10提升权限

当触发漏洞时,内核指令指针被设置为NULL,在现代操作系统中,内存地址0h通常被限制以避免这些类型的漏洞被利用。...在我们的调试目的的主机中,我们需要启动WinDBG,并通过“File -> Kernel Debug”设置我们的内核调试会话: ?...完成之后,我们就移步到exploit使用的重要概念—进程注入 进程注入 如果参考所公开的信息,那么将看到以下内容: 如果我们创建一个16位程序(debug.exe),并将利用代码注入ntvdm,那么就可以防止系统在尝试写入...Windows中的进程注入通常使用许多Win32 API(出于练习目的,我们会忽略其他技术,Atom Bombing),具体为: OpenProcess VirtualAllocEx WriteProcessMemory...如果我们将这段代码添加到一个DLL中,并将其注入到NTVDM进程中,我们发现WinDBG会触发以下断点: ?

1.5K80

win10 uwp 使用 WinDbg 调试

附加到 UWP 程序的方法和附加到普通的程序的方法相同,但是附加到 UWP 程序调试的难度会比较大,因为 UWP 程序在调试过程可能就被挂起 在 WinDbg 的 File 里面点击附加到进程,快捷键是...F6 找到对应的进程就可以附加 建议的方法是通过任务管理器找到对应的进程进程号,然后在附加进程里面输入,这样的附加效率比较快 附加调试完成之后做什么就看你技术了 下面图片是我附加调试到照片程序 启动...UWP 程序 通过启动的时候进行调试比较好的方法,需要使用命令行方式启动 windbg 程序,使用下面命令 windbg.exe -plmPackage -plmApp...命令行输入 .querypackages 命令,而默认打开的 windbg 是不提供命令行的,此时就需要让 windbg 进入调试,这样才能输入命令 打开 WinDbg 程序,随意附加到一个可以附加的进程....resumepackage 请看代码 .resumepackage 和上面相同,用被挂起的图床作为例子,先点击 break 进入断点,然后在命令行输入代码,请看下图

81910

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券