基本上是这样的,程序分了主要3部分:
NoobyICEGUI
- 仅仅是界面,显示反汇编、堆栈,模块,管理断点和注释等等,但不牵涉任何与Debuggee进程相关操作。
- 优点是支持多进程调试统一管理,未知ant不会影响断点和调试进度的保存。
- 缺点是需要傀儡进程(当然可以是GUI本身),如果调试多进程,需要多个傀儡,并且可能会引起异常,被主动防御误报。
目前进度:
已完成:
- 向傀儡进程注入DLL。
- 卸载注入的DLL
- 通信机制已经完善,可以直接注入Explorer启动目标进程,或者注入GUI进程,这样在IDE中可以同时调试GUI和DLL。
部分完成:
- MDI界面基本完成,需要单独实现各功能界面。
- HEX显示简单的实现,需要扩充大量功能。
- 插件架构,随主GUI功能实现将更新提供给插件的API,初定为插件可以有自己的窗体,并可以直接与DLL通信。
2008.10.16:
- 调用反汇编函数,显示反汇编的View。(反汇编引擎初定为PVDasm)
未完成:
- Scripting Engine
- 分析器
- 等等
NoobyICEDll
- 启动目标进程,接受调试消息,及读写目标进程,操作ThreadContext
- 优点,一个DLL对应一个被调试进程,可以被注入到任何带窗体消息循环的进程。
- 缺点,由于被调试进程的不确定性可能会使傀儡进程异常。
目前进度:
已完成:
- 加载,卸载,创建目标进程
- 与GUI的数据交换机制
部分完成:
- 与GUI通信,剩余的不多
- Crash & Recover,架构上兼容,具体实现可能会有问题
未完成:
- 如果注入的进程没消息循环,自己建一个?
NoobyICEHelpers
主要包含一些全局定义和公用函数,随其他项目同步更新。(这部分应该算作PDK)
采取这个GUI和调试DLL分离的目的是,假使代码分析crash了,DLL依然不受影响,重启GUI就可以从原位置继续调试,反之亦然,未保存断点、补丁不会丢失。
有兴趣的朋友可以继续写,代码风格请尽量规范。
diff @ HelperFunctions.cpp, line 10
/* Added by Nooby. - Begin- */
Your code here;
/* Added by Nooby. - End- */
大量的更新请发短消息给我,我尽量保证原貌,并且不会删去作者信息。
实在是没时间,我有空就更新它,如果有好的建议或代码请联系我。
Sep. 19 2008更新:
- 增加了DetachHostWnd()函数
- 完善了DLL卸载功能,可以安全的从宿主FreeLibrary
- 完善了调试消息机制,解决了自动忽略异常的处理环节
- 几处BUG修复
[今晚上传]
Sep. 20 2008更新:
- 重新规划了Debug Event的处理方法,由DLL主动Post到GUI进程,希望能解决跨进程调试的同步问题。
- 测试了下断点
Sep. 21 2008更新:
- 修正一个BUG,MSDN说CREATE_THREAD_DEBUG_EVENT需要手动关闭DBEvent.u.CreateThread.hThread,结果会造成ContinueDebugEvent异常,已删去。
- 完善了MESSAGE_GUI_DBG_TERMINATE在DLL中的卸载例程。
[文件更新至此]
Oct. 16 2008更新:
- 显示反汇编
- 显示Hex
Pending:
- 准备加入打开文件后的PE信息窗口(类似IDA),避免一些PE头造成的显示问题。同时加入设置运行参数(MESSAGE_GUI_SET_COMMANDLINE)。
目前计划:
- 主要还是在实现调试功能上,界面看上去空虚了点,其实目前的代码已经可以简单的调试程序处理异常了。
- 尽快实现线程池和进程池,否则卸载.NET程序和其它一些特别的应用程序的时候会有问题。
- 考虑是否由插件形式增加功能,比如反汇编窗体,如果用户觉得不好看,可以自己写一个。现在用的Docking Pane加载子窗体对象是自由的。
- 想了下分析器的设计方法:根据EIP动态分析,根据已知入口顺序分析,不盲目分析所有代码。
- 预计增加VM,可以指定条件,让VM根据当前状态模拟执行,预见未来的情况(比如某处断点的寄存器状况,是否跑飞),并将与分析器结合起来。直接对付handlers。
完了,YY了那么多,不知何日能全部实现。
------------------------------------------------------------------------------
NoobyICE.zip
dependents:
Xtreme ToolkitPro v12.0.0
Visual C++ 2005
[课程]Linux pwn 探索篇!