只能远程拦截封包?
怎样可以修改发送自己的封包数据?搞什么鬼,现在RAR都不能上传了?
.版本 2
.程序集 窗口程序集1
.程序集变量 进程ID, 整数型
.程序集变量 进程句柄, 整数型
.程序集变量 保存返回值的地址, 整数型
.程序集变量 hook_send, 远程HOOK
.程序集变量 hook_recv, 远程HOOK
.程序集变量 新RECV地址, 整数型
.子程序 __启动窗口_创建完毕
' http://bbs.eyuyan.com/read.php?tid=275969
.子程序 _按钮1_被单击
.局部变量 recv, 整数型
.局部变量 字节集, 字节集
.局部变量 找到位置, 整数型
.如果真 (组合框1.现行选中项 = -1)
返回 ()
.如果真结束
进程ID = 组合框1.取项目数值 (组合框1.现行选中项)
进程句柄 = 操作_打开进程 (进程ID)
保存返回值的地址 = 内存_申请内存 (进程句柄)
hook_send.安装 (进程ID, _启动窗口.取窗口句柄 (), 操作_取API地址 (“send”), &send接口)
recv = 操作_取API地址 (“recv”)
字节集 = 字节集 + { 139, 5 } + 到字节集 (保存返回值的地址)
' 00000000 8B05 xxxxxxxx MOV EAX,DS:[保存返回值的地址]
字节集 = 字节集 + { 194, 16, 0 }
' 00000006 C2 1000 RETN 10
hook_recv.安装 (进程ID, _启动窗口.取窗口句柄 (), 操作_取API地址 (“recv”), &recv接口, 字节集)' 让他直接返回
' 插入了字节集,不让他去第二次调用RECV(下面的RECV有备注,为什么这里是第二次)
标题 = 标题 + “ ” + 到文本 (进程ID)
.子程序 send接口, , , 这里不返回 被HOOK程序将一直挂起
.局部变量 长度, 整数型
.局部变量 数据, 字节集
' HOOK头部此时ebp还未压入堆栈,所以是参数1
长度 = 内存_读整数内存 (hook_send.取进程句柄 (), hook_send.取整数寄存器 ().ESP + 12)' 第3个参数,封包长度
.如果真 (长度 > 0)
数据 = 内存_读字节集内存 (hook_send.取进程句柄 (), hook_send.取整数寄存器 ().ESP + 8, 长度, { 0 })' 第2个参数,封包指针,读取时加一偏移0 读到数据
' 写内存可修改参数~
编辑框1.加入文本 (转换_字节集转封包 (数据) + #换行符 + #换行符)
.如果真结束
.子程序 recv接口, , , 这里不返回 被HOOK程序将一直挂起
.局部变量 长度, 整数型
.局部变量 数据, 字节集
' HOOK头部此时ebp还未压入堆栈,所以是参数1
长度 = _调用远程RECV (内存_读整数内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 4), 内存_读整数内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 8), 内存_读整数内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 12), 内存_读整数内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 16))
' 这里让游戏先把RECV调用后,我们才能读取到数据.
' 长度 = 内存_读整数内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 12)' 第3个参数,要获取长度
.如果真 (长度 > 0)
数据 = 内存_读字节集内存 (hook_recv.取进程句柄 (), hook_recv.取整数寄存器 ().ESP + 8, 长度, { 0 })' 第2个参数,封包指针,读取时加一偏移0 读到数据
' 写内存可修改参数~
编辑框4.加入文本 (转换_字节集转封包 (数据) + #换行符 + #换行符)
.如果真结束
.子程序 _调用远程RECV, 整数型, , 让游戏先调用RECV
.参数 套接字, 整数型
.参数 封包指针, 整数型
.参数 封包长度, 整数型
.参数 标志, 整数型
.局部变量 参数, 整数型, , "4"
.局部变量 数据, 字节集
.局部变量 recv, 整数型
.局部变量 返回值, 整数型
参数 = 套接字
参数 = 封包指针
参数 = 封包长度
参数 = 标志
.如果真 (新RECV地址 = 0)
新RECV地址 = 内存_申请内存 (进程句柄)
recv = 操作_取API地址 (“recv”)
数据 = 内存_读字节集内存 (-1, recv, 5)
数据 = 数据 + 操作_jmp地址取机器码 (recv + 5, 新RECV地址 + 取字节集长度 (数据))
内存_写字节集内存 (进程句柄, 新RECV地址, 数据)
.如果真结束
返回值 = 调用_远程call (进程句柄, 新RECV地址, 参数)
内存_写整数内存 (进程句柄, 保存返回值的地址, 返回值)
返回 (返回值)
.子程序 _组合框1_将弹出列表
.局部变量 进程, 进程信息, , "0"
.局部变量 记次, 整数型
.局部变量 个数, 整数型
组合框1.清空 ()
个数 = 进程_枚举进程 (进程)
.计次循环首 (个数, 记次)
组合框1.加入项目 (进程 [记次].进程名, 进程 [记次].进程ID)
.计次循环尾 ()
此处直接写内存 Aurelion 发表于 2020-10-13 18:15
此处直接写内存
请问应该怎写?试子很多次都不成功,经常出错或直接退出.
下载下来看看,学习学习。
页:
[1]