Example #1
0
        /// <summary>
        /// Initializes a new <see cref="CodeOperand"/> struct.
        /// </summary>
        /// <param name="value">Value of the operand as a register.</param>
        public CodeOperand(CodeRegister value)
        {
            this.type     = CodeOperandType.Register;
            this.register = value;

            if (value == CodeRegister.AL || value == CodeRegister.AH || value == CodeRegister.BL || value == CodeRegister.BH || value == CodeRegister.CL || value == CodeRegister.CH || value == CodeRegister.DL || value == CodeRegister.DH)
            {
                this.operandSize = CodeOperandSize.Byte;
            }
            else if (value == CodeRegister.EAX || value == CodeRegister.EBX || value == CodeRegister.ECX || value == CodeRegister.EDX || value == CodeRegister.EBP || value == CodeRegister.ESI || value == CodeRegister.EDI || value == CodeRegister.ESP)
            {
                this.operandSize = CodeOperandSize.DoubleWord;
            }
            else
            {
                this.operandSize = CodeOperandSize.Word;
            }

            this.memoryBase = 0;
            this.value      = 0;
            this.sibScale   = 0;
            this.sibIndex   = 0;
            this.sibBase    = 0;
            this.farSegment = 0;
        }
Example #2
0
 /// <summary>
 /// Initializes a new <see cref="CodeOperand"/> struct.
 /// </summary>
 /// <param name="effectiveAddress">Addressing mode for the operand.</param>
 /// <param name="value">Displacement value for the operand.</param>
 public CodeOperand(CodeMemoryBase effectiveAddress, uint value, CodeOperandSize size)
 {
     this.type        = CodeOperandType.MemoryAddress;
     this.value       = value;
     this.memoryBase  = effectiveAddress;
     this.operandSize = size;
     this.register    = 0;
     this.sibScale    = 0;
     this.sibIndex    = 0;
     this.sibBase     = 0;
     this.farSegment  = 0;
 }
Example #3
0
 /// <summary>
 /// Initializes a new <see cref="CodeOperand"/> struct.
 /// </summary>
 /// <param name="type">Type of the operand.</param>
 /// <param name="value">Value of the operand.</param>
 public CodeOperand(CodeOperandType type, uint value, CodeOperandSize size)
 {
     this.type        = type;
     this.value       = value;
     this.operandSize = size;
     this.memoryBase  = 0;
     this.register    = 0;
     this.sibScale    = 0;
     this.sibIndex    = 0;
     this.sibBase     = 0;
     this.farSegment  = 0;
 }
Example #4
0
        private static void GetPasswordDetails(TelegramClient client, CodeRegister cr)
        {
            var result = TelegramUtils.RunSynchronously(client.Methods.AccountGetPasswordAsync(new AccountGetPasswordArgs
            {
            }));
            var authPassword   = result as AccountPassword;
            var authNoPassword = result as AccountNoPassword;

            if (authPassword != null)
            {
                cr.CurrentSalt = authPassword.CurrentSalt;
                cr.NewSalt     = authPassword.NewSalt;
                cr.HasRecovery = authPassword.HasRecovery;
                cr.Hint        = authPassword.Hint;
            }
        }
Example #5
0
        private FrameworkElement BuildRegisterContent(CodeRegister register)
        {
            var textBlock = new TextBlock()
            {
                Text = register.ToString().ToLower()
            };

            var binding = new Binding("DebuggerTextFormat.Register")
            {
                Source = this, Mode = BindingMode.OneWay
            };

            textBlock.SetBinding(TextBlock.ForegroundProperty, binding);

            return(textBlock);
        }
