avatar
文章
331
标签
30
分类
0

Home
Archives
Tags
Categories
List
  • Music
  • Movie
Link
About
The Blog of Monoceros406
搜索
Home
Archives
Tags
Categories
List
  • Music
  • Movie
Link
About

The Blog of Monoceros406

Windows软件调试初探-用户态调试过程
发表于2024-08-15|Win系统调试
Windows软件调试初探-用户态调试过程调试器进程本节调试器指的是用户态调试器。 调试器有俩线程,一个线程负责与用户对话,称为UI线程;另一个线程负责与被调试进程对话,称为调试器工作线程DWT或调试会话线程。WinDBG Classic的俩线程栈回溯为: 1234567891011121314UI线程:ntdll!KiFastSystemCallRet //内核模式执行系统服务 USER32!NtUserWaitMessage //调用等待窗口消息的子系统服务windbg!_wmainCRTStartup //程序启动函数kernel32!BaseProcessStart //系统的进程启动函数工作线程:ntdll!ZwWaitForDebugEvent //调用等待调试事件的内核服务dbgeng!LiveUserDebugServices::WaitForEventdbgeng!LiveUserTargetInfo::WaitForEventdbgeng!WaitForAnyTargetdbgeng!RawWaitForEvent //调试引擎内部函数dbgeng!DebugCli ...
Windows软件调试初探-用户态调试模型
发表于2024-08-11|Win系统调试
Windows软件调试初探-用户态调试模型碎碎念调试器进程通过调试API与NTDLL.DLL中调试支持函数和调试子系统交互。调试子系统分为3个部分:NTDL.DLL支持函数、内核文件支持函数、调试子系统服务器。 NTDLL.DLL中调试支持函数有3中:以DbgUi开头的供调试器用;以DbgSs开头的供调试子系统使用,已被废弃;其他以Dbg开头的用于实现调试API。 内核文件调试函数以Dbgk开头,负责采集和传递调试事件、控制被调试进程。 调试子系统服务器用于管理调试会话和调试事件,是调试消息(事件)的集散地,也是所有调试设施的核心,位于内核模式中。 Windows用户态调试通过调试事件驱动。调试器程序在与被调试进程建立调试对话后,调试器进程进入调试事件循环,等待调试事件发生,然后处理再等待,直到调试会话终止,如: 1234while (WaitForDebugEvent(&DbgEvt, INIFINITE)) { //等待事件 //处理等待得到的事件 ContinueDebugEvent(DbgEvt.dwProcessId, DbgEvt.dwThre ...
Windows软件调试初探-托管
发表于2024-08-06|Win系统调试
Windows软件调试初探-托管碎碎念C#和Visual Basic .NET等编程语言由公共基础设施支持,被公共类型系统CTS编译为微软中间语言MSIL(也叫公共中间语言CIL)。CIL再由公共运行时CLR或及时编译器JIT在操作系统服务上的本地代码上运行。 CIL是一种面向对象、基于栈的字节码,有200多条指令分为10组。.NET框架中有ILASM和ILDASM用于CIL指令与CIL字节码转化。 .NET将源程序中类型定义、名称等信息以元数据形式保存,并可在运行期使用。元数据与CIL字节码组合起来叫做程序集。 开发.NET程序的语言叫托管语言,用.NET技术开发的程序叫托管程序,CLR有时也叫托管运行时。.NET程序运行时,系统加载MSCOREE.dll,用于解析.NET程序中信息并为其加载合适版本的CLR。 执行引擎EE模块MSCOREE通过注册表确定所需版本CLR,加载其接口模块mscoreei.dll,要加载的CLR主模块为clr.dll。在.NET 2.0下CLR主模块桌面/工作站版本为mscorwks.dll,服务器版本为mscorwks.dll。.NET运行时 ...
WindowsAPI查缺补漏-PE文件格式解析
发表于2024-07-31|WinAPI
WindowsAPI查缺补漏-PE文件格式解析碎碎念PE格式为Win32可执行文件采用的文件格式,Win64下称为PE32+。虚拟地址VA表示数据在进程地址空间中内存地址,相对虚拟地址RVA表示数据相对模块基地址偏移,文件偏移地址FOA为文件中数据相对于文件头的偏移。 DOS头DOS MZ头是个IMAGE_DOS_HEADER结构: 123456789101112131415161718192021typedef struct _IMAGE_DOS_HEADER { WORD e_magic; //字符MZ WORD e_cblp; //最后页字节数 WORD e_cp; //全部和部分页数 WORD e_crlc; //重定向表中指针数 WORD e_cparhdr; //DOS MZ长度 WORD e_minalloc; //所需最小附加段 WORD e_maxalloc; //所需最大附加段 WORD e_ss; //DOS代码初始SS值 WORD e_sp; //DOS代码初始S ...
WindowsAPI查缺补漏-WinSock网络编程
发表于2024-07-26|WinAPI
WindowsAPI查缺补漏-WinSock网络编程碎碎念Windows套接字即WinSock以UNIX的伯克利套接字规范为标准,包含同名接口函数,用法也一致。WinSock结课Windows消息机制又增加了许多扩展函数。 TCP/IP规定统一使用大端序传输数据,也称为网络字节顺序。本篇不讲计网,自己去学。 这节内容真是吔屎了...前面基础WinSock编程不支持Unicode还得转,看个乐子就行了,重点在后面I/O模型。 代码例子有ANSI和Unicode混用的情况,纯属懒得改了,用的时候小心点儿。 本篇只讲TCP和UDP连接,想学HTTP啥的可以关上了。 学习本篇需要智商在线,不在线的先去听《大香蕉》洗一下脑子。 地址表示在sockaddr_in结构中同时指定IP地址和端口号。下文定义中出现sockaddr结构的均是为了兼容1.0旧版本,都可以当作sockaddr_in使。 123456struct sockaddr_in { SHORT sin_family; //地址家族 AF_INET USHORT sin_port; //端口号 ...
Windows软件调试初探-垫片
发表于2024-07-25|Win系统调试
Windows软件调试初探-垫片垫片数据库垫片用于解决软件兼容问题,让两个模块对接一起。用户空间的用来解决第三方代码兼容问题,叫程序兼容引擎ACE,内核空间的用来解决设备驱动兼容问题,叫内核垫片引擎KSE。ACE和KSE都依赖垫片数据库SDB。 在C:\Windows\apppatch下有一堆.sdb文件,即垫片数据库,用sdb2xml可以将其导出为XML。文件名以main结尾都是微软官方维护的,sysmain.sdb解决用户空间应用程序问题,drvmain.sdb用于内核空间,msimain.sdb用于MSI安装包,pcamain.sdb供程序兼容助理使用。 也可以用应用兼容工具包ACT中的兼容管理器浏览SDB数据库内容,用兼容管理员定制新SDB文件。定制的SDB需要安装和注册来生效,注册位置为“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Widows NT\CurrentVersion\AppCompatFlags\Custom”和“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Widows NT\CurrentVers ...
Windows软件调试初探-特殊过程调用
发表于2024-07-25|Win系统调试
Windows软件调试初探-特殊过程调用跨越空间、跨越特权级别、跨越线程、跨越进程或跨越机器的过程调用统称为特殊过程调用。 异步过程调用APC例如异步文件操作引发的APC: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849void CGeAPCDlg::D4D(LPCTSTR szFormat, ...) { TCHAR szMsg[MAX_PATH] = { 0 }; va_list va; va_start(va, szFormat); _vsntprintf_s(szMsg, MAX_PATH, MAX_PATH, szFormat, va); OutputDebugString(szMsg); this->m_ListInfo.AddString(szMsg); return;};VOID WINAPI GeCompletedWriteRoutine(DWORD ...
Windows软件调试初探-启动过程
发表于2024-07-23|Win系统调试
Windows软件调试初探-启动过程本篇没特殊说明就是按照时间先后顺序写。 BootMgr系统上电后执行固化在系统主板上的固件代码,检测和初始化基本硬件,如CPU、内存、键盘、显卡和磁盘等。之后加载并将执行权移交给操作系统启动程序,即NTLDR。NTLDR依次分为BootMgr、WinLoad、WinResume。BootMgr从系统引导配置数据BCD中读取启动设置,当有多个启动选线则显示启动菜单让用户选择。现有图形界面启动程序BootIM.exe,启用经典启动菜单可以: 1bcdedit /set bootmenupolicy Legacy 为了启用BootMgr和WinLoad的调试引擎,执行以下命令。调试时先用WinDBG监听,之后会自动挂靠。打开调试模式后无法正常进入系统,只能进入安全模式将on改为off。NT内核加载后调试引擎在配置双机调试时已打开。 1234567bcdedit /set {bootmgr} bootdebug onbcdedit /set {bootmgr} debugtype serialbcdedit /set ...
WindowsAPI查缺补漏-杂谈
发表于2024-07-22|WinAPI
WindowsAPI查缺补漏-杂谈程序开机自启动之前有讲过,这里讲些别的方法。 将程序快捷方式写入开机自启动程序目录法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115#include <windows.h>#include <tchar.h>#include <Shlobj.h>#include <strsafe.h>#include "resource.h"// 函数声明INT_PTR CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wPara ...
WindowsAPI查缺补漏-异常处理
发表于2024-07-22|WinAPI
WindowsAPI查缺补漏-异常处理结构化异常处理SEH基本结构1234567__try { //受保护语句}__except (异常过滤表达式) { //异常处理语句};//其他语句 其中异常锅炉表达式可以是: 枚举值 含义 EXCEPTION_EXECUTE_HANDLER 执行except块内容并继续执行except块后其他语句,try块中剩下语句不执行 EXCEPTION_CONTINUE_SEARCH 不执行except块,继续向上搜索下一个具有最高优先级异常处理程序 EXCEPTION_CONTINUE_EXECUTION 不执行except块,重新执行发生异常的语句,慎用 GetExceptionCode获取刚发生异常的异常代码,只能在异常过滤表达式或异常处理程序块中被调用。 123DWORD GetExceptionCode(VOID);#define GetExceptionCode _exception_codeunsigned long _cdecl _exception_code(v ...
1…789…34
avatar
Monoceros406
Windows系统安全爱好者
文章
331
标签
30
分类
0
Follow Me
公告
哪里排版出锅了请告诉我QwQ QQ:1295625063
最新文章
Linux编程入门-系统选项2025-06-21
Linux编程入门-时间2025-06-15
Linux编程入门-用户管理与安全2025-06-15
Linux编程入门-内存管理2025-06-15
Linux编程入门-进程2025-06-14
标签
漏洞复现 恶意代码 密码学 Python 渗透测试 取证 编程语言 逆向工程 AWD Win系统调试 其他 GUI开发 解题报告 沙盒逃逸 算法 Win内核安全 OpenSSL 移动安全 UEFI 数学建模 Win驱动开发 WinAPI IoT PWN 前端开发 Web Linux Web3 后端开发 Misc
归档
  • 六月 20258
  • 五月 20259
  • 十二月 202413
  • 十一月 202412
  • 十月 202420
  • 九月 20243
  • 八月 20248
  • 七月 202413
网站资讯
文章数目 :
331
已运行时间 :
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2025 By Monoceros406
框架 Hexo|主题 Butterfly