首页
论坛
课程
招聘
[原创]简单的双核下inline hook.r3
2008-9-17 11:23 5824

[原创]简单的双核下inline hook.r3

2008-9-17 11:23
5824
有些程序(比如QQMusic)很郁闷 老是抢我的80端口(有时候需要架个简单的web服务器,发现80端口老被某些程序占用了,于是得先退出那个抢我端口的程序 然后再....很麻烦), 于是写了小Dll 在Dllentry hook bind. 判断sockaddr_in里面的 port是不是80 是80就返回-1

Hook,
先写五个nop jmp bind1
后剩下一个jmp short 只要2byte,可以用cmpxchg原子操作了~
用原子操作cmpxchg ...

nop*5
bind:
mov edi,edi
..........


	
	format PE Dll \
	on '%others%\stub.txt'
	include '%include%\win32ax.inc' 
	
	WSAEADDRINUSE equ 0x00002740

entry $
	push edi
	mov edi,[bind]
	sub edi,5
	i VirtualProtect,edi,7,PAGE_EXECUTE_READWRITE,esp,eax
	pop eax
	mov byte[edi],0xE9
	mov eax,bind1
	sub eax,edi
	sub eax,5
	mov dword[edi+1],eax

	mov cx,0xF9EB
@@:	cmpxchg word[edi+5],cx
	jnz @B
	
	xor eax,eax
	inc eax
	pop edi
	retn 4*3
	
bind1:
	mov eax,[esp+8]
	mov cx,80
	xchg cl,ch
	cmp word[eax+2],cx
	je @F
	mov eax,[bind]
	inc eax
	inc eax
	jmp eax	
@@:
	i WSASetLastError,WSAEADDRINUSE
	or eax,-1
	retn 4*3

data export
	export 'Export',\
	bind1,'None'
end data


.fixups

2021 KCTF 秋季赛 防守篇-征题倒计时(11月14日截止)!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 212
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
vrowang123 活跃值 1 2008-9-17 12:47
2
0
谢谢分享。
请问这个根双核下有什么关系?
雪    币: 221
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
洋洋洒洒 活跃值 2008-9-17 12:51
3
0
在这里~~~~
先写五个nop jmp bind1
然后剩下一个jmp short 只要2byte,可以用cmpxchg原子操作了~
用原子操作cmpxchg
雪    币: 272
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
AASSMM 活跃值 2008-10-6 17:06
4
0
用得着吗?
有现成的函数 writeProcessMemory 一次性搞定
雪    币: 111
活跃值: 活跃值 (59)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
wr960204 活跃值 2008-10-8 12:08
5
0
writeProcessMemory方式Hook在多核电脑上不安全,如果当时指令被装入到处理器的指令缓存中,Hook之后会有些处理器的指令缓存没有更新,造成Hook不完全成功.
所以writeProcessMemory之后要FlushInstructionCache同步处理器的指令缓存
游客
登录 | 注册 方可回帖
返回