吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11379|回复: 50
收起左侧

[其他转载] C#判断登录的QQ是否已经加入指定的QQ群

  [复制链接]
firefree 发表于 2018-10-26 11:56
本帖最后由 firefree 于 2018-10-26 13:22 编辑

一,背景      


      朋友给了一个小的的Windows应用程序,打开这个应用程序会让登录QQ,然后会判断登录的QQ是不是已经加入了指定的QQ群。如果已经加入,则可以继续使用软件,否则就退出这个程序,大致就是这样,朋友希望知晓这种判断QQ是否加入指定QQ群的方法如下图。

Second1.gif


二,分析


   这里使用fiddler 4进行抓包看一下,通过抓包结果来看,这个程序首先访问了http://qun.qzone.qq.com/,然后进行了授权登录,登成功之后就会回调到HTTP:/ /qun.qzone.qq.com/上,然后所有群号一览无余,就可以判断指定的群号了,基本上就是上图看到的界面了.fiddler抓包图如下:

20181021101708.png




三,实现

   这里使用微软.NET的Windows窗体实现,使用web浏览器控件加载http://qun.qzone.qq.com/,登录成功只有使用正则匹配指定的群号来完成操作代码大致如下:


[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=549000912&daid=5&style=40&s_url=http://qun.qzone.qq.com/group");
            webBrowser1.ProgressChanged += WebBrowser1_ProgressChanged;
            webBrowser1.Navigated += WebBrowser1_Navigated;
        }

        private void WebBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            if (webBrowser1.Url.ToString().StartsWith("http://qun.qzone.qq.com"))
            {
                this.Hide();
            }
        }

        private void WebBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
        {
            
            if (webBrowser1.Url.ToString().StartsWith("http://qun.qzone.qq.com"))
            {
                HtmlElement groupList = webBrowser1.Document.GetElementById("my_group_list_container");
                if (groupList == null)
                {
                    return;
                }
                webBrowser1.ProgressChanged -= WebBrowser1_ProgressChanged;
                string groupListText = webBrowser1.DocumentText;
                string groupid = "这里是QQ群的ID";
                if (Regex.IsMatch(groupListText, $"data-groupid=\"{groupid}\""))
                {
                    MessageBox.Show("验证成功");
                    CloseChrome();
                    Application.Exit();
                    
                }
                else
                {
                    MessageBox.Show("请加指定交流群入本群");
                    CloseChrome();
                    Application.Exit();
                }
            }
        }
        public void CloseChrome()
        {
            if (webBrowser1 != null)
            {
                webBrowser1.Dispose();
            }
        }

    }
}


四,预览

first.gif


Second.gif


五,总结

    这个程序就登录的技术来看,没有任何难度可言,其实就是通过浏览器相关控件加载QQ官方服务,然后通过控件进行采集数据。我个人还是不建议使用这类程序,因为登录成功后其可以默默无闻的获取你所有的群号,群发的动态,以及群共享的资源等等如果改变一下访问地址,如QQ空间,就直接登录成功,那么就可以采集到你空间所有的信息,例如:照片,日志,说说等等。所以,为了个人信息还是不要不加思索的使用类似程序。


六,试例下载

MD5效验:1f2e6780a4fb56600564c5b131f89ff8
SHA1效验: 54ca209d08c1ae2a1ab0083a4dcd0c41453420dd
WindowsFormsApp1.zip (432 KB, 下载次数: 228)

七、特别说明
试例项目使用的IDE是:Visual Studio 2017,特别低的版本可能无法通过解决方案解决。其中VS2012、VS2013、VS2015、VS2017可以打开。如果通过解决方案打不开,请自己新建项目,因为核心代码已经在上面贴出来了!谢谢!




免费评分

参与人数 13吾爱币 +16 热心值 +11 收起 理由
fengzdchen + 1 谢谢@Thanks!
jl059190 + 1 + 1 用心讨论,共获提升!
yingzi + 1 我很赞同!
巧克力苏菜 + 1 用心讨论,共获提升!
涛的世界 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wushaominkk + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
windtrace + 2 我很赞同!
wxx17395 + 1 + 1 用心讨论,共获提升!
我想要说 + 1 + 1 用心讨论,共获提升!
天若幽心 + 3 + 1 我很赞同!
blindcat + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
coolcalf + 1 + 1 支持原创~,特别的.net相关
麦秸 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Jper 发表于 2018-10-27 15:58
firefree 发表于 2018-10-27 15:21
我打开你给的项目并没有报错。
你看下是webBrowser1为null  还是webBrowser1.Url为null

可以了老哥,我在WebBrowser1_ProgressChanged里面直接套了一个if把代码包起来了 if (webBrowser1.Url != null){...} 这样就可以了,再次感谢老哥分享
 楼主| firefree 发表于 2018-10-27 15:21
Jper 发表于 2018-10-27 14:48
老哥我是if语句报错,还没走到下面呢
if (webBrowser1.Url.ToString().StartsWith("http://qun.qzone.q ...

我打开你给的项目并没有报错。
你看下是webBrowser1为null  还是webBrowser1.Url为null
cf56262330 发表于 2018-10-26 12:13
Cailgun 发表于 2018-10-26 12:20
感谢楼主分享技术
不知道改成啥 发表于 2018-10-26 12:29
封装成类,然后模拟点击才符合使用场景。
雨夜 发表于 2018-10-26 12:32
的确有隐私泄露风险
zhengxing 发表于 2018-10-26 12:37
感谢楼主分享,如果楼主把这些小功能都组合到一个库里面,那样会变得很实用。再次感谢!
coolcalf 发表于 2018-10-26 12:40
程序虽小,但初一看需求,我脑袋还真没转过这湾
支持原创,不错~~
 楼主| firefree 发表于 2018-10-26 12:44
tanzhiwei 发表于 2018-10-26 12:29
封装成类,然后模拟点击才符合使用场景。

这的确可以做,但是感觉没有必要。原理大家知道了,就可以自己实现。
 楼主| firefree 发表于 2018-10-26 12:44
雨夜 发表于 2018-10-26 12:32
的确有隐私泄露风险

是的,这个的确存在隐私泄漏风险。
 楼主| firefree 发表于 2018-10-26 12:46
cf56262330 发表于 2018-10-26 12:13
不要不加思索的使用类似程序

因为的确存在隐私泄漏的风险,所以使用非可控的类似这样程序是有风险的。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 04:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表