mirror of
https://github.com/raphaeIl/Novaria.git
synced 2025-12-12 14:34:38 +01:00
add diff files for auto updating client, readme for installation and running tutorial
This commit is contained in:
@@ -4,6 +4,7 @@ using System.Text;
|
|||||||
using NSec.Cryptography;
|
using NSec.Cryptography;
|
||||||
using Org.BouncyCastle.Crypto.Engines;
|
using Org.BouncyCastle.Crypto.Engines;
|
||||||
using Org.BouncyCastle.Crypto.Modes;
|
using Org.BouncyCastle.Crypto.Modes;
|
||||||
|
using Org.BouncyCastle.Crypto.Paddings;
|
||||||
using Org.BouncyCastle.Crypto.Parameters;
|
using Org.BouncyCastle.Crypto.Parameters;
|
||||||
|
|
||||||
namespace Novaria.Common.Crypto
|
namespace Novaria.Common.Crypto
|
||||||
@@ -28,6 +29,8 @@ namespace Novaria.Common.Crypto
|
|||||||
|
|
||||||
public static readonly byte[] DEFAULT_SERVERLIST_KEY = new byte[] { 74, 72, 42, 67, 80, 51, 50, 57, 89, 120, 111, 103, 81, 74, 69, 120 };
|
public static readonly byte[] DEFAULT_SERVERLIST_KEY = new byte[] { 74, 72, 42, 67, 80, 51, 50, 57, 89, 120, 111, 103, 81, 74, 69, 120 };
|
||||||
public static readonly byte[] DEFAULT_SERVERLIST_IV = new byte[] { 225, 92, 61, 72, 193, 89, 3, 64, 50, 61, 50, 145, 59, 128, 99, 72 };
|
public static readonly byte[] DEFAULT_SERVERLIST_IV = new byte[] { 225, 92, 61, 72, 193, 89, 3, 64, 50, 61, 50, 145, 59, 128, 99, 72 };
|
||||||
|
public static readonly byte[] DEFAULT_AND_IV = new byte[] { 105, 7, 110, 72, 167, 117, 102, 212, 150, 44, 52, 229, 65, 61, 204, 205 };
|
||||||
|
public static readonly byte[] DEFAULT_WIN_IV = new byte[] { 144, 129, 81, 233, 8, 4, 33, 39, 106, 181, 229, 64, 68, 134, 31, 107 };
|
||||||
|
|
||||||
public static readonly byte[] IKE_KEY = Encoding.ASCII.GetBytes("3LS9&oYdsp^5wi8&ZxC#c7MZg73hbEDw");
|
public static readonly byte[] IKE_KEY = Encoding.ASCII.GetBytes("3LS9&oYdsp^5wi8&ZxC#c7MZg73hbEDw");
|
||||||
|
|
||||||
@@ -150,18 +153,13 @@ namespace Novaria.Common.Crypto
|
|||||||
// probably wrong
|
// probably wrong
|
||||||
public static byte[] DecryptAesCBCInfo(byte[] key, byte[] IV, byte[] cipherBytes)
|
public static byte[] DecryptAesCBCInfo(byte[] key, byte[] IV, byte[] cipherBytes)
|
||||||
{
|
{
|
||||||
using (Aes aes = Aes.Create())
|
PaddedBufferedBlockCipher paddedBufferedBlockCipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()), new Pkcs7Padding());
|
||||||
{
|
ParametersWithIV parametersWithIV = new ParametersWithIV(new KeyParameter(key), IV);
|
||||||
aes.Key = key;
|
paddedBufferedBlockCipher.Init(false, parametersWithIV);
|
||||||
aes.IV = IV;
|
byte[] array = new byte[paddedBufferedBlockCipher.GetOutputSize(cipherBytes.Length)];
|
||||||
aes.Mode = CipherMode.CBC;
|
int num = paddedBufferedBlockCipher.ProcessBytes(cipherBytes, array, 0);
|
||||||
aes.Padding = PaddingMode.PKCS7;
|
paddedBufferedBlockCipher.DoFinal(array, num);
|
||||||
|
return array;
|
||||||
using (ICryptoTransform decryptor = aes.CreateDecryptor())
|
|
||||||
{
|
|
||||||
return decryptor.TransformFinalBlock(cipherBytes, 0, cipherBytes.Length);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static byte[] EncryptAesCBCInfo(byte[] key, byte[] IV, byte[] plainBytes)
|
public static byte[] EncryptAesCBCInfo(byte[] key, byte[] IV, byte[] plainBytes)
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ namespace Novaria.Common.Crypto
|
|||||||
|
|
||||||
public DiffieHellman()
|
public DiffieHellman()
|
||||||
{
|
{
|
||||||
|
Console.WriteLine(spriv);
|
||||||
//g** Spriv mod p
|
//g** Spriv mod p
|
||||||
ServerPublicKey = BigInteger.ModPow(g, spriv, p);
|
ServerPublicKey = BigInteger.ModPow(g, spriv, p);
|
||||||
}
|
}
|
||||||
|
|||||||
230
Novaria.Common/SDKProtos/ClientDiff.cs
Normal file
230
Novaria.Common/SDKProtos/ClientDiff.cs
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
// <auto-generated>
|
||||||
|
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
// source: ClientDiff.proto
|
||||||
|
// </auto-generated>
|
||||||
|
#pragma warning disable 1591, 0612, 3021, 8981
|
||||||
|
#region Designer generated code
|
||||||
|
|
||||||
|
using pb = global::Google.Protobuf;
|
||||||
|
using pbc = global::Google.Protobuf.Collections;
|
||||||
|
using pbr = global::Google.Protobuf.Reflection;
|
||||||
|
using scg = global::System.Collections.Generic;
|
||||||
|
namespace Pb {
|
||||||
|
|
||||||
|
/// <summary>Holder for reflection information generated from ClientDiff.proto</summary>
|
||||||
|
public static partial class ClientDiffReflection {
|
||||||
|
|
||||||
|
#region Descriptor
|
||||||
|
/// <summary>File descriptor for ClientDiff.proto</summary>
|
||||||
|
public static pbr::FileDescriptor Descriptor {
|
||||||
|
get { return descriptor; }
|
||||||
|
}
|
||||||
|
private static pbr::FileDescriptor descriptor;
|
||||||
|
|
||||||
|
static ClientDiffReflection() {
|
||||||
|
byte[] descriptorData = global::System.Convert.FromBase64String(
|
||||||
|
string.Concat(
|
||||||
|
"ChBDbGllbnREaWZmLnByb3RvGg5GaWxlRGlmZi5wcm90byIlCgpDbGllbnRE",
|
||||||
|
"aWZmEhcKBGRpZmYYASADKAsyCS5GaWxlRGlmZkIFqgICUGJiBnByb3RvMw=="));
|
||||||
|
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||||
|
new pbr::FileDescriptor[] { global::Pb.FileDiffReflection.Descriptor, },
|
||||||
|
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
|
||||||
|
new pbr::GeneratedClrTypeInfo(typeof(global::Pb.ClientDiff), global::Pb.ClientDiff.Parser, new[]{ "Diff" }, null, null, null, null)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
#region Messages
|
||||||
|
[global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
|
||||||
|
public sealed partial class ClientDiff : pb::IMessage<ClientDiff>
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
, pb::IBufferMessage
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
private static readonly pb::MessageParser<ClientDiff> _parser = new pb::MessageParser<ClientDiff>(() => new ClientDiff());
|
||||||
|
private pb::UnknownFieldSet _unknownFields;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pb::MessageParser<ClientDiff> Parser { get { return _parser; } }
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pbr::MessageDescriptor Descriptor {
|
||||||
|
get { return global::Pb.ClientDiffReflection.Descriptor.MessageTypes[0]; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
pbr::MessageDescriptor pb::IMessage.Descriptor {
|
||||||
|
get { return Descriptor; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public ClientDiff() {
|
||||||
|
OnConstruction();
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnConstruction();
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public ClientDiff(ClientDiff other) : this() {
|
||||||
|
diff_ = other.diff_.Clone();
|
||||||
|
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public ClientDiff Clone() {
|
||||||
|
return new ClientDiff(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "diff" field.</summary>
|
||||||
|
public const int DiffFieldNumber = 1;
|
||||||
|
private static readonly pb::FieldCodec<global::Pb.FileDiff> _repeated_diff_codec
|
||||||
|
= pb::FieldCodec.ForMessage(10, global::Pb.FileDiff.Parser);
|
||||||
|
private readonly pbc::RepeatedField<global::Pb.FileDiff> diff_ = new pbc::RepeatedField<global::Pb.FileDiff>();
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public pbc::RepeatedField<global::Pb.FileDiff> Diff {
|
||||||
|
get { return diff_; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override bool Equals(object other) {
|
||||||
|
return Equals(other as ClientDiff);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool Equals(ClientDiff other) {
|
||||||
|
if (ReferenceEquals(other, null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ReferenceEquals(other, this)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if(!diff_.Equals(other.diff_)) return false;
|
||||||
|
return Equals(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override int GetHashCode() {
|
||||||
|
int hash = 1;
|
||||||
|
hash ^= diff_.GetHashCode();
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
hash ^= _unknownFields.GetHashCode();
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override string ToString() {
|
||||||
|
return pb::JsonFormatter.ToDiagnosticString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void WriteTo(pb::CodedOutputStream output) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
output.WriteRawMessage(this);
|
||||||
|
#else
|
||||||
|
diff_.WriteTo(output, _repeated_diff_codec);
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(output);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
|
||||||
|
diff_.WriteTo(ref output, _repeated_diff_codec);
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(ref output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public int CalculateSize() {
|
||||||
|
int size = 0;
|
||||||
|
size += diff_.CalculateSize(_repeated_diff_codec);
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
size += _unknownFields.CalculateSize();
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(ClientDiff other) {
|
||||||
|
if (other == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
diff_.Add(other.diff_);
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(pb::CodedInputStream input) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
input.ReadRawMessage(this);
|
||||||
|
#else
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
if ((tag & 7) == 4) {
|
||||||
|
// Abort on any end group tag.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
|
||||||
|
break;
|
||||||
|
case 10: {
|
||||||
|
diff_.AddEntriesFrom(input, _repeated_diff_codec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
if ((tag & 7) == 4) {
|
||||||
|
// Abort on any end group tag.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
|
||||||
|
break;
|
||||||
|
case 10: {
|
||||||
|
diff_.AddEntriesFrom(ref input, _repeated_diff_codec);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Designer generated code
|
||||||
316
Novaria.Common/SDKProtos/FileDiff.cs
Normal file
316
Novaria.Common/SDKProtos/FileDiff.cs
Normal file
@@ -0,0 +1,316 @@
|
|||||||
|
// <auto-generated>
|
||||||
|
// Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
// source: FileDiff.proto
|
||||||
|
// </auto-generated>
|
||||||
|
#pragma warning disable 1591, 0612, 3021, 8981
|
||||||
|
#region Designer generated code
|
||||||
|
|
||||||
|
using pb = global::Google.Protobuf;
|
||||||
|
using pbc = global::Google.Protobuf.Collections;
|
||||||
|
using pbr = global::Google.Protobuf.Reflection;
|
||||||
|
using scg = global::System.Collections.Generic;
|
||||||
|
namespace Pb {
|
||||||
|
|
||||||
|
/// <summary>Holder for reflection information generated from FileDiff.proto</summary>
|
||||||
|
public static partial class FileDiffReflection {
|
||||||
|
|
||||||
|
#region Descriptor
|
||||||
|
/// <summary>File descriptor for FileDiff.proto</summary>
|
||||||
|
public static pbr::FileDescriptor Descriptor {
|
||||||
|
get { return descriptor; }
|
||||||
|
}
|
||||||
|
private static pbr::FileDescriptor descriptor;
|
||||||
|
|
||||||
|
static FileDiffReflection() {
|
||||||
|
byte[] descriptorData = global::System.Convert.FromBase64String(
|
||||||
|
string.Concat(
|
||||||
|
"Cg5GaWxlRGlmZi5wcm90byI8CghGaWxlRGlmZhIRCglmaWxlX25hbWUYASAB",
|
||||||
|
"KAkSDAoEaGFzaBgCIAEoCRIPCgd2ZXJzaW9uGAMgASgDQgWqAgJQYmIGcHJv",
|
||||||
|
"dG8z"));
|
||||||
|
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
|
||||||
|
new pbr::FileDescriptor[] { },
|
||||||
|
new pbr::GeneratedClrTypeInfo(null, null, new pbr::GeneratedClrTypeInfo[] {
|
||||||
|
new pbr::GeneratedClrTypeInfo(typeof(global::Pb.FileDiff), global::Pb.FileDiff.Parser, new[]{ "FileName", "Hash", "Version" }, null, null, null, null)
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
#region Messages
|
||||||
|
[global::System.Diagnostics.DebuggerDisplayAttribute("{ToString(),nq}")]
|
||||||
|
public sealed partial class FileDiff : pb::IMessage<FileDiff>
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
, pb::IBufferMessage
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
private static readonly pb::MessageParser<FileDiff> _parser = new pb::MessageParser<FileDiff>(() => new FileDiff());
|
||||||
|
private pb::UnknownFieldSet _unknownFields;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pb::MessageParser<FileDiff> Parser { get { return _parser; } }
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public static pbr::MessageDescriptor Descriptor {
|
||||||
|
get { return global::Pb.FileDiffReflection.Descriptor.MessageTypes[0]; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
pbr::MessageDescriptor pb::IMessage.Descriptor {
|
||||||
|
get { return Descriptor; }
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public FileDiff() {
|
||||||
|
OnConstruction();
|
||||||
|
}
|
||||||
|
|
||||||
|
partial void OnConstruction();
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public FileDiff(FileDiff other) : this() {
|
||||||
|
fileName_ = other.fileName_;
|
||||||
|
hash_ = other.hash_;
|
||||||
|
version_ = other.version_;
|
||||||
|
_unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public FileDiff Clone() {
|
||||||
|
return new FileDiff(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "file_name" field.</summary>
|
||||||
|
public const int FileNameFieldNumber = 1;
|
||||||
|
private string fileName_ = "";
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public string FileName {
|
||||||
|
get { return fileName_; }
|
||||||
|
set {
|
||||||
|
fileName_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "hash" field.</summary>
|
||||||
|
public const int HashFieldNumber = 2;
|
||||||
|
private string hash_ = "";
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public string Hash {
|
||||||
|
get { return hash_; }
|
||||||
|
set {
|
||||||
|
hash_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Field number for the "version" field.</summary>
|
||||||
|
public const int VersionFieldNumber = 3;
|
||||||
|
private long version_;
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public long Version {
|
||||||
|
get { return version_; }
|
||||||
|
set {
|
||||||
|
version_ = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override bool Equals(object other) {
|
||||||
|
return Equals(other as FileDiff);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public bool Equals(FileDiff other) {
|
||||||
|
if (ReferenceEquals(other, null)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (ReferenceEquals(other, this)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (FileName != other.FileName) return false;
|
||||||
|
if (Hash != other.Hash) return false;
|
||||||
|
if (Version != other.Version) return false;
|
||||||
|
return Equals(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override int GetHashCode() {
|
||||||
|
int hash = 1;
|
||||||
|
if (FileName.Length != 0) hash ^= FileName.GetHashCode();
|
||||||
|
if (Hash.Length != 0) hash ^= Hash.GetHashCode();
|
||||||
|
if (Version != 0L) hash ^= Version.GetHashCode();
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
hash ^= _unknownFields.GetHashCode();
|
||||||
|
}
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public override string ToString() {
|
||||||
|
return pb::JsonFormatter.ToDiagnosticString(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void WriteTo(pb::CodedOutputStream output) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
output.WriteRawMessage(this);
|
||||||
|
#else
|
||||||
|
if (FileName.Length != 0) {
|
||||||
|
output.WriteRawTag(10);
|
||||||
|
output.WriteString(FileName);
|
||||||
|
}
|
||||||
|
if (Hash.Length != 0) {
|
||||||
|
output.WriteRawTag(18);
|
||||||
|
output.WriteString(Hash);
|
||||||
|
}
|
||||||
|
if (Version != 0L) {
|
||||||
|
output.WriteRawTag(24);
|
||||||
|
output.WriteInt64(Version);
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(output);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
|
||||||
|
if (FileName.Length != 0) {
|
||||||
|
output.WriteRawTag(10);
|
||||||
|
output.WriteString(FileName);
|
||||||
|
}
|
||||||
|
if (Hash.Length != 0) {
|
||||||
|
output.WriteRawTag(18);
|
||||||
|
output.WriteString(Hash);
|
||||||
|
}
|
||||||
|
if (Version != 0L) {
|
||||||
|
output.WriteRawTag(24);
|
||||||
|
output.WriteInt64(Version);
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
_unknownFields.WriteTo(ref output);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public int CalculateSize() {
|
||||||
|
int size = 0;
|
||||||
|
if (FileName.Length != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeStringSize(FileName);
|
||||||
|
}
|
||||||
|
if (Hash.Length != 0) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeStringSize(Hash);
|
||||||
|
}
|
||||||
|
if (Version != 0L) {
|
||||||
|
size += 1 + pb::CodedOutputStream.ComputeInt64Size(Version);
|
||||||
|
}
|
||||||
|
if (_unknownFields != null) {
|
||||||
|
size += _unknownFields.CalculateSize();
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(FileDiff other) {
|
||||||
|
if (other == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (other.FileName.Length != 0) {
|
||||||
|
FileName = other.FileName;
|
||||||
|
}
|
||||||
|
if (other.Hash.Length != 0) {
|
||||||
|
Hash = other.Hash;
|
||||||
|
}
|
||||||
|
if (other.Version != 0L) {
|
||||||
|
Version = other.Version;
|
||||||
|
}
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
|
||||||
|
}
|
||||||
|
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
public void MergeFrom(pb::CodedInputStream input) {
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
input.ReadRawMessage(this);
|
||||||
|
#else
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
if ((tag & 7) == 4) {
|
||||||
|
// Abort on any end group tag.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
|
||||||
|
break;
|
||||||
|
case 10: {
|
||||||
|
FileName = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 18: {
|
||||||
|
Hash = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 24: {
|
||||||
|
Version = input.ReadInt64();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCode("protoc", null)]
|
||||||
|
void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
|
||||||
|
uint tag;
|
||||||
|
while ((tag = input.ReadTag()) != 0) {
|
||||||
|
if ((tag & 7) == 4) {
|
||||||
|
// Abort on any end group tag.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
switch(tag) {
|
||||||
|
default:
|
||||||
|
_unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
|
||||||
|
break;
|
||||||
|
case 10: {
|
||||||
|
FileName = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 18: {
|
||||||
|
Hash = input.ReadString();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 24: {
|
||||||
|
Version = input.ReadInt64();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Designer generated code
|
||||||
@@ -16,9 +16,9 @@ namespace Novaria.GameServer.Controllers.Api.ProtocolHandlers
|
|||||||
{
|
{
|
||||||
Mails mailListResp = (Mails)PcapParser.PcapParser.Instance.GetPcapPacket(NetMsgId.mail_list_succeed_ack);
|
Mails mailListResp = (Mails)PcapParser.PcapParser.Instance.GetPcapPacket(NetMsgId.mail_list_succeed_ack);
|
||||||
|
|
||||||
mailListResp.List[0].Subject = "夏萝莉是小楠梁";
|
mailListResp.List[0].Subject = "seggs";
|
||||||
mailListResp.List[1].Subject = "夏萝莉是小楠梁";
|
mailListResp.List[1].Subject = "seggs";
|
||||||
mailListResp.List[2].Subject = "夏萝莉是小楠梁";
|
mailListResp.List[2].Subject = "seggs";
|
||||||
|
|
||||||
return Packet.Create(NetMsgId.mail_list_succeed_ack, mailListResp);
|
return Packet.Create(NetMsgId.mail_list_succeed_ack, mailListResp);
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@ namespace Novaria.GameServer.Controllers.Api.ProtocolHandlers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[ProtocolHandler(NetMsgId.resident_shop_get_req)] // req id goes here
|
[ProtocolHandler(NetMsgId.resident_shop_get_req)] // req id goes here
|
||||||
public Packet PlayerLoginHandler(ResidentShopGetReq req)
|
public Packet ResidentShopGetHandler(ResidentShopGetReq req)
|
||||||
{
|
{
|
||||||
ResidentShopGetResp resp = new ResidentShopGetResp();
|
ResidentShopGetResp resp = new ResidentShopGetResp();
|
||||||
|
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
using Google.Protobuf;
|
using Google.Protobuf;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using Novaria.Common.Crypto;
|
using Novaria.Common.Crypto;
|
||||||
using Novaria.Common.Util;
|
using Novaria.Common.Util;
|
||||||
using Pb;
|
using Pb;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
using System.Text.Json;
|
||||||
|
|
||||||
namespace Novaria.GameServer.CoNovariaollers
|
namespace Novaria.GameServer.Controllers
|
||||||
{
|
{
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("/meta")]
|
[Route("/meta")]
|
||||||
@@ -39,6 +41,23 @@ namespace Novaria.GameServer.CoNovariaollers
|
|||||||
Log.Information("Response bytes:");
|
Log.Information("Response bytes:");
|
||||||
return File(response, "text/html");
|
return File(response, "text/html");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("and.html")]
|
||||||
|
public IActionResult GetAndroid()
|
||||||
|
{
|
||||||
|
string diffJson = System.IO.File.ReadAllText($"../../../../Novaria.GameServer/and.json"); // disgusting pathing, but "not hardcoded" now ig
|
||||||
|
|
||||||
|
ClientDiff clientDiff = JsonConvert.DeserializeObject<ClientDiff>(diffJson);
|
||||||
|
|
||||||
|
Console.WriteLine(clientDiff.Diff.Count);
|
||||||
|
Console.WriteLine(clientDiff.Diff[0].FileName);
|
||||||
|
|
||||||
|
byte[] encrypted_content = AeadTool.EncryptAesCBCInfo(AeadTool.DEFAULT_SERVERLIST_KEY, AeadTool.DEFAULT_AND_IV, clientDiff.ToByteArray());
|
||||||
|
|
||||||
|
byte[] response = Utils.CombineByteArrays(AeadTool.DEFAULT_AND_IV, encrypted_content);
|
||||||
|
|
||||||
|
return File(response, "text/html");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2,12 +2,25 @@
|
|||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
// rest of the random as packets during sdk
|
// rest of the random as packets during sdk
|
||||||
namespace Novaria.GameServer.CoNovariaollers
|
namespace Novaria.GameServer.Controllers
|
||||||
{
|
{
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("/")]
|
[Route("/")]
|
||||||
public class SDKController : ControllerBase
|
public class SDKController : ControllerBase
|
||||||
{
|
{
|
||||||
|
[HttpPost("user/oauth2/v2/grant")]
|
||||||
|
public IResult OAuthGrant()
|
||||||
|
{
|
||||||
|
return Results.Content(
|
||||||
|
@"
|
||||||
|
{
|
||||||
|
""msg"": ""夏萝莉是小楠梁"",
|
||||||
|
""status"": 106,
|
||||||
|
""type"": ""A""
|
||||||
|
}",
|
||||||
|
"application/json"
|
||||||
|
);
|
||||||
|
}
|
||||||
[Route("")]
|
[Route("")]
|
||||||
public IResult GetNothing()
|
public IResult GetNothing()
|
||||||
{
|
{
|
||||||
@@ -271,6 +284,17 @@ namespace Novaria.GameServer.CoNovariaollers
|
|||||||
");
|
");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("common/client-code")]
|
||||||
|
public IResult PostClientCode()
|
||||||
|
{
|
||||||
|
return Results.Text(@"
|
||||||
|
{
|
||||||
|
""Code"": 200,
|
||||||
|
""Msg"": ""OK""
|
||||||
|
}
|
||||||
|
");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
namespace Novaria.GameServer.CoNovariaollers
|
namespace Novaria.GameServer.Controllers
|
||||||
{
|
{
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Route("/user")]
|
[Route("/user")]
|
||||||
@@ -1,17 +1,8 @@
|
|||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||||
using Novaria.Common.Crypto;
|
|
||||||
using Novaria.Common.Core;
|
|
||||||
using Proto;
|
|
||||||
using Serilog;
|
using Serilog;
|
||||||
|
|
||||||
using Novaria.GameServer.Controllers.Api.ProtocolHandlers;
|
using Novaria.GameServer.Controllers.Api.ProtocolHandlers;
|
||||||
using Novaria.Common.Util;
|
|
||||||
using System.Numerics;
|
|
||||||
using Microsoft.AspNetCore.DataProtection;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json;
|
|
||||||
using Nova.Client;
|
|
||||||
|
|
||||||
namespace Novaria.GameServer
|
namespace Novaria.GameServer
|
||||||
{
|
{
|
||||||
@@ -6,6 +6,10 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Remove="win.json" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="DotNetZip" Version="1.16.0" />
|
<PackageReference Include="DotNetZip" Version="1.16.0" />
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.2">
|
||||||
29874
Novaria.GameServer/and.json
Normal file
29874
Novaria.GameServer/and.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1,14 +0,0 @@
|
|||||||
{
|
|
||||||
"version": "37",
|
|
||||||
"agent": [
|
|
||||||
{
|
|
||||||
"name": "启明测试",
|
|
||||||
"addr": "https://nova.yostar.cn/agent-zone-1/",
|
|
||||||
"status": 1,
|
|
||||||
"zone": "1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"status": 1,
|
|
||||||
"message": "测试尚未开始,预计开服时间1月9日11:00",
|
|
||||||
"reportEndpoint": "https://nova.yostar.cn/report/"
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
12
Novaria.sln
12
Novaria.sln
@@ -7,10 +7,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Novaria", "Novaria\Novaria.
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Novaria.Common", "Novaria.Common\Novaria.Common.csproj", "{F65D281C-FAF5-45A2-919C-CE5E9E038D43}"
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Novaria.Common", "Novaria.Common\Novaria.Common.csproj", "{F65D281C-FAF5-45A2-919C-CE5E9E038D43}"
|
||||||
EndProject
|
EndProject
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Novaria.GameServer", "Novaria.SDKServer\Novaria.GameServer.csproj", "{085E64B4-F04A-4866-8A3F-8E67DEB8E678}"
|
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novaria.PcapParser", "Novaria.PcapParser\Novaria.PcapParser.csproj", "{80CF22EB-B5AB-48B6-9706-23292461CCD3}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novaria.PcapParser", "Novaria.PcapParser\Novaria.PcapParser.csproj", "{80CF22EB-B5AB-48B6-9706-23292461CCD3}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Novaria.GameServer", "Novaria.GameServer\Novaria.GameServer.csproj", "{4A2CD3C5-9F10-493B-AEC9-B3DC74A292A1}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@@ -25,14 +25,14 @@ Global
|
|||||||
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Release|Any CPU.Build.0 = Release|Any CPU
|
{F65D281C-FAF5-45A2-919C-CE5E9E038D43}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{085E64B4-F04A-4866-8A3F-8E67DEB8E678}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{085E64B4-F04A-4866-8A3F-8E67DEB8E678}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{085E64B4-F04A-4866-8A3F-8E67DEB8E678}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{085E64B4-F04A-4866-8A3F-8E67DEB8E678}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Release|Any CPU.Build.0 = Release|Any CPU
|
{80CF22EB-B5AB-48B6-9706-23292461CCD3}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{4A2CD3C5-9F10-493B-AEC9-B3DC74A292A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{4A2CD3C5-9F10-493B-AEC9-B3DC74A292A1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{4A2CD3C5-9F10-493B-AEC9-B3DC74A292A1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{4A2CD3C5-9F10-493B-AEC9-B3DC74A292A1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Novaria.SDKServer\Novaria.GameServer.csproj" />
|
<ProjectReference Include="..\Novaria.GameServer\Novaria.GameServer.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
33
README.md
Normal file
33
README.md
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# Novaria
|
||||||
|
|
||||||
|
# Client Installation Tutorial
|
||||||
|
## PC (highly recommended, one click install)
|
||||||
|
|
||||||
|
Download and extract zip from [PC_NOVA_CN](https://tenshis-archive.duckdns.org/d/Tenshi's%20Archive/Game%20Files/Yostar%20Games/Stellar%20Sora/0.1.0/CN/PC_NOVA_CN.7z)
|
||||||
|
|
||||||
|
|
||||||
|
## Android (NOT recommended)
|
||||||
|
|
||||||
|
Download and install the apk from [APK_NOVA](https://tenshis-archive.duckdns.org/d/Tenshi's%20Archive/Game%20Files/Yostar%20Games/Stellar%20Sora/0.1.0/CN/星塔旅人.apk)
|
||||||
|
|
||||||
|
After installing the apk on your emulator, you have two ways of installing the resources needed
|
||||||
|
|
||||||
|
1. Manual install - download and extract [ANDROID_NOVA_CN](https://tenshis-archive.duckdns.org/d/Tenshi's%20Archive/Game%20Files/Yostar%20Games/Stellar%20Sora/0.1.0/CN/星塔旅人.apk) and move them into the game files on your emulator
|
||||||
|
|
||||||
|
2. Automatic install - run [android_update.bat](android_update.bat) (change the ip in [android_update.py](android_update.py) to your own ip first) and Novaria Server, after joining game the resources will download automatically.
|
||||||
|
|
||||||
|
|
||||||
|
#### I really do not recommend the android version, many things can go wrong, you are better off installing the pc client in one click lol
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
# Running
|
||||||
|
|
||||||
|
1. IMPORTANT: change the ip in [proxy.py](proxy.py) into your own ip
|
||||||
|
2. Run proxy.bat
|
||||||
|
3. Run Novaria
|
||||||
|
4. Join game
|
||||||
|
|
||||||
|
## Special Thanks
|
||||||
|
|
||||||
|
- Tenshi - (for hosting all the resources that was needed and creating the custom cdn <3)
|
||||||
1
android_update.bat
Normal file
1
android_update.bat
Normal file
@@ -0,0 +1 @@
|
|||||||
|
mitmweb -k -m wireguard --set block_global=false --mode local -s .\update.py
|
||||||
24
android_update.py
Normal file
24
android_update.py
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
from mitmproxy import http
|
||||||
|
from mitmproxy import ctx
|
||||||
|
from mitmproxy.proxy import layer
|
||||||
|
|
||||||
|
def load(loader):
|
||||||
|
ctx.options.connection_strategy = "lazy"
|
||||||
|
ctx.options.upstream_cert = False
|
||||||
|
ctx.options.ssl_insecure = True
|
||||||
|
ctx.options.allow_hosts = ['nova-static.yostar.cn', 'nova.yostar.cn', 'sdk-api.yostar.cn', 'static-stellasora.yostar.net', "udata-api.open.yostar.net"]
|
||||||
|
|
||||||
|
def next_layer(nextlayer: layer.NextLayer):
|
||||||
|
sni = nextlayer.context.client.sni
|
||||||
|
if sni and (sni.endswith("nova.yostar.cn") or sni.endswith("sdk-api.yostar.cn") or sni.endswith("static-stellasora.yostar.net") or sni.endswith("udata-api.open.yostar.net")):
|
||||||
|
ctx.log('sni:' + sni)
|
||||||
|
nextlayer.context.server.address = ("192.168.86.32", 443)
|
||||||
|
|
||||||
|
def request(flow: http.HTTPFlow) -> None:
|
||||||
|
if (flow.request.host_header.endswith("nova-static.yostar.cn")) and ("serverlist.html" not in flow.request.path_components) and ("and.html" not in flow.request.path_components):
|
||||||
|
flow.request.host = "nova-static.duckdns.org"
|
||||||
|
flow.request.port = 443
|
||||||
|
|
||||||
|
if ("serverlist.html" in flow.request.path_components or "and.html" in flow.request.path_components):
|
||||||
|
flow.request.host = "192.168.86.32"
|
||||||
|
flow.request.port = 443
|
||||||
Reference in New Issue
Block a user