首页
社区
课程
招聘
[原创]跨进程GetWindowLong拿WndProc
发表于: 2013-1-17 23:17 16675

[原创]跨进程GetWindowLong拿WndProc

2013-1-17 23:17
16675
.386
.model flat, stdcall
option casemap :none

include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include gdi32.inc

includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
.data
t db "{[Title:%s]",13,10,"[Hwnd:%d]	[UniCode:%d]	[WndProc:%08X]}",13,10,13,10,0
.data?
	buffer	db MAX_PATH dup(?)
	
.CODE
wndenumproc proc hwnd,lParam
local buff[512],outbuff[512],isA
local ProcessId,myProcessId,WndProc
assume fs:nothing
invoke GetWindowText,hwnd,addr buff,512
.if BYTE  ptr buff[0]
	invoke GetParent,hwnd
	.if !eax
		invoke IsWindowUnicode,hwnd
		mov	isA,eax
		invoke GetWindowThreadProcessId,hwnd,addr ProcessId
		mov     eax, DWORD  ptr fs:[18H]
		mov	ecx,[eax+20H]
		mov	myProcessId,ecx
		mov	ecx,ProcessId
		mov	[eax+20H],ecx
		.if !isA
		invoke GetWindowLongA,hwnd,GWL_WNDPROC
		.else
		invoke GetWindowLongW,hwnd,GWL_WNDPROC
		.endif
		mov	WndProc,eax
		push	myProcessId
		mov     ecx, DWORD  ptr fs:[18H]
		pop	[ecx+20H]	
		invoke wsprintf,addr outbuff,offset t,addr buff,hwnd,isA,WndProc
		invoke StdOut,addr outbuff
	.endif
.endif
xor	eax,eax
inc	eax ;To continue enumeration, the callback function must return TRUE; to stop enumeration, it must return FALSE.
ret
wndenumproc endp
START:
	
	invoke EnumWindows ,offset wndenumproc,0
	invoke StdIn,addr buffer,sizeof buffer
	;暂停显示,回车键关闭
	invoke ExitProcess,0
	
end START

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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 158
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错,沙发~~~~~~~~··
2013-1-17 23:31
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
3
mark  mrak
2013-1-18 07:07
0
雪    币: 1275
活跃值: (5139)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
谢谢.......
2013-1-18 07:24
0
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
支持一下~,就是不知道能用来干什么~
2013-1-18 16:45
0
雪    币: 217
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
是否也能实现跨进程SetWindowLong
2013-1-18 23:53
0
雪    币: 778
活跃值: (208)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
7
基本不可能,SetWindowLong调用了NtUserSetWindowLong。虽然有个WND结构在Ring3可以访问,但不能改写,我怀疑这个WND结构是从内核映射而来。所以进不来内核就修改不了WND结构。至于为什么WND结构会在Ring3映射一份,我估计是因为提高访问速度的原因
2013-1-19 09:41
0
雪    币: 652
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
win32汇编写的,支持一下
2013-1-19 11:07
0
雪    币: 1737
活跃值: (110)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
多谢分享哈。。。
2013-1-22 13:54
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
GetWindowLongA还真没用过,貌似SetWindowLongA 也很强大
2013-1-24 00:15
0
雪    币: 261
活跃值: (547)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
可以的,注册热键就是用的SetWindowLong。。。。。这个很久前在易语言里研究超级模块的源码学的。。。
还有CallWindowProc。。。。。。
2013-1-24 00:16
0
雪    币: 234
活跃值: (1659)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
12
支持一下,汇编功底比较强
2013-1-29 10:36
0
雪    币: 53
活跃值: (528)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Lz,貌似 用 GetClassLong 就能跨进程。
2013-2-4 10:25
0
雪    币: 656
活跃值: (448)
能力值: ( LV12,RANK:360 )
在线值:
发帖
回帖
粉丝
14
早知道就不用这么麻烦了,不过还是要谢谢你!
2013-2-4 18:10
0
雪    币: 43
活跃值: (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15

getclasslong似乎只是类级别的, 不是窗口级别的

可能是自定义的类名, 就获取不到了


最后于 2022-3-23 21:11 被ladkjflk编辑 ,原因:
2022-3-23 01:00
0
游客
登录 | 注册 方可回帖
返回
//