Repository navigation
Releases: A-new/aidbg
Releases · A-new/aidbg
Release list
aidbg 0.3.3
dump 修复版:导出的内存镜像现在可以直接加载运行。
- 导入表重建:原导入目录被壳破坏/丢失时,扫描数据节的导入指针序列并按模块分组,追加
aidbgIAT节重建IMAGE_IMPORT_DESCRIPTOR+ 名称表(Scylla 式 fix dump),FirstThunk指回原槽位;原表完好则原样保留。dump ... noiat可关闭。 - keepbase 重定位还原:
ImageBase恢复为 preferred 基址,并按.reloc从已重定位指针中减去位移,导出重新可重定位的镜像;.reloc被壳抹掉时退回"钉在运行基址 + 关 ASLR"并给出提示。 - INT3 拓印:dump 前自动摘除镜像内所有已植入的 INT3(用户断点与 hide 钩子),dump 后种回——导出文件不再带着 0xCC 崩溃。
- 修复:Section/FileAlignment 头部偏移读错(曾误读 Subsystem/Win32Version,导致对齐计算全错);重定位还原只处理指针宽度条目(HIGHADJ 等不再误处理)且包含页偏移 0 的合法条目。
dump支持多进程目标(自动读取模块所属进程内存),命令行新增noiat。- 回归:
tests/reloc_test.py(973/973 重定位条目还原校验)、tests/iat_reloc_test.py(非零 slide + 损坏导入表组合)、tests/load_dll.exe加载 dump 调用导出端到端验证。
附件 aidbg.exe:x64 单文件(VC-LTL /MT,零 VC 运行时依赖),自动识别 x86/x64 目标。
aidbg v0.3.2
新增:MCP over HTTP 远程(双机)调试
--mcp --port <n> 在 stdio 之外提供 HTTP 传输,另一台机器上的 MCP 客户端可直接驱动调试器(零新依赖,Winsock 实现):
:: 目标机
aidbg --mcp --port 8799 --bind 0.0.0.0
:: 非回环绑定自动生成并打印 Bearer 令牌;也可 --token <secret> 显式指定| 端点 | 传输 |
|---|---|
GET /sse + POST /messages?sessionId= |
旧版 SSE(endpoint 事件、15s ping) |
POST /mcp |
Streamable HTTP(HTTP 响应即 JSON-RPC 响应) |
- 鉴权:令牌经
Authorization: Bearer(SSE 亦支持?token=);默认绑定 127.0.0.1 - 所有命令单调度线程串行执行,多客户端共享同一调试会话;stdio 行为不变
- 回归:
tests/http_mcp_test.py16 项全过(含完整远程调试往返)
修复
- 符号间歇失效(约 25% 复现):Win11 上
CREATE_PROCESS事件间歇性携带 NULLhFile,主模块以空路径注册进 DbgHelp,该进程整个会话符号不可用。现以 launch 记录的路径兜底 + 首个LOAD_DLL时懒解析回填(修复后 world-stop 回归 12/12) - HTTP 头/体合并单次发送(修复简单客户端只 recv 一次拿不到体)
完整记录见仓库内文档与提交历史。
🤖 Generated with Claude Code
aidbg v0.3.1
修复(两轮代码复查,全部先运行时复现再修复)
断点正确性
next/finish/until不再静默废掉它们出发时所在的断点(重植统一走 TF 单步路径)- 硬件断点按 DR6 槽位匹配;
rw访问类型正确映射;同地址断点去重
内存断点
- 不再误杀目标:guard 页上范围外 / 访问类型不符的命中改为静默单步后重挂(此前直接
DBG_EXCEPTION_NOT_HANDLED,目标以 0x80000001 退出) - 按访问类型过滤(读/写/执行);只对监视范围覆盖的页挂 guard
快照 / 反向执行
- 捕获前抬升所有已植入的 INT3(用户断点 + hide 钩子),快照保存真实指令字节,不再复活已删除的断点
- 恢复跳过 MEM_MAPPED 共享视图、不再重写页保护 —— 此前恢复后自由运行必崩(RtlFreeMemoryBlockLookaside AV)
snapshot delete落盘(mark_deleted),compact可真正回收空间;snapshot load走引擎的断点纪律
多进程
- world-stop:停止时挂起全部被调试进程,命令间状态稳定
- DbgHelp 每进程独立会话:私有模块不同基址不再互串
pause在多进程下可靠(注入断点不再被子进程 loader 断点过滤吞掉)- conhost 隔离为系统进程,不参与断点/hide/符号
MCP / 健壮性
- 含空格路径、数字地址、布尔参数、JSON-RPC batch 严格化、深度/长度限制
handles枚举移至工作线程(3s 超时),同步管道句柄不再卡死调试器- dump / hide / snapshot 解码边界校验;
eval错误信息;x64 CONTEXT 偏移修正
完整问题清单与修复记录见仓库内文档。新增 tests/tickpair.cpp + tests/ws_test.py 多进程回归。
🤖 Generated with Claude Code
aidbg 0.3.0
直接调试 DLL + 固定基址回退
- 直接调试 DLL:
file <dll> [export]即可——aidbg 从自身资源释放内置宿主(x86/x64 双 stub)加载 DLL,export为可选的加载后调用入口(rundll32 约定)。自动断点链:宿主入口 → DLL 加载(bpload)→ DllMain。实测 x64 DLL 加载于 0x180000000、x86 于 0x10000000(固定基址对 DLL 同样生效),导出内断点正常命中。不给 export 时只加载并保持映射(适合研究 DllMain);找不到导出时宿主以退出码 3 结束 - 固定基址不再硬失败:系统文件(%SystemRoot%)从不参与改名交换;交换因权限等原因失败时自动回退 ASLR 启动并给出提示,
modules的 slide 显示实际偏移 - 附:
.gitignore排除固定基址交换残留与链接中间产物
用法与命令手册见仓库 README。
aidbg 0.2.1
代码审查修复
- 快照落盘保留 XMM/MXCSR:此前从快照容器恢复会把目标的 SSE 寄存器清零(旧快照文件仍可加载)
- 断点命中命令(
bpcmd)禁止执行控制:continue/kill/detach会重入调试事件泵造成事件失步,现在直接拒绝 - 固定基址崩溃残留自动恢复:改名交换中途断电后,下次启动发现
.aidbg-orig会先把原件还原回目标路径 - 同地址用户断点优先于隐藏钩子:
break ntdll!NtClose这类断点不再被钩子吞掉 - 透传钩子状态按线程隔离:多线程并发命中不再互换单步事件
- 小修:
setreg xmm十六进制校验(支持奇数位)、bpload add参数校验、转发查询写回长度夹紧、hide profile 名不再无限追加、README 注明 NtClose 钩子开销
aidbg 0.2.0
固定基址重做 + 新命令一批
- 固定基址(ASLR off)改为改名交换:原始文件字节零修改,目标自校验实测通过(x64 0x140000000 / x86 0x400000)
label/comment/notes:用户笔记,模块+RVA 锚定,JSON 持久化,标签可直接进表达式bpcmd:断点命中命令(log-and-continue)bpload:模块加载断点(通配符)regs/setreg支持 XMM0-15 与 MXCSR- 修复
eval把x+y误判为模块+偏移(条件断点受影响) - 版本号收敛到
src/util/version.h,此后每次发布递增并单独出 Release
详细用法见仓库 README。
aidbg 0.1.0
aidbg 0.1.0 — 面向 AI 的 Windows x86/x64 命令行调试器
- 单文件 exe,x86/x64 目标自动识别(WOW64 感知),零 VC 运行时依赖
- JSONL 输出契约 / 脚本模式 / MCP 服务器
- 软件/硬件/内存断点、条件断点、命中命令 bpcmd、模块加载断点 bpload
- 反反调试:PEB 补丁 + ntdll API 虚拟化(hide profiles,兼容 scylla_hide.ini)与 al-khaser 式 detect 自查
- 快照差分压缩回退、IAT 追踪/重建、PE 转储、用户标签/注释(notes)、XMM/MXCSR 寄存器
用法与命令手册见仓库 README。