Life & Code

代码是咒语,我是魔法师

搜索内存取得QQ号码

这样的帖子,不知道可不可以放到首页..如果不行,麻烦管理员清理. 谢谢.

HANDLE GetQQProcess();
bool  SeachQQNumber(HANDLE _hProcess, string   & strQQ);
int  _tmain( int  argc, _TCHAR *  argv[])
{
    HANDLE hProces 
=  GetQQProcess() ;
    
if (hProces ==  NULL)
        cout 
<< " No run QQ! " << endl;

    
string  strQQ;
    SeachQQNumber(hProces,strQQ);
    cout 
<< strQQ << endl;
    system(
" pause " );
    
return   0 ;
}


bool  SeachQQNumber(HANDLE _hProcess,  string   & strQQ)
{
    SuspendThread(_hProcess);
    
    DWORD dwBaseAddress; 
    MEMORY_BASIC_INFORMATION mbi;
    
char   process_mem[ 4096 =   { 0 } ;
    DWORD number_of_bytes_read 
=   0 ;
    SYSTEM_INFO si; 
    GetSystemInfo(
& si);
    dwBaseAddress 
=  (DWORD)si.lpMinimumApplicationAddress; 
    
while (dwBaseAddress  <  (DWORD)si.lpMaximumApplicationAddress) 
    

        mbi.BaseAddress 
=  (LPVOID)dwBaseAddress; 
        VirtualQueryEx(_hProcess, (LPVOID)dwBaseAddress, 
& mbi,  sizeof (mbi));
        dwBaseAddress 
=  (DWORD)mbi.BaseAddress  +  mbi.RegionSize; 
        
if (mbi.State  !=  MEM_COMMIT  ||  mbi.AllocationProtect  !=  PAGE_READWRITE)  // 跳过未分配或不可读写的区域 
        
            
continue
        }
 
        
        
// 搜索
         for (DWORD i  =  (DWORD)mbi.BaseAddress; i  <  dwBaseAddress; i += 4096 )
        
{
            
if ( ! ReadProcessMemory(_hProcess,LPCVOID(i),process_mem, 4096 , & number_of_bytes_read))
                
break ;            
            
for ( int  j = 0 ;j < 4096   -   9 ;j ++ )
            
{
                
if ( ! memcmp( & process_mem[j], " \\MsgEx.db " , 9 ) )
                
{
                    
// printf("begin\n");
                     for ( int  k = j - 1 ; k  >  j - 12 ; k -- )
                    
{
                        
if (process_mem[k]  >=   ' 0 '   &&  process_mem[k]  <=   ' 9 ' )
                        
{
                            strQQ 
=   process_mem[k]  +  strQQ;
                        }

                        
else
                            
break ;
                    }

                    
if (strQQ.length())
                    
{
                        ResumeThread(_hProcess);
                        
return   true ;
                    }
            
                }

            }

        }

    }

    ResumeThread(_hProcess);
    
return   false ;
}



HANDLE GetQQProcess()
{
    PROCESSENTRY32 pe;
    pe.dwSize 
=   sizeof (PROCESSENTRY32);
    HANDLE hSnapshot 
=  CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,  0 );
    Process32First(hSnapshot, 
& pe);
    
do {
        
if ( ! _tcsicmp(pe.szExeFile,_T( " qq.exe " )))
        
{
            CloseHandle(hSnapshot);
            
return  OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
        }

        pe.dwSize 
=   sizeof (PROCESSENTRY32);
    }
while (Process32Next(hSnapshot,  & pe));
    CloseHandle(hSnapshot);
    
return  NULL;
}

posted on 2006-12-13 00:36 橙子 阅读(1799) 评论(6)  编辑 收藏 引用 所属分类: Win32

评论

# re: 搜索内存取得QQ号码 2006-12-13 18:54 Alpha_

粗看了一下,内容不论,主程序似乎有点疑问。
{
HANDLE hProces = GetQQProcess() ;
if (hProces == NULL)
cout << " No run QQ! " << endl;
// 在hProces == NULL的情况下没有return,那么SeachQQNumber必将得到一个空的参数,似乎不妥。
string strQQ;
SeachQQNumber(hProces,strQQ);
cout << strQQ << endl;
system( " pause " );
return 0 ;
}   回复  更多评论   

# re: 搜索内存取得QQ号码 2006-12-15 11:26 橙子

呵呵. 的确哦. 谢谢.  回复  更多评论   

# re: 搜索内存取得QQ号码 2006-12-19 21:15 学习c++

建议加上头文件  回复  更多评论   

# re: 搜索内存取得QQ号码 2006-12-19 21:16 学习c++

建议加上头文件

  回复  更多评论   

# re: 搜索内存取得QQ号码 2006-12-19 21:30 学习c++

strQQ = process_mem[k] + strQQ;

这句话有问题,无法通过  回复  更多评论   

# re: 搜索内存取得QQ号码 2007-10-30 14:10 Rollrock

大问题是没有底 小问题就有了那么一点点点了 呵呵 我还得谢谢这位大哥呢 经过我改动之后,我已经能成功的读取了   回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(10)

随笔分类

随笔档案

相册

收藏夹

搜索

最新评论

阅读排行榜