Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >0x000000fc (ATTEMPTED EXECUTE OF NOEXECUTE MEMORY)

0x000000fc (ATTEMPTED EXECUTE OF NOEXECUTE MEMORY)

作者头像
战神伽罗
发布于 2019-10-09 07:37:11
发布于 2019-10-09 07:37:11
1.4K0
举报

暂定各种错误码对照

//断点相关 bp + 地址 设置断点 bl 显示已经设定的断点 bu + 地址 设置断点,但是这种类型断点再下一次启动时被记录 bc 清除断点 对于断点范围,可以用*匹配,-表示一个范围,表达多个可用,号隔开 程序入口伪寄存器 WinDbg里有个伪寄存器叫$exentry,里面记录了程序的入口点。所以我们只要在命令输入栏里输入 bp $exentry (bp就是用来下断点的命令,详细用法可以参考WinDbg的帮助文档) //调试符号 ld kernerl32 //加载kernerl32模块的符号 lm m k* //显示已经加载的,以k开头的模块 ln //显示最近操作过的模块名 dt dbg2 //检测模块 [[[[[[[[[[[[]]]]]]]]]]]] x kernerl32!k* 显示模块kernerl32中所有以k开头的函数 dv 显示局部变量值 dv /i/t/v 显示局部变量的类型,值相关信息。 x <module>!* / ? 显示指定模块的符号 x argc 查看变量argc的值。 dt argc 查看变量值 dt _PEB 7ffdd00 将内存地址7ffdd00开始的内容以PEB结构的方式显示出来。 dd 12000 L4 查看地址12000 后面的四个字 dds 12000 L100 查看堆栈上地址12000开始,后面的100个dword的内容,如果有调试符号,会将符号显示。此方法来追踪堆栈。(先看ebp,再用此方法) dd ebp + 4, 返回地址, ebp + 8 第一个参数 [[[[[[[[[]]]]]]]]] .kill 杀死调试进程 .restart 重新调试 [[[[[]]]]]]]]]]]]]] k 显示调用堆栈 ,kn加序号而已。 kb 显示前三个参数。第一个参数ebp+8;第二个ebp+0x0C;第三个ebp+0x10;dd ebp+0x14是第四个参数 kp 显示函数参数类型,数值 kp f f开关显示相邻栈基之差,从而可以推断出栈的健康状况。 [[[[[[[[[[]]]]]]]]]] | 显示进程 ~显示线程 ~0 s 切换到 0号线程 [[[[[[[[[]]]]]]]]] dv 显示函数参数&局部变量,注意,dv是跟栈帧相关的,对不同的栈帧显示不同的局部变量。 @1, kn 显示所有栈帧 @2, .frame选择想要查看的栈帧 @3, dv /i/v/t显示该栈帧里局部变量信息 @3, dv /i /V /t 显示变量基于栈帧的地址 如果没有私有符号,dv是不能显示变量信息的。 vc 生成的调试符号*.pdb windbg不认识,需要设置为c++/General/DebugInfo= C7 compatible ===== sympath + c:\nasm 添加符号搜索路径 .sympath 显示符号搜索路径 //显示一定范围内存 !db L 32 : results in 32 bytes being displayed (as hexadecimal bytes), //查看pe信息 !dh [Options] Address : 查看模块pe信息 !dh -f : display file headers !dh -s : section headers !dh -a : all header informations 查看结构体成员 dt nt!_EPROCESS 查看当前的irql !irql 查看Verifier 检测统计信息 !verifier 查看某个内存地址属于那一个模块 !pool 地址 !lmi Address : 查看模块的主要信息 !pcr 可以查看当前执行的线程及irql, 等信息 // Why doesn't the WinDBG command !irql always return the correct IRQL for my target? [Answer by Jake Oshins, jakeo_at_windows_dot_microsoft_dot_com. Workaround provided by James Antognini, antognini_at_mindspring_dot_nospam_dot_com, 27 August 2003] !irql currently only produces useful results on a crashdump, not a live system. To retrieve the current IRQL on a live system you should instead use the !pcr command. !processfield:列出EPROCESS的成员 该命令前的!号,意味着它来自于调试器的扩展模块―kdextx86.dll。该命令可显示内核用来代表一个进程的EPROCESS结构(该结构并没有正式的说明文档)的成员及其偏移量。 尽管该命令仅列出了成员的偏移量,但你也能很容易的猜出其正确的类型。例如,LockEvent位于0x70处,其下一个成员的偏移量为0x80。则该成员占用了16个字节,这与KEVENT结构非常类似。 !threadfields:列出ETHREAD成员 这是kdextx86.dll提供的另一个强大的选项。和!processfields类似,它列出未文档化的ETHREAD结构的成员及其偏移量。内核使用它表示一个线程. //进程信息 !tep !peb ,显示peb(进程信息) //显示相关 dt ntdll!*teb* 列出匹配通配符的结构名 dt -v -r ntdll!_TEB 列出结构_TEB的成员信息 //显示变量地址 r $peb 显示模块peb的地址 //查看错误信息 !gle //设置断点的技巧 可以直接把断点设在: kernel32!BaseProcessStart 1), 先用lm 显示所有已经加载的模块 2), dt our_exe_name!*main* //在我们的程序模块中搜索包含main的地址(注意:如果未加载symbol是不能显示的!) 3), 如果存在,在our_exe_name!*main 处设置断点 ======= Command SoftICE OllyDbg Run F5 F9 Step Into F11 F7 Step Over F10 F8 Set Break Point F8 F2 搜索内存 5、查找字符串 在步骤1我们运行程序时就记录了提示注册错误的字符串“Wrong Serial, try again!”,现在我们就要在内存找到该字符串的位置。 输入命令 s –a 00400000 L53000 “Wrong” 该命令的意思是以ASCII码形式在内存地址00400000往后53000个字节搜索字符串“Wrong”。 s,就是要调用查找的命令 -a,指定使用ASCII码的形式查找 00400000,指定要开始寻找的内存地址。 L53000,说明要在00400000往后的53000字节搜索。这个数值和00400000都可以从Stud_PE获得。00400000是程序的装 入地址,而53000是映像的大小,也就是程序载入内存后占用的内存大小。使用这两个数值,基本上可以搜索到程序使用的整个内存范围。 “Wrong”,就不用多解释了,就是我们要寻找的字符串。不过WinDbg不支持模糊搜索,所以这里输入的字符串必定要完全正确。 内存访问断点 6、下内存访问断点 WinDbg中,ba命令代表Break On Access,即访问时中断。 我们在命令行输入: ba r 1 0044108c 命令的意思是在内存0044108c的位置下字节的读断点。命令中各元素的含义可以参考帮助文档,这里不啰嗦。 输入bl,查看断点使用情况: 地址运算 ? 0x33 + 0x44 运行后将得到计算和 3.查看和修改数据 调试中不可避免的要查看和修改数据 查看内存: db/dw/dd/dq [Address] 字节/字/双字/四字方式查看数据 da/du [Address] ASCII字符串/Unicode字符串方式查看指定地址 其它常用的如查看结构 dt nt!_EPROCESS dt nt!_EPROCESS 89330da0 (把0x89330da0作为对象指针) 修改内存: eb/ew/ed/eq/ef/ep Address [Values] 字节/字/双字/四字/浮点数/指针/ ea/eu/eza/ezu Address [Values] ASCII字符串/Unicode字符串/以NULL结尾的ASCII字符串/以NULL结尾的Unicode字符串 搜索内存: s -[b/w/d/q/a/u] Range Target 搜索字节/字/双字/四字/ASCII字符串/Unicode字符串 2.断点 断点之于调试当然是非常重要的 常用命令: bp [Address]or[Symbol] 在指定地址下断 可以使用地址或符号,如 bp 80561259(Windbg默认使用16进制) bp MyDriver!GetKernelPath bp MyDriver!GetKernelPath+0x12 bp [Address] /p eprocess 仅当当前进程为eprocess时才中断 这个很常用,比如你bp nt!NtTerminateProcess,但是只想在某一进程触发此断点时才断下来,那就加上这个参数吧,因为内核中的代码是各个进程共用的,所以此 命令很实用 bp [Address] /t ethread 仅当当前线程为ethread时才中断,用法跟/p参数类似 bu [Address]or[Symbol] 下一个未解析的断点(就是说这个断点需要延迟解析) 这个也很常用,比如我们的驱动名为MyDriver.sys,那么在驱动加载之前下断bu MyDriver!DriverEntry, 然后加载这个驱动时就可以断在驱动入口,并且这个是不需要调试符号支持的 bl 列出所有断点,L=List bc[id] 清除断点,c=Clear,id是bl查看时的断点编号 bd[id] 禁用断点,d=Disable,id即断点编号 be[id] 启用断点,e=Enable,id为断点编号

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
64位内核第三讲,Windbg的使用.以及命令
区别: bp 下的断点是死断点.函数名字变了但断点还是在哪里. bu 自动跟你你的函数进行下段点.不用担心会变. 在新的windbg中,bp失败.会自动换成bu.
IBinary
2019/06/14
2K0
64位内核第三讲,Windbg的使用.以及命令
驱动开发:WinDBG 常用调试命令总结
Windbg是Microsoft公司免费调试器调试集合中的GUI的调试器,支持Source和Assembly两种模式的调试。Windbg不仅可以调试应用程序,还可以进行Kernel Debug。结合Microsoft的Symbol Server,可以获取系统符号文件,便于应用程序和内核的调试。Windbg支持的平台包括X86、IA64、AMD64。
王 瑞
2022/12/28
1.1K0
# X64Dbg 介绍->表达式
请远离垃圾网站: 原文出处 https://www.cnblogs.com/iBinary/
IBinary
2022/06/12
2.3K0
[知识小节]Windbg常用指令(笔记本)
参数 DriverObject 指定驱动对象。可以是DRIVER_OBJECT的16进制地址或者驱动的名字。 Flags (Windows 2000和之后) 可以是下面这些位的任意组合。(默认为0x01。)
李鹏华
2024/03/12
2580
暴力搜索内存进程对象反隐藏进程
我们前面说过几种隐藏进程的方法: 遍历进程活动链表(ActiveProcessLinks)
战神伽罗
2019/12/20
1.8K0
WinDbg用户模式调试基础教程
Debugging Tools for Windows由调试器、工具以及软件包中调试器的相关文档组成。这个工具包可以作为Windows SDK或者WDK的一部分安装。
JusterZhu
2025/06/11
1980
WinDbg用户模式调试基础教程
1.5 编写自定位ShellCode弹窗
在笔者上一篇文章中简单的介绍了如何运用汇编语言编写一段弹窗代码,虽然简易ShellCode可以被正常执行,但却存在很多问题,由于采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如果操作系统的版本不统或系统重启过,那么基址将会发生变化,此时如果再次调用基址参数则会调用失败,本章将解决这个棘手的问题,通过ShellCode动态定位的方式解决这个缺陷,并以此设计出真正符合规范的ShellCode代码片段。
王 瑞
2023/07/03
3440
1.5 编写自定位ShellCode弹窗
4.2 Windows驱动开发:内核中进程线程与模块
内核进程线程和模块是操作系统内核中非常重要的概念。它们是操作系统的核心部分,用于管理系统资源和处理系统请求。在驱动安全开发中,理解内核进程线程和模块的概念对于编写安全的内核驱动程序至关重要。
王 瑞
2023/11/17
5510
4.2 Windows驱动开发:内核中进程线程与模块
Win64 驱动内核编程-7.内核里操作进程
在内核里操作进程,相信是很多对 WINDOWS 内核编程感兴趣的朋友第一个学习的知识点。但在这里,我要让大家失望了,在内核里操作进程没什么特别的,就标准方法而言,还是调用那几个和进程相关的 NATIVE API 而已(当然了,本文所说的进程操作,还包括对线程和 DLL 模块的操作)。本文包括 10 个部分:分别是:枚举进程、暂停进程、恢复进程、结束进程、枚举线程、暂停线程、恢复线程、结束线程、枚举 DLL 模块、卸载 DLL 模块。
战神伽罗
2019/11/19
1.7K0
如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)
本文介绍了如何使用Windows系统自带的WinDbg工具进行蓝屏死机(BSOD)故障排查和调试。通过介绍WinDbg工具的常见命令和功能,以及实际案例分析,帮助读者掌握如何利用WinDbg工具进行蓝屏死机故障的排除和调试。
李斯达
2017/07/21
7.1K2
如何分析 WindowsDump:BSOD 分析与 WinDbg 使用(二)
Windbg调试----Windbg入门
Windbg简单来说就是一个Windows下对用户态/内核态的程序进行调试,以及对Core Dump文件的分析。对于Crash,资源泄露,死锁等问题的分析,Windbg是一个强有力的利器。
河边一枝柳
2021/08/06
2.8K0
Windbg调试----Windbg入门
C/C++ 编写并提取通用 ShellCode
简易 ShellCode 虽然可以正常被执行,但是还存在很多的问题,因为上次所编写的 ShellCode 采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如果操作系统的版本不统一就会存在调用函数失败甚至是软件卡死的现象,下面我们通过编写一些定位程序,让 ShellCode 能够动态定位我们所需要的API函数地址,从而解决上节课中 ShellCode 的通用性问题。
王 瑞
2022/12/28
5750
C/C++ 编写并提取通用 ShellCode
x64内核HOOK技术之拦截进程.拦截线程.拦截模块
            x64内核HOOK技术之拦截进程.拦截线程.拦截模块 一丶为什么讲解HOOK技术. 在32系统下, 例如我们要HOOK SSDT表,那么直接讲CR0的内存保护属性去掉. 直接讲
