首页
社区
课程
招聘
[旧帖] 如何读取其他进程中listctrl的内容 0.00雪花
发表于: 2014-1-7 14:24 6219

[旧帖] 如何读取其他进程中listctrl的内容 0.00雪花

2014-1-7 14:24
6219
我想读取另一个应用程序中listctrl的 内容。用spy++查看,它的class不是SysListView32,而是listctrl。我可以得到这个listctrl的hwnd,但是调用SendMessage(hwnd, LVM_GETITEMCOUNT,0,0), 返回的是0.

感觉这个listctrl过滤了一些消息,不知道如何才能读到里面的内容啊。

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

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 3545
活跃值: (1872)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
2
你的目的不止行数吧,参考https://github.com/lynnux/QuickRoom,很早以前挤vs房间的工具,它就是跨进程读取vs的房间list的。

在https://github.com/lynnux/QuickRoom/blob/master/QuickRoom/maindlg.CPP 212行:
#define ListView_GetItemTextEx(hwndLV, i, iSubItem_, pszText_, cchTextMax_) \
    {\
    _ms_lvi.iSubItem = iSubItem_;\
    _ms_lvi.cchTextMax = cchTextMax_;\
    _ms_lvi.pszText = pszText_;\
    WriteProcessMemory(hWar3, (LPVOID)((BYTE*)lpGet + sizeof(TCHAR)*MAX_PATH), &_ms_lvi, sizeof(LV_ITEM), NULL);\
    SNDMSG((hwndLV), LVM_GETITEMTEXT, (WPARAM)(i), (LPARAM)(LV_ITEM *)((BYTE*)lpGet+sizeof(TCHAR)*MAX_PATH));\
    ReadProcessMemory(hWar3, lpGet, lpStr, sizeof(lpStr), NULL);\
    }
2014-1-7 14:47
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
要在对面申请内存空间 然后SendMessage得到信息
2014-1-7 17:36
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢。我看了一下源代码,这里listctrl也是SysListView32类型的。不是listctrl类型的。
2014-1-8 10:26
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
可以说具体点吗?是不是要用DLL注入的方法?
2014-1-8 10:30
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
把东西发上来。
2014-1-8 11:15
0
雪    币: 164
活跃值: (53)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
http://bbs.pediy.com/showthread.php?t=33192
2014-1-10 10:06
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我试过这个方法了,不管用。 我用spy++看过了,它的classname不是SysListView32,而是listctrl
2014-1-11 20:41
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这是那个软件。
上传的附件:
2014-1-11 20:45
0
雪    币: 70
活跃值: (88)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
我应该看明白你在讲什么了。你看到一个窗口的子窗口长得酷似SysListView32,其实他也不一定是SysListView32,应为像这类控件我们完全可以自己写个出来,也可以超类化一个出来。
如果我有个消息处理的Message值和LVM_GETITEMCOUNT相等,或者根本就没有LVM_GETITEMCOUNT的消息处理,那就得不到想要的结果,若是超类化的话,可能也会得不到结果(如果屏蔽LVM_GETITEMCOUNT消息的话)。
想你这个情况,应该用spy++查出类的名称,在将程序拖到IDA中,搜索类名的字符串,找到过程地址,如果字符串出现在很多次,因为有的会出现在类注册中等,这是要找窗口特征的处理过程,分析内部结构,当然这可能大题小做了。还有个技巧,在spy++的窗口属性的,有个窗口地址的Edit控件,可能会有窗口地址的值,用windbg来attach,在窗口地址设断,再让他跑,断下来后,在分析,这样要快点。
还有你要自己写个小工具,可以向任何窗口发消息和收消息的工具,这个小工具编写相当简单,不用我说的吧。

对了,你还说不是SysListView32,而且用LVM_GETITEMCOUNT得不到结果,看来,,,我想只有我的这个方法有效了。
2014-1-11 22:29
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
你理解我的意思了。我试试你说的方法看看。
2014-1-12 13:20
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
还是搞不定啊。有人帮忙吗?有酬谢。
2014-1-17 21:48
0
雪    币: 2359
活跃值: (288)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
有高手帮忙吗?
2014-2-14 09:01
0
游客
登录 | 注册 方可回帖
返回
//