Back Orifice XP






2.71/5 (13投票s)
2006年1月27日
7分钟阅读

86366

993
Back Orifice XP (BOXP) 是一个基于 BO2K 的网络管理工具。
引言
Back Orifice XP (BOXP) 是一个适用于 Microsoft Win32 环境的网络管理工具。
在 Back Orifice 和 Back Orifice 2000 的成功基础上,Back Orifice XP 使网络管理员能够控制系统、网络、注册表、密码、文件系统和进程。不同的是 BOXP 更小、更快、免费且极具扩展性,因为它基于插件架构,确保可以在不发布全新二进制文件的情况下添加新功能。
我(Javier Aroche)说:“我的想法是重构 BO2K 的代码,称之为 BOXP,修复许多影响它的问题并添加新功能。目前 BO2K 可以工作……但不完全,需要进行重大更改以支持真正的插件接口,以便插件能够正确地与系统以及它们之间协同工作,而这在 BO2K 中目前是不可能的。因此,需要重写当前源代码以创建一个新的接口,该接口允许插件使用框架的所有内部函数以及其他插件的函数。”
BO2K 存在许多概念性问题、错误和限制,但最大的问题是有限的插件链接 (PL)。BO2K 1.1 的 PL 只是 BO2K 1.0 PL 的扩展,添加了更多成员;但这些添加并没有解决概念性问题……只是给了我们虚假的希望。
因此,我准备了对 bo2k 及其插件链接结构的全面重新设计。我们需要重新编码,因为
- BO2K 无法处理高级技术(如 `RemoteThread`、进程注入、内存映像压缩/加密、“热插拔”功能更新,...)。
- PL 非常有限。
- 处理运行线程的插件时存在问题。
- BO2K 运行时无法更新(也许如果我们更新所有函数调用或将函数重定向到我们的新函数)。
- BO2K 不支持多语言。需要重新编译才能更改字符串。
- 灵活性确实受限,并非所有 BO2K 函数/对象都可以在不修改内存映像的情况下进行更新。
- 插件无法访问所有函数。
- BO2K 不知道插件是否正在运行线程。
- 客户端和配置工具基于 MFC,这使得通过插件进行 GUI 扩展几乎不可能。
- 插件之间的通信(几乎)不可能!!
框架
这是主要概念,即服务器、客户端和配置工具的代码库。这三个应用程序将共享相同的框架,为这三个应用程序提供标准化的对象初始化和加载。当框架初始化完成后,它将控制权交给应用程序,以便应用程序开始加载自己的对象并开始实际执行。
正如我之前提到的,框架的目的是提供一个通用基础,方便插件访问应用程序的接口。每个应用程序所做的是通过添加更多函数和对象来扩展框架。需要注意的是,框架本身无法独立执行,应用程序需要维持执行和与用户的交互。
框架应包含实用函数、访问控制、日志、全局变量和函数。应用程序应包含用户界面,并使用框架来处理常见任务(如处理插件)。
插件链接
新的插件链接将集成
[where '+'=good point and '-'=bad point]
API(API 指针)
- + 可以绕过/更改它们,只需更改指针地址即可
- + 通用访问方式
- + EXE 文件中没有明确的 API
- + 插件体积更小,不需要 PE 头中的“导入表”
- + 插件加载更快,无需查找 API 地址
- +/- 需要在框架启动时加载(需要在字符串中存储 API 名称)。
- - 必须小心处理,NULL/零值会导致执行崩溃。
函数(函数指针)
- + 可以绕过/更改它们,只需更改指针地址即可。
- + 通用访问方式。- 需要在框架启动时逐一添加。
- - 必须小心处理,NULL/零值会导致执行崩溃。
全局变量(指针和静态变量)
字符串和二进制数据
- + 可以绕过/更改它们,只需更改指针地址即可。
- +/- 必须结构化。
- - 必须小心处理,NULL/零值会导致执行崩溃。
应用程序上下文(函数、变量、字符串,...)
- + 通用访问方式。
- + 插件无需复杂测试即可知道我们正在运行。
- - 必须小心处理,NULL/零值会导致执行崩溃。
通过这种结构,插件可以轻松访问全局对象,没有问题。所有数据都是共享的。
框架特性
[字符串]
- 允许替换它们(用于多语言支持)。+ 允许压缩/加密它们。* [配置] + 添加、删除它们。
- 从 *.ini 文件保存/加载配置。
- 允许全局访问所有变量(这样我们就可以检查其他插件的配置)。
- 通过存储新值到 *.ini 文件来更改值。
[线程]
- 维护一个在框架中运行的线程列表。
- 启动、停止、挂起、恢复它们。
- 当关闭开始时,必须停止所有线程以避免框架崩溃。
- 创建线程时可以传递自定义数据。
- 包含在 Thread 信息结构中的执行控制变量。因此,我们可以轻松地停止线程。
- 通过 ID 字符串查找线程。
[插件]
- 加载/卸载它们。
- 允许在启动时运行一个主线程。
- 共享自定义数据,可用于传递指向上下文结构的指针。
- 允许替换字符串(用于多语言支持)。
- 维护一个在启动时加载的插件列表(仅当启用 .ini 支持时),以便在重新启动时加载添加的插件。
- 更改配置,无需编辑磁盘映像(仅当启用 .ini 支持时)。
- 任何类型的文件都可以附加到服务器。
- 允许插件自我移除。
- 通过 ID 字符串查找插件。
- 附件已进行校验和处理。
[函数]
- 处理一个额外的函数表。
- 添加/删除额外的函数。
- 通过 ID 字符串查找函数。
[加密模块]
- 添加/删除引擎。
[输入/输出模块]
- 添加/删除引擎。
[认证模块]
- 添加/删除引擎。
- 更好地支持多用户架构。
- 如果连接或监听操作失败,返回错误代码。
[日志记录]
- 重要函数的调用会生成日志(`AddPlugin`、`RemovePlugin`、`AddThread`,...)
- 插件可以生成日志。
- 将日志字符串写入文件或调试器输出。
- 输出文件可配置。
[其他]
- 包含基本 Windows 查看器。
- 包含基本进程查看器(适用于 NT 和 9x)。+ 包含基本 C++ 实用函数。+ 包含 DLL 映像加载器。
- 包含 LZH 压缩。
- 重要函数在失败时会生成错误代码。
服务器新特性
- 允许在注册命令时传递自定义数据。之后,当调用该命令时,它可以访问自定义数据。
- 直接调用服务器命令,无需创建套接字并连接到服务器上的另一个套接字来执行它们。
- 管理多种语言。
- 更好地控制监听套接字和连接套接字。使用互斥锁。
- 自定义发送命令回复函数。
- 命令回复可以存储在缓冲区中,而不是发送到套接字。
- 配置存储在 *.ini 文件中;但可以禁用。
配置工具新特性
- 必须支持插件。
- 注册插件命令。
- 不基于 MFC,因此扩展易于实现。
- 管理多种语言。
- 首选项对话框。
- GUI 更改:使用工具栏、扁平按钮
- 允许将服务器配置导出到文件。
- 配置存储在 *.ini 文件中。
客户端新特性
- 不基于 MFC,因此扩展易于实现。
- 管理多种语言。
- 首选项对话框。
- 工作区已进行校验和处理。避免加载损坏的数据。
- 对话框、字体、背景颜色均可自定义。
- 添加了扁平按钮。
- 客户端配置存储在 *.ini 文件中。可以运行多个具有不同配置的客户端而不会出现问题。
- 性能更佳。可以接收大量服务器回复并全部处理!
输出
这只是 boxp 当前特性(或计划中特性)的示例,并非完整的特性列表,仅列出有利于 boxp 对比的特性。
官方 Back Orifice XP 网站是:http://boxp.sourceforge.net/。请访问以获取更多详细信息、最新版本和支持。
Javier Aroche (j_aroche AT users DOT sourceforge DOT net)
BOXP 项目管理员
http://boxp.sourceforge.net/
许可证
本文档没有明确的许可证,但可能包含文章文本或下载文件本身的使用条款。如有疑问,请通过下方的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。