IBinary
2018/03/30
2.4K0
x64内核HOOK技术之拦截进程.拦截线程.拦截模块
在 64 位 Windows 操作系统中的内核特权级别提升
这篇文章翻译自一篇英文技术博客。文章讲述了 Windows 7 x64 系统中对指定进程进行特权级别提升的原理和方法。原文链接在文后可见。
稻草小刀
2022/12/12
7470
在 64 位 Windows 操作系统中的内核特权级别提升
使用Windbg调试内核
Windbg是微软开发的免费源码级调试工具。Windbg可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。
战神伽罗
2019/07/24
1.7K0
1.7 完善自定位ShellCode后门
在之前的文章中,我们实现了一个正向的匿名管道ShellCode后门,为了保证文章的简洁易懂并没有增加针对调用函数的动态定位功能,此类方法在更换系统后则由于地址变化导致我们的后门无法正常使用,接下来将实现通过PEB获取GetProcAddrees函数地址,并根据该函数实现所需其他函数的地址自定位功能,通过枚举内存导出表的方式自动实现定位所需函数的动态地址,从而实现后门的通用性。
王 瑞
2023/07/05
2460
1.7 完善自定位ShellCode后门
CS-Shellcode分析系列 第一课
本文是CS的shellcode分析的第一篇文章,该系列文章旨在帮助具有一定二进制基础的朋友看懂cs的shellcode的生成方式,进而可以达到对shellcode进行二进制层面的改变与混淆,用于免杀相关的研究。
WgpSec
2021/03/01
2K0
二进制学习
C 语言的奇技淫巧 https://jin-yang.github.io/post/program-c-tips.html
wywwzjj
2023/05/09
1.1K0
二进制学习
为异常处理做准备,熟悉一下WinDbg工具
IBinary
2018/01/08
1.2K0
为异常处理做准备,熟悉一下WinDbg工具
windows驱动开发-进程结构体初探
这里我之所以讲下字段是因为在每个系统中进程结构体中偏移中记录的成员变量可能会有差异。
IBinary
2021/09/10
9860
相关推荐
64位内核第三讲,Windbg的使用.以及命令
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档