mirror of
https://github.com/ezhevita/YandexKeyExtractor
synced 2025-08-16 19:40:48 +07:00
formatting, improve output messages
This commit is contained in:
@@ -1,14 +1,16 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class BackupInfoResponse : StatusResponse {
|
||||
[JsonPropertyName("backup_info")]
|
||||
public BackupInfo? Info { get; set; }
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
public class BackupInfo {
|
||||
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
|
||||
[JsonPropertyName("updated")]
|
||||
public uint Updated { get; set; }
|
||||
}
|
||||
public class BackupInfoResponse : StatusResponse
|
||||
{
|
||||
[JsonPropertyName("backup_info")]
|
||||
public BackupInfo? Info { get; set; }
|
||||
|
||||
public class BackupInfo
|
||||
{
|
||||
[JsonNumberHandling(JsonNumberHandling.AllowReadingFromString)]
|
||||
[JsonPropertyName("updated")]
|
||||
public uint Updated { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class BackupResponse : BackupInfoResponse {
|
||||
[JsonPropertyName("backup")]
|
||||
public string? Backup { get; set; }
|
||||
}
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
public class BackupResponse : BackupInfoResponse
|
||||
{
|
||||
[JsonPropertyName("backup")]
|
||||
public string? Backup { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class CountryResponse : StatusResponse {
|
||||
[JsonPropertyName("country")]
|
||||
public string[]? Country { get; set; }
|
||||
}
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
public class CountryResponse : StatusResponse
|
||||
{
|
||||
[JsonPropertyName("country")]
|
||||
public string[]? Country { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class PhoneNumberResponse : StatusResponse {
|
||||
[JsonPropertyName("number")]
|
||||
public PhoneNumberInfo? PhoneNumber { get; set; }
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
public class PhoneNumberInfo {
|
||||
[JsonPropertyName("e164")]
|
||||
public string? StandardizedNumber { get; set; }
|
||||
}
|
||||
public class PhoneNumberResponse : StatusResponse
|
||||
{
|
||||
[JsonPropertyName("number")]
|
||||
public PhoneNumberInfo? PhoneNumber { get; set; }
|
||||
|
||||
public class PhoneNumberInfo
|
||||
{
|
||||
[JsonPropertyName("e164")]
|
||||
public string? StandardizedNumber { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class StatusResponse {
|
||||
[JsonPropertyName("status")]
|
||||
public string? Status { get; set; }
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
[JsonPropertyName("errors")]
|
||||
public string[]? Errors { get; set; }
|
||||
public class StatusResponse
|
||||
{
|
||||
[JsonPropertyName("status")]
|
||||
public string? Status { get; set; }
|
||||
|
||||
public bool IsSuccess => Status == "ok";
|
||||
}
|
||||
[JsonPropertyName("errors")]
|
||||
public string[]? Errors { get; set; }
|
||||
|
||||
public bool IsSuccess => Status == "ok";
|
||||
}
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace YandexKeyExtractor.Models {
|
||||
public class TrackResponse : StatusResponse {
|
||||
[JsonPropertyName("track_id")]
|
||||
public string? TrackID { get; set; }
|
||||
}
|
||||
namespace YandexKeyExtractor.Models;
|
||||
|
||||
public class TrackResponse : StatusResponse
|
||||
{
|
||||
[JsonPropertyName("track_id")]
|
||||
public string? TrackID { get; set; }
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using YandexKeyExtractor;
|
||||
|
||||
Console.WriteLine("Initializing...");
|
||||
@@ -8,51 +7,58 @@ using var handler = WebHandler.Create();
|
||||
|
||||
var country = await handler.TryGetCountry();
|
||||
|
||||
PromptInput(out var phoneNumber);
|
||||
PromptInput(out var phoneNumber, "phone number");
|
||||
|
||||
phoneNumber = phoneNumber.TrimStart('+');
|
||||
var phone = await handler.GetPhoneNumberInfo(phoneNumber, country);
|
||||
|
||||
var trackID = await handler.SendSMSCodeAndGetTrackID(phone, country);
|
||||
if (string.IsNullOrEmpty(trackID)) {
|
||||
if (string.IsNullOrEmpty(trackID))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PromptInput(out var smsCode);
|
||||
PromptInput(out var smsCode, "SMS code");
|
||||
|
||||
if (!await handler.CheckCode(smsCode, trackID)) {
|
||||
if (!await handler.CheckCode(smsCode, trackID))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!await handler.ValidateBackupInfo(phone, trackID, country)) {
|
||||
if (!await handler.ValidateBackupInfo(phone, trackID, country))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var backup = await handler.GetBackupData(phone, trackID);
|
||||
if (string.IsNullOrEmpty(backup)) {
|
||||
if (string.IsNullOrEmpty(backup))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PromptInput(out var backupPassword);
|
||||
PromptInput(out var backupPassword, "backup password");
|
||||
|
||||
Console.WriteLine("Decrypting...");
|
||||
var message = Decryptor.Decrypt(backup, backupPassword);
|
||||
if (string.IsNullOrEmpty(message)) {
|
||||
Console.WriteLine("Decryption failed!");
|
||||
if (string.IsNullOrEmpty(message))
|
||||
{
|
||||
Console.WriteLine("Decryption failed! Most likely the password is wrong");
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine("Successfully decrypted!");
|
||||
await File.WriteAllTextAsync("result.txt", message);
|
||||
Console.WriteLine($"Written {message.Split('\n').Length} authenticators to result file");
|
||||
Console.WriteLine($"Written {message.Split('\n').Length} authenticators to the file (result.txt)");
|
||||
|
||||
return;
|
||||
|
||||
static void PromptInput(out string result, [CallerArgumentExpression("result")] string argumentName = "") {
|
||||
static void PromptInput(out string result, string argumentName = "")
|
||||
{
|
||||
Console.WriteLine($"Enter {argumentName}:");
|
||||
var input = Console.ReadLine();
|
||||
while (string.IsNullOrEmpty(input)) {
|
||||
while (string.IsNullOrEmpty(input))
|
||||
{
|
||||
Console.WriteLine($"{argumentName} is invalid, try again:");
|
||||
input = Console.ReadLine();
|
||||
}
|
||||
|
||||
@@ -1,27 +1,27 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<AssemblyVersion>1.0.0.0</AssemblyVersion>
|
||||
<FileVersion>1.0.0.0</FileVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<AssemblyVersion>1.0.0.0</AssemblyVersion>
|
||||
<FileVersion>1.0.0.0</FileVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Trimming features -->
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<DebuggerSupport>false</DebuggerSupport>
|
||||
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
|
||||
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
|
||||
<EventSourceSupport>false</EventSourceSupport>
|
||||
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
|
||||
<TrimMode>link</TrimMode>
|
||||
</PropertyGroup>
|
||||
<!-- Trimming features -->
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
|
||||
<DebuggerSupport>false</DebuggerSupport>
|
||||
<EnableUnsafeBinaryFormatterSerialization>false</EnableUnsafeBinaryFormatterSerialization>
|
||||
<EnableUnsafeUTF7Encoding>false</EnableUnsafeUTF7Encoding>
|
||||
<EventSourceSupport>false</EventSourceSupport>
|
||||
<HttpActivityPropagationSupport>false</HttpActivityPropagationSupport>
|
||||
<TrimMode>link</TrimMode>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CryptSharpStandard" Version="1.0.0" />
|
||||
<PackageReference Include="Flurl.Http" Version="4.0.2" />
|
||||
<PackageReference Include="NaCl.Net" Version="0.1.13" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="CryptSharpStandard" Version="1.0.0"/>
|
||||
<PackageReference Include="Flurl.Http" Version="4.0.2"/>
|
||||
<PackageReference Include="NaCl.Net" Version="0.1.13"/>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user