hook魔兽的send的问题

xmu_才盛 2011-04-25 10:19:31
自己修改 WS2_32 中的send函数, (通过浩方平台联网)
具体方法是 修改前 5个字节跳到 自己的Mysend中。 用互斥来防止多线程出现的问题。 可以说里面什么都没做。
但只要已进入别人的房间,就崩溃。。


// 互斥信号量
HANDLE hMutex = NULL;
typedef int(*PFunSend)( SOCKET, const char FAR *, int , int); // send 函数指针
PFunSend pSend;

int MySend( SOCKET s, const char FAR *buf, int len, int flags )
{
// 进入缓冲区
WaitForSingleObject( hMutex, INFINITE );

// 改回源地址地址
int nTmp = 0;
for(nTmp = 0; nTmp < nSize; nTmp ++)
pFuncAddr[nTmp] = uszBuf[nTmp];

// 调用原函数
pSend = (PFunSend)pFuncAddr;
nTmp = pSend(s, buf, len, flags );

// 改成本地地址
pFuncAddr[0] = 0xE9;
*(PDWORD)&pFuncAddr[1] = dwSrcOffset;

ReleaseMutex(hMutex);

return nTmp;
}

我也很想自己解决这个问题, 但是 自己调试了好长时间, 而且自己写的多线程调用 + 更改IAT表的测试例子 一点问题都没有。

故在此求救
...全文
793 66 打赏 收藏 转发到动态 举报
写回复
用AI写文章
66 条回复
切换为时间正序
请发表友善的回复…
发表回复
phanil 2011-06-18
  • 打赏
  • 举报
回复
魔兽3单机,没有开平台,hook send失败。。。 进入别人房间或别人进入我的主机都会报错。。。
xmu_才盛 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 52 楼 lactoferrin 的回复:]
引用 49 楼 newstudent_never 的回复:
这就是 我这段时间inline hook 失败的原因。。

浩方啊, 浩方, 让我内牛满面啊。。。。。。。。。。。
当我的inline hook 上去后 直接 返回 int 3 了, 能不崩溃吗。。。。

你的图的意思是 jmp FNWar3,100044D3是浩方的hook?如果是这样,你在备份浩方的指令时要调整e9后的位移……
[/Quote]

有点不太明白你的意思。。。你指的是 hook 5到10 的字节吗?
我觉得 在浩方上 send函数的作用只是 给 浩方自己的函数传递参数而已。。。 而 hook 浩方自己的函数我无从下手。。 所以就考虑 hook 上一级函数。。
Lactoferrin 2011-04-30
  • 打赏
  • 举报
回复
你先说为什么直接hook前5字节不行,我觉得问题出在备份的指令
Lactoferrin 2011-04-30
  • 打赏
  • 举报
回复
仅靠自己把所有的hook方式实现一遍,就熟了
xmu_才盛 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 63 楼 lactoferrin 的回复:]
引用 61 楼 newstudent_never 的回复:

引用 59 楼 lactoferrin 的回复:
浩方后改的?


对, 所以很奇怪啊。。 貌似只是在 进入别人房间的时候 才会这样。。

换个方式钩
[/Quote]

呵呵, IAT 不会啊, 正在看 PE文件结构。。。。

我觉得我应该下载一个钩子库试一下, 不过我还是觉得一开始底层一点 好处多多。。

你经验很丰富啊。。 经常做这个吗?
Lactoferrin 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 61 楼 newstudent_never 的回复:]

引用 59 楼 lactoferrin 的回复:
浩方后改的?


对, 所以很奇怪啊。。 貌似只是在 进入别人房间的时候 才会这样。。
[/Quote]
换个方式钩
xmu_才盛 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 59 楼 lactoferrin 的回复:]
浩方后改的?
[/Quote]

对, 所以很奇怪啊。。 貌似只是在 进入别人房间的时候 才会这样。。
csx007700 2011-04-30
  • 打赏
  • 举报
回复
你先试试什么都不动看看浩方怎么hook的,然后才能找对策啊
Lactoferrin 2011-04-30
  • 打赏
  • 举报
回复
浩方后改的?
xmu_才盛 2011-04-30
  • 打赏
  • 举报
回复
[Quote=引用 57 楼 lactoferrin 的回复:]
你先说为什么直接hook前5字节不行,我觉得问题出在备份的指令
[/Quote]

整理了一下思路, 发现是这样的流程:
1. 浩方启动war3 (send值正常)
2. 我注入的dll更改 send 到达 Mysend( jmp到我的mysend)
3. 进入房间, 调用send
4. 浩方改掉 send , 改成它的 内容
5. 跳转到int 3, 退出。。
xmu_才盛 2011-04-29
  • 打赏
  • 举报
回复
这下我是真的不知道该怎么做了。。。
hook 后面5个字节固然是可以的, 但是这样做未必会达到我的目的, 因为 浩方已经在 前5个字节把数据包发出去了,, 我后面再更改也没用了。。。。
Lactoferrin 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 newstudent_never 的回复:]
这就是 我这段时间inline hook 失败的原因。。

浩方啊, 浩方, 让我内牛满面啊。。。。。。。。。。。
当我的inline hook 上去后 直接 返回 int 3 了, 能不崩溃吗。。。。
[/Quote]
你的图的意思是 jmp FNWar3,100044D3是浩方的hook?如果是这样,你在备份浩方的指令时要调整e9后的位移。或者不使用inline hook,使用搜索并更改地址的hook方式。
Lactoferrin 2011-04-29
  • 打赏
  • 举报
回复
你这样就没通用性
xmu_才盛 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 53 楼 xiaopoy 的回复:]
哈哈。你可以HOOK的浩方的hook router啊 /;^]

把 0xe9后面jmp过去的地址计算出来,然后过去修改浩方hook router的前5个字节。
[/Quote]

你说的不失为一种方法, 但是我想尝试 hook send的 父调用试试, 看看父调用中有没有发送的包数据。。
xiaopoy 2011-04-29
  • 打赏
  • 举报
回复
哈哈。你可以HOOK的浩方的hook router啊 /;^]

把 0xe9后面jmp过去的地址计算出来,然后过去修改浩方hook router的前5个字节。
Lactoferrin 2011-04-28
  • 打赏
  • 举报
回复
你试一下用scas指令搜索包含send地址的内存,然后改掉
xmu_才盛 2011-04-28
  • 打赏
  • 举报
回复
顺便加几个好友了, 好多老手在这里啊。。。。
xmu_才盛 2011-04-28
  • 打赏
  • 举报
回复
这就是 我这段时间inline hook 失败的原因。。

浩方啊, 浩方, 让我内牛满面啊。。。。。。。。。。。
当我的inline hook 上去后 直接 返回 int 3 了, 能不崩溃吗。。。。
Lactoferrin 2011-04-28
  • 打赏
  • 举报
回复
你用调试器看一下运行后的send函数的代码是什么
xmu_才盛 2011-04-28
  • 打赏
  • 举报
回复
嗯, 谢谢 解答,,,

刚看场电影, 这两天睡眠不足, 准备调试一次就睡了。。。 我也是今天才知道, 原来已经启动的进程能够用od调试。。。 所以尝试一下,, 也觉得是浩方inline hook了。。。。。


话说你们谁去 上海高速rpg砖房 建立一个 挂机地图去。。。。?
加载更多回复(44)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