[Программа] Delphi Авторизация без ИЦ - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.Ru LIVE! Реклама на Zhyk.Ru Доска почета top.zhyk.ru (beta) Премиум-аккаунт

Delphi Авторизация без ИЦ

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы Опции просмотра
Старый 10.06.2016, 23:07   #1
 Разведчик
Аватар для Venzel
 
Venzel никому не известный тип
Регистрация: 06.12.2009
Сообщений: 20
Популярность: 10
Сказал(а) спасибо: 5
Поблагодарили 4 раз(а) в 3 сообщениях
 
По умолчанию Delphi Авторизация без ИЦ

Собственно авторизация для немэйл почт. Вроде работает
Код:
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,comobj,activex, ShellAPI;

....

procedure TForm3.Button1Click(Sender: TObject);
var
hwnd:thandle;
o,xmlparser:OleVariant;
s,_user,user,token2:string;
a1,a2:Integer;
begin
CoInitialize(0); ;
o:=CreateOleObject('Microsoft.XMLHTTP');
xmlparser:=CreateOleObject('Msxml2.DOMDocument');
o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=Auth', False);
o.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader ('Content-Length',Length('<?xml version="1.0" encoding="UTF-8"?><Auth ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.Text+'"/>"'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><Auth ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.Text+'"/>');
xmlParser.loadXML(o.responsetext);
_user := copy (o.responsetext, (Length(o.responsetext)-10),8 );
//label2.Caption:=_user;

o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=AutoLogin', False);
o.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader('Content-Length', Length('<?xml version="1.0" encoding="UTF-8"?><AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>');
xmlParser.loadXML(o.responsetext);
token2:=copy(o.responsetext, (Length(o.responsetext)-67),64);
//label1.Caption:=token2;

o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=PersList', False);
o.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader('Content-Length', Length('<?xml version="1.0" encoding="UTF-8"?><PersList ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><PersList ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>');
xmlParser.loadXML(o.responsetext);
user:=copy(o.responsetext, (Length(o.responsetext)-22),9);
//label3.Caption:=user;

s:='startbypatcher user:'+pwidechar(user)+' _user:'+pwidechar(_user)+' token2:'+pwidechar(token2);
ShellExecute(hwnd,'open','elementclient.exe',pwidechar(s),'E:\GamesMailRu\Perfect World\element\',sw_shownormal);
end;
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
diagnost (11.06.2016), j091 (11.06.2016)
Старый 19.09.2016, 17:59   #2
 Разведчик
Аватар для _Wolf_
 
_Wolf_ вызывает надежду
Регистрация: 26.02.2010
Сообщений: 13
Популярность: -48
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Delphi Авторизация без ИЦ

Чутог доработать напильником и будет танк.
Предупреждаю исходник старый выложен только в ознакомительных целях.

Код:
unit uAuth;

interface
uses Windows, System.SysUtils, System.Classes, Vcl.Dialogs,
  Xml.XMLIntf, Xml.XMLDoc, Xml.xmldom,
  REST.Json, Data.DBXJSON,
  HTTPSend, Synacode, ssl_openssl;

const
  UserAgent='Downloader/4410';
  MimeType='application/x-www-form-urlencoded';
  MailRuDomains: array [0..3] of AnsiString = ('@mail.ru','@inbox.ru','@bk.ru','@list.ru');

type
  TLogingMgr = procedure (_Str: string) of object;
  TSelectDialog = procedure (_List: TStringList) of object;

  TAuthClass = class
  protected

  private
    FPassword: string;
    FLogin: string;
    FPersID: string;
    FTocken: string;
    FMpop: string;
    FErrorCode: Integer;

    FOnLogging: TLogingMgr;
    FOnSelectDialog: TSelectDialog;
    FDelay: Integer;
    procedure Parser(_Stream: TStream);
    procedure SetLogin(const Value: string);
    procedure SetPassword(const Value: string);
    // Авторизация под другим почтовым ящиком
    function Auth: Boolean;
    function AuthLogin: Boolean;
    function AuthPersList: Boolean;
    function GetPersList(_Stream: TStream): Boolean;
    // Авторизация на мэйлсру
    function AuthMailRu: Boolean; // Запрашиваем Токен для авторизации
    function AuthMailRuUserInfo: Boolean; // Имитирует получение персональных данных
    function AuthMailRuMrPage2: Boolean;
    function AuthMailRuCoockie: Boolean;
    function AuthMailRuAuth: Boolean;
    function AuthMailRuAuthLogin: Boolean;
    function AuthMailRuPersList: Boolean;

    procedure SetOnLogging(const Value: TLogingMgr);
    function GetOnLogging: TLogingMgr;
    procedure SetOnSelectDialog(const Value: TSelectDialog);
    function GetOnSelectDialog: TSelectDialog;
    function GetPersID: string;
    function GetTocken: string;
    procedure SetDelay(const Value: Integer);
    function GetDelay: Integer;
  public
    constructor Create;
    destructor Destroy; override;

    // Login (EMail) для авторизации
    property Login: string read FLogin write SetLogin;
    property Password: string read FPassword write SetPassword;
    // Возвращает код ошибки (если 200 все ОК)
    function GetErrorCode: Integer;

    property Tocken: string read GetTocken;
    property PersID: string read GetPersID;

    // Логинизация
    property OnLogging: TLogingMgr read GetOnLogging write SetOnLogging;
    // Вызывает диалог выбора Аккаунтов
    property OnSelectDialog: TSelectDialog read GetOnSelectDialog write SetOnSelectDialog;
    // Задержка между запросами
    property Delay: Integer read GetDelay write SetDelay;

    function Connect: Boolean; //deprecated;
    function CheckAuth: Boolean;



    function GetCommandLauncher: string;

    // Относится ли логин к майл.ру
    function IsMailRu(Login: string): Boolean; overload;
    function IsMailRu: Boolean; overload;
  end;

var
  CommandLine: string;

implementation

{ TAuthClass }


function TAuthClass.Auth: Boolean;
var
  HTTP: THTTPSend;
  XML: IXMLDocument;
  Root: IXMLNode;
  Child: IXMLNode;
  Data: TStringStream;
begin
  Result:= False;
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  Xml:= TXMLDocument.Create(nil);
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:=UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?>');
      Data.WriteString('<Auth ProjectId="61" SubProjectId="0" ShardId="0" Username="'+LowerCase(FLogin)+'" Password="'+Password+'"/>');
    HTTP.Document.LoadFromStream(Data);
    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/sz.php?hint=Auth') then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('Auth: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;

      if Assigned(FOnLogging) then
        FOnLogging('Auth: '+HTTP.ResultString);
      Xml.LoadFromStream(HTTP.Document);
      Xml.Active:= True;

      if Xml.IsEmptyDoc then Exit;

      Root:= Xml.DocumentElement;
      FPersID:= Root.Attributes['PersId'];
      Exit;

      if Assigned(FOnLogging) then
        FOnLogging('Auth: PersID= '+FPersID);
      Result:= True;
      Xml.Active:= False;
    end else raise Exception.Create('Произошла не предвиденная ошибка.'+#13#10+'Код ['+Inttostr(HTTP.ResultCode)+']'+HTTP.ResultString);
  finally
    HTTP.Free;
    Data.Free;
    XML:= nil;
  end;
end;

function TAuthClass.AuthLogin: Boolean;
var
  HTTP: THTTPSend;
  XML: IXMLDocument;
  Root: IXMLNode;
  Data: TStringStream;
begin
  Result:= False;
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  Xml:= TXMLDocument.Create(nil);
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:=UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?>');
      Data.WriteString('<AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" Username="'+
                      LowerCase(FLogin)+'" Password="'+Password+'"/>');
    HTTP.Document.LoadFromStream(Data);

    if FErrorCode <> 200 then Exit;


    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/sz.php?hint=AutoLogin') then begin
      if Assigned(FOnLogging) then
        FOnLogging('AuthLogin: '+HTTP.ResultString);

      Xml.LoadFromStream(HTTP.Document);
      Xml.Active:= True;

      if Xml.IsEmptyDoc then Exit;

      Root:= Xml.DocumentElement;
      FTocken:= Root.Attributes['Key'];

      if Assigned(FOnLogging) then
        FOnLogging('AuthLogin: Tocken= '+FTocken);

      Result:= True;
      Xml.Active:= False;
    end else raise Exception.Create(HTTP.ResultString);
  finally
    HTTP.Free;
    Data.Free;
    XML:= nil;
  end;
end;

function TAuthClass.AuthMailRu: Boolean;
var
  HTTP: THTTPSend;
  Data: TStringStream;
  TS: TStringList;
  JObject: TJSONObject;
begin
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  TS:= TStringList.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:= UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('client_id=gamecenter.mail.ru&grant_type=password&username='+LowerCase(Login)+'&password='+Password);
    HTTP.Document.LoadFromStream(Data);
    if HTTP.HTTPMethod('POST','https://o2.mail.ru/token') then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRu: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
      TS.LoadFromStream(HTTP.Document);

      JObject:=TJSONObject.ParseJSONValue(TS.Text) as TJSONObject;

      if Assigned(JObject) then begin
        if JObject.Get(0).JsonString.Value = 'error' then begin
          if Assigned(FOnLogging) then
            FOnLogging(Format('AuthMailRu: JSON ERROR [%s] %s',[JObject.Get(1).JsonValue.Value, JObject.Get(JObject.Size-1).JsonValue.ToString]));
          FErrorCode:= 400;
          Exit;
        end;
        if JObject.Get(0).JsonString.Value = 'expires_in' then
          FTocken:= JObject.Get(JObject.Size-1).JsonValue.Value;
      end else begin
        if Assigned(FOnLogging) then
          FOnLogging('AuthMailRu: JSON ERROR Jsonobject not assigned!');
        FErrorCode:= 400;
      end;
    end;
  finally
    HTTP.Free;
    Data.Free;
  end;
end;

function TAuthClass.AuthMailRuAuth: Boolean;
var
  HTTP: THTTPSend;
  TS: TStringList;
  Data: TStringStream;
  Mpop: string;
begin
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  TS:= TStringList.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:= UserAgent;
    HTTP.MimeType:= MimeType;

    if FErrorCode <> 200 then Exit;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?><Auth Cookie="'+FMpop+'" ChannelId="0"/>');
    HTTP.Document.LoadFromStream(Data);

    if HTTP.HTTPMethod('POST', 'https://authdl.mail.ru/ec.php?hint=Auth') then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuAuth: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
      TS.LoadFromStream(HTTP.Document);
      TS.SaveToFile('AuthMailRuAuth.txt');
    end;
  finally
    HTTP.Free;
    Data.Free;
    TS.Free;
  end;
end;

function TAuthClass.AuthMailRuAuthLogin: Boolean;
var
  HTTP: THTTPSend;
  XML: IXMLDocument;
  Root: IXMLNode;
  Data: TStringStream;
begin
  Result:= False;
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  Xml:= TXMLDocument.Create(nil);
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:=UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?>');
      Data.WriteString('<AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" Mpop="'+FMpop+'"/>');

    HTTP.Document.LoadFromStream(Data);

    if FErrorCode <> 200 then Exit;


    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/sz.php?hint=AutoLogin') then begin
      if HTTP.ResultCode <> 200 then begin

        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuAuth: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
      Xml.LoadFromStream(HTTP.Document);
      Xml.Active:= True;

      if Assigned(FOnLogging) then
        FOnLogging('AuthLogin: '+Xml.XML.Text);

      if Xml.IsEmptyDoc then Exit;

      Root:= Xml.DocumentElement;
      FPersID:= Root.Attributes['PersId'];
      FTocken:= Root.Attributes['Key'];

      if Assigned(FOnLogging) then
        FOnLogging('AuthLogin: Tocken= '+FTocken);

      Result:= True;
      Xml.Active:= False;
    end else raise Exception.Create(HTTP.ResultString);
  finally
    HTTP.Free;
    Data.Free;
    XML:= nil;
  end;
end;

function TAuthClass.AuthMailRuCoockie: Boolean;
var
  HTTP: THTTPSend;
  TS: TStringList;
  Mpop: string;
begin
  HTTP := THTTPSend.Create;
  TS:= TStringList.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:= UserAgent;
    HTTP.MimeType:= MimeType;

    if FErrorCode <> 200 then Exit;

    if HTTP.HTTPMethod('GET', FPersID) then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuCoockie: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
      Mpop:= HTTP.Cookies.Values['Mpop'];

      if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuCoockie: HTTP Coockie Mpop = %s',[Mpop]));
      FMpop:= Mpop;
    end;
  finally
    HTTP.Free;
    TS.Free;
  end;
end;

function TAuthClass.AuthMailRuMrPage2: Boolean;
var
  HTTP: THTTPSend;
  Data: TStringStream;
  XML: IXMLDocument;
  Root: IXMLNode;
begin
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  XML:= TXMLDocument.Create(nil);
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:= UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?><MrPage2 SessionKey="'+FTocken+'" Page="http://dl.mail.ru/robots.txt"/>');
    HTTP.Document.LoadFromStream(Data);

    if FErrorCode <> 200 then Exit;

    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/ec.php?hint=MrPage2') then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuMrPage2: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
      XML.LoadFromStream(HTTP.Document);
      XML.Active:= True;

      if XML.IsEmptyDoc then begin
        if Assigned(FOnLogging) then
          FOnLogging('AuthMailRuMrPage2: XML ERROR IsEmptyDoc ');
        FErrorCode:= 400;
        Exit;
      end;
      Root:= XML.DocumentElement;
      FPersID:= Root.Attributes['Location'];
      if Assigned(FOnLogging) then
          FOnLogging('AuthMailRuMrPage2: XML '+FPersID);
      XML.Active:= False;
    end;
  finally
    HTTP.Free;
    Data.Free;
    XML:= Nil;
  end;
end;

function TAuthClass.AuthMailRuPersList: Boolean;
var
  HTTP: THTTPSend;
  XML: IXMLDocument;
  Root: IXMLNode;
  TS: TStringList;
  Data: TStringStream;
  I: Int32;
begin
  Result:= False;
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  Xml:= TXMLDocument.Create(nil);
  TS:= TStringList.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:=UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?>');
      Data.WriteString('<PersList ProjectId="61" SubProjectId="0" ShardId="0" Mpop="'+FMpop+'"/>');
    HTTP.Document.LoadFromStream(Data);

    if FErrorCode <> 200 then Exit;

    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/sz.php?hint=PersList') then begin
      if FErrorCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging('AuthMailRuPersList: '+HTTP.ResultString);
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;

      Xml.LoadFromStream(HTTP.Document);
      Xml.Active:= True;

      if Xml.IsEmptyDoc then Exit;
      Root:= Xml.DocumentElement;
      FPersID:= Root.Attributes['PersId'];
      if Assigned(FOnLogging) then
        FOnLogging('AuthPersList: PersId= '+FTocken);

      for I := 0 to Root.ChildNodes.Count-1 do begin
        TS.Add(Root.ChildNodes[i].Attributes['Title']+'='+Root.ChildNodes[i].Attributes['Id']);
      end;

      CommandLine:= GetCommandLauncher;

      if Assigned(FOnSelectDialog) then
        FOnSelectDialog(TS);
      Result:= True;
    end else raise Exception.Create(HTTP.ResultString);
  finally
    HTTP.Free;
    Data.Free;
    TS.Free;
    XML:= nil;
  end;
end;

function TAuthClass.AuthMailRuUserInfo: Boolean;
var
  HTTP: THTTPSend;
  Data: TStringStream;
  JObject: TJSONObject;
begin
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:= UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('client_id=gamecenter.mail.ru&access_token='+FTocken);
    HTTP.Document.LoadFromStream(Data);
    if HTTP.HTTPMethod('POST','https://o2.mail.ru/userinfo') then begin
      if HTTP.ResultCode <> 200 then begin
        if Assigned(FOnLogging) then
          FOnLogging(Format('AuthMailRuUserInfo: HTTP ERROR [%d] %s',[HTTP.ResultCode, HTTP.ResultString]));
        FErrorCode:= HTTP.ResultCode;
        Exit;
      end;
    end;
  finally
    HTTP.Free;
    Data.Free;
  end;
end;

function TAuthClass.AuthPersList: Boolean;
var
  HTTP: THTTPSend;
  XML: IXMLDocument;
  Root: IXMLNode;
  TS: TStringList;
  Data: TStringStream;
  I: Int32;
  Str: string;
begin
  Result:= False;
  HTTP := THTTPSend.Create;
  Data:= TStringStream.Create;
  Xml:= TXMLDocument.Create(nil);
  TS:= TStringList.Create;
  try
    HTTP.Protocol:='1.1';
    HTTP.UserAgent:=UserAgent;
    HTTP.MimeType:= MimeType;

    Data.WriteString('<?xml version="1.0" encoding="UTF-8"?>');
      Data.WriteString('<PersList ProjectId="61" SubProjectId="0" ShardId="0" Username="'+
                      LowerCase(FLogin)+'" Password="'+Password+'"/>');
    HTTP.Document.LoadFromStream(Data);

    if FErrorCode <> 200 then Exit;

    if HTTP.HTTPMethod('POST','https://authdl.mail.ru/sz.php?hint=PersList') then begin
      if Assigned(FOnLogging) then
        FOnLogging('AuthPersList: '+HTTP.ResultString);

      Xml.LoadFromStream(HTTP.Document);
      Xml.Active:= True;

      if Xml.IsEmptyDoc then Exit;

      Root:= Xml.DocumentElement;
      Str:= Root.Attributes['PersId'];
      if Assigned(FOnLogging) then
        FOnLogging('AuthPersList: PersId= '+Str);

      for I := 0 to Root.ChildNodes.Count-1 do begin
        TS.Add(Root.ChildNodes[i].Attributes['Title']+'='+Root.ChildNodes[i].Attributes['Id']);
      end;

      CommandLine:= GetCommandLauncher;

      if Assigned(FOnSelectDialog) then
        FOnSelectDialog(TS);
      Result:= True;
    end else raise Exception.Create(HTTP.ResultString);
  finally
    HTTP.Free;
    Data.Free;
    TS.Free;
    XML:= nil;
  end;
end;

function TAuthClass.CheckAuth: Boolean;
var
  IsMail: Boolean;
begin
  IsMail:= IsMailRu;
  if IsMail then Result:= AuthMailRu
  else Result:= Auth;
end;

function TAuthClass.Connect: Boolean;
var
  IsMail: Boolean;
begin
  Result:= False;
  IsMail:= IsMailRu;
  case IsMail of
    True: begin
      AuthMailRu;
      Sleep(100);
      AuthMailRuUserInfo;
      Sleep(100);
      AuthMailRuMrPage2;
      Sleep(100);
      AuthMailRuCoockie;
      Sleep(100);
      AuthMailRuAuth;
      Sleep(1000);
      AuthMailRuAuthLogin;
      Sleep(1000);
      AuthMailRuPersList;
      Sleep(1000);
      Result:= True;
    end;
    False: begin
      Auth;
      Sleep(100);
      AuthLogin;
      Sleep(1000);
      AuthPersList;
      Sleep(1000);
      Result:= True;
    end;
  end;
end;

constructor TAuthClass.Create;
begin
  FErrorCode:= 200;
  FPassword:='';
  FLogin:='';
  FPersID:='';
  FTocken:='';
  FMpop:='';
  FDelay:= 1000;
end;

destructor TAuthClass.Destroy;
begin
  FPassword:='';
  FLogin:='';
  FPersID:='';
  FTocken:='';
  FMpop:='';
  inherited;
end;

function TAuthClass.GetCommandLauncher: string;
begin
  Result:=' startbypatcher user:%s _user:'+FPersID+' token2:'+FTocken;
end;

function TAuthClass.GetDelay: Integer;
begin
  Result:= FDelay;
end;

function TAuthClass.GetErrorCode: Integer;
begin
  Result:= FErrorCode;
end;

function TAuthClass.GetOnLogging: TLogingMgr;
begin
  Result:= FOnLogging;
end;

function TAuthClass.GetOnSelectDialog: TSelectDialog;
begin
  Result:= FOnSelectDialog;
end;

function TAuthClass.GetPersID: string;
begin
  Result:= FPersID;
end;

function TAuthClass.GetPersList(_Stream: TStream): Boolean;
var
  XML: IXMLDocument;
  Root, Node: IXMLNode;
  TS: TStringList;
  I: Integer;
begin
  Result:= False;
  if _Stream = nil then Exit;
  TS:= TStringList.Create;
  XML:= TXMLDocument.Create(nil);
  try
    XML.Active:= True;
    XML.LoadFromStream(_Stream);

    if XML.IsEmptyDoc then Exit;
    Root:= XML.DocumentElement;
    FPersID:= Root.Attributes['PersId'];

    if Root.ChildNodes.Count <= 0 then Exit;

    for I := 0 to Root.ChildNodes.Count-1 do begin
      Node:= Root.ChildNodes.Nodes[i];
      TS.Add(Node.Attributes['Title']+'='+ Node.Attributes['Id']);
    end;

    if Assigned(FOnLogging) then
      FOnLogging('GetPersList: Pers count: '+IntToStr(TS.Count));
    if (TS.Count>0) then
      if Assigned(FOnSelectDialog) then begin
        Result:= True;
        FOnSelectDialog(TS);
      end;
    XML.Active:= False;
  finally
    XML:= nil;
    TS.Free;
  end;
end;

function TAuthClass.GetTocken: string;
begin
  Result:= FTocken;
end;

function TAuthClass.IsMailRu: Boolean;
begin
  Result:= IsMailRu(FLogin);
end;

function TAuthClass.IsMailRu(Login: string): Boolean;
var
  I: Byte;
begin
  Result:= False;
  for I := 0 to Length(MailRuDomains)-1 do
    if Pos(MailRuDomains[i], Login) > 0 then
      Result:= True;
end;

procedure TAuthClass.Parser(_Stream: TStream);
begin

end;

procedure TAuthClass.SetDelay(const Value: Integer);
begin
  FDelay := Value;
end;

procedure TAuthClass.SetLogin(const Value: string);
begin
  FLogin := Value;
end;

procedure TAuthClass.SetOnLogging(const Value: TLogingMgr);
begin
  FOnLogging := Value;
end;

procedure TAuthClass.SetOnSelectDialog(const Value: TSelectDialog);
begin
  FOnSelectDialog := Value;
end;

procedure TAuthClass.SetPassword(const Value: string);
begin
  FPassword := Value;
end;

end.
  Ответить с цитированием
Пользователь сказал cпасибо:
krysun (04.01.2017)
Старый 19.09.2016, 19:50   #3
 Разведчик
Аватар для krysun
 
krysun на правильном пути
Регистрация: 01.07.2009
Сообщений: 21
Популярность: 83
Сказал(а) спасибо: 29
Поблагодарили 14 раз(а) в 11 сообщениях
Отправить сообщение для krysun с помощью Skype™
 
По умолчанию Re: Delphi Авторизация без ИЦ

Цитата:
s:='startbypatcher user:'+pwidechar(user)+' _user:'+pwidechar(_user)+' token2:'+pwidechar(token2);

Вошел только изменив эту строчку на
Цитата:
s:=' startbypatcher user:'+user+' token2:'+token2;

(С поста Venzel)
Код:
unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,comobj,activex, ShellAPI;

type
  TForm2 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
var
hwnd:thandle;
o,xmlparser:OleVariant;
s,_user,user,token2:string;
a1,a2:Integer;
begin
CoInitialize(0); ;
o:=CreateOleObject('Microsoft.XMLHTTP');
xmlparser:=CreateOleObject('Msxml2.DOMDocument');
o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=Auth', False);
o.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader ('Content-Length',Length('<?xml version="1.0" encoding="UTF-8"?><Auth ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.Text+'"/>"'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><Auth ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.Text+'"/>');
xmlParser.loadXML(o.responsetext);
_user := copy (o.responsetext, (Length(o.responsetext)-10),8 );

o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=AutoLogin', False);
o.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader('Content-Length', Length('<?xml version="1.0" encoding="UTF-8"?><AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><AutoLogin ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>');
xmlParser.loadXML(o.responsetext);
token2:=copy(o.responsetext, (Length(o.responsetext)-67),64);

o.open ('POST', 'http://authdl.mail.ru/sz.php?hint=PersList', False);
o.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
o.setRequestHeader('Content-Length', Length('<?xml version="1.0" encoding="UTF-8"?><PersList ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>'));
o.setRequestHeader('User-Agent','Downloader/11620');
o.send ('<?xml version="1.0" encoding="UTF-8"?><PersList ProjectId="61" SubProjectId="0" ShardId="0" UserId="1" UserId2="2" Username="'+edit1.Text+'" Password="'+edit2.text+'"/>');
xmlParser.loadXML(o.responsetext);
user:=copy(o.responsetext, (Length(o.responsetext)-21),8);
s:=' startbypatcher user:'+user+' token2:'+token2;
ShellExecute(hwnd,'open','elementclient.exe',pwidechar(s),'f:\GamesMailRu\Perfect World\element\',sw_shownormal);
end;

end.
Delphi XE3

Последний раз редактировалось krysun; 19.09.2016 в 22:20.
  Ответить с цитированием
Старый 20.09.2016, 10:11   #4
 Разведчик
Аватар для _Wolf_
 
_Wolf_ вызывает надежду
Регистрация: 26.02.2010
Сообщений: 13
Популярность: -48
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
 
По умолчанию Re: Delphi Авторизация без ИЦ

Хех... я думал уже никому не интересно
  Ответить с цитированием
Старый 24.07.2018, 17:29   #5
 Разведчик
Аватар для Doakes1
 
Doakes1 никому не известный тип
Регистрация: 31.03.2018
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Delphi Авторизация без ИЦ

Поделится кто рабочим способом авторизации на делфи?
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Авторизация в DO через Delphi KompliviT Общение и обсуждение 22 28.04.2014 01:17
[Руководство] Настраиваем Delphi 2010/XE, чтобы она выглядела как Delphi 7 RifmoGlas Pascal/Delphi 2 09.02.2013 13:09
[Помогите!] Авторизация в ДО на delphi qwert-yg Вопросы и ответы, обсуждения 5 19.03.2012 16:55
[Информация] Помощь в Delphi 7 и в других версиях Delphi Babls77 Pascal/Delphi 4 03.11.2011 21:27
[Обсуждение] Авторизация в игре Delphi "Unix Общение разработчиков 5 11.10.2011 18:32

www.webmoney.ru
Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 22:39.

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net