From cc03f40d9fb1d68bfd945284a3ff5067dfd8475a Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Sun, 4 Aug 2024 23:53:30 +0200 Subject: [IMP] [unstable] User password hashing, and renamed newoskrnl.dll to newoskrnl.lib. [IMP] [unstable] Using paths for usernames. Such as \Local\Super on 192.168.2.4 for example. Signed-off-by: Amlal EL Mahrouss --- Kernel/HALKit/AMD64/HalKernelMain.cxx | 2 +- Kernel/KernelKit/User.hxx | 10 ++++----- Kernel/KernelRsrc.rsrc | 2 +- Kernel/Linker/16x0.json | 2 +- Kernel/Linker/32x0.json | 2 +- Kernel/Linker/64x0.json | 2 +- Kernel/Linker/arm64.json | 2 +- Kernel/Sources/FS/NewFS.cxx | 2 +- Kernel/Sources/KernelCheck.cxx | 10 ++------- Kernel/Sources/User.cxx | 42 ++++++++++++++++++++++++++++------- Kernel/amd64-efi.make | 2 +- Kernel/arm64-efi.make | 2 +- 12 files changed, 50 insertions(+), 30 deletions(-) (limited to 'Kernel') diff --git a/Kernel/HALKit/AMD64/HalKernelMain.cxx b/Kernel/HALKit/AMD64/HalKernelMain.cxx index 020ee59d..e3bcb20c 100644 --- a/Kernel/HALKit/AMD64/HalKernelMain.cxx +++ b/Kernel/HALKit/AMD64/HalKernelMain.cxx @@ -243,7 +243,7 @@ void hal_real_init(void) } kTextOffsetY += 10; - cg_write_text("LOADING SUBSYSTEMS...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); + cg_write_text("LOADING SECURITY SUBSYSTEM...", kTextOffsetY, 10, RGB(0x00, 0x00, 0x00)); Kernel::ke_stop(RUNTIME_CHECK_BOOTSTRAP); } diff --git a/Kernel/KernelKit/User.hxx b/Kernel/KernelKit/User.hxx index 5a91459b..a7aaa508 100644 --- a/Kernel/KernelKit/User.hxx +++ b/Kernel/KernelKit/User.hxx @@ -13,8 +13,8 @@ #include // user mode users. -#define kSuperUser "Super" -#define kGuestUser "Guest" +#define kSuperUser "\\Local\\Super" +#define kGuestUser "\\Local\\Guest" #define kUsersFile "\\Users\\$UserMTF" @@ -90,9 +90,9 @@ namespace Kernel NEWOS_COPY_DELETE(UserManager); STATIC UserManager* The() noexcept; - Bool LogIn(User* user, const Char* password) noexcept; - User* Current() noexcept; - Void LogOff() noexcept; + Bool TryLogIn(User* user, const Char* password) noexcept; + User* GetCurrent() noexcept; + Void TryLogOff() noexcept; }; } // namespace Kernel diff --git a/Kernel/KernelRsrc.rsrc b/Kernel/KernelRsrc.rsrc index 4cf7e352..f7b42292 100644 --- a/Kernel/KernelRsrc.rsrc +++ b/Kernel/KernelRsrc.rsrc @@ -15,7 +15,7 @@ BEGIN VALUE "FileVersion", KERNEL_VERSION VALUE "InternalName", "newoskrnl" VALUE "LegalCopyright", "(c) ZKA Technologies, all rights reserved." - VALUE "OriginalFilename", "newoskrnl.dll" + VALUE "OriginalFilename", "newoskrnl.lib" VALUE "ProductName", "newoskrnl" VALUE "ProductVersion", KERNEL_VERSION END diff --git a/Kernel/Linker/16x0.json b/Kernel/Linker/16x0.json index 9c284b53..1f769a4c 100644 --- a/Kernel/Linker/16x0.json +++ b/Kernel/Linker/16x0.json @@ -1,7 +1,7 @@ { "linker": "link.exe", "executable_type": "kernel", - "output_name": "newoskrnl.dll", + "output_name": "newoskrnl.lib", "start_proc": "__ImageStart", "arch": "16x0", "format": "PEF" diff --git a/Kernel/Linker/32x0.json b/Kernel/Linker/32x0.json index 05a3db9b..a78a1090 100644 --- a/Kernel/Linker/32x0.json +++ b/Kernel/Linker/32x0.json @@ -1,7 +1,7 @@ { "linker": "link.exe", "executable_type": "kernel", - "output_name": "newoskrnl.dll", + "output_name": "newoskrnl.lib", "start_proc": "__ImageStart", "arch": "32x0", "format": "PEF" diff --git a/Kernel/Linker/64x0.json b/Kernel/Linker/64x0.json index c1d0e388..b9b9a34e 100644 --- a/Kernel/Linker/64x0.json +++ b/Kernel/Linker/64x0.json @@ -1,7 +1,7 @@ { "linker": "link.exe", "executable_type": "kernel", - "output_name": "newoskrnl.dll", + "output_name": "newoskrnl.lib", "start_proc": "__ImageStart", "arch": "64x0", "format": "PEF" diff --git a/Kernel/Linker/arm64.json b/Kernel/Linker/arm64.json index 99c190bf..2e75f9fd 100644 --- a/Kernel/Linker/arm64.json +++ b/Kernel/Linker/arm64.json @@ -1,7 +1,7 @@ { "linker": "link.exe", "executable_type": "kernel", - "output_name": "newoskrnl.dll", + "output_name": "newoskrnl.lib", "start_proc": "__ImageStart", "arch": "arm64", "format": "PEF" diff --git a/Kernel/Sources/FS/NewFS.cxx b/Kernel/Sources/FS/NewFS.cxx index c5b9c1e3..23d2867f 100644 --- a/Kernel/Sources/FS/NewFS.cxx +++ b/Kernel/Sources/FS/NewFS.cxx @@ -304,7 +304,7 @@ _Output NFS_CATALOG_STRUCT* NewFSParser::CreateCatalog(_Input const char* name, if (flagsList & kNewFSCatalogKindMetaFile) { - if (UserManager::The()->Current() != UserManager::The()->fRootUser) + if (UserManager::The()->GetCurrent() != UserManager::The()->fRootUser) { delete catalogChild; return nullptr; diff --git a/Kernel/Sources/KernelCheck.cxx b/Kernel/Sources/KernelCheck.cxx index defe6841..900bbf6e 100644 --- a/Kernel/Sources/KernelCheck.cxx +++ b/Kernel/Sources/KernelCheck.cxx @@ -15,15 +15,9 @@ #include #include -EXTERN_C [[noreturn]] Kernel::Void ke_wait_for_debugger() +EXTERN_C Kernel::Void ke_wait_for_debugger() { - while (Yes) - { -#ifdef __NEWOS_AMD64__ - Kernel::HAL::rt_cli(); - Kernel::HAL::rt_halt(); -#endif - } + } /* Each error code is attributed with an ID, which will prompt a string onto the diff --git a/Kernel/Sources/User.cxx b/Kernel/Sources/User.cxx index 60981551..e0ccaf6b 100644 --- a/Kernel/Sources/User.cxx +++ b/Kernel/Sources/User.cxx @@ -26,9 +26,19 @@ namespace Kernel /// \brief Constructs a token by hashing the password. /// \param password password to hash. /// \return the hashed password - const Char* cred_construct_token(const Char* password) + const Int32 cred_construct_token(Char* password, User* user) { - return nullptr; + if (!password || !user) + return -1; + + for (Size i_pass = 0; i_pass < rt_string_len(password); ++i_pass) + { + Char cur_chr = password[i_pass]; + password[i_pass] = cur_chr + (user->IsStdUser() ? 0xCF : 0xEF); + } + + + return 0; } } @@ -90,7 +100,7 @@ namespace Kernel return view; } - Bool UserManager::LogIn(User* user, const Char* password) noexcept + Bool UserManager::TryLogIn(User* user, const Char* password) noexcept { if (!password || !user) @@ -119,9 +129,25 @@ namespace Kernel } else { - auto tok = Detail::cred_construct_token(password); + Char generated_token[255] = { 0 }; + + // ================================================== // + // Provide password on token variable. + // ================================================== // + + rt_copy_memory((VoidPtr)password, generated_token, rt_string_len(password)); + + // ================================================== // + // Construct token. + // ================================================== // + + Detail::cred_construct_token(generated_token, user); + + // ================================================== // + // Checks if it matches the current token we have. + // ================================================== // - if (rt_string_cmp((Char*)token, tok, rt_string_len(tok))) + if (rt_string_cmp((Char*)token, generated_token, rt_string_len(password))) { kcout << "newoskrnl: Incorrect credentials.\r"; @@ -146,7 +172,7 @@ namespace Kernel } else { - this->LogOff(); + this->TryLogOff(); } } @@ -156,12 +182,12 @@ namespace Kernel return true; } - User* UserManager::Current() noexcept + User* UserManager::GetCurrent() noexcept { return fCurrentUser; } - Void UserManager::LogOff() noexcept + Void UserManager::TryLogOff() noexcept { if (!fCurrentUser) return; diff --git a/Kernel/amd64-efi.make b/Kernel/amd64-efi.make index 3de2bf30..ce9bcd90 100644 --- a/Kernel/amd64-efi.make +++ b/Kernel/amd64-efi.make @@ -39,7 +39,7 @@ LDFLAGS = -e ke_startup_platform --subsystem=17 --image-base 0x10000000 LDOBJ = Objects/*.obj # This file is the kernel, responsible of task management and memory. -KERNEL = newoskrnl.dll +KERNEL = newoskrnl.lib .PHONY: error error: diff --git a/Kernel/arm64-efi.make b/Kernel/arm64-efi.make index 410e7789..92324d46 100644 --- a/Kernel/arm64-efi.make +++ b/Kernel/arm64-efi.make @@ -27,7 +27,7 @@ LDFLAGS = -subsystem:efi_application -entry:hal_init_platform /nodefaultlib LDOBJ = Objects/*.obj # This file is the kernel, responsible of task management and memory. -KERNEL = newoskrnl.dll +KERNEL = newoskrnl.lib .PHONY: error error: -- cgit v1.2.3