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 --- Boot/Sources/HEL/AMD64/BootMain.cxx | 4 ++-- Boot/Sources/Root/bootloader.json | 2 +- Boot/amd64-efi.make | 4 ++-- 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 +- 15 files changed, 55 insertions(+), 35 deletions(-) diff --git a/Boot/Sources/HEL/AMD64/BootMain.cxx b/Boot/Sources/HEL/AMD64/BootMain.cxx index 2bc2aca1..d2a478c6 100644 --- a/Boot/Sources/HEL/AMD64/BootMain.cxx +++ b/Boot/Sources/HEL/AMD64/BootMain.cxx @@ -201,7 +201,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, // format the disk. // ---------------------------------------------------- // - BFileReader readerKernel(L"newoskrnl.dll", ImageHandle); + BFileReader readerKernel(L"newoskrnl.lib", ImageHandle); readerKernel.ReadAll(0); @@ -214,7 +214,7 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, if (readerKernel.Blob()) { loader = new Boot::ProgramLoader(readerKernel.Blob()); - loader->SetName("\"newoskrnl.dll\" (64-bit SMP DLL)"); + loader->SetName("\"newoskrnl.lib\" (64-bit SMP DLL)"); } writer.Write("newosldr: Running: ").Write(loader->GetName()).Write("\r"); diff --git a/Boot/Sources/Root/bootloader.json b/Boot/Sources/Root/bootloader.json index fe1a57d4..51cb36b5 100644 --- a/Boot/Sources/Root/bootloader.json +++ b/Boot/Sources/Root/bootloader.json @@ -1,4 +1,4 @@ { - "newoskrnl.dll": "kernel", + "newoskrnl.lib": "kernel", "ZETA/fonts.json": "rsrc" } diff --git a/Boot/amd64-efi.make b/Boot/amd64-efi.make index b8d5b771..87235cc6 100644 --- a/Boot/amd64-efi.make +++ b/Boot/amd64-efi.make @@ -50,7 +50,7 @@ FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -D__NEWOS_OTA__ -mno-red-zone -D__NEWOSK -std=c++20 -D__HAVE_MAHROUSS_APIS__ -D__NEWOS_AMD64__ -D__MAHROUSS__ -D__BOOTLOADER__ -I../ BOOT_LOADER=newosldr.exe -KERNEL=newoskrnl.dll +KERNEL=newoskrnl.lib DDK=libDDK.lib SCI=libSCI.lib @@ -97,7 +97,7 @@ download-edk: $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd BINS=*.bin -EXECUTABLES=newosldr.exe newoskrnl.dll OVMF.fd +EXECUTABLES=newosldr.exe newoskrnl.lib OVMF.fd TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) 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