Example #6
0
 public static CodeRegister VerifyPassword(Service service, TelegramSettings settings, byte[] passwordHash)
 {
     try
     {
         var transportConfig =
             new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort);
         using (var client = new TelegramClient(transportConfig,
                                                new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo))
         {
             TelegramUtils.RunSynchronously(client.Connect());
             try
             {
                 var iresult = TelegramUtils.RunSynchronously(client.Methods.AuthCheckPasswordAsync(new AuthCheckPasswordArgs
                 {
                     PasswordHash = passwordHash
                 }));
                 var result = (AuthAuthorization)iresult;
                 Thread.Sleep(100); //wait until the other response comes in.
                 return(new CodeRegister
                 {
                     AccountId = (result.User as User).Id,
                     Response = CodeRegister.Type.Success
                 });
             }
             catch (RpcErrorException ex)
             {
                 var error = (RpcError)ex.Error;
                 var cr    = new CodeRegister();
                 if (error.ErrorMessage == "PASSWORD_HASH_INVALID")
                 {
                     cr.Response = CodeRegister.Type.InvalidPassword;
                 }
                 return(cr);
             }
         }
     }
     catch (Exception ex)
     {
         service.DebugPrint("Error in VerifyPassword: " + ex);
         return(null);
     }
 }
Example #7
0
 public static CodeRegister VerifyCode(Service service, TelegramSettings settings, string code)
 {
     try
     {
         var transportConfig =
             new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort);
         using (var client = new TelegramClient(transportConfig,
                                                new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo))
         {
             TelegramUtils.RunSynchronously(client.Connect());
             try
             {
                 var iresult = TelegramUtils.RunSynchronously(client.Methods.AuthRecoverPasswordAsync(new AuthRecoverPasswordArgs
                 {
                     Code = code
                 }));
                 var result = (AuthAuthorization)iresult;
                 Thread.Sleep(100); //wait until the other response comes in.
                 return(new CodeRegister
                 {
                     AccountId = (result.User as User).Id,
                     Response = CodeRegister.Type.Success
                 });
             }
             catch (RpcErrorException ex)
             {
                 var error = (RpcError)ex.Error;
                 var cr    = new CodeRegister();
                 cr.Response = CodeRegister.Type.Failure;
                 return(cr);
             }
         }
     }
     catch (Exception ex)
     {
         service.DebugPrint("Error in VerifyPassword: " + ex);
         return(null);
     }
 }
Example #8
0
        public static CodeRegister RegisterCode(Service service, TelegramSettings settings, string number, string codeHash, string code, string firstName, string lastName, bool signIn)
        {
            try
            {
                service.DebugPrint("Registering code...");
                var transportConfig =
                    new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort);
                using (var client = new TelegramClient(transportConfig,
                                                       new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo))
                {
                    TelegramUtils.RunSynchronously(client.Connect());

                    try
                    {
                        IAuthAuthorization iresult = null;
                        if (signIn)
                        {
                            iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignInAsync(new AuthSignInArgs
                            {
                                PhoneNumber   = number,
                                PhoneCodeHash = codeHash,
                                PhoneCode     = code,
                            }));
                        }
                        else
                        {
                            iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignUpAsync(new AuthSignUpArgs
                            {
                                PhoneNumber   = number,
                                PhoneCodeHash = codeHash,
                                PhoneCode     = code,
                                FirstName     = firstName,
                                LastName      = lastName,
                            }));
                        }
                        var result = (AuthAuthorization)iresult;
                        Thread.Sleep(100); //wait until the other response comes in, if it has to.
                        return(new CodeRegister
                        {
                            AccountId = (result.User as User).Id,
                            Response = CodeRegister.Type.Success,
                        });
                    }
                    catch (RpcErrorException ex)
                    {
                        Utils.DebugPrint(">>>>>> Failed to sign in " + ex);
                        var error = (RpcError)ex.Error;
                        var cr    = new CodeRegister();
                        switch (error.ErrorMessage)
                        {
                        case "PHONE_NUMBER_INVALID":
                            cr.Response = CodeRegister.Type.NumberInvalid;
                            break;

                        case "PHONE_CODE_EMPTY":
                            cr.Response = CodeRegister.Type.CodeEmpty;
                            break;

                        case "PHONE_CODE_EXPIRED":
                            cr.Response = CodeRegister.Type.CodeExpired;
                            break;

                        case "PHONE_CODE_INVALID":
                            cr.Response = CodeRegister.Type.CodeInvalid;
                            break;

                        case "FIRSTNAME_INVALID":
                            cr.Response = CodeRegister.Type.FirstNameInvalid;
                            break;

                        case "LASTNAME_INVALID":
                            cr.Response = CodeRegister.Type.LastNameInvalid;
                            break;

                        case "SESSION_PASSWORD_NEEDED":
                            cr.Response = CodeRegister.Type.PasswordNeeded;
                            GetPasswordDetails(client, cr);
                            break;

                        default:
                            cr.Response = CodeRegister.Type.Failure;
                            break;
                        }
                        return(cr);
                    }
                }
            }
            catch (Exception ex)
            {
                service.DebugPrint("Error in CodeRequest: " + ex);
            }
            return(null);
        }
Example #9
0
        public static CodeRegister RegisterCode(Service service, TelegramSettings settings, string number, string codeHash, string code, string firstName, string lastName, bool signIn)
        {
            try
            {
                service.DebugPrint("Registering code...");
                var transportConfig = 
                    new TcpClientTransportConfig(settings.NearestDcIp, settings.NearestDcPort);
                using (var client = new TelegramClient(transportConfig,
                    new ConnectionConfig(settings.AuthKey, settings.Salt), AppInfo))
                {
                    TelegramUtils.RunSynchronously(client.Connect());

                    try
                    {
                        IAuthAuthorization iresult = null;
                        if (signIn)
                        {
                            iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignInAsync(new AuthSignInArgs
                                {
                                    PhoneNumber = number,
                                    PhoneCodeHash = codeHash,
                                    PhoneCode = code,
                                }));
                        }
                        else
                        {
                            iresult = TelegramUtils.RunSynchronously(client.Methods.AuthSignUpAsync(new AuthSignUpArgs
                                {
                                    PhoneNumber = number,
                                    PhoneCodeHash = codeHash,
                                    PhoneCode = code,
                                    FirstName = firstName,
                                    LastName = lastName,
                                }));
                        }
                        var result = (AuthAuthorization)iresult;
                        return new CodeRegister
                        {
                            AccountId = (result.User as UserSelf).Id,
                            Expires = result.Expires,
                            Response = CodeRegister.Type.Success,
                        };
                    }
                    catch (RpcErrorException ex)
                    {
                        var error = (RpcError)ex.Error;
                        var cr = new CodeRegister();
                        var response = CodeRegister.Type.Failure;
                        switch (error.ErrorMessage)
                        {
                            case "PHONE_NUMBER_INVALID":
                                cr.Response = CodeRegister.Type.NumberInvalid;
                                break;
                            case "PHONE_CODE_EMPTY":
                                cr.Response = CodeRegister.Type.CodeEmpty;
                                break;
                            case "PHONE_CODE_EXPIRED":
                                cr.Response = CodeRegister.Type.CodeExpired;
                                break;
                            case "PHONE_CODE_INVALID":
                                cr.Response = CodeRegister.Type.CodeInvalid;
                                break;
                            case "FIRSTNAME_INVALID":
                                cr.Response = CodeRegister.Type.FirstNameInvalid;
                                break;
                            case "LASTNAME_INVALID":
                                cr.Response = CodeRegister.Type.LastNameInvalid;
                                break;
                            default:
                                cr.Response = CodeRegister.Type.Failure;
                                break;
                        }
                        return cr;
                    }
                }
            }
            catch (Exception ex)
            {
                service.DebugPrint("Error in CodeRequest: " + ex);
            }
            return null;
        }
Example #10
0
 public static string Format(CodeRegister register) => register.ToString().ToLower();