开源易语言gh0st客户端黑月编写开源
功能说明:该程序是一个使用易语言(E 语言)开发的 Windows 服务程序,其主要功能是实现系统服务与用户会话之间的交互,具体表现为在具有系统权限的服务上下文中,尝试启动指定的应用程序并使其在登录用户的交互式会话中运行。
程序结构分析如下:
1. 服务注册与初始化
程序的入口点为 `_启动子程序`。在此子程序中,定义了服务名称为"6to4",并配置了 `SERVICE_TABLE_ENTRY` 结构体,将 `ServiceMain` 设定为服务的主入口函数。随后调用 `StartServiceCtrlDispatcher` 函数向 Windows 服务控制管理器注册该服务。这是典型的 Windows 服务编程模型,使得该程序可以像系统服务一样在后台运行。
2. 服务主逻辑
`ServiceMain` 子程序负责服务的核心逻辑。它首先设置服务状态为已运行(`dwCurrentState = 4`),并通过 `RegisterServiceCtrlHandler` 注册了消息处理函数 `ServiceCtrl` 以响应停止等控制信号。在服务初始化成功后,代码调用了关键函数 `LaunchAppIntoDifferentSession`,参数指定为"C:\Windows\notepad.exe"。这意味着程序的核心意图是在服务启动时尝试打开记事本程序。同时,操作结果会被记录到桌面日志文件"D:\Users\sf\Desktop\1.log"中。
3. 跨会话启动技术实现
`LaunchAppIntoDifferentSession` 是本程序最核心的技术模块。由于现代 Windows 操作系统实施了 Session 0 隔离策略,服务运行在非交互式的 Session 0 中,无法直接显示图形界面或访问登录用户的资源(通常位于 Session 1 或更高)。该子程序通过一系列复杂的 Windows API 调用来解决这一问题:
- 获取活动控制台会话 ID:使用 `WTSGetActiveConsoleSessionId` 获取当前登录用户的会话编号。
- 获取用户令牌:使用 `WTSQueryUserToken` 查询对应用户的访问令牌。
- 权限提升:调用 `OpenProcessToken` 获取当前进程令牌,并通过 `LookupPrivilegeValue` 和 `AdjustTokenPrivileges` 启用 `SeDebugPrivilege` 特权。这一特权通常允许调试进程和访问其他进程的内存空间,在此处用于辅助获取高权限令牌或绕过某些安全检查。
- 令牌复制与环境创建:使用 `DuplicateTokenEx` 复制令牌,`SetTokenInformation` 调整令牌中的会话 ID 信息,以及 `CreateEnvironmentBlock` 为用户创建环境变量块。
虽然提供的代码片段在构建进程创建参数的最后阶段截断(变量 `pEn` 之后),但根据上下文推断,其完整逻辑应为调用类似 `CreateProcessWithTokenW` 的 API,利用调整后的令牌在新的会话环境中启动目标程序。
4. 服务控制与异常处理
`ServiceCtrl` 子程序负责处理服务控制消息。当接收到停止命令(消息号=1)时,它会更新服务状态为正在停止(状态码 3),并在延时后将状态标记为已停止(状态码 1),确保服务管理器的状态同步正确。此外,程序在 `LaunchAppIntoDifferentSession` 的关键步骤中加入了详细的错误检查机制,一旦任何 Windows API 调用失败(例如无法获取权限或令牌复制失败),会将具体的错误代码写入不同的日志文件(如 2.log, 3.log 等),这些文件被预设存储在"D:\Users\sf\Desktop\"目录下,便于开发者排查权限不足或环境问题。
总结而言,这是一个演示如何利用系统服务的高权限特性,结合 Windows Token 操纵技术和会话查询接口,来跨越 Session 0 隔离限制的工具程序。其实际效果是在用户登录后的桌面上启动一个由服务触发的应用程序。此类技术原理常被用于合法的系统运维工具以实现自动化的桌面任务触发,但也因涉及权限提升和令牌伪造,常出现在各类安全攻防研究的案例中。程序包含了基础的状态监控和日志记录机制,体现了 Windows 服务开发的基本规范。
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ ServiceMain
| |
| |------ ServiceCtrl
| |
| |------ LaunchAppIntoDifferentSession
| |
| |
======调用的Dll
| |
| |---[dll]------ StartServiceCtrlDispatcher
| |
| |---[dll]------ RegisterServiceCtrlHandler
| |
| |---[dll]------ SetServiceStatus
| |
| |---[dll]------ WTSGetActiveConsoleSessionId
| |
| |---[dll]------ WTSQueryUserToken
| |
| |---[dll]------ ZeroMemory_si
| |
| |---[dll]------ ZeroMemory_pi
| |
| |---[dll]------ OpenProcessToken
| |
| |---[dll]------ GetCurrentProcess
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ LookupPrivilegeValue
| |
| |---[dll]------ DuplicateTokenEx
| |
| |---[dll]------ SetTokenInformation
| |
| |---[dll]------ AdjustTokenPrivileges
| |
| |---[dll]------ CreateEnvironmentBlock
| |
| |---[dll]------ CreateProcessAsUser
| |
| |---[dll]------ CloseHandle
======程序入口
| |
| |------ _启动子程序
| |
| |------ RunProcess
| |
| |------ GetTokenByName
| |
| |
======调用的Dll
| |
| |---[dll]------ CreateProcessAsUser
| |
| |---[dll]------ CreateToolhelp32Snapshot
| |
| |---[dll]------ Process32First
| |
| |---[dll]------ OpenProcess
| |
| |---[dll]------ OpenProcessToken
| |
| |---[dll]------ Process32Next
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ LocalSize
======程序集1
| |
| |------ _启动子程序
| |
| |------ 取资源文件
| |
| |------ 取指定的系统路径
| |
| |------ 安装服务
| |
| |------ 删除自身
| |
| |
======调用的Dll
| |
| |---[dll]------ FindResource
| |
| |---[dll]------ LoadResource
| |
| |---[dll]------ LockResource
| |
| |---[dll]------ SizeofResource
| |
| |---[dll]------ GetModuleHandle
| |
| |---[dll]------ OpenSCManager
| |
| |---[dll]------ OpenSCManager2
| |
| |---[dll]------ CreateService
| |
| |---[dll]------ CloseServiceHandle
| |
| |---[dll]------ StartService
| |
| |---[dll]------ SHGetSpecialFolderPath
| |
| |---[dll]------ RegQueryValueExA_字节集
| |
| |---[dll]------ RegSetValueExA_字节集
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ BASE64解码
| |
| |------ 获取系统信息
| |
| |------ ServiceMain
| |
| |------ ServiceCtrl
| |
| |------ Test
| |
| |------ 连接服务器
| |
| |------ 网络事件回调函数
| |
| |------ 合并数据包
| |
| |------ 合并数据完成
| |
| |------ 向服务端发送数据
| |
| |------ 结束指定进程
| |
| |
======sell程序集
| |
| |------ shell连接
| |
| |------ 读管道
| |
| |------ 写管道
| |
| |
======远程监控集
| |
| |------ 初始化远程监控
| |
| |------ 截图
| |
| |------ 停止远程监控
| |
| |------ 控制鼠标事件
| |
| |------ 鼠标键
| |
| |
======DDOS程序集
| |
| |------ Sart_ddos
| |
| |------ 创建ddos线程
| |
| |------ TCP_ddos
| |
| |------ UDP_ddos
| |
| |------ Sotp_ddos
| |
| |
======文件管理程序集
| |
| |------ 获取驱动器
| |
| |------ 磁盘_取驱动器列表
| |
| |------ 获取指定目录下文件
| |
| |
======调用的Dll
| |
| |---[dll]------ Sleep
| |
| |---[dll]------ URLDownloadToFile
| |
| |---[dll]------ ShellExecute
| |
| |---[dll]------ 结束一个进程
| |
| |---[dll]------ 创建匿名管道
| |
| |---[dll]------ 获取启动信息
| |
| |---[dll]------ 创建进程_
| |
| |---[dll]------ read
| |
| |---[dll]------ write
| |
| |---[dll]------ _移动鼠标
| |
| |---[dll]------ 模拟键盘行动_
| |
| |---[dll]------ _控制鼠标
| |
| |---[dll]------ GetLogicalDriveStrings
| |
| |---[dll]------ StartServiceCtrlDispatcher
| |
| |---[dll]------ RegisterServiceCtrlHandler
| |
| |---[dll]------ SetServiceStatus
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |------ LaunchAppIntoDifferentSession
| |
| |
======调用的Dll
| |
| |---[dll]------ WTSGetActiveConsoleSessionId
| |
| |---[dll]------ WTSQueryUserToken
| |
| |---[dll]------ ZeroMemory_si
| |
| |---[dll]------ ZeroMemory_pi
| |
| |---[dll]------ OpenProcessToken
| |
| |---[dll]------ GetCurrentProcess
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ LookupPrivilegeValue
| |
| |---[dll]------ DuplicateTokenEx
| |
| |---[dll]------ SetTokenInformation
| |
| |---[dll]------ AdjustTokenPrivileges
| |
| |---[dll]------ CreateEnvironmentBlock
| |
| |---[dll]------ CreateProcessAsUser
| |
| |---[dll]------ CloseHandle
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |
======WinSocket
| |
| |------ Call
| |
| |------ 创建客户端IOCP线程
| |
| |------ 销毁客户端IOCP线程
| |
| |------ Connect
| |
| |------ Disconnect
| |
| |------ ThreadProc
| |
| |------ GetIndex
| |
| |------ GetType
| |
| |------ SetType
| |
| |------ PostWSARecv
| |
| |------ PostWSASend
| |
| |------ GetData
| |
| |------ SendData
| |
| |------ CreateOverlapped
| |
| |------ Release
| |
| |------ Release2
| |
| |------ mAlloc
| |
| |------ mFree
| |
| |
======TCP客户端
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 连接
| |
| |------ 断开
| |
| |------ 取回数据
| |
| |------ 发送数据
| |
| |
======调用的Dll
| |
| |---[dll]------ WSAStartup
| |
| |---[dll]------ WSACleanup
| |
| |---[dll]------ closesocket
| |
| |---[dll]------ htons
| |
| |---[dll]------ inet_addr
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ WSARecv
| |
| |---[dll]------ WSASend
| |
| |---[dll]------ CreateIoCompletionPort
| |
| |---[dll]------ GetQueuedCompletionStatus
| |
| |---[dll]------ PostQueuedCompletionStatus
| |
| |---[dll]------ WSASocket
| |
| |---[dll]------ GetSystemInfo
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ RtlMoveMemory_int_1
| |
| |---[dll]------ RtlMoveMemory_int_2
| |
| |---[dll]------ RtlMoveMemory_short_1
| |
| |---[dll]------ RtlMoveMemory_short_2
| |
| |---[dll]------ RtlMoveMemory_byte_1
| |
| |---[dll]------ RtlMoveMemory_byte_2
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ TerminateThread
| |
| |---[dll]------ GetExitCodeThread
| |
| |---[dll]------ GetTickCount
| |
| |---[dll]------ connect
| |
| |---[dll]------ VirtualAlloc
| |
| |---[dll]------ VirtualFree
======程序集1
| |
| |------ _启动子程序
| |
| |------ _临时子程序
| |
| |
======核心程序集
| |
| |------ Call
| |
| |------ Start
| |
| |------ Stop
| |
| |------ GetClientInf
| |
| |------ GetData
| |
| |------ SendData
| |
| |------ 事件线程
| |
| |------ 处理线程
| |
| |------ PostAcceptEx
| |
| |------ PostWSARecv
| |
| |------ PostWSASend
| |
| |------ SetSocket
| |
| |------ GetSocket
| |
| |------ SetType
| |
| |------ GetType
| |
| |------ CreateSocket
| |
| |------ CreateOverlapped
| |
| |------ DestroyOverlapped
| |
| |------ Release
| |
| |------ Release2
| |
| |
======TCP服务器
| |
| |------ _初始化
| |
| |------ _销毁
| |
| |------ 启动
| |
| |------ 停止
| |
| |------ 取回客户
| |
| |------ 取回数据
| |
| |------ 发送数据
| |
| |------ 断开客户
| |
| |
======调用的Dll
| |
| |---[dll]------ GetProcessHeap
| |
| |---[dll]------ HeapAlloc
| |
| |---[dll]------ HeapFree
| |
| |---[dll]------ HeapCreate
| |
| |---[dll]------ HeapDestroy
| |
| |---[dll]------ HeapReAlloc
| |
| |---[dll]------ CreateIoCompletionPort
| |
| |---[dll]------ GetQueuedCompletionStatus
| |
| |---[dll]------ PostQueuedCompletionStatus
| |
| |---[dll]------ CloseHandle
| |
| |---[dll]------ GetSystemInfo
| |
| |---[dll]------ RtlMoveMemory_Bin_1
| |
| |---[dll]------ RtlMoveMemory_Bin_2
| |
| |---[dll]------ RtlMoveMemory_int_1
| |
| |---[dll]------ RtlMoveMemory_int_2
| |
| |---[dll]------ CreateThread
| |
| |---[dll]------ TerminateThread
| |
| |---[dll]------ GetLastError
| |
| |---[dll]------ GetTickCount
| |
| |---[dll]------ GetExitCodeThread
| |
| |---[dll]------ WaitForSingleObject
| |
| |---[dll]------ RtlMoveMemory_sockaddr_in
======窗口程序集1
| |
| |------ __启动窗口_创建完毕
| |
| |------ _时钟心跳_周期事件
| |
| |------ _时钟网速_周期事件
| |
| |------ 网络事件回调函数
| |
| |------ 合并数据包
| |
| |------ 合并数据完成
| |
| |------ 删除离开客户
| |
| |------ 在线客户数检测
| |
| |------ 向客户端发送文本
| |
| |------ 向客户端发送数据
| |
| |------ __启动窗口_将被销毁
| |
| |------ _超级列表框_当前表项被改变
| |
| |------ _超级列表框_右键单击表项
| |
| |------ _重新连接_被选择
| |
| |------ _远程监控_被选择
| |
| |------ _远程终端_被选择
| |
| |------ _进程管理_被选择
| |
| |------ _文件管理_被选择
| |
| |------ _下载文件_被选择
| |
| |------ _开始ddos_被单击
| |
| |------ _停止ddos_被单击
| |
| |------ _按钮应用_被单击
| |
| |------ _编辑框上线主机_内容被改变
| |
| |------ _编辑框上线端口_内容被改变
| |
| |------ _按钮生成_被单击
| |
| |------ 取随机文本
| |
| |------ BASE64编码
| |
| |------ _选择框URL_被单击
| |
| |------ _按钮_更新_被单击
| |
| |------ _弹出信息框_被选择
| |
| |------ _关于_被选择
| |
| |
======远程终端程序集
| |
| |------ _远程终端窗口_创建完毕
| |
| |------ _dos编辑框_按下某键
| |
| |------ _远程终端窗口_将被销毁
| |
| |
======远程监控窗程序集
| |
| |------ _远程监控窗口_创建完毕
| |
| |------ SysMenuHandler
| |
| |------ 选中菜单
| |
| |------ 整理后
| |
| |------ 更换位深
| |
| |------ _画板1_鼠标左键被按下
| |
| |------ _画板1_鼠标左键被放开
| |
| |------ _画板1_鼠标右键被按下
| |
| |------ _画板1_鼠标右键被放开
| |
| |------ _画板1_鼠标位置被移动
| |
| |------ _画板1_按下某键
| |
| |------ _画板1_放开某键
| |
| |------ _远程监控窗口_将被销毁
| |
| |------ _时钟1_周期事件
| |
| |------ _时钟2_周期事件
| |
| |
======下载文件程序集
| |
| |------ _下载文件窗口_创建完毕
| |
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。