首页
社区
课程
招聘
[讨论]看一个高手的代码,不知其意图:得到一个socket句柄后复制并关掉源句柄。
发表于: 2012-3-16 13:04 7652

[讨论]看一个高手的代码,不知其意图:得到一个socket句柄后复制并关掉源句柄。

2012-3-16 13:04
7652
源代码 大致是这样:

int s = socket(tcp,stream);
duplicatehandle(getcurrentprocess,s,getcurrentprocess,&s,0,0,sameaccess|closesource);

这样有什么作用呢?

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你直接说,你为什么对这个好奇
2012-3-16 13:27
0
雪    币: 107
活跃值: (399)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
难道懒得去找保存socket的位置了???

直接拿来,打开一下,,复制句柄以后立即关闭...等目标程序自己再次打开socketID的时候...

分配到的应该就是被复制过的句柄...

猜测而已..没这么干过...如果真是如上所说..不确定性因素比较多...估计要在一个很干净的操作系统里才会不被乱七八糟的东西打搅吧?
2012-3-16 14:26
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
4
可能是用来防御Hook的吧,如果恶意程序拦截到了原始创建的socket,便可以利用此socket作恶了。
这里打开,复制一份句柄,然后直接把原来的关掉,恶意拦截程序拿到的socket就无效,也就不能再作恶了。

猜测而已。
2012-3-16 16:48
0
雪    币: 1233
活跃值: (907)
能力值: ( LV12,RANK:750 )
在线值:
发帖
回帖
粉丝
5
我估计是高手喝高了,从网上复制代码没注意看造成的,我经常这样干,搞得大家都以为我是高手,其实我自己经常也看不懂自己写的代码:)
2012-3-16 18:24
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
作者的意图我明白。试想如果有一款软件他想获取肉鸡或者软件使用者机器的一些秘密信息,如果创建socket发送势被防火墙提醒,复制一个常用的socket句柄就可以光明正大的发送信息了。比如这些软件常用DNS进程创建的socket发送。
2012-3-16 20:31
0
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
7
楼上正解!!!!!!!
2012-3-16 20:58
0
雪    币: 9
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不是哦,他也会自己利用这个套接字去connect或者listen的,并非复制已可用的别的进程的句柄。
2012-3-17 08:21
0
雪    币: 9
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
就是学习啊,看着不明白的,就请教下大家。
2012-3-17 08:21
0
雪    币: 9
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
而且微软不是说复制socket不应该用duplicatehandle吗,要用wsaduplicatehandle····
2012-3-17 08:23
0
雪    币: 242
活跃值: (443)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
11
在win7里,
wsaduplicatehandleA->
wsaduplicatehandleW->
eax==WahReferenceContextByHandle((*(DWORD*)0x75687078), s);
call [[eax+ 0xc]+ 0x28]   ;//send这儿是call [[eax+ 0xc]+ 0x64]
都是调用的mswsock中的函数,
wsaduplicatehandleA最后也实际调用了OpenProcess、DuplicateHandle、CloseHandle这些来复制句柄,最后还修改了本进程mswsock里的计数(socket数量?)

所以duplicatehandle本进程的socket我想是没问题的,至于为什么这样写估计是想完成复制socket的功能, 最后没完成遗留下来的吧
2012-3-17 14:43
0
游客
登录 | 注册 方可回帖
返回
//