|
发表于 2025-4-1 18:05:02
|
显示全部楼层
河南省郑州市
文件太大,没办法直接上传,我把代码给你粘贴上来,需要添加DLL命令和自定义数据类型你就自己弄吧。
方案1:自定义数据类型
.数据类型 类型_SOCKET信息
.成员 dwSize, 整数型, , , 结构大小
.成员 套接字句柄, 整数型, , , 套接字句柄
.成员 本地端口, 整数型, , , 本地端口号(网络字节序)
.成员 远程端口, 整数型, , , 远程端口号(网络字节序)
.成员 本地IP, 整数型, , , 本地IP地址(网络字节序)
.成员 远程IP, 整数型, , , 远程IP地址(网络字节序)
.成员 进程ID, 整数型, , , 所属进程ID
.成员 协议类型, 整数型, , , 协议类型(TCP/UDP等)
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 进程ID | 整数型 | | 进程句柄 | 整数型 | | hook_Send | 类_超级HOOK | | Send_返回 | 类型_HOOK数据 | | hook_WSASend | 类_超级HOOK | | WSASend_返回 | 类型_HOOK数据 | | hook_recv | 类_超级HOOK | | hook_WSARecv | 类_超级HOOK | | recv_返回 | 类型_HOOK数据 | | WSARecv_返回 | 类型_HOOK数据 | | tempcurs | 整数型 | | 是否有框 | 逻辑型 | | 鼠标按下 | 逻辑型 | | hWnd | 整数型 | | 全套接字 | 整数型 | |
通用对话框_创建进程.初始目录 = 取特定目录 ( #系统桌面 )进程 = 进程_创建 (取运行目录 () + “\woool.dat”, , , )调试输出 (进程 )StartHook_你原来的 (进程 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 进程ID | 整数型 | | 0 | 进程名 | 文本型 | | 0 | n | 整数型 | | | 个数 | 整数型 | | |
组合框1. 清空 ()进程_枚举进程 (进程ID, 进程名 )个数 = 取数组成员数 (进程ID ) 计次循环首 (个数, n ) 组合框1. 加入项目 (进程名 [n ], 进程ID [n ]) 计次循环尾 () 判断 (按钮1.标题 = “开始HOOK”) 进程ID = 组合框1. 取项目数值 (组合框1.现行选中项 ) StartHook_你原来的 (进程ID ) 按钮1.标题 = “关闭HOOK” hook_Send. 卸载 () hook_WSASend. 卸载 () hook_recv. 卸载 () hook_WSARecv. 卸载 () 进程_关闭句柄 (进程句柄 ) 按钮1.标题 = “开始HOOK” 连续赋值 (假, 组合框1.禁止, 按钮3.禁止, 图形按钮1.禁止 ) 进程句柄 = 进程_打开进程 (进程ID ) 如果真 (进程句柄 ≤ 0 ) 信息框 (“指定程序不存在或无法拦截!”, 0, “错误:”, ) 返回 () 地址 = 系统_取API地址 (“send”)hook_Send. 开始 (进程句柄, 十到十六 (地址 ), &Send接口, Send_返回, 5, 2, )地址 = 系统_取API地址 (“WSASend”)hook_WSASend. 开始 (进程句柄, 十到十六 (地址 ), &WSASend接口, WSASend_返回, 5, 2, ) 标题 = “HOOK PID:” + 到文本 (进程ID )按钮1.标题 = “关闭HOOK”连续赋值 (真, 组合框1.禁止, 按钮3.禁止, 图形按钮1.禁止 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 长度 | 整数型 | | | 数据 | 字节集 | | | 指针 | 整数型 | | | 套接字 | 整数型 | | | 文本数据 | 文本型 | | | 字节集请求 | 文本型 | | | esp | 整数型 | | | a | 整数型 | | |
esp = hook_recv. 读值 (recv_返回.返回地址 ).ESP 长度 = 内存_读整数型 (进程句柄, esp + 12 )调试输出 (长度 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 长度 | 整数型 | | | 数据 | 字节集 | | | 指针 | 整数型 | | | 套接字 | 整数型 | | | 文本数据 | 文本型 | | | 字节集请求 | 文本型 | | | esp | 整数型 | | | a | 整数型 | | |
esp = hook_WSARecv. 读值 (WSARecv_返回.返回地址 ).ESP 如果真 (全套接字 = 0 ) 全套接字 = 内存_读整数型 (进程句柄, esp + 4 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 长度 | 整数型 | | | 数据 | 字节集 | | | 指针 | 整数型 | | | 套接字 | 整数型 | | | 文本数据 | 文本型 | | | 字节集请求 | 文本型 | | | esp | 整数型 | | | a | 整数型 | | |
esp = hook_Send. 读值 (Send_返回.返回地址 ).ESP 长度 = 内存_读整数型 (进程句柄, esp + 12 ) 如果真 (长度 > 0 ) 套接字 = 内存_读整数型 (进程句柄, esp + 4 ) 指针 = 内存_读整数型 (进程句柄, esp + 8 ) 数据 = 内存_读字节集 (进程句柄, 指针, 长度 )  文本数据 = 请求_请求到文本ASCLL (数据 ) 字节集请求 = 字节集到十六进制文本 (数据 )  a = 超级列表框1. 插入表项 (, , , , , ) 超级列表框1. 置标题 (a, 0, 到文本 (a + 1 ))  超级列表框1. 置标题 (a, 1, 到文本 (取小时 (取现行时间 ()) ) + “:” + 到文本 (取分钟 (取现行时间 ()) ) + “:” + 到文本 (取秒 (取现行时间 ()) ))  超级列表框1. 置标题 (a, 2, “Send”) 超级列表框1. 置标题 (a, 3, 到文本 (套接字 ))  超级列表框1. 置标题 (a, 4, 到文本 (长度 ))  超级列表框1. 置标题 (a, 5, 字节集请求 ) 超级列表框1. 置标题 (a, 6, 文本数据 ) 超级列表框1. 保证显示 (a ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 指针 | 整数型 | | | 长度 | 整数型 | | | 数据 | 字节集 | | | 数据指针 | 整数型 | | | 套接字 | 整数型 | | | 文本数据 | 文本型 | | | 字节集请求 | 文本型 | | | esp | 整数型 | | | a | 整数型 | | |
esp = hook_WSASend. 读值 (WSASend_返回.返回地址 ).ESP 套接字 = 内存_读整数型 (进程句柄, esp + 4 )调试输出 (“套接字”, 套接字 ) 指针 = 内存_读整数型 (进程句柄, esp + 8 )长度 = 内存_读整数型 (进程句柄, 指针 )数据指针 = 内存_读整数型 (进程句柄, 指针 + 4 )数据 = 内存_读字节集 (进程句柄, 数据指针, 长度 ) 文本数据 = 请求_请求到文本ASCLL (数据 )字节集请求 = 字节集到十六进制文本 (数据 ) a = 超级列表框1. 插入表项 (, , , , , )超级列表框1. 置标题 (a, 0, 到文本 (a + 1 )) 超级列表框1. 置标题 (a, 1, 到文本 (取小时 (取现行时间 ()) ) + “:” + 到文本 (取分钟 (取现行时间 ()) ) + “:” + 到文本 (取秒 (取现行时间 ()) )) 超级列表框1. 置标题 (a, 2, “WSASend”)超级列表框1. 置标题 (a, 3, 到文本 (套接字 )) 超级列表框1. 置标题 (a, 4, 到文本 (长度 )) 超级列表框1. 置标题 (a, 5, 字节集请求 )超级列表框1. 置标题 (a, 6, 文本数据 )超级列表框1. 保证显示 (a )变量名 | 类 型 | 静态 | 数组 | 备 注 | 临时内存 | 整数型 | | | 字节数量 | 整数型 | | | n | 整数型 | | | 文本 | 文本型 | | | 字节数据 | 字节型 | | |
字节数量 = 取字节集长度 (请求内容 ) 如果真 (字节数量 = 0 ) 返回 (“”)临时内存 = 取指针地址 (请求内容) 计次循环首 (字节数量, n ) 字节数据 = 内存_读字节型 (-1, 临时内存 + n - 1 ) 文本 = 文本 + 字符 (字节数据 ) 判断开始断 (字节数据 < 32 或 字节数据 > 127 )     计次循环尾 ()返回 (文本 )hook_Send. 卸载 ()hook_WSASend. 卸载 ()进程_关闭句柄 (进程句柄 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 类型 | 文本型 | | | 索引 | 整数型 | | | 套接字 | 整数型 | | | 长度 | 整数型 | | | 请求内容 | 字节集 | | |
索引 = 超级列表框1.现行选中项 类型 = 超级列表框1. 取标题 (索引, 1 )调试输出 (类型 )套接字 = 到整数 (超级列表框1. 取标题 (索引, 3 )) 长度 = 到整数 (超级列表框1. 取标题 (索引, 4 )) 调试输出 (套接字 )请求内容 = { 35, 50, 118, 118, 102, 117, 118, 73, 103, 117, 118, 118, 102, 117, 118, 118, 102, 117, 113, 112, 83, 117, 114, 113, 88, 122, 107, 113, 84, 113, 111, 113, 84, 117, 111, 61, 33 }远程发包_Send (套接字, 请求内容, 取字节集长度 (请求内容 )) |
远程发包_Send | 逻辑型 | | |
套接字 | 整数型 | | | | 请求字节集 | 字节集 | | | | 请求长度 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 请求地址 | 整数型 | | | 参数 | 整数型 | | 4 |
如果真 (进程句柄 > 0 ) hook_Send. 暂停 (Send_返回.原始地址, Send_返回.原始数据 ) 请求地址 = 内存_申请字节集内存 (进程句柄, 请求字节集, 请求长度 ) 参数 [1 ] = 套接字  参数 [2 ] = 请求地址  参数 [3 ] = 请求长度  参数 [4 ] = 0 进程_远程调用call (进程句柄, Send_返回.原始地址, 参数, ) 内存_释放内存 (进程句柄, 请求地址 ) hook_Send. 继续 (Send_返回.原始地址, Send_返回.hook数据 ) 返回 (真)返回 (假)|
远程发包_WSASend | 逻辑型 | | |
套接字 | 整数型 | | | | 请求字节集 | 字节集 | | | | 请求长度 | 整数型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 | 请求地址 | 整数型 | | | 参数 | 整数型 | | 4 |
如果真 (进程句柄 > 0 ) hook_WSASend. 暂停 (WSASend_返回.原始地址, WSASend_返回.原始数据 ) 请求地址 = 内存_申请字节集内存 (进程句柄, 请求字节集, 请求长度 ) 参数 [1 ] = 套接字  参数 [2 ] = 请求地址  参数 [3 ] = 请求长度  参数 [4 ] = 0 进程_远程调用call (进程句柄, WSASend_返回.原始地址, 参数, ) 内存_释放内存 (进程句柄, 请求地址 ) hook_WSASend. 继续 (WSASend_返回.原始地址, WSASend_返回.hook数据 ) 返回 (真)返回 (假) 如果真 (超级列表框1.现行选中项 ≠ -1 ) 弹出菜单 (发包, 取鼠标水平位置 (), 取鼠标垂直位置 ())  变量名 | 类 型 | 静态 | 数组 | 备 注 | 计次 | 整数型 | | | 字节集 | 字节集 | | | text | 文本型 | | |
编辑框1.内容 = 超级列表框1. 取标题 (超级列表框1.现行选中项, 5 )编辑框2.内容 = 超级列表框1. 取标题 (超级列表框1.现行选中项, 6 )字节集 = 到字节集 (编辑框2.内容 )text = “{” 计次循环首 (取字节集长度 (字节集 ), 计次 ) text = text + 到文本 (字节集 [计次 ]) 如果真 (取字节集长度 (字节集 ) ≠ 计次 )  text = text + “,”  计次循环尾 ()编辑框3.内容 = text + “}”
方案2:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 进程ID | 整数型 | | 进程句柄 | 整数型 | | hook_Send | 类_超级HOOK | | Send_返回 | 类型_HOOK数据 | | hook_WSASend | 类_超级HOOK | | WSASend_返回 | 类型_HOOK数据 | | hook_socket | 类_超级HOOK | | socket_返回 | 类型_HOOK数据 | | hook_WSASocket | 类_超级HOOK | | WSASocket_返回 | 类型_HOOK数据 | | 全套接字 | 整数型 | |
通用对话框_创建进程.初始目录 = 取特定目录 ( #系统桌面 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 进程ID数组 | 整数型 | | 0 | 进程名数组 | 文本型 | | 0 | 循环变量 | 整数型 | | | 进程数量 | 整数型 | | |
组合框1. 清空 () 进程_枚举进程 (进程ID数组, 进程名数组 ) 进程数量 = 取数组成员数 (进程ID数组 ) 计次循环首 (进程数量, 循环变量 ) 组合框1. 加入项目 (进程名数组 [循环变量 ], 进程ID数组 [循环变量 ]) 计次循环尾 () 判断 (按钮1.标题 = "开始HOOK" )  进程ID = 组合框1. 取项目数值 (组合框1.现行选中项 ) StartHook (进程ID ) 按钮1.标题 = "关闭HOOK" UnhookAll () 按钮1.标题 = "开始HOOK" 连续赋值 (假, 组合框1.禁止, 按钮3.禁止, 图形按钮1.禁止 ) 进程句柄 = 进程_打开进程 (进程ID ) 如果真 (进程句柄 ≤ 0 ) 信息框 ("指定程序不存在或无法拦截!", 0, "错误:", ) 返回 () API地址 = 系统_取API地址 ("socket" )hook_socket. 开始 (进程句柄, 十到十六 (API地址 ), &socket接口, socket_返回, 5, 2, )API地址 = 系统_取API地址 ("WSASocketA" )hook_WSASocket. 开始 (进程句柄, 十到十六 (API地址 ), &WSASocket接口, WSASocket_返回, 5, 2, ) API地址 = 系统_取API地址 ("send" )hook_Send. 开始 (进程句柄, 十到十六 (API地址 ), &Send接口, Send_返回, 5, 2, )API地址 = 系统_取API地址 ("WSASend" )hook_WSASend. 开始 (进程句柄, 十到十六 (API地址 ), &WSASend接口, WSASend_返回, 5, 2, ) 标题 = "HOOK PID:" + 到文本 (进程ID )按钮1.标题 = "关闭HOOK" 连续赋值 (真, 组合框1.禁止, 按钮3.禁止, 图形按钮1.禁止 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | esp | 整数型 | | | 新套接字 | 整数型 | | |
esp = hook_socket. 读值 (socket_返回.返回地址 ).ESP 新套接字 = 内存_读整数型 (进程句柄, esp ) 如果真 (新套接字 ≠ -1 且 新套接字 ≠ 0 ) 全套接字 = 新套接字 调试输出 (" [HOOK ] 捕获socket套接字:", 全套接字 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | esp | 整数型 | | | 新套接字 | 整数型 | | |
esp = hook_WSASocket. 读值 (WSASocket_返回.返回地址 ).ESP 新套接字 = 内存_读整数型 (进程句柄, esp ) 如果真 (新套接字 ≠ -1 且 新套接字 ≠ 0 ) 全套接字 = 新套接字 调试输出 (" [HOOK ] 捕获WSASocket套接字:", 全套接字 ) hook_socket. 卸载 ()hook_WSASocket. 卸载 ()hook_Send. 卸载 ()hook_WSASend. 卸载 () 如果真 (进程句柄 > 0 ) 进程_关闭句柄 (进程句柄 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 缓冲区 | 整数型 | | | 长度 | 整数型 | | |
如果真 (全套接字 = 0 ) 返回 (假) 长度 = 4 返回 (getsockopt (全套接字, #SOL_SOCKET, #SO_ERROR, 缓冲区, 长度 ) = 0 ) 如果真 (检查套接字有效性 () = 假) 信息框 ("套接字无效或尚未创建!", 0, "错误", ) 返回 () 请求内容 = { 35, 50, 118, 118, 102, 117, 118, 73, 103, 117, 118, 118, 102, 117, 118, 118, 102, 117, 113, 112, 83, 117, 114, 113, 88, 122, 107, 113, 84, 113, 111, 113, 84, 117, 111, 61, 33 } 调试输出 (" [发送 ] 使用套接字:", 全套接字 )远程发包_Send (全套接字, 请求内容, 取字节集长度 (请求内容 )) UnhookAll ()
|
|