吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 20989|回复: 34
收起左侧

[其他转载] 我也发个QQ群验证的源码,需要的进来看看,易语言同步发布

[复制链接]
murder2008 发表于 2016-12-30 17:01
本帖最后由 murder2008 于 2017-1-23 16:04 编辑

之前有大神发过,不过貌似不怎么好用了,研究了一下,决定自己实现一个好多人回贴说 不知道这个是干什么用的,好吧,我神志不清,表达不明白,描述一下,
简单的说就是实现一个网络验证,将这个功能植入自己要发行的应用中,如果使用者已加入指定的QQ群,则通过验证,否则禁止继续使用
动画中开始输入了一个群号,是不存在或未加入的群,登录后提示“验证失败”,修改群号后,可以通过验证,大家可以将验证群号写进代码,
我这里为了体现效果,用了一个文本框。

不知道是否表达清楚,如果还不明白,那就请了解的朋友回贴帮助说明,谢谢


DELPHI编写
链接: https://pan.baidu.com/s/1nvyNppR 密码: ep9j


易语言版同步发布:http://www.52pojie.cn/thread-572046-1-1.html
另寻一个好用的流媒体播放组件,有的朋友麻为面提供一下

GIF.gif

[Delphi] 纯文本查看 复制代码
unit Unit_Login;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw, Vcl.StdCtrls,
  Vcl.ExtCtrls,MSHTML,StrUtils,ActiveX;
type
   TValidEvent = procedure(bAuth: Boolean) of object;     //校验结束结果通知事件
type
  TFrmAuthLogin = class(TForm)
    browserWeb: TWebBrowser;
    Panel1: TPanel;
    Label1: TLabel;
    edtQunID: TEdit;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure browserWebNavigateComplete2(ASender: TObject;
      const pDisp: IDispatch; const URL: OleVariant);
    procedure browserWebDocumentComplete(ASender: TObject;
      const pDisp: IDispatch; const URL: OleVariant);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
    m_bFirstShow:Boolean;
    m_eValidEvent:TValidEvent;
  private
    procedure initWidget();
    procedure hideWebBrowser(bHide:Boolean);
    function extractUrlDomain(const Url: string): string;  //解析URL中的域名信息
    procedure processNotifyValid(bAuth:Boolean);

  public
    { Public declarations }
  end;

var
  FrmAuthLogin: TFrmAuthLogin;
const
  AUTH_LOGIN_URL = 'http://ui.ptlogin2.qq.com/cgi-bin/login?appid=67663233&s_url=http://qun.qzone.qq.com/group&style=12.com';
  AUTH_URL_VALID = 'http://qun.qzone.qq.com/group';
implementation

{$R *.dfm}

procedure TFrmAuthLogin.browserWebDocumentComplete(ASender: TObject;
  const pDisp: IDispatch; const URL: OleVariant);
var
   pStreamInit: IPersistStreamInit;
   iWebStream: IStream;
   sWebStream: TStringStream;
   sHtml:String;
   sQunID:String;
begin
  {根据当前URL值执行不同的判断逻辑}

  //登录页面加载结果不处理
  if(extractUrlDomain(String(Url)) = extractUrlDomain(AUTH_LOGIN_URL)) then
  begin
     exit;
  end;

  //QQ登录成功后,加载群信息页面
  if(extractUrlDomain(String(Url)) = extractUrlDomain(AUTH_URL_VALID)) then
  begin
      pStreamInit := browserWeb.document as IPersistStreamInit;
      sWebStream := TStringStream.Create(sHtml);
      iWebStream:= TStreamAdapter.Create(sWebStream, soReference) as IStream;
      pStreamInit.Save(iWebStream, Bool(true));

      sQunID := trim(edtQunID.Text);
      if(sQunID = '') then
      begin
         m_eValidEvent(False);
         exit;
      end;

      sWebStream.SaveToFile('c:\html.txt');
      if(Pos(sQunID, sWebStream.DataString) > 0) then
      begin
           m_eValidEvent(True);
      end else begin
           m_eValidEvent(False);
      end;

      sWebStream.Free;
  end;
end;

procedure TFrmAuthLogin.browserWebNavigateComplete2(ASender: TObject;
  const pDisp: IDispatch; const URL: OleVariant);
begin
  if(URL = AUTH_URL_VALID) then    //URL跳转至群页面时,隐藏控件
  begin
    hideWebBrowser(true);
  end;
end;

procedure TFrmAuthLogin.FormCreate(Sender: TObject);
begin
   initWidget();
end;


procedure TFrmAuthLogin.FormShow(Sender: TObject);
begin
  if(m_bFirstShow) then
  begin
    m_bFirstShow := False;
    browserWeb.Navigate(AUTH_LOGIN_URL);
  end;
end;

procedure TFrmAuthLogin.initWidget();
begin
   m_bFirstShow := True;
   m_eValidEvent := processNotifyValid;
end;

//隐藏或显示浏览器控件
procedure TFrmAuthLogin.hideWebBrowser(bHide:Boolean);
begin
  if(not bHide) then
  begin
      ShowWindow(browserWeb.Handle, SW_SHOW );
  end else begin
      ShowWindow(browserWeb.Handle, SW_HIDE );
  end;
end;

procedure TFrmAuthLogin.processNotifyValid(bAuth:Boolean);
begin
  if(bAuth) then
  begin
     MessageBox(Self.Handle, PChar('群验证成功!'), PChar('身份验证'), mb_OK + mb_IconInformation);
     Self.ModalResult := mrOK;
  end else begin
     MessageBox(Self.Handle, PChar('群验证失败!'), PChar('身份验证'), mb_OK + mb_IconWarning);
     hideWebBrowser(false);
     browserWeb.Navigate(AUTH_LOGIN_URL);
  end;


end;

//解析URL中的域名
function TFrmAuthLogin.extractUrlDomain(const Url: string): string;
var
  strA:String;
  strB:String;
  iTmp:Integer;
  iA:Integer;
begin
  strA:=Trim(Url);
  strB:=LowerCase(strA);
  iA:=Length('http://');
  Delete(strB,1,iA);
  iTmp:=pos('/',strB);
  strB:=LeftStr(strB,iTmp-1);
  Result :=strB;
end;
end.




点评

兄弟有没有VB的,你这2语言,我都不会  发表于 2017-2-13 18:49

免费评分

参与人数 4吾爱币 +6 热心值 +3 收起 理由
/bq + 1 + 1 谢谢@Thanks!
念念不忘F + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
125733578 + 3 + 1 这样的帖子必须加满!
chai775179381 + 1 + 1 我很赞同!

查看全部评分

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

 楼主| murder2008 发表于 2017-1-23 14:33
teletell 发表于 2017-1-22 23:17
楼主可否发个完整demo,delphi的,非常感谢!!

Delphi完整工程代码已发至网盘,用XE 10编写,如有版本问题,可参考代码解决
链接: https://pan.baidu.com/s/1nvyNppR 密码: ep9j
吾爱水货 发表于 2016-12-30 18:09
murder2008 发表于 2016-12-30 17:25
这么说吧,指定一个自己的群号,如果登录的QQ加了自己的群,允许使用软件,否则不能使用,就像网络验证,现 ...

还是不太明白怎么用的  
小小白菜小 发表于 2016-12-30 17:13
魔术师 发表于 2016-12-30 17:15
我是小白,想知道这个东西是加QQ群用的吗
 楼主| murder2008 发表于 2016-12-30 17:19
不是过群验证,可以说群验证的实现原理吧,在自己的应用中加入群验证功能
zhisou2006 发表于 2016-12-30 17:20
似懂非懂的说,这个是验证码技术吗?
 楼主| murder2008 发表于 2016-12-30 17:25
这么说吧,指定一个自己的群号,如果登录的QQ加了自己的群,允许使用软件,否则不能使用,就像网络验证,现在好多人不都用这种方式吗,大家都没遇到过?
sdaza 发表于 2016-12-30 18:01 来自手机
什么鬼...
longlong1 发表于 2016-12-30 18:05
希望开发破解验证
吾爱水货 发表于 2016-12-30 18:12
貌似能自己加群??
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 15:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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