首页
社区
课程
招聘
[原创]修复spy4win无法取ListView内容的BUG(新修复更新)
发表于: 2016-5-29 18:28 7553

[原创]修复spy4win无法取ListView内容的BUG(新修复更新)

2016-5-29 18:28
7553

由于老帖已被关闭,现在只好开新帖发布。
前几个月发现上个修复版本的spy4win在32位系统下对ListView取内容时会取不到,甚至导致宿主进程崩溃,20140514之前的修复版本不会出现这个问题,原因是之前的ProcessIs64Process函数逻辑有问题,没有兼顾到32位系统,现在修复下。
之前的ProcessIs64Process
BOOL ProcessIs64Process(HANDLE hProcess)
{
  BOOL bRet=FALSE;
  if (hProcess)
  {
    static BOOL (WINAPI* _IsWow64Process)(__in  HANDLE hProcess,__out  PBOOL Wow64Process)=
      (BOOL (__stdcall *)(HANDLE,PBOOL))GetProcAddress(GetModuleHandle(_T("kernel32.dll")),"IsWow64Process");
    BOOL bIsWow64;
    if (_IsWow64Process && _IsWow64Process(hProcess,&bIsWow64) && bIsWow64==FALSE)//64位进程
    {
      bRet=TRUE;
    }
  }
  return bRet;
}
现在用Is64BitProcess
BOOL Is64BitOS()
{
        BOOL bRet = FALSE;
        VOID (WINAPI* _GetNativeSystemInfo)(OUT LPSYSTEM_INFO lpSystemInfo)= (void (__stdcall *)(LPSYSTEM_INFO))GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "GetNativeSystemInfo");
        if (!_GetNativeSystemInfo)
        {
                return bRet;
        }

        SYSTEM_INFO si;
        _GetNativeSystemInfo(&si);
        if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
        {
                bRet = TRUE;
        }
        return bRet;
};
BOOL Is64BitProcess(HANDLE hProcess)
{
        BOOL bRet = FALSE;
        if (hProcess)
        {
                if (Is64BitOS())
                {
                        static BOOL (WINAPI * _IsWow64Process)(IN  HANDLE hProcess,
                                OUT  PBOOL Wow64Process) = (BOOL(__stdcall *)(HANDLE, PBOOL))GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "IsWow64Process");
                        BOOL bX86ProcessRunAt64BitOS;
                        if (_IsWow64Process && _IsWow64Process(hProcess, &bX86ProcessRunAt64BitOS) && bX86ProcessRunAt64BitOS == FALSE)
                        {
                                bRet = TRUE;
                        }
                }
        }
        return bRet;
}
完整程序在附件中。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 3
支持
分享
最新回复 (6)
雪    币: 457
活跃值: (338)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主的分享。
2016-5-29 19:23
0
雪    币: 3538
活跃值: (173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hjw
3
我这里有个程序用此工具查得窗口类名是SysListView32,可以取到表头列名,但是list列表中的内容取不到。不知道是和原因。
2016-8-22 12:30
0
雪    币: 768
活跃值: (530)
能力值: ( LV13,RANK:460 )
在线值:
发帖
回帖
粉丝
4
妖哥不知道跑哪去了,这么好的工具,竟然没不维护了。
2016-8-22 12:49
0
雪    币: 4522
活跃值: (5154)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
可能程序针对这个特殊处理了吧,一般常规程序还是可以获取到的
2016-9-2 15:27
0
雪    币: 3538
活跃值: (173)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hjw
6
请问程序针对列表特殊处理了,还有其他什么方法可以获取列表类容吗?
2016-9-4 18:35
0
雪    币: 4522
活跃值: (5154)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
注入你的DLL到目标进程试试 然后根据列表窗口句柄,调用CListCtrl(Attach等)的相关方法试试 如果这样还是不行,看下他的窗口回调函数 看他怎么屏蔽的 有些是自绘的 所以看不到文本 这个正常 要获取只有看他的绘制代码了
2016-9-4 21:27
0
游客
登录 | 注册 方可回帖
返回
//