From a8d2622cc20342e5a445287c878fe07d4400fcba Mon Sep 17 00:00:00 2001 From: Greg Date: Sat, 3 Dec 2022 22:49:20 -0700 Subject: [PATCH] Move API out of Toolbox prx, Install pkg from HDD & Updating API packets. --- Misc/DriverDefinitions.h | 176 ----- Playstation/OrbisLibAPI/API.cpp | 80 +++ Playstation/OrbisLibAPI/API.h | 21 + .../APIHelper.cpp | 0 .../APIHelper.h | 0 .../APIPackets.h | 68 +- .../Breakpoint.cpp | 0 .../Breakpoint.h | 0 Playstation/OrbisLibAPI/Common.h | 28 +- .../Debug.cpp | 0 .../{OrbisToolbox-2.0 => OrbisLibAPI}/Debug.h | 0 Playstation/OrbisLibAPI/Flash.cpp | 14 + Playstation/OrbisLibAPI/Flash.h | 12 + Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj | 21 + .../OrbisLibAPI/OrbisLibAPI.vcxproj.filters | 75 +- .../Proc.cpp | 6 +- .../{OrbisToolbox-2.0 => OrbisLibAPI}/Proc.h | 0 Playstation/OrbisLibAPI/Registry.cpp | 663 ++++++++++++++++++ Playstation/OrbisLibAPI/Registry.h | 3 + Playstation/OrbisLibAPI/SocketListener.cpp | 150 ++++ Playstation/OrbisLibAPI/SocketListener.h | 24 + Playstation/OrbisLibAPI/System.cpp | 143 ++++ Playstation/OrbisLibAPI/System.h | 38 + .../Target.cpp | 38 +- .../Target.h | 0 Playstation/OrbisLibAPI/Utilities.cpp | 25 + Playstation/OrbisLibAPI/Utilities.h | 2 +- Playstation/OrbisLibAPI/Version.h | 22 +- .../Watchpoint.cpp | 0 .../Watchpoint.h | 0 Playstation/OrbisLibAPI/libjbc.h | 6 + Playstation/OrbisLibAPI/main.cpp | 35 +- Playstation/OrbisSuite/OrbisSuite.vcxproj | 1 + .../OrbisSuite/OrbisSuite.vcxproj.filters | 3 + Playstation/OrbisSuite/Utilities.cpp | 1 + Playstation/OrbisSuite/build.bat | 4 +- Playstation/OrbisSuite/libjbc.h | 29 + Playstation/OrbisSuite/main.cpp | 5 +- Playstation/OrbisToolbox-2.0/API.cpp | 80 --- Playstation/OrbisToolbox-2.0/API.h | 22 - Playstation/OrbisToolbox-2.0/Common.h | 1 - Playstation/OrbisToolbox-2.0/KDriver.cpp | 144 ---- Playstation/OrbisToolbox-2.0/KDriver.h | 25 - Playstation/OrbisToolbox-2.0/Menu.cpp | 14 +- .../OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj | 17 - .../OrbisToolbox-2.0.vcxproj.filters | 69 -- Playstation/OrbisToolbox-2.0/OrbisToolbox.cpp | 74 +- .../OrbisToolbox-2.0/SysfileUtilWrapper.cpp | 18 - Playstation/OrbisToolbox-2.0/Version.h | 22 +- .../Classes/Target/Process/Process.cs | 9 +- .../OrbisLib/Common/API/APIPackets.cs | 34 +- Windows/Libraries/OrbisLib/Common/Config.cs | 2 +- .../Resources/BuildNumber.txt | 2 +- .../Resources/BuildString.txt | 2 +- 54 files changed, 1508 insertions(+), 720 deletions(-) delete mode 100644 Misc/DriverDefinitions.h rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/APIHelper.cpp (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/APIHelper.h (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/APIPackets.h (83%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Breakpoint.cpp (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Breakpoint.h (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Debug.cpp (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Debug.h (100%) create mode 100644 Playstation/OrbisLibAPI/Flash.cpp create mode 100644 Playstation/OrbisLibAPI/Flash.h rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Proc.cpp (93%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Proc.h (100%) create mode 100644 Playstation/OrbisLibAPI/Registry.cpp create mode 100644 Playstation/OrbisLibAPI/Registry.h create mode 100644 Playstation/OrbisLibAPI/SocketListener.cpp create mode 100644 Playstation/OrbisLibAPI/SocketListener.h create mode 100644 Playstation/OrbisLibAPI/System.cpp create mode 100644 Playstation/OrbisLibAPI/System.h rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Target.cpp (79%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Target.h (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Watchpoint.cpp (100%) rename Playstation/{OrbisToolbox-2.0 => OrbisLibAPI}/Watchpoint.h (100%) create mode 100644 Playstation/OrbisSuite/libjbc.h delete mode 100644 Playstation/OrbisToolbox-2.0/API.cpp delete mode 100644 Playstation/OrbisToolbox-2.0/API.h delete mode 100644 Playstation/OrbisToolbox-2.0/KDriver.cpp delete mode 100644 Playstation/OrbisToolbox-2.0/KDriver.h diff --git a/Misc/DriverDefinitions.h b/Misc/DriverDefinitions.h deleted file mode 100644 index 407effe..0000000 --- a/Misc/DriverDefinitions.h +++ /dev/null @@ -1,176 +0,0 @@ -#pragma once - -#if defined(__cplusplus) -extern "C" { -#endif - -#if defined(KERNELDRIVER) -#include -#else -#include -#define IOC_VOID 0x20000000 /* no parameters */ -#define IOC_OUT 0x40000000 /* copy out parameters */ -#define IOC_IN 0x80000000 /* copy in parameters */ -#define IOC_INOUT (IOC_IN|IOC_OUT) -#endif - -#if defined(__cplusplus) -}; -#endif - -enum KDriverCommands -{ - /* ######## Proc Commands ####### */ - CMD_PROC_LIST, - CMD_PROC_INFO, - CMD_PROC_MODULE_LIST, - CMD_PROC_READ_WRITE_MEMORY, - CMD_PROC_ALLOC_MEMORY, - CMD_PROC_FREE_MEMORY, - CMD_PROC_SPRX, - CMD_PROC_ELF, - /* ############################## */ - - /* ###### Kernel Commands ####### */ - CMD_KERN_READ_WRITE_MEMORY, - /* ############################## */ - - /* ###### KDriver Commands ###### */ - CMD_KDRIVER_INFO, - /* ############################## */ -}; - -// Process Commands -struct KDriver_ProcList -{ - uint64_t UserlandAddr; - size_t UserlandSize; - int ProcCount; -}; - -struct ProcInfo -{ - int PID; - bool Attached; - char ProcName[32]; - char TitleID[10]; - uint64_t TextSegmentBase; - uint64_t TextSegmentLen; - uint64_t DataSegmentBase; - uint64_t DataSegmentLen; -}; - -struct KDriver_ProcSPRX -{ - int CallType; - char ProcName[32]; - int Handle; - char Path[4096]; - bool CallEntryExit; -}; - -struct KDriver_ProcInfo -{ - int ProcessID; - uint64_t UserlandAddr; - size_t UserlandSize; - int ThreadCount; -}; - -struct ProcInfoExt -{ - struct ThreadInfo - { - int ThreadId; - char Name[36]; - int Errno; - int RetVal; - }; - - int ProcessID; - int Attached; - int Signal; - int Code; - int Stops; - int StopType; - char ProcName[32]; - char TitleID[10]; - char ElfPath[1024]; - char RandomizedPath[256]; - uint64_t TextSegmentBase; - uint64_t TextSegmentLen; - uint64_t DataSegmentBase; - uint64_t DataSegmentLen; - - int ThreadCount; - ThreadInfo Threads[]; -}; - -struct KDriver_ModuleList -{ - int ProcessID; - uint64_t UserlandAddr; - size_t UserlandSize; - int ModuleCount; -}; - -struct ModuleInfo -{ - int Handle; - char Name[36]; - char Path[256]; - uint64_t TextSegmentBase; - uint64_t TextSegmentLen; - uint64_t DataSegmentBase; - uint64_t DataSegmentLen; -}; - -struct KDriver_ReadWriteMemory -{ - int ProcessID; - bool IsRead; - uint64_t ProcessAddress; - uint64_t UserlandAddr; - size_t Length; -}; - -struct KDriver_AllocFreeMemory -{ - int ProcessID; - size_t Ammount; - uint64_t ProcessAddress; -}; - -struct KDriver_ProcELF -{ - int ProcessID; - uint64_t ELFAddress; - size_t ELFSize; -}; - -#define PROC_LIST _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_LIST), sizeof(KDriver_ProcList)) -#define PROC_INFO _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_INFO), sizeof(KDriver_ProcInfo)) -#define PROC_MODULE_LIST _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_MODULE_LIST), sizeof(KDriver_ModuleList)) -#define PROC_READ_WRITE_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_READ_WRITE_MEMORY), sizeof(KDriver_ReadWriteMemory)) -#define PROC_ALLOC_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_ALLOC_MEMORY), sizeof(KDriver_AllocFreeMemory)) -#define PROC_FREE_MEMORY _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_FREE_MEMORY), sizeof(KDriver_AllocFreeMemory)) -#define PROC_SPRX _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_SPRX), sizeof(KDriver_ProcSPRX)) -#define PROC_ELF _IOC(IOC_INOUT, 'P', (uint32_t)(KDriverCommands::CMD_PROC_ELF), sizeof(KDriver_ProcELF)) - -// Kernel Commands -#define KERN_READ_WRITE_MEMORY _IOC(IOC_INOUT, 'K', (uint32_t)(KDriverCommands::CMD_KERN_READ_WRITE_MEMORY), sizeof(KDriver_ReadWriteMemory)) - -// Kdriver Commands -struct KDriver_Info -{ - int MajorVersion; - int MinorVersion; - int BuildVersion; - bool Running; - int(*Shutdown)(); - int(*Entry)(void* p); - void* ELFBase; - int Size; -}; - -#define KDRIVER_INFO _IOC(IOC_OUT, 'D', (uint32_t)(KDriverCommands::CMD_KDRIVER_INFO), sizeof(KDriver_Info)) diff --git a/Playstation/OrbisLibAPI/API.cpp b/Playstation/OrbisLibAPI/API.cpp index e69de29..f8e44b6 100644 --- a/Playstation/OrbisLibAPI/API.cpp +++ b/Playstation/OrbisLibAPI/API.cpp @@ -0,0 +1,80 @@ +#include "Common.h" +#include "API.h" + +Proc* API::Proc; +Debug* API::Debug; +Target* API::Target; +SocketListener* API::Listener; +bool API::Running = false; + +void API::ListenerCallback(void* tdParam, OrbisNetId s) +{ + auto Packet = RecievePacket(s); + + if (Packet != nullptr) + { + // Make sure were getting the proper packet version. + if (Packet->PacketVersion != PACKET_VERSION) + { + //klog("Packet version %i does not match our expected %i version!\n", Packet->PacketVersion, PACKET_VERSION); + + free(Packet); + + return; + } + + // Send out the command to the right places. + switch (Packet->Command) + { + default: + klog("API: Invalid Command %i...\n", Packet->Command); + break; + + case APICommands::PROC_START ... APICommands::PROC_END: + Proc->HandleAPI(s, Packet); + break; + + case APICommands::DBG_START ... APICommands::DBG_END: + Debug->HandleAPI(s, Packet); + break; + + case APICommands::KERN_START ... APICommands::KERN_END: + klog("Kernel API Call\n"); + + break; + + case APICommands::TARGET_START ... APICommands::TARGET_END: + Target->HandleAPI(s, Packet); + break; + + } + } + + // Clean up. :) + free(Packet); +} + +void API::Init() +{ + if (!Running) + { + klog("API Startup.\n"); + Proc = new class Proc(); + Debug = new class Debug(); + Target = new class Target(); + Listener = new SocketListener(ListenerCallback, NULL, 6900); + Running = true; + } +} + +void API::Term() +{ + if (Running) + { + delete Proc; + delete Debug; + delete Target; + delete Listener; + Running = false; + } +} \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/API.h b/Playstation/OrbisLibAPI/API.h index 6f70f09..53cfdc1 100644 --- a/Playstation/OrbisLibAPI/API.h +++ b/Playstation/OrbisLibAPI/API.h @@ -1 +1,22 @@ #pragma once +#include "Proc.h" +#include "Debug.h" +#include "Target.h" +#include "SocketListener.h" +#include "APIHelper.h" + +class API +{ +private: + static Proc* Proc; + static Debug* Debug; + static Target* Target; + static SocketListener* Listener; + + static void ListenerCallback(void* tdParam, OrbisNetId s); + +public: + static bool Running; + static void Init(); + static void Term(); +}; \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/APIHelper.cpp b/Playstation/OrbisLibAPI/APIHelper.cpp similarity index 100% rename from Playstation/OrbisToolbox-2.0/APIHelper.cpp rename to Playstation/OrbisLibAPI/APIHelper.cpp diff --git a/Playstation/OrbisToolbox-2.0/APIHelper.h b/Playstation/OrbisLibAPI/APIHelper.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/APIHelper.h rename to Playstation/OrbisLibAPI/APIHelper.h diff --git a/Playstation/OrbisToolbox-2.0/APIPackets.h b/Playstation/OrbisLibAPI/APIPackets.h similarity index 83% rename from Playstation/OrbisToolbox-2.0/APIPackets.h rename to Playstation/OrbisLibAPI/APIPackets.h index 2b06e2b..0e52ecd 100644 --- a/Playstation/OrbisToolbox-2.0/APIPackets.h +++ b/Playstation/OrbisLibAPI/APIPackets.h @@ -1,6 +1,9 @@ #pragma once +#include "Common.h" -#define PACKET_VERSION 1 +#define PACKET_VERSION 2 + +#pragma region Commands enum APICommands { @@ -18,6 +21,7 @@ enum APICommands /* ##### Debugger functions ##### */ DBG_START, + API_DBG_ATTACH, /* Debugger attach to target */ API_DBG_DETACH, /* Debugger detach from target */ API_DBG_GET_CURRENT, @@ -63,19 +67,23 @@ enum APICommands API_DBG_WATCHPOINT_REMOVE, API_DBG_WATCHPOINT_GETINFO, API_DBG_WATCHPOINT_LIST, + DBG_END, /* ############################## */ /* ###### Kernel functions ###### */ KERN_START, + API_KERN_BASE, API_KERN_READ, API_KERN_WRITE, + KERN_END, /* ############################## */ /* ###### Target functions ###### */ TARGET_START, + API_TARGET_INFO, API_TARGET_RESTMODE, API_TARGET_SHUTDOWN, @@ -85,11 +93,15 @@ enum APICommands API_TARGET_SET_LED, API_TARGET_DUMP_PROC, API_TARGET_SET_SETTINGS, - //API_TARGET_LOAD_VSH_MODULE + TARGET_END, /* ############################## */ }; +#pragma endregion + +#pragma region Generic + enum APIResults { API_OK = 1, @@ -113,39 +125,36 @@ struct APIPacket char ProcName[32]; }; +#pragma endregion + #pragma region Process struct ProcPacket { - int32_t ProcessID; //0x00 - int32_t Attached; //0x04 - char ProcName[32]; //0x08 - char TitleID[10]; //0x28 - uint64_t TextSegmentBase; - uint64_t TextSegmentLen; - uint64_t DataSegmentBase; - uint64_t DataSegmentLen; + int32_t ProcessId; + char Name[32]; + char TitleId[10]; }; -struct ModuleListPacket +#pragma endregion + +#pragma region Debug + +struct LibraryPacket { - char Name[36]; //0x00 - char Handle[256]; //0x24 - int mHandle; //0x124 - uint64_t TextSegmentBase; //0x128 - uint64_t TextSegmentLen; //0x130 - uint64_t DataSegmentBase; //0x138 - uint64_t DataSegmentLen; //0x140 + int64_t Handle; + char Path[256]; + int32_t SegmentCount; + SceDbgModuleSegmentInfo Segments[4]; }; - -struct ProcRWPacket +struct DbgRWPacket { uint64_t Address; uint64_t Length; }; -struct ProcSPRXPacket +struct DbgSPRXPacket { char Name[256]; char Path[256]; @@ -162,13 +171,6 @@ struct ProcBreakpointPacket #pragma endregion -#pragma region Debug - - - -#pragma endregion - - #pragma region Kernel @@ -177,16 +179,6 @@ struct ProcBreakpointPacket #pragma region Target -enum ConsoleTypes -{ - UNK, - DIAG, //0x80 - DEVKIT, //0x81 - TESTKIT, //0x82 - RETAIL, //0x83 -> 0x8F - KRATOS, //0xA0 IMPOSSIBLE?? -}; - struct MemoryInfo { int Used; diff --git a/Playstation/OrbisToolbox-2.0/Breakpoint.cpp b/Playstation/OrbisLibAPI/Breakpoint.cpp similarity index 100% rename from Playstation/OrbisToolbox-2.0/Breakpoint.cpp rename to Playstation/OrbisLibAPI/Breakpoint.cpp diff --git a/Playstation/OrbisToolbox-2.0/Breakpoint.h b/Playstation/OrbisLibAPI/Breakpoint.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/Breakpoint.h rename to Playstation/OrbisLibAPI/Breakpoint.h diff --git a/Playstation/OrbisLibAPI/Common.h b/Playstation/OrbisLibAPI/Common.h index 5d1711b..27fb545 100644 --- a/Playstation/OrbisLibAPI/Common.h +++ b/Playstation/OrbisLibAPI/Common.h @@ -1,25 +1,33 @@ #pragma once -#include +#include +#include #include +#include +#include +#include #include #include #include #include -#include #include +#include +#include +#include #include +#include +#include +#include +#include #include -#include -#include -#include #include #include -#include -#include -#include -#include +#include "SocketListener.h" #include "Utilities.h" #include "GoldHEN.h" -#include "libjbc.h" \ No newline at end of file +#include "libjbc.h" +#include "System.h" +#include "Flash.h" + +#include "APIPackets.h" diff --git a/Playstation/OrbisToolbox-2.0/Debug.cpp b/Playstation/OrbisLibAPI/Debug.cpp similarity index 100% rename from Playstation/OrbisToolbox-2.0/Debug.cpp rename to Playstation/OrbisLibAPI/Debug.cpp diff --git a/Playstation/OrbisToolbox-2.0/Debug.h b/Playstation/OrbisLibAPI/Debug.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/Debug.h rename to Playstation/OrbisLibAPI/Debug.h diff --git a/Playstation/OrbisLibAPI/Flash.cpp b/Playstation/OrbisLibAPI/Flash.cpp new file mode 100644 index 0000000..a19ef17 --- /dev/null +++ b/Playstation/OrbisLibAPI/Flash.cpp @@ -0,0 +1,14 @@ +#include "Common.h" +#include "Flash.h" + +void ReadFlash(off_t Offset, void* Data, unsigned int Size) +{ + int fd = sceKernelOpen("/dev/sflash0", ORBIS_KERNEL_O_RDONLY, 0777); + if (fd) + { + sceKernelPread(fd, Data, Size, Offset); + sceKernelClose(fd); + } + else + klog("Failed to Open sflash\n"); +} \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/Flash.h b/Playstation/OrbisLibAPI/Flash.h new file mode 100644 index 0000000..ed082e3 --- /dev/null +++ b/Playstation/OrbisLibAPI/Flash.h @@ -0,0 +1,12 @@ +#pragma once + +#define FLASH_FACTORY_FW 0x1C9060 // 4 Bytes +#define FLASH_CURRENT_FW 0x1C9068 // 4 Bytes +#define FLASH_MB_SERIAL 0x1C8000 // 14 Bytes String +#define FLASH_SERIAL 0x1C8030 // 10 Bytes String +#define FLASH_MODEL 0x1C8041 // 14 Bytes String +#define FLASH_LAN_MAC 0x1C4021 // 6 Bytes +#define FLASH_UART_FLAG 0x1C931F // 1 Byte +#define FLASH_IDU_MODE 0x1CA600 // 1 Byte + +void ReadFlash(off_t Offset, void* Data, unsigned int Size); \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj b/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj index 648e13d..08596a7 100644 --- a/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj +++ b/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj @@ -62,16 +62,37 @@ del /s /q /f $(IntDir)\*.oelf + + + + + + + + + + + + + + + + + + + + + diff --git a/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj.filters b/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj.filters index a78ddfa..97709d8 100644 --- a/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj.filters +++ b/Playstation/OrbisLibAPI/OrbisLibAPI.vcxproj.filters @@ -37,6 +37,12 @@ {b1c92aaf-bc5d-40c6-9066-2e094daec1eb} + + {1208a8d1-5a46-4050-b790-ead6e42541ce} + + + {5094835e-2ace-4366-93ee-a65317ee8a62} + @@ -49,6 +55,36 @@ Source Files + + Source Files\API\Misc + + + Source Files\Utilities + + + Source Files\API\CmdGroups + + + Source Files\API\CmdGroups + + + Source Files\API\CmdGroups + + + Source Files\API\CmdGroups + + + Source Files\API\CmdGroups + + + Source Files\Utilities\PS Utils + + + Source Files\Utilities\PS Utils + + + Source Files\Utilities\PS Utils + @@ -57,14 +93,47 @@ Header Files\Utilities - - Header Files\Utilities - Header Files\API Header Files\Utilities + + Header Files\API\Misc + + + Header Files\API\Misc + + + Header Files\Utilities + + + Header Files\API\CmdGroups + + + Header Files\API\CmdGroups + + + Header Files\API\CmdGroups + + + Header Files\API\CmdGroups + + + Header Files\API\CmdGroups + + + Header Files\Utilities\PS Utils + + + Header Files\Utilities\PS Utils + + + Header Files\Utilities\PS Utils + + + Header Files\Utilities\PS Utils + \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Proc.cpp b/Playstation/OrbisLibAPI/Proc.cpp similarity index 93% rename from Playstation/OrbisToolbox-2.0/Proc.cpp rename to Playstation/OrbisLibAPI/Proc.cpp index 5bec507..53234ed 100644 --- a/Playstation/OrbisToolbox-2.0/Proc.cpp +++ b/Playstation/OrbisLibAPI/Proc.cpp @@ -1,7 +1,6 @@ #include "Common.h" #include "Proc.h" #include "APIHelper.h" -#include "KDriver.h" void Proc::HandleAPI(OrbisNetId Sock, APIPacket* Packet) { @@ -40,8 +39,9 @@ Proc::~Proc() void Proc::SendProcessList(OrbisNetId Sock) { + // TODO: Update // Allocate space for packet to send. - auto Packet = (ProcPacket*)malloc(sizeof(ProcPacket)); + /*auto Packet = (ProcPacket*)malloc(sizeof(ProcPacket)); // Gets list of running processes. auto procInfo = (ProcInfo*)malloc(sizeof(ProcInfo) * 200); @@ -72,5 +72,5 @@ void Proc::SendProcessList(OrbisNetId Sock) // Cleanup. free(Packet); - free(procInfo); + free(procInfo);*/ } \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Proc.h b/Playstation/OrbisLibAPI/Proc.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/Proc.h rename to Playstation/OrbisLibAPI/Proc.h diff --git a/Playstation/OrbisLibAPI/Registry.cpp b/Playstation/OrbisLibAPI/Registry.cpp new file mode 100644 index 0000000..cfad297 --- /dev/null +++ b/Playstation/OrbisLibAPI/Registry.cpp @@ -0,0 +1,663 @@ +#include "Common.h" +#include "Registry.h" + +uint Registry_Find_By_Name(const char* Name) +{ + static std::map RegistryEntries; + static bool Initialized; + if (!Initialized) + { + RegistryEntries.insert(std::pair("/REGISTRY/version", 0x1010000)); + RegistryEntries.insert(std::pair("/REGISTRY", 0x1000000)); + RegistryEntries.insert(std::pair("/REGISTRY/install", 0x1020000)); + RegistryEntries.insert(std::pair("/REGISTRY/update", 0x1030000)); + RegistryEntries.insert(std::pair("/REGISTRY/not_save", 0x1040000)); + RegistryEntries.insert(std::pair("/REGISTRY/recover", 0x1050000)); + RegistryEntries.insert(std::pair("/REGISTRY/downgrade", 0x1060000)); + RegistryEntries.insert(std::pair("/REGISTRY/bootcount", 0x1070000)); + RegistryEntries.insert(std::pair("/REGISTRY/lastver", 0x1080000)); + RegistryEntries.insert(std::pair("/REGISTRY/init_flag", 0x1400000)); + RegistryEntries.insert(std::pair("/SYSTEM", 0x2000000)); + RegistryEntries.insert(std::pair("/SYSTEM/update_mode", 0x2010000)); + RegistryEntries.insert(std::pair("/SYSTEM/language", 0x2020000)); + RegistryEntries.insert(std::pair("/SYSTEM/initialize", 0x2040000)); + RegistryEntries.insert(std::pair("/SYSTEM/nickname", 0x2050000)); + RegistryEntries.insert(std::pair("/SYSTEM/dimmer_interval", 0x2060000)); + RegistryEntries.insert(std::pair("/SYSTEM/eapfunction", 0x2070000)); + RegistryEntries.insert(std::pair("/SYSTEM/enable_voicercg", 0x2080000)); + RegistryEntries.insert(std::pair("/SYSTEM/profilech_ver", 0x20A0000)); + RegistryEntries.insert(std::pair("/SYSTEM/button_assign", 0x20B0000)); + RegistryEntries.insert(std::pair("/SYSTEM/backup_mode", 0x20C0000)); + RegistryEntries.insert(std::pair("/SYSTEM/pon_memory_test", 0x20D0000)); + RegistryEntries.insert(std::pair("/SYSTEM/game_rec_mode", 0x20E0000)); + RegistryEntries.insert(std::pair("/SYSTEM/shell_function", 0x20F0000)); + RegistryEntries.insert(std::pair("/SYSTEM/pad_connection", 0x2100000)); + RegistryEntries.insert(std::pair("/SYSTEM/data_transfer", 0x2110000)); + RegistryEntries.insert(std::pair("/SYSTEM/base_mode_clkup", 0x2120000)); + RegistryEntries.insert(std::pair("/SYSTEM/neo_vddnb_vid_offset", 0x2400000)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE", 0x2800000)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/server_url", 0x2800100)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/eula_version", 0x2800200)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/pscode", 0x2800300)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/reboot_flag", 0x2800400)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/auto_download", 0x2800500)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/idu_version", 0x2800600)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/next_check", 0x2800700)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/auto_update", 0x2800800)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/last_version", 0x2800900)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/last_updversion", 0x2800A00)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/build_number", 0x2804000)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/auto_update_int", 0x2808000)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/tool_update_chk", 0x2808100)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/server_url_beta", 0x2808200)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/check_limit", 0x2808300)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/ignore_entcheck", 0x2808400)); + RegistryEntries.insert(std::pair("/SYSTEM/UPDATE/strict_verchk", 0x2808500)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER", 0x2820000)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/charge", 0x2820100)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/signin", 0x2820200)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/remote", 0x2820300)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/controller_off", 0x2820400)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/auto_off_media", 0x2820500)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/auto_off_other", 0x2820600)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/auto_power_down", 0x2820700)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/suspend_to_ram", 0x2820800)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/standby_start", 0x2820900)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/power_history", 0x2820B00)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/spwakeup", 0x2820C00)); + RegistryEntries.insert(std::pair("/SYSTEM/POWER/charge_minutes", 0x2828000)); + RegistryEntries.insert(std::pair("/SYSTEM/NOTIFICATION", 0x2840000)); + RegistryEntries.insert(std::pair("/SYSTEM/NOTIFICATION/invisible_items", 0x2840100)); + RegistryEntries.insert(std::pair("/SYSTEM/ACTIVATION", 0x2780000)); + RegistryEntries.insert(std::pair("/SYSTEM/ACTIVATION/mpeg2", 0x2780100)); + RegistryEntries.insert(std::pair("/SYSTEM/ACTIVATION/vc1", 0x2780200)); + RegistryEntries.insert(std::pair("/SYSTEM/ACTIVATION/hevc", 0x2780300)); + RegistryEntries.insert(std::pair("/SYSTEM/ACTIVATION/hevc_soft", 0x2780400)); + RegistryEntries.insert(std::pair("/SYSTEM/PLATFORMPRIVACY", 0x27C0000)); + RegistryEntries.insert(std::pair("/SYSTEM/PLATFORMPRIVACY/eu_ws1", 0x27C0100)); + RegistryEntries.insert(std::pair("/SYSTEM/SPECIFIC", 0x2860000)); + RegistryEntries.insert(std::pair("/SYSTEM/SPECIFIC/idu_mode", 0x2860100)); + RegistryEntries.insert(std::pair("/SYSTEM/SPECIFIC/show_mode", 0x2860200)); + RegistryEntries.insert(std::pair("/SYSTEM/SPECIFIC/arcade_mode", 0x2860300)); + RegistryEntries.insert(std::pair("/SYSTEM/SPECIFIC/arcade_id", 0x2860500)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD", 0x2880000)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/autodl_featured", 0x2880100)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/default_hdd", 0x2880200)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/bgft_env_slot", 0x2888000)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/bgft_debug_log", 0x2888100)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/bgft_debug_ntf", 0x2888200)); + RegistryEntries.insert(std::pair("/SYSTEM/DOWNLOAD/bgft_debug_bwct", 0x2888300)); + RegistryEntries.insert(std::pair("/SYSTEM/DB", 0x2900000)); + RegistryEntries.insert(std::pair("/SYSTEM/DB/default_player", 0x2900100)); + RegistryEntries.insert(std::pair("/SYSTEM/DB/manifest_usb", 0x2908000)); + RegistryEntries.insert(std::pair("/SYSTEM/BGDC", 0x2A00000)); + RegistryEntries.insert(std::pair("/SYSTEM/BGDC/last_modified", 0x2A00100)); + RegistryEntries.insert(std::pair("/SYSTEM/BGDC/server_url", 0x2A08000)); + RegistryEntries.insert(std::pair("/SYSTEM/SELF", 0x2B00000)); + RegistryEntries.insert(std::pair("/SYSTEM/SELF/verr_count", 0x2B00100)); + RegistryEntries.insert(std::pair("/SYSTEM/SELF/ierr_count", 0x2B00200)); + RegistryEntries.insert(std::pair("/SYSTEM/WCTL", 0x2B40000)); + RegistryEntries.insert(std::pair("/SYSTEM/WCTL/server_env", 0x2B40100)); + RegistryEntries.insert(std::pair("/SYSTEM/AUTO/MOUNTER", 0x2B80000)); + RegistryEntries.insert(std::pair("/SYSTEM/AUTO/MOUNTER/previous_hdd_id", 0x2B80100)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS", 0x2BC0000)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/last_report", 0x2BC0100)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/process_time", 0x2BC0200)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/real_time_dur", 0x2BC0300)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/sys_int_hdd_r", 0x2BC0400)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/sys_int_hdd_w", 0x2BC0500)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/sys_ext_hdd_r", 0x2BC0600)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/sys_ext_hdd_w", 0x2BC0700)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/game_int_hdd_r", 0x2BC0800)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/game_int_hdd_w", 0x2BC0900)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/game_ext_hdd_r", 0x2BC0A00)); + RegistryEntries.insert(std::pair("/SYSTEM/HDD/WRITE/STATS/game_ext_hdd_w", 0x2BC0B00)); + RegistryEntries.insert(std::pair("/SYSTEM/SMR_HDD", 0x2BE0000)); + RegistryEntries.insert(std::pair("/SYSTEM/SMR_HDD/statechange_ntf", 0x2BE8000)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL", 0x3800000)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/game", 0x3800100)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/bd", 0x3800200)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/bd_age", 0x3800300)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/dvd_region", 0x3800400)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/dvd", 0x3800500)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/browser", 0x3800600)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/create_account", 0x3800700)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/passcode", 0x3800800)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/morpheus", 0x3800900)); + RegistryEntries.insert(std::pair("/SECURITY/PARENTAL/papc_all_ok", 0x3800A00)); + RegistryEntries.insert(std::pair("/DATE", 0x5000000)); + RegistryEntries.insert(std::pair("/DATE/time_zone", 0x5010000)); + RegistryEntries.insert(std::pair("/DATE/date_format", 0x5020000)); + RegistryEntries.insert(std::pair("/DATE/time_format", 0x5030000)); + RegistryEntries.insert(std::pair("/DATE/summer_time", 0x5040000)); + RegistryEntries.insert(std::pair("/DATE/set_auto", 0x5050000)); + RegistryEntries.insert(std::pair("/DATE/is_summer_time", 0x5060000)); + RegistryEntries.insert(std::pair("/DATE/utc_offset", 0x5070000)); + RegistryEntries.insert(std::pair("/DATE/timezone_offset", 0x5080000)); + RegistryEntries.insert(std::pair("/DATE/tzdata_update", 0x5090000)); + RegistryEntries.insert(std::pair("/DATE/is_tz_adjusted", 0x50A0000)); + RegistryEntries.insert(std::pair("/DATE/rtc_offset", 0x5140000)); + RegistryEntries.insert(std::pair("/DATE/rtc_net", 0x5150000)); + RegistryEntries.insert(std::pair("/DATE/rtc_net_dbg", 0x5160000)); + RegistryEntries.insert(std::pair("/DATE/rtc_net_ad", 0x5170000)); + RegistryEntries.insert(std::pair("/DATE/fake_geoip", 0x5800000)); + RegistryEntries.insert(std::pair("/DATE/use_test_cdn", 0x5810000)); + RegistryEntries.insert(std::pair("/DATE/testserver_slot", 0x5820000)); + RegistryEntries.insert(std::pair("/USER", 0x7000000)); + RegistryEntries.insert(std::pair("/USER/auto_login_user", 0x7010000)); + RegistryEntries.insert(std::pair("/USER/max_used_home_u", 0x7020000)); + RegistryEntries.insert(std::pair("/USER/init_user", 0x7030000)); + RegistryEntries.insert(std::pair("/USER/enable_facercg", 0x7040000)); + RegistryEntries.insert(std::pair("/USER/max_used_guest_", 0x7050000)); + RegistryEntries.insert(std::pair("/USER/max_used_sharep", 0x7060000)); + RegistryEntries.insert(std::pair("/USER/cumulative_user", 0x7070000)); + RegistryEntries.insert(std::pair("/USER/disp_acc_info", 0x7400000)); + RegistryEntries.insert(std::pair("/USER/new_user_group", 0x7410000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY", 0x9000000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/invert_color", 0x9010000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/large_text", 0x9020000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/bold_text", 0x9030000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/contrast", 0x9040000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/shortcut", 0x9050000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/marquee_speed", 0x9060000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/long_press_time", 0x9070000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/TTS", 0x9400000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/TTS/enable", 0x9400100)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/TTS/speed", 0x9400200)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/TTS/volume", 0x9400300)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/TTS/readout", 0x9400400)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG", 0x9C00000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/text_to_speech", 0x9C00100)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/large_text", 0x9C00200)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/bold_text", 0x9C00300)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/speech_tag", 0x9C04000)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/use_ext_tts_dic", 0x9C04100)); + RegistryEntries.insert(std::pair("/ACCESSIBILITY/DEBUG/tts_debug_log", 0x9C04200)); + RegistryEntries.insert(std::pair("/VIDEOOUT", 0xA000000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/mode", 0xA030000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/color_depth", 0xA040000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/signal_range", 0xA060000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/screen_size", 0xA070000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/enable_cec", 0xA080000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/yuv_range", 0xA0A0000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/display_area", 0xA0D0000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/hdmi_history", 0xA0F0000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/screen_size_uns", 0xA100000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/hdcp_off_mode", 0xA110000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/setting_options", 0xA120000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/reset_reso_flag", 0xA130000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/hdcp_version", 0xA140000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/hdr", 0xA150000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/hdr_confirmed", 0xA160000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/disable_hdcp", 0xA320000)); + RegistryEntries.insert(std::pair("/VIDEOOUT/force_hdr_cap", 0xA330000)); + RegistryEntries.insert(std::pair("/AUDIOOUT", 0xB000000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/mode", 0xB010000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/headphone_out", 0xB030000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/keytone", 0xB040000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/system_bgm", 0xB050000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/connector_type", 0xB060000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/codec", 0xB070000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/sound_format", 0xB080000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/config_options", 0xB090000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/measure_enable", 0xB800000)); + RegistryEntries.insert(std::pair("/AUDIOOUT/run_options", 0xB810000)); + RegistryEntries.insert(std::pair("/NET/IP", 0x14140000)); + RegistryEntries.insert(std::pair("/NET/IP/ip_address", 0x14140100)); + RegistryEntries.insert(std::pair("/NET/IP/netmask", 0x14140200)); + RegistryEntries.insert(std::pair("/NET/IP/default_route", 0x14140300)); + RegistryEntries.insert(std::pair("/NET/IP/dns_flag", 0x14140400)); + RegistryEntries.insert(std::pair("/NET/IP/primary_dns", 0x14140500)); + RegistryEntries.insert(std::pair("/NET/IP/secondary_dns", 0x14140600)); + RegistryEntries.insert(std::pair("/NET/IP/ip_config", 0x14140700)); + RegistryEntries.insert(std::pair("/NET/IP/dhcp_hostname", 0x14140800)); + RegistryEntries.insert(std::pair("/NET/IP/auth_name", 0x14140C00)); + RegistryEntries.insert(std::pair("/NET/IP/auth_key", 0x14140D00)); + RegistryEntries.insert(std::pair("/NET/IP/leased_ip", 0x14140E00)); + RegistryEntries.insert(std::pair("/NET/IP/leased_exp_tick", 0x14140F00)); + RegistryEntries.insert(std::pair("/NET/COMMON", 0x14190000)); + RegistryEntries.insert(std::pair("/NET/COMMON/device", 0x14190100)); + RegistryEntries.insert(std::pair("/NET/COMMON/net_flag", 0x14190600)); + RegistryEntries.insert(std::pair("/NET/COMMON/conf_type", 0x14190700)); + RegistryEntries.insert(std::pair("/NET/COMMON/mtu", 0x14190800)); + RegistryEntries.insert(std::pair("/NET/COMMON/ether_mode", 0x14190900)); + RegistryEntries.insert(std::pair("/NET/COMMON/ap_auto_config", 0x14190A00)); + RegistryEntries.insert(std::pair("/NET/WIFI", 0x141E0000)); + RegistryEntries.insert(std::pair("/NET/WIFI/ssid", 0x141E0100)); + RegistryEntries.insert(std::pair("/NET/WIFI/wifi_security", 0x141E0200)); + RegistryEntries.insert(std::pair("/NET/WIFI/wep_key", 0x141E0300)); + RegistryEntries.insert(std::pair("/NET/WIFI/wpa_key", 0x141E0400)); + RegistryEntries.insert(std::pair("/NET/WIFI/freq_band", 0x141E0500)); + RegistryEntries.insert(std::pair("/NET/WIFI/COMMON", 0x141E4000)); + RegistryEntries.insert(std::pair("/NET/WIFI/COMMON/mtu", 0x141E4001)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP", 0x141E6000)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/ip_config", 0x141E6001)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/dhcp_hostname", 0x141E6002)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/auth_name", 0x141E6003)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/auth_key", 0x141E6004)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/ip_address", 0x141E6005)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/netmask", 0x141E6006)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/default_route", 0x141E6007)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/dns_flag", 0x141E6008)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/primary_dns", 0x141E6009)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/secondary_dns", 0x141E600A)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/leased_ip", 0x141E600B)); + RegistryEntries.insert(std::pair("/NET/WIFI/IP/leased_exp_tick", 0x141E600C)); + RegistryEntries.insert(std::pair("/NET/WIFI/APP", 0x141E8000)); + RegistryEntries.insert(std::pair("/NET/WIFI/APP/http_proxy_flag", 0x141E8001)); + RegistryEntries.insert(std::pair("/NET/WIFI/APP/http_proxy_svr", 0x141E8002)); + RegistryEntries.insert(std::pair("/NET/WIFI/APP/http_proxy_port", 0x141E8003)); + RegistryEntries.insert(std::pair("/NET/AOSS", 0x14230000)); + RegistryEntries.insert(std::pair("/NET/AOSS/wpa_aes_ssid", 0x14230100)); + RegistryEntries.insert(std::pair("/NET/AOSS/wpa_tkip_ssid", 0x14230200)); + RegistryEntries.insert(std::pair("/NET/AOSS/wep128_ssid", 0x14230300)); + RegistryEntries.insert(std::pair("/NET/AOSS/wep64_ssid", 0x14230400)); + RegistryEntries.insert(std::pair("/NET/AOSS/wpa_aes_key", 0x14230500)); + RegistryEntries.insert(std::pair("/NET/AOSS/wpa_tkip_key", 0x14230600)); + RegistryEntries.insert(std::pair("/NET/AOSS/wep128_key", 0x14230700)); + RegistryEntries.insert(std::pair("/NET/AOSS/wep64_key", 0x14230800)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G", 0x14234000)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wep64_ssid", 0x14234001)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wep64_key", 0x14234002)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wep128_ssid", 0x14234003)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wep128_key", 0x14234004)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wpa_tkip_ssid", 0x14234005)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wpa_tkip_key", 0x14234006)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wpa_aes_ssid", 0x14234007)); + RegistryEntries.insert(std::pair("/NET/AOSS/5G/wpa_aes_key", 0x14234008)); + RegistryEntries.insert(std::pair("/NET/APP", 0x14280000)); + RegistryEntries.insert(std::pair("/NET/APP/http_proxy_flag", 0x14280100)); + RegistryEntries.insert(std::pair("/NET/APP/http_proxy_svr", 0x14280200)); + RegistryEntries.insert(std::pair("/NET/APP/http_proxy_port", 0x14280300)); + RegistryEntries.insert(std::pair("/NET/APP/ssl_cert_ignore", 0x14288000)); + RegistryEntries.insert(std::pair("/NET/APP/ssl_psn_trace", 0x14288100)); + RegistryEntries.insert(std::pair("/NET/AP", 0x142D0000)); + RegistryEntries.insert(std::pair("/NET/AP/ap_flag", 0x142D0100)); + RegistryEntries.insert(std::pair("/NET/AP/ssid", 0x142D0200)); + RegistryEntries.insert(std::pair("/NET/AP/wpa_key", 0x142D0300)); + RegistryEntries.insert(std::pair("/NET/AP/channel", 0x142D0400)); + RegistryEntries.insert(std::pair("/NET/GAME_AP", 0x142E0000)); + RegistryEntries.insert(std::pair("/NET/GAME_AP/wpa_key", 0x142E0100)); + RegistryEntries.insert(std::pair("/NET/GAME_AP/wpa_key_for_qa", 0x142E0200)); + RegistryEntries.insert(std::pair("/NET", 0x14000000)); + RegistryEntries.insert(std::pair("/NET/dbg_ip_address", 0x14700000)); + RegistryEntries.insert(std::pair("/NET/dbg_netmask", 0x14710000)); + RegistryEntries.insert(std::pair("/NET/dbg_route", 0x14740000)); + RegistryEntries.insert(std::pair("/NET/dbg_route_mask", 0x14750000)); + RegistryEntries.insert(std::pair("/NET/dbg_gateway", 0x14760000)); + RegistryEntries.insert(std::pair("/NET/dbg_ip_config", 0x14770000)); + RegistryEntries.insert(std::pair("/NET/dbg_dhcp_hname", 0x14780000)); + RegistryEntries.insert(std::pair("/NET/emulation_type", 0x14790000)); + RegistryEntries.insert(std::pair("/NET/always_lan", 0x147A0000)); + RegistryEntries.insert(std::pair("/NP", 0x19000000)); + RegistryEntries.insert(std::pair("/NP/patch_auto_dl", 0x19010000)); + RegistryEntries.insert(std::pair("/NP/cache_pssdc", 0x19020000)); + RegistryEntries.insert(std::pair("/NP/env", 0x19800000)); + RegistryEntries.insert(std::pair("/NP/debug", 0x19810000)); + RegistryEntries.insert(std::pair("/NP/test_patch", 0x19820000)); + RegistryEntries.insert(std::pair("/NP/tpps_proxy_flag", 0x19830000)); + RegistryEntries.insert(std::pair("/NP/tpps_proxy_svr", 0x19840000)); + RegistryEntries.insert(std::pair("/NP/tpps_proxy_port", 0x19850000)); + RegistryEntries.insert(std::pair("/NP/tpps_proxy_user", 0x19860000)); + RegistryEntries.insert(std::pair("/NP/tpps_proxy_pwd", 0x19870000)); + RegistryEntries.insert(std::pair("/NP/dbg_upgradable", 0x19880000)); + RegistryEntries.insert(std::pair("/NP/fake_plus", 0x19890000)); + RegistryEntries.insert(std::pair("/NP/dbg_commerce", 0x198A0000)); + RegistryEntries.insert(std::pair("/NP/quick_signup_pw", 0x198B0000)); + RegistryEntries.insert(std::pair("/NP/geo_filtering", 0x198C0000)); + RegistryEntries.insert(std::pair("/NP/trophy_debug", 0x198D0000)); + RegistryEntries.insert(std::pair("/NP/ignore_fakerif", 0x198E0000)); + RegistryEntries.insert(std::pair("/NP/patch_check", 0x198F0000)); + RegistryEntries.insert(std::pair("/NP/dbg_videosrv", 0x19900000)); + RegistryEntries.insert(std::pair("/NP/sf_debug", 0x19910000)); + RegistryEntries.insert(std::pair("/NP/fake_ratelimit", 0x19930000)); + RegistryEntries.insert(std::pair("/NP/ignore_titleid", 0x19940000)); + RegistryEntries.insert(std::pair("/NP/npdrm_debug_log", 0x19950000)); + RegistryEntries.insert(std::pair("/NP/npdrm_debug_ntf", 0x19960000)); + RegistryEntries.insert(std::pair("/NP/sslchk_secure", 0x19970000)); + RegistryEntries.insert(std::pair("/NP/sslchk_liveitem", 0x19980000)); + RegistryEntries.insert(std::pair("/NP/plus_recheck", 0x19990000)); + RegistryEntries.insert(std::pair("/NP/regicam_url", 0x199A0000)); + RegistryEntries.insert(std::pair("/NP/manifest_url", 0x199B0000)); + RegistryEntries.insert(std::pair("/NP/per_act_sync", 0x199C0000)); + RegistryEntries.insert(std::pair("/NP/geo_location", 0x199D0000)); + RegistryEntries.insert(std::pair("/NP/ev_fake_clock", 0x199E0000)); + RegistryEntries.insert(std::pair("/NP/dailymotion_lng", 0x199F0000)); + RegistryEntries.insert(std::pair("/NP/diskcache_quota", 0x19A00000)); + RegistryEntries.insert(std::pair("/NP/fake_dispname", 0x19A10000)); + RegistryEntries.insert(std::pair("/NP/deathstar_url", 0x19A30000)); + RegistryEntries.insert(std::pair("/NP/ds_family_url", 0x19A40000)); + RegistryEntries.insert(std::pair("/NP/fake_version", 0x19A50000)); + RegistryEntries.insert(std::pair("/CAMERA", 0x1E000000)); + RegistryEntries.insert(std::pair("/CAMERA/camera_hw_info", 0x1E010000)); + RegistryEntries.insert(std::pair("/CAMERA/mute_mic", 0x1E020000)); + RegistryEntries.insert(std::pair("/VRTRACKER", 0x20000000)); + RegistryEntries.insert(std::pair("/VRTRACKER/vrtracker_info", 0x20010000)); + RegistryEntries.insert(std::pair("/VRTRACKER/telemetry", 0x20400000)); + RegistryEntries.insert(std::pair("/VRTRACKER/vision_mgr_if", 0x20410000)); + RegistryEntries.insert(std::pair("/VRTRACKER/green_ds4_track", 0x20800000)); + RegistryEntries.insert(std::pair("/BDDVD", 0x23000000)); + RegistryEntries.insert(std::pair("/BDDVD/bd_menu_lang", 0x23010000)); + RegistryEntries.insert(std::pair("/BDDVD/bd_sound_lang", 0x23020000)); + RegistryEntries.insert(std::pair("/BDDVD/bd_cap_lang", 0x23030000)); + RegistryEntries.insert(std::pair("/BDDVD/nr", 0x23040000)); + RegistryEntries.insert(std::pair("/BDDVD/display_mode", 0x23050000)); + RegistryEntries.insert(std::pair("/BDDVD/hd50hz_output", 0x23060000)); + RegistryEntries.insert(std::pair("/BDDVD/drc", 0x23070000)); + RegistryEntries.insert(std::pair("/BDDVD/bd_audio_mix", 0x23080000)); + RegistryEntries.insert(std::pair("/BDDVD/network_connect", 0x23090000)); + RegistryEntries.insert(std::pair("/BDDVD/dvd_menu_lang", 0x230A0000)); + RegistryEntries.insert(std::pair("/BDDVD/dvd_sound_lang", 0x230B0000)); + RegistryEntries.insert(std::pair("/BDDVD/dvd_cap_lang", 0x230C0000)); + RegistryEntries.insert(std::pair("/BDDVD/sound_format", 0x230D0000)); + RegistryEntries.insert(std::pair("/BDDVD/s3d_on_hmd", 0x230E0000)); + RegistryEntries.insert(std::pair("/BDDVD/flag", 0x230F0000)); + RegistryEntries.insert(std::pair("/EVENT", 0x2A000000)); + RegistryEntries.insert(std::pair("/EVENT/auto_boot_tick", 0x2A010000)); + RegistryEntries.insert(std::pair("/GLS", 0x32000000)); + RegistryEntries.insert(std::pair("/GLS/bc_mode", 0x32010000)); + RegistryEntries.insert(std::pair("/GLS/social_mode", 0x32020000)); + RegistryEntries.insert(std::pair("/GLS/broadcast_url", 0x32030000)); + RegistryEntries.insert(std::pair("/GLS/rpin", 0x320C0000)); + RegistryEntries.insert(std::pair("/GLS/irc_url", 0x32810000)); + RegistryEntries.insert(std::pair("/GLS/irc_channel", 0x32820000)); + RegistryEntries.insert(std::pair("/GLS/irc_user", 0x32830000)); + RegistryEntries.insert(std::pair("/GLS/irc_passwd", 0x32840000)); + RegistryEntries.insert(std::pair("/GLS/sf_latency", 0x32850000)); + RegistryEntries.insert(std::pair("/GLS/debug_info_url", 0x32870000)); + RegistryEntries.insert(std::pair("/GLS/emb_svr_ur", 0x32880000)); + RegistryEntries.insert(std::pair("/GLS/live_quality_d", 0x32890000)); + RegistryEntries.insert(std::pair("/SHARE", 0x37000000)); + RegistryEntries.insert(std::pair("/SHARE/sound_mix", 0x37050000)); + RegistryEntries.insert(std::pair("/SHARE/rec_prohibit", 0x37060000)); + RegistryEntries.insert(std::pair("/SHARE/ctr_share_test", 0x37070000)); + RegistryEntries.insert(std::pair("/SHARE/cpy_share_item", 0x37080000)); + RegistryEntries.insert(std::pair("/SHARE/rec_time", 0x37090000)); + RegistryEntries.insert(std::pair("/SHARE/status", 0x370A0000)); + RegistryEntries.insert(std::pair("/SHARE/ctr_share_range", 0x37800000)); + RegistryEntries.insert(std::pair("/SHARE/title_check", 0x37810000)); + RegistryEntries.insert(std::pair("/SHARE/ctr_share_save", 0x37820000)); + RegistryEntries.insert(std::pair("/SHAREFACTORY", 0x39000000)); + RegistryEntries.insert(std::pair("/SHAREFACTORY/direct_boot_id", 0x39010000)); + RegistryEntries.insert(std::pair("/BROWSER", 0x3C000000)); + RegistryEntries.insert(std::pair("/BROWSER/enable_cookie", 0x3C020000)); + RegistryEntries.insert(std::pair("/BROWSER/enable_js", 0x3C030000)); + RegistryEntries.insert(std::pair("/BROWSER/check_signup", 0x3C040000)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG", 0x3CC80000)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/calist_loadmode", 0x3CC80100)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/verify_ssl", 0x3CC80200)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/dfg_jit_enabled", 0x3CC80300)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/net_dbg_config", 0x3CC80400)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/check_iframe", 0x3CC80500)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/enable_jslog", 0x3CC80600)); + RegistryEntries.insert(std::pair("/BROWSER/DEBUG/notification", 0x3CC80700)); + RegistryEntries.insert(std::pair("/REMOTEPLAY", 0x41000000)); + RegistryEntries.insert(std::pair("/REMOTEPLAY/rp_enable", 0x41810000)); + RegistryEntries.insert(std::pair("/REMOTEPLAY/ap_flag", 0x41820000)); + RegistryEntries.insert(std::pair("/REMOTEPLAY/log_enable", 0x41C00000)); + RegistryEntries.insert(std::pair("/SHAREPLAY", 0x44000000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/mode", 0x44800000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/ip_direct", 0x44810000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/resolution", 0x44820000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/bitrate", 0x44830000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/framerate", 0x44840000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/quality_graph", 0x44850000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/ephemeral_port", 0x44860000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/pcl_check", 0x44870000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/store_check", 0x44880000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/age_check", 0x44890000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/gav_check", 0x448A0000)); + RegistryEntries.insert(std::pair("/SHAREPLAY/fake_time_limit", 0x448B0000)); + RegistryEntries.insert(std::pair("/PARTY", 0x45000000)); + RegistryEntries.insert(std::pair("/PARTY/volume_down", 0x45010000)); + RegistryEntries.insert(std::pair("/PARTY/voice_priority", 0x45020000)); + RegistryEntries.insert(std::pair("/PARTY/upstream_bandw", 0x45030000)); + RegistryEntries.insert(std::pair("/PLAYTOGETHER", 0x55000000)); + RegistryEntries.insert(std::pair("/PLAYTOGETHER/game_played", 0x55010000)); + RegistryEntries.insert(std::pair("/SYSCORE", 0x5A000000)); + RegistryEntries.insert(std::pair("/SYSCORE/shell_watch_dog", 0x5A020000)); + RegistryEntries.insert(std::pair("/COMPANION", 0x64000000)); + RegistryEntries.insert(std::pair("/COMPANION/dbg_launch_mode", 0x64010000)); + RegistryEntries.insert(std::pair("/COMPANION/dbg_ip_chk_flg", 0x64020000)); + RegistryEntries.insert(std::pair("/COMPANION/user_bind_mode", 0x64030000)); + RegistryEntries.insert(std::pair("/MUSIC/MUSIC/APP", 0x46010000)); + RegistryEntries.insert(std::pair("/MUSIC/MUSIC/APP/repeat_mode", 0x46010100)); + RegistryEntries.insert(std::pair("/MUSIC/MUSIC/APP/shuffle_mode", 0x46010200)); + RegistryEntries.insert(std::pair("/MUSIC/MUSIC/APP/audio_balance", 0x46010300)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER", 0x49000000)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/1080_24p", 0x49010000)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC", 0x49020000)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/enable_cc", 0x49020100)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/content_specifi", 0x49020200)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_color", 0x49020300)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_opacity", 0x49020400)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_size", 0x49020500)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/font_type", 0x49020600)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_edge", 0x49020700)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_edge_color", 0x49020800)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_bg_color", 0x49020900)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/char_bg_opacity", 0x49020A00)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/window_color", 0x49020B00)); + RegistryEntries.insert(std::pair("/VIDEOPLAYER/CC/window_opacity", 0x49020C00)); + RegistryEntries.insert(std::pair("/VIDEOEDIT", 0x4B000000)); + RegistryEntries.insert(std::pair("/VIDEOEDIT/first_time_act", 0x4B010000)); + RegistryEntries.insert(std::pair("/MUSICUNLIMITED", 0x4E000000)); + RegistryEntries.insert(std::pair("/MUSICUNLIMITED/debug_url", 0x4E800000)); + RegistryEntries.insert(std::pair("/PRJSP", 0x4F000000)); + RegistryEntries.insert(std::pair("/PRJSP/app_installed", 0x4F010000)); + RegistryEntries.insert(std::pair("/PRJSP/enable_zeroconf", 0x4F800000)); + RegistryEntries.insert(std::pair("/PLAYGO", 0x50000000)); + RegistryEntries.insert(std::pair("/PLAYGO/content_id", 0x50010000)); + RegistryEntries.insert(std::pair("/PLAYGO/package_url", 0x50020000)); + RegistryEntries.insert(std::pair("/PLAYGO/scenario_id", 0x50030000)); + RegistryEntries.insert(std::pair("/PLAYGO/dl_content_id", 0x50040000)); + RegistryEntries.insert(std::pair("/PLAYGO/auto_download", 0x50050000)); + RegistryEntries.insert(std::pair("/PLAYGO/json_url", 0x50060000)); + RegistryEntries.insert(std::pair("/PLAYGO/package_ex_url", 0x50070000)); + RegistryEntries.insert(std::pair("/MORPHEUS/VR2D", 0x50400000)); + RegistryEntries.insert(std::pair("/MORPHEUS/VR2D/gyro_bias", 0x50400100)); + RegistryEntries.insert(std::pair("/MORPHEUS/UPDATE", 0x58600000)); + RegistryEntries.insert(std::pair("/MORPHEUS/UPDATE/server_url", 0x58600100)); + RegistryEntries.insert(std::pair("/MORPHEUS/UPDATE/enable_upd_chk", 0x58600200)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG", 0x58800000)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/demo_mode", 0x58800100)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/debug_mode", 0x58800200)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/social_screen", 0x58800300)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/debug_text", 0x58800400)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/ex_mode_chat", 0x58800500)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/show_tutorials", 0x58800600)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/hmu_auto_detect", 0x58800700)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/show_safe_area", 0x58800800)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/play_area_warn", 0x58800900)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/ignore_separate", 0x58800A00)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/dbg_launch_mode", 0x58800B00)); + RegistryEntries.insert(std::pair("/MORPHEUS/DEBUG/vr_capture", 0x58800C00)); + RegistryEntries.insert(std::pair("/COREDUMP", 0x6E000000)); + RegistryEntries.insert(std::pair("/COREDUMP/dump_mode", 0x6E010000)); + RegistryEntries.insert(std::pair("/COREDUMP/internal_mode", 0x6E020000)); + RegistryEntries.insert(std::pair("/COREDUMP/always_enc_dump", 0x6E030000)); + RegistryEntries.insert(std::pair("/COREDUMP/dump_level", 0x6E040000)); + RegistryEntries.insert(std::pair("/COREDUMP/video_duration", 0x6E060000)); + RegistryEntries.insert(std::pair("/COREDUMP/video_bitrate", 0x6E070000)); + RegistryEntries.insert(std::pair("/COREDUMP/sys_dump_level", 0x6E080000)); + RegistryEntries.insert(std::pair("/COREDUMP/gpudump", 0x6E090000)); + RegistryEntries.insert(std::pair("/COREDUMP/screenshot", 0x6E0A0000)); + RegistryEntries.insert(std::pair("/COREDUMP/UPLOADER", 0x6E800000)); + RegistryEntries.insert(std::pair("/COREDUMP/UPLOADER/enable_uploader", 0x6E800100)); + RegistryEntries.insert(std::pair("/COREDUMP/UPLOADER/uploader_url", 0x6E800200)); + RegistryEntries.insert(std::pair("/COREDUMP/UPLOADER/auto_upload", 0x6E800300)); + RegistryEntries.insert(std::pair("/CRASHREPORTING", 0x70000000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/enable_report", 0x70010000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/keep_corefiles", 0x70020000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/autosending", 0x70030000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/operatestatus", 0x70040000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/attachvideoclip", 0x70050000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/qa_auto_send", 0x70060000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/fake_optload", 0x70070000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/fake_cfss", 0x70080000)); + RegistryEntries.insert(std::pair("/CRASHREPORTING/set_task_title", 0x700A0000)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY", 0x73010000)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_bi", 0x73010100)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_tel", 0x73010200)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_mod_kmg", 0x73010300)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_bi", 0x73010400)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_tel", 0x73010500)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/PLATFORMPRIVACY/last_cfm_kmg", 0x73010600)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG", 0x73800000)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/config_dir", 0x73800100)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/user_time", 0x73800200)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/click_through", 0x73800300)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/dummy_aws", 0x73800400)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/debug_message", 0x73800500)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/config_dir2", 0x73800600)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/config_dir3", 0x73800800)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/delivery_mode", 0x73800900)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/delivery_url", 0x73800A00)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/pri_def_dir", 0x73800B00)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/pri_def_dir2", 0x73800C00)); + RegistryEntries.insert(std::pair("/SYSTEMLOGGER/DEBUG/pri_def_dir3", 0x73800D00)); + RegistryEntries.insert(std::pair("/PSCLOUD", 0x76000000)); + RegistryEntries.insert(std::pair("/PSCLOUD/gf_version", 0x76010000)); + RegistryEntries.insert(std::pair("/PSCLOUD/gko_sdk_version", 0x76020000)); + RegistryEntries.insert(std::pair("/FS/UFS", 0xC0800000)); + RegistryEntries.insert(std::pair("/FS/UFS/compat_pkg", 0xC0808000)); + RegistryEntries.insert(std::pair("/FS/UFS/compat_pkg_mode", 0xC0808100)); + RegistryEntries.insert(std::pair("/FS/GAME_PROC", 0xC0880000)); + RegistryEntries.insert(std::pair("/FS/GAME_PROC/nolmt_pe_sldata", 0xC0888000)); + RegistryEntries.insert(std::pair("/DEVENV/HOST", 0x78010000)); + RegistryEntries.insert(std::pair("/DEVENV/HOST/devkitname", 0x78010100)); + RegistryEntries.insert(std::pair("/DEVENV/HOST/host_internal", 0x78010200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL", 0x78020000)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/dl_debug_flags", 0x78020100)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/region_masq", 0x78020200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/boot_param", 0x78020300)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/gpi00", 0x78020400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/preload_chk_off", 0x78020500)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/trc_notify", 0x78026400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/sysdl_from_host", 0x78028100)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/preserve_dmem", 0x78028200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/use_default_lib", 0x78028300)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/dev_auto_assign", 0x78028400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/razor_gpu", 0x78028600)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/pa_debug", 0x78028B00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/gpu_validate", 0x78028C00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/system_load", 0x78028D00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/sys_prx_preload", 0x78028A00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/reg_not_save", 0x78028800)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/use_dev_login", 0x78028900)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/appsuspend_test", 0x7802A000)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/pad_connection", 0x7802A100)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/mbus_mode", 0x7802A200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/force_use_cam", 0x7802A300)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/host_overlay", 0x7802A400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/pscode_masq", 0x7802A500)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/submit_done_exc", 0x7802A600)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/shutdown_debug", 0x7802A700)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/shell_debug", 0x7802A900)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/postmortem", 0x7802AA00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/pad_auto_detect", 0x7802AB00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/use_host_theme", 0x7802AC00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/compositor_dbg", 0x7802AD00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/vsh4k_rendering", 0x7802AE00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/theme_preview", 0x7802AF00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/submit_done", 0x7802B000)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/force_gpu_idle", 0x7802B100)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/qaflag_masq", 0x7802B200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/vsh_gpu_control", 0x7802B400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/multi_install", 0x7802B500)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/game_heap_trace", 0x7802B700)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/expose_under_2k", 0x7802B900)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/fake_neo4k_mode", 0x7802BA00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/friendprof_f", 0x7802BB00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/ipmi_dbg_flags", 0x7802BC00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/loginmgr_debug", 0x7802BD00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/sys_heap_trace", 0x7802BE00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/game_intmem_dbg", 0x7802BF00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/sce_module_dbg", 0x7802C000)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/piglet_rt_shdrc", 0x7802C100)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/gc_halt", 0x7802C200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/asan_prog", 0x7802C300)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/asan_option", 0x7802C400)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/skip_modal_msg", 0x7802C500)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/video_core_dbg", 0x7802C600)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/dd_fake_trans", 0x7802C700)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLCORE", 0x7802C800)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLCORE/boot_disable", 0x7802C801)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLCORE/pathname", 0x7802C802)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLCORE/load_config", 0x7802C804)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLCORE/host_standby_rq", 0x7802C805)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI", 0x7802C900)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/debug_menu", 0x7802C901)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/screenshot", 0x7802C914)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/shell_crash", 0x7802C915)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/disp_titleid", 0x7802C916)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/content_info", 0x7802C9C8)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/webinspector", 0x7802C9C9)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/webprofile", 0x7802C9CA)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/webproxy", 0x7802C9CB)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/webpreference", 0x7802C9CC)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/SHELLUI/fake_beta", 0x7802C9CD)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/COMMONDIALOG", 0x7802CD00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/COMMONDIALOG/watch_dog", 0x7802CD01)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/COMMONDIALOG/crash_test", 0x7802CD02)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/COMMONDIALOG/suspendmode", 0x7802CD03)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/KEYBOARD", 0x7802D200)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/KEYBOARD/enable_pause", 0x7802D201)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/KEYBOARD/enable_printsc", 0x7802D202)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/VOICE_RECOG", 0x7802DC00)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/VOICE_RECOG/auto_start", 0x7802DC01)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/VOICE_RECOG/term_of_command", 0x7802DC02)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/VOICE_RECOG/transition", 0x7802DC03)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/VOICE_RECOG/recording_mode", 0x7802DC04)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG", 0x7802E600)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/profiling", 0x7802E601)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/trace", 0x7802E602)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/trace_mask", 0x7802E603)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/debug_option", 0x7802E604)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/use_new_gc", 0x7802E605)); + RegistryEntries.insert(std::pair("/DEVENV/TOOL/MONO/DEBUG/enable_full_aot", 0x7802E606)); + RegistryEntries.insert(std::pair("/DEVENV/ACTIVATE", 0x78030000)); + RegistryEntries.insert(std::pair("/DEVENV/ACTIVATE/auto_renewal", 0x78030100)); + RegistryEntries.insert(std::pair("/DEVENV/ACTIVATE/prev_date", 0x78030200)); + RegistryEntries.insert(std::pair("/DEVENV/ACTIVATE/prev_result", 0x78030300)); + RegistryEntries.insert(std::pair("/DEVENV/QA", 0x78400000)); + RegistryEntries.insert(std::pair("/DEVENV/QA/eapcrash", 0x78408000)); + RegistryEntries.insert(std::pair("/DEVENV/QA/auto_test_type", 0x78408100)); + RegistryEntries.insert(std::pair("/DEVENV/QA/error_masq", 0x78408200)); + RegistryEntries.insert(std::pair("/DEVENV/QA/disable_bg_wave", 0x78408300)); + RegistryEntries.insert(std::pair("/DEVENV/QA/enable_exthdd", 0x78408400)); + RegistryEntries.insert(std::pair("/DEVENV/QA/intro_video_url", 0x78408600)); + RegistryEntries.insert(std::pair("/DEVENV/QA/fake_exthddspec", 0x78408700)); + RegistryEntries.insert(std::pair("/DEVENV/QA/enable_eu_ws1", 0x78408800)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME", 0x78400100)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/sd_fake_space", 0x78400101)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/sd_fake_owner", 0x78400102)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/fake_finalized", 0x78400103)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/bdcopy", 0x78400104)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/ac_fake_space", 0x78400105)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/sd_rebuild", 0x78400106)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/vr_fake_space", 0x78400107)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/store_country", 0x78400108)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/sd_format", 0x7840010A)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/skip_asm_for_ac", 0x7840010B)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/game_rec_target", 0x7840010C)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/game_rec_area", 0x7840010D)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/game_rec_force", 0x7840010E)); + RegistryEntries.insert(std::pair("/DEVENV/QA/GAME/dd_boot_block", 0x7840010F)); + RegistryEntries.insert(std::pair("/DEVENV/QA/STANDBY", 0x78400200)); + RegistryEntries.insert(std::pair("/DEVENV/QA/STANDBY/actest_pattern", 0x78400201)); + RegistryEntries.insert(std::pair("/DEVENV/QA/STANDBY/actest_interval", 0x78400202)); + RegistryEntries.insert(std::pair("/DEVENV/QA/POWERTEST", 0x78400300)); + RegistryEntries.insert(std::pair("/DEVENV/QA/POWERTEST/navigation", 0x78400301)); + RegistryEntries.insert(std::pair("/DEVENV/QA/POWERTEST/shell_mediaplay", 0x78400302)); + RegistryEntries.insert(std::pair("/DEVENV/QA/POWERTEST/disc_player", 0x78400303)); + RegistryEntries.insert(std::pair("/DEVENV/QA/POWERTEST/psvideo", 0x78400304)); + + Initialized = true; + } + + if (RegistryEntries.find(Name) == RegistryEntries.end()) + return -1; + else + return RegistryEntries[Name]; +} \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/Registry.h b/Playstation/OrbisLibAPI/Registry.h new file mode 100644 index 0000000..2537380 --- /dev/null +++ b/Playstation/OrbisLibAPI/Registry.h @@ -0,0 +1,3 @@ +#pragma once + +uint Registry_Find_By_Name(const char* Name); \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/SocketListener.cpp b/Playstation/OrbisLibAPI/SocketListener.cpp new file mode 100644 index 0000000..dbebc58 --- /dev/null +++ b/Playstation/OrbisLibAPI/SocketListener.cpp @@ -0,0 +1,150 @@ +#include "Common.h" +#include "SocketListener.h" + +struct ClientThreadParams +{ + SocketListener* socketListener; + OrbisNetId Sock; +}; + +void* SocketListener::ClientThread(void* tdParam) +{ + ClientThreadParams* Params = (ClientThreadParams*)tdParam; + SocketListener* socketListener = Params->socketListener; + OrbisNetId Sock = Params->Sock; + + socketListener->ClientCallBack(socketListener->tdParam, Sock); + + sceNetSocketClose(Sock); + free(Params); + + // Kill our thread and exit. + scePthreadExit(NULL); + return nullptr; +} + +void* SocketListener::DoWork() +{ + OrbisNetSockaddrIn addr = { 0 }; + addr.sin_family = ORBIS_NET_AF_INET; + addr.sin_addr.s_addr = ORBIS_NET_INADDR_ANY; // Any incoming address + addr.sin_port = sceNetHtons(this->Port); // Our desired listen port + + // Make new TCP Socket + this->Socket = sceNetSocket("Listener Socket", ORBIS_NET_AF_INET, ORBIS_NET_SOCK_STREAM, ORBIS_NET_IPPROTO_TCP); + + // Set Sending and reciving time out to 1000 ms + int sock_timeout = 10000; + sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_SNDTIMEO, &sock_timeout, sizeof(sock_timeout)); + sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_RCVTIMEO, &sock_timeout, sizeof(sock_timeout)); + + // Make sure every time we can rebind to the port. + int reusePort = 1; + sceNetSetsockopt(this->Socket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_REUSEPORT, &reusePort, sizeof(reusePort)); + + auto bindError = sceNetBind(this->Socket, (OrbisNetSockaddr*)&addr, sizeof(addr)); + if (bindError != 0) + { + klog("Failed to bind Listener to port %i\nError: %X", this->Port, bindError); + + goto Cleanup; + } + + if (sceNetListen(this->Socket, 100) != 0) + { + klog("Failed to start listening on Socket.\n"); + + goto Cleanup; + } + + while (this->ServerRunning) + { + fd_set set; + struct timeval timeout; + FD_ZERO(&set); /* clear the set */ + FD_SET(this->Socket, &set); /* add our file descriptor to the set */ + + timeout.tv_sec = 2; + timeout.tv_usec = 0; + + // Wait fo rincoming connections. + auto rv = select((int)this->Socket + 1, &set, NULL, NULL, &timeout); + if (rv == -1) + goto Cleanup; + else if (rv == 0) + { + if (!this->ServerRunning) + goto Cleanup; + continue; + } + else + { + if (!this->ServerRunning) + goto Cleanup; + + OrbisNetSockaddrIn ClientAddr = { 0 }; + OrbisNetSocklen_t addrlen = sizeof(OrbisNetSockaddrIn); + auto ClientSocket = sceNetAccept(this->Socket, (OrbisNetSockaddr*)&ClientAddr, &addrlen); + + if (ClientSocket != -1) + { + //klog("New Connection from %i.%i.%i.%i!\n", ClientAddr.sin_addr.s_addr & 0xFF, (ClientAddr.sin_addr.s_addr >> 8) & 0xFF, (ClientAddr.sin_addr.s_addr >> 16) & 0xFF, (ClientAddr.sin_addr.s_addr >> 24) & 0xFF); + + int optval = 1; + sceNetSetsockopt(ClientSocket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_NOSIGPIPE, &optval, sizeof(optval)); + // Set up thread params. + ClientThreadParams* Params = new ClientThreadParams(); + Params->socketListener = this; + Params->Sock = ClientSocket; + + // Create Thread to handle connection. + OrbisPthread* Thread; + scePthreadCreate(&Thread, NULL, &ClientThread, Params, "Client Thread"); + + // Reset ClientSocket. + ClientSocket = -1; + } + } + } + +Cleanup: + klog("Listener Thread Exiting!\n"); + + // Clean up. + this->ThreadCleanedUp = true; + + // Clean up. + sceNetSocketClose(this->Socket); + + // Kill our thread and exit. + scePthreadExit(NULL); + return nullptr; +} + +void* SocketListener::ListenThread(void* tdParam) +{ + return ((SocketListener*)tdParam)->DoWork(); +} + + +SocketListener::SocketListener(void(*ClientCallBack)(void* tdParam, OrbisNetId Sock), void* tdParam, unsigned short Port) +{ + klog("Socket Listener.\n"); + this->ClientCallBack = ClientCallBack; + this->tdParam = tdParam; + this->ServerRunning = true; + this->ThreadCleanedUp = false; + this->Port = Port; + + scePthreadCreate(&ListenThreadHandle, NULL, &ListenThread, this, "Listen Thread"); +} + +SocketListener::~SocketListener() +{ + klog("~Socket Listener.\n"); + + this->ServerRunning = false; + while (!this->ThreadCleanedUp) { sceKernelUsleep(10); } + + klog("Destruction sucessful.\n"); +} \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/SocketListener.h b/Playstation/OrbisLibAPI/SocketListener.h new file mode 100644 index 0000000..28de07a --- /dev/null +++ b/Playstation/OrbisLibAPI/SocketListener.h @@ -0,0 +1,24 @@ +#pragma once + +class SocketListener +{ +private: + OrbisPthread Thread; + OrbisNetId Socket; + /// Used to signal thread to shut down + bool ServerRunning; + /// Used to see when listen thread has closed. + bool ThreadCleanedUp; + unsigned short Port; + OrbisPthread* ListenThreadHandle; + + void* DoWork(); + static void* ClientThread(void* tdParam); + void* tdParam; + void(*ClientCallBack)(void* tdParam, OrbisNetId Sock); + static void* ListenThread(void* tdParam); + +public: + SocketListener(void(*ClientCallBack)(void* tdParam, OrbisNetId Sock), void* tdParam, unsigned short Port); + ~SocketListener(); +}; \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/System.cpp b/Playstation/OrbisLibAPI/System.cpp new file mode 100644 index 0000000..2df3e97 --- /dev/null +++ b/Playstation/OrbisLibAPI/System.cpp @@ -0,0 +1,143 @@ +#include "Common.h" +#include "System.h" +#include "Registry.h" + +int ChangeSystemState(SystemState State) +{ + OrbisKernelEventFlag EventFlag = 0; + int ret = 0; + + // sceSysCoreSetRebootFlag + ret = sceKernelOpenEventFlag(&EventFlag, "SceSysCoreReboot"); + if (!ret) + { + ret = sceKernelCancelEventFlag(EventFlag, State, 0); + if (!ret) + { + sceKernelCloseEventFlag(EventFlag); + ret = 0; + } + } + + sceKernelIccIndicatorShutdown(); + kill(1, 30); //Terminate Process 1 (mini-syscore.elf) with the signal 30. + + return ret; +} + +void SetConsoleLED(ConsoleLEDColours Colour) +{ + switch (Colour) + { + default: + case white: + sceKernelIccIndicatorBootDone(); + break; + + case white_Blinking: + sceKernelIccIndicatorShutdown(); + break; + + case Blue_Blinking: + sceKernelIccIndicatorStandbyBoot(); + break; + } +} + +void SetControllerLED() +{ + +} + +void RingBuzzer(BuzzerType Type) +{ + if (Type < 6) + sceKernelIccSetBuzzer(Type); +} + +int32_t GetCPUTemp() +{ + int32_t CPUTemp = 0; + if (sceKernelGetCpuTemperature(&CPUTemp) == 0) + return CPUTemp; + else + return -1; +} + +int32_t GetSOCTemp() +{ + int32_t SOCTemp = 0; + if (sceKernelGetSocSensorTemperature(0, &SOCTemp) == 0) + return SOCTemp; + else + return -1; +} + +int GetSDKVersion() +{ + int sdk_version = 0; + size_t sdk_versionlen = 4; + + sysctlbyname("kern.sdk_version", (char*)&sdk_version, &sdk_versionlen, nullptr, 0); + + return sdk_version; +} + +int GetUpdateVersion() +{ + int sdk_version = 0; + size_t sdk_versionlen = 4; + + sysctlbyname("machdep.upd_version", (char*)&sdk_version, &sdk_versionlen, nullptr, 0); + + return sdk_version; +} + +bool GetConsoleName(char* Out, size_t len) +{ + return sceRegMgrGetStr(Registry_Find_By_Name("/SYSTEM/nickname"), Out, len) == 0; +} + +int GetIDPS(char* Out) +{ + size_t IDPSlen = 16; + return sysctlbyname("machdep.idps", Out, &IDPSlen, NULL, NULL); +} + +int GetPSID(char* Out) +{ + size_t PSID = 16; + return sysctlbyname("machdep.openpsid", Out, &PSID, NULL, NULL); +} + +ConsoleTypes GetConsoleType() +{ + char IDPS[16] = { 0 }; + size_t IDPSlen = 16; + sysctlbyname("machdep.idps", (char*)&IDPS, &IDPSlen, NULL, NULL); + + switch (IDPS[5] & 0xffU) + { + case 0x80: + return CT_DIAG; + break; + + case 0x81: + return CT_DEVKIT; + break; + + case 0x82: + return CT_TESTKIT; + break; + + case 0x83 ... 0x8F: + return CT_RETAIL; + break; + + case 0xA0: + return CT_KRATOS; + break; + } + + return CT_UNK; +} \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/System.h b/Playstation/OrbisLibAPI/System.h new file mode 100644 index 0000000..2969518 --- /dev/null +++ b/Playstation/OrbisLibAPI/System.h @@ -0,0 +1,38 @@ +#pragma once + +enum SystemState +{ + Suspend = 0x8004000, + Shutdown = 0x4000, + Reboot = 0x0, +}; + +enum ConsoleLEDColours +{ + white, + white_Blinking, + Blue_Blinking, +}; + +enum ConsoleTypes +{ + CT_UNK, + CT_DIAG, //0x80 + CT_DEVKIT, //0x81 + CT_TESTKIT, //0x82 + CT_RETAIL, //0x83 -> 0x8F + CT_KRATOS, //0xA0 IMPOSSIBLE?? +}; + +int ChangeSystemState(SystemState State); +void SetConsoleLED(ConsoleLEDColours Colour); +void SetControllerLED(); +void RingBuzzer(BuzzerType Type); +int32_t GetCPUTemp(); +int32_t GetSOCTemp(); +int GetSDKVersion(); +int GetUpdateVersion(); +bool GetConsoleName(char* Out, size_t len); +int GetIDPS(char* Out); +int GetPSID(char* Out); +ConsoleTypes GetConsoleType(); \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Target.cpp b/Playstation/OrbisLibAPI/Target.cpp similarity index 79% rename from Playstation/OrbisToolbox-2.0/Target.cpp rename to Playstation/OrbisLibAPI/Target.cpp index abcee08..b04b978 100644 --- a/Playstation/OrbisToolbox-2.0/Target.cpp +++ b/Playstation/OrbisLibAPI/Target.cpp @@ -1,14 +1,7 @@ #include "Common.h" #include "Target.h" #include "APIHelper.h" -#include "Registry.h" -#include "System.h" -#include "Flash.h" -#include "Config.h" -#include "Debug_Features.h" -#include "ShellCoreUtilWrapper.h" -#include "NetWrapper.h" -#include "System_Monitor.h" +#include void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet) { @@ -27,7 +20,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet) case APICommands::API_TARGET_RESTMODE: - ChangeSystemState(System_State::Suspend); + ChangeSystemState(SystemState::Suspend); SendStatus(Sock, APIResults::API_OK); @@ -35,7 +28,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet) case APICommands::API_TARGET_SHUTDOWN: - ChangeSystemState(System_State::Shutdown); + ChangeSystemState(SystemState::Shutdown); SendStatus(Sock, APIResults::API_OK); @@ -43,7 +36,7 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet) case APICommands::API_TARGET_REBOOT: - ChangeSystemState(System_State::Reboot); + ChangeSystemState(SystemState::Reboot); SendStatus(Sock, APIResults::API_OK); @@ -103,13 +96,17 @@ void Target::SendTargetInfo(OrbisNetId Sock) ReadFlash(FLASH_FACTORY_FW, &Packet->FactorySoftwareVersion, sizeof(int)); Packet->CPUTemp = GetCPUTemp(); Packet->SOCTemp = GetSOCTemp(); - strcpy(Packet->CurrentTitleID, CallInMonoThread->RemoteCall(GetBigAppTitleId)); // TODO: NOP Debug print. + + OrbisAppInfo bigAppInfo; + sceApplicationGetAppInfoByAppId(sceSystemServiceGetAppIdOfBigApp(), &bigAppInfo); + strcpy(Packet->CurrentTitleID, bigAppInfo.TitleId); + GetConsoleName(Packet->ConsoleName, 100); ReadFlash(FLASH_MB_SERIAL, &Packet->MotherboardSerial, 14); ReadFlash(FLASH_SERIAL, &Packet->Serial, 10); ReadFlash(FLASH_MODEL, &Packet->Model, 14); - strcpy(Packet->MACAdressLAN, CallInMonoThread->RemoteCall(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_PHYSICAL)); - strcpy(Packet->MACAdressWIFI, CallInMonoThread->RemoteCall(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_WLAN0)); + // strcpy(Packet->MACAdressLAN, CallInMonoThread->RemoteCall(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_PHYSICAL)); + // strcpy(Packet->MACAdressWIFI, CallInMonoThread->RemoteCall(NetWrapper::GetMacAddressInfo, SCE_NET_IF_NAME_WLAN0)); ReadFlash(FLASH_UART_FLAG, &Packet->UART, 1); ReadFlash(FLASH_IDU_MODE, &Packet->IDUMode, 1); GetIDPS(Packet->IDPS); @@ -121,19 +118,19 @@ void Target::SendTargetInfo(OrbisNetId Sock) //Packet->CurrentProc // Storage Stats. - uint64_t HDDFreeSpace, HDDTotalSpace; + /*uint64_t HDDFreeSpace, HDDTotalSpace; CallInMonoThread->RemoteCall(ShellCoreUtilWrapper::sceShellCoreUtilGetFreeSizeOfUserPartition, &HDDFreeSpace, &HDDTotalSpace); Packet->FreeSpace = HDDFreeSpace; - Packet->TotalSpace = HDDTotalSpace; + Packet->TotalSpace = HDDTotalSpace;*/ // Perf Stats. - Packet->CPUTemp = System_Monitor::CPU_Temp; + /*Packet->CPUTemp = System_Monitor::CPU_Temp; Packet->SOCTemp = System_Monitor::SOC_Temp; Packet->ThreadCount = System_Monitor::Thread_Count; Packet->AverageCPUUsage = System_Monitor::Average_Usage; Packet->BusyCore = System_Monitor::Busy_Core; memcpy(&Packet->Ram, &System_Monitor::RAM, sizeof(MemoryInfo)); - memcpy(&Packet->VRam, &System_Monitor::VRAM, sizeof(MemoryInfo)); + memcpy(&Packet->VRam, &System_Monitor::VRAM, sizeof(MemoryInfo));*/ sceNetSend(Sock, Packet, sizeof(TargetInfoPacket), 0); @@ -156,7 +153,8 @@ void Target::DoNotify(OrbisNetId Sock) void Target::SetSettings(OrbisNetId Sock) { - auto Packet = new TargetSettingsPacket(); + //TODO: IPC here... + /*auto Packet = new TargetSettingsPacket(); sceNetRecv(Sock, Packet, sizeof(TargetSettingsPacket), 0); @@ -167,7 +165,7 @@ void Target::SetSettings(OrbisNetId Sock) SendStatus(Sock, APIResults::API_OK); - Config::SetSettingsNow = true; + Config::SetSettingsNow = true;*/ } //TODO: Get Target Settings. \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Target.h b/Playstation/OrbisLibAPI/Target.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/Target.h rename to Playstation/OrbisLibAPI/Target.h diff --git a/Playstation/OrbisLibAPI/Utilities.cpp b/Playstation/OrbisLibAPI/Utilities.cpp index 6480431..5b783e8 100644 --- a/Playstation/OrbisLibAPI/Utilities.cpp +++ b/Playstation/OrbisLibAPI/Utilities.cpp @@ -60,6 +60,31 @@ void Notify(const char* MessageFMT, ...) sceKernelSendNotificationRequest(0, &Buffer, 3120, 0); } +void Notify_Custom(const char* IconURI, const char* MessageFMT, ...) +{ + OrbisNotificationRequest Buffer; + + //Create full string from va list. + va_list args; + va_start(args, MessageFMT); + vsprintf(Buffer.message, MessageFMT, args); + va_end(args); + + //Populate the notify buffer. + Buffer.type = OrbisNotificationRequestType::NotificationRequest; //this one is just a standard one and will print what ever is stored at the buffer.Message. + Buffer.unk3 = 0; + Buffer.useIconImageUri = 1; //Bool to use a custom uri. + Buffer.targetId = -1; //Not sure if name is correct but is always set to -1. + strcpy(Buffer.iconUri, IconURI); //Copy the uri to the buffer. + + //From user land we can call int64_t sceKernelSendNotificationRequest(int64_t unk1, char* Buffer, size_t size, int64_t unk2) which is a libkernel import. + sceKernelSendNotificationRequest(0, &Buffer, 3120, 0); + + //What sceKernelSendNotificationRequest is doing is opening the device "/dev/notification0" or "/dev/notification1" + // and writing the NotifyBuffer we created to it. Somewhere in ShellUI it is read and parsed into a json which is where + // I found some clues on how to build the buffer. +} + void klog(const char* fmt, ...) { char Buffer[0x200]; diff --git a/Playstation/OrbisLibAPI/Utilities.h b/Playstation/OrbisLibAPI/Utilities.h index 4793a01..8597f5e 100644 --- a/Playstation/OrbisLibAPI/Utilities.h +++ b/Playstation/OrbisLibAPI/Utilities.h @@ -12,7 +12,6 @@ struct SceDbgModuleInfo { SceDbgModuleSegmentInfo segmentInfo[4]; uint32_t numSegments; uint8_t fingerprint[20]; - }; //Modules. @@ -21,6 +20,7 @@ bool LoadModules(); //Misc void Notify(const char* MessageFMT, ...); +void Notify_Custom(const char* IconURI, const char* MessageFMT, ...); void klog(const char* fmt, ...); int sys_dynlib_get_info(int moduleHandle, SceDbgModuleInfo* destModuleInfo); int sys_dynlib_get_list(int* destModuleHandles, int max, int* count); \ No newline at end of file diff --git a/Playstation/OrbisLibAPI/Version.h b/Playstation/OrbisLibAPI/Version.h index d893efd..abdff80 100644 --- a/Playstation/OrbisLibAPI/Version.h +++ b/Playstation/OrbisLibAPI/Version.h @@ -1,11 +1,11 @@ -#pragma once -#define ORBISLIB_MAJOR 3 -#define ORBISLIB_MINOR 0 -#define ORBISLIB_BUILDVERSION 1 -#define stringify(a) stringify_(a) -#define stringify_(a) #a -#if defined(_DEBUG) -#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__) -#else -#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__) -#endif +#pragma once +#define ORBISLIB_MAJOR 3 +#define ORBISLIB_MINOR 0 +#define ORBISLIB_BUILDVERSION 181 +#define stringify(a) stringify_(a) +#define stringify_(a) #a +#if defined(_DEBUG) +#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__) +#else +#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__) +#endif diff --git a/Playstation/OrbisToolbox-2.0/Watchpoint.cpp b/Playstation/OrbisLibAPI/Watchpoint.cpp similarity index 100% rename from Playstation/OrbisToolbox-2.0/Watchpoint.cpp rename to Playstation/OrbisLibAPI/Watchpoint.cpp diff --git a/Playstation/OrbisToolbox-2.0/Watchpoint.h b/Playstation/OrbisLibAPI/Watchpoint.h similarity index 100% rename from Playstation/OrbisToolbox-2.0/Watchpoint.h rename to Playstation/OrbisLibAPI/Watchpoint.h diff --git a/Playstation/OrbisLibAPI/libjbc.h b/Playstation/OrbisLibAPI/libjbc.h index 34b9546..69b487c 100644 --- a/Playstation/OrbisLibAPI/libjbc.h +++ b/Playstation/OrbisLibAPI/libjbc.h @@ -15,9 +15,15 @@ extern "C" size_t data_size; }; + struct ProcInfo + { + char ProcName[32]; + }; + void jbc_run_as_root(void(*fn)(void* arg), void* arg, int cwd_mode); int jbc_mount_in_sandbox(const char* system_path, const char* mnt_name); int jbc_unmount_in_sandbox(const char* mnt_name); int jbc_set_proc_name(const char* New_Name); int jbc_get_proc_libraries(struct LibraryInfo* out, int maxCount); + uint64_t jbc_get_proc_list(struct ProcInfo* out, int maxCount); } diff --git a/Playstation/OrbisLibAPI/main.cpp b/Playstation/OrbisLibAPI/main.cpp index bc4c5f0..971a705 100644 --- a/Playstation/OrbisLibAPI/main.cpp +++ b/Playstation/OrbisLibAPI/main.cpp @@ -1,5 +1,32 @@ #include "Common.h" #include "Version.h" +#include "API.h" + +#include +#include + +#define CTL_KERN 1 +#define KERN_PROC 14 +#define KERN_PROC_PID 1 +#define KERN_PROC_APPINFO 35 + +void hexdump(void* ptr, int buflen) { + unsigned char* buf = (unsigned char*)ptr; + int i, j; + for (i = 0; i < buflen; i += 16) { + klog("%06x: ", i); + for (j = 0; j < 16; j++) + if (i + j < buflen) + klog("%02x ", buf[i + j]); + else + klog(" "); + klog(" "); + for (j = 0; j < 16; j++) + if (i + j < buflen) + klog("%c", isprint(buf[i + j]) ? buf[i + j] : '.'); + klog("\n"); + } +} int main() { @@ -21,20 +48,24 @@ int main() return 0; } - // Use future GoldHEN JB. + // Use GoldHEN JB. jailbreak_backup jb1; sys_sdk_jailbreak(&jb1); // Set the Name of this process so it shows up as something other than eboot.bin. jbc_set_proc_name("OrbisLibAPI"); - klog(ORBISLIB_BUILDSTRING); + klog("\n%s\n\n", ORBISLIB_BUILDSTRING); + + API::Init(); while (true) { sceKernelSleep(1); } + klog("Time to go :(\n"); + sceSystemServiceLoadExec("exit", 0); return 0; diff --git a/Playstation/OrbisSuite/OrbisSuite.vcxproj b/Playstation/OrbisSuite/OrbisSuite.vcxproj index 787d24a..4d6e9cd 100644 --- a/Playstation/OrbisSuite/OrbisSuite.vcxproj +++ b/Playstation/OrbisSuite/OrbisSuite.vcxproj @@ -118,6 +118,7 @@ call build.bat $(IntDir) "$(TargetName)" "$(SolutionDir)" + diff --git a/Playstation/OrbisSuite/OrbisSuite.vcxproj.filters b/Playstation/OrbisSuite/OrbisSuite.vcxproj.filters index 787b5b1..a447e09 100644 --- a/Playstation/OrbisSuite/OrbisSuite.vcxproj.filters +++ b/Playstation/OrbisSuite/OrbisSuite.vcxproj.filters @@ -33,5 +33,8 @@ Header Files + + Header Files + \ No newline at end of file diff --git a/Playstation/OrbisSuite/Utilities.cpp b/Playstation/OrbisSuite/Utilities.cpp index 2010265..baa8e9e 100644 --- a/Playstation/OrbisSuite/Utilities.cpp +++ b/Playstation/OrbisSuite/Utilities.cpp @@ -1,5 +1,6 @@ #include "Common.h" #include "Utilities.h" +#include "libjbc.h" #include #include #include diff --git a/Playstation/OrbisSuite/build.bat b/Playstation/OrbisSuite/build.bat index 29510b1..d274287 100644 --- a/Playstation/OrbisSuite/build.bat +++ b/Playstation/OrbisSuite/build.bat @@ -13,7 +13,7 @@ set outputOelf=%intdir%%targetname%.oelf Rem Compile object files for all the source files for %%f in (*.cpp) do ( - clang++ -cc1 -triple x86_64-scei-ps4-elf -I"%OO_PS4_TOOLCHAIN%\\include" -I"%OO_PS4_TOOLCHAIN%\\include\\c++\\v1" -I"..\\..\\External\\GoldHEN_Plugins_SDK\\include" -DORBISLIB_DEBUG -emit-obj -o %intdir%\%%~nf.o %%~nf.cpp + clang++ -cc1 -triple x86_64-scei-ps4-elf -I"%OO_PS4_TOOLCHAIN%\\include" -I"%OO_PS4_TOOLCHAIN%\\include\\c++\\v1" -I"..\\..\\External\\GoldHEN_Plugins_SDK\\include" -I"..\\..\\External\\ps4-libjbc" -DORBISLIB_DEBUG -emit-obj -o %intdir%\%%~nf.o %%~nf.cpp ) Rem Get a list of object files for linking @@ -21,7 +21,7 @@ set obj_files= for %%f in (%1\\*.o) do set obj_files=!obj_files! .\%%f Rem Link the input ELF -ld.lld -m elf_x86_64 -pie --script "%OO_PS4_TOOLCHAIN%\link.x" --eh-frame-hdr -o "%outputElf%" "-L%OO_PS4_TOOLCHAIN%\\lib" "-L..\\..\\External\\GoldHEN_Plugins_SDK" %libraries% --verbose "%OO_PS4_TOOLCHAIN%\lib\crt1.o" %obj_files% +ld.lld -m elf_x86_64 -pie --script "%OO_PS4_TOOLCHAIN%\link.x" --eh-frame-hdr -o "%outputElf%" "-L%OO_PS4_TOOLCHAIN%\\lib" "-L..\\..\\External\\GoldHEN_Plugins_SDK" %libraries% --verbose "%OO_PS4_TOOLCHAIN%\lib\crt1.o" %obj_files% "..\\..\\External\\ps4-libjbc\\jbc.o" Rem Create the eboot %OO_PS4_TOOLCHAIN%\bin\windows\create-fself.exe -in "%outputElf%" --out "%outputOelf%" --eboot "eboot.bin" diff --git a/Playstation/OrbisSuite/libjbc.h b/Playstation/OrbisSuite/libjbc.h new file mode 100644 index 0000000..69b487c --- /dev/null +++ b/Playstation/OrbisSuite/libjbc.h @@ -0,0 +1,29 @@ +#pragma once + +extern "C" +{ + enum { CWD_KEEP, CWD_ROOT, CWD_RESET }; + + struct LibraryInfo + { + char Path[256]; + uint64_t ModuleHandle; + uint64_t map_base; + size_t map_size; + size_t text_size; + uint64_t data_base; + size_t data_size; + }; + + struct ProcInfo + { + char ProcName[32]; + }; + + void jbc_run_as_root(void(*fn)(void* arg), void* arg, int cwd_mode); + int jbc_mount_in_sandbox(const char* system_path, const char* mnt_name); + int jbc_unmount_in_sandbox(const char* mnt_name); + int jbc_set_proc_name(const char* New_Name); + int jbc_get_proc_libraries(struct LibraryInfo* out, int maxCount); + uint64_t jbc_get_proc_list(struct ProcInfo* out, int maxCount); +} diff --git a/Playstation/OrbisSuite/main.cpp b/Playstation/OrbisSuite/main.cpp index 268f731..b058408 100644 --- a/Playstation/OrbisSuite/main.cpp +++ b/Playstation/OrbisSuite/main.cpp @@ -32,11 +32,12 @@ int main() mount_large_fs("/dev/da0x4.crypt", "/system", "exfatfs", "511", MNT_UPDATE); // Install all the things! :D - InstallDaemon("ORBS30000"); // Orbis Lib + //InstallDaemon("ORBS30000"); // Orbis Lib InstallOrbisToolbox(); //TODO: Pull module list of SceShellUI to see if we should unload the toolbox. + // Use GoldHEN SDK to load PRX to SceShellUI. auto Handle = sys_sdk_proc_prx_load("SceShellUI", "/user/data/Orbis Toolbox/OrbisToolbox-2.0.sprx"); @@ -47,7 +48,7 @@ int main() klog("error: %d\n", Handle); Notify("Failed to load Orbis Toolbox!"); } - + sceSystemServiceLoadExec("exit", 0); return 0; diff --git a/Playstation/OrbisToolbox-2.0/API.cpp b/Playstation/OrbisToolbox-2.0/API.cpp deleted file mode 100644 index f8e44b6..0000000 --- a/Playstation/OrbisToolbox-2.0/API.cpp +++ /dev/null @@ -1,80 +0,0 @@ -#include "Common.h" -#include "API.h" - -Proc* API::Proc; -Debug* API::Debug; -Target* API::Target; -SocketListener* API::Listener; -bool API::Running = false; - -void API::ListenerCallback(void* tdParam, OrbisNetId s) -{ - auto Packet = RecievePacket(s); - - if (Packet != nullptr) - { - // Make sure were getting the proper packet version. - if (Packet->PacketVersion != PACKET_VERSION) - { - //klog("Packet version %i does not match our expected %i version!\n", Packet->PacketVersion, PACKET_VERSION); - - free(Packet); - - return; - } - - // Send out the command to the right places. - switch (Packet->Command) - { - default: - klog("API: Invalid Command %i...\n", Packet->Command); - break; - - case APICommands::PROC_START ... APICommands::PROC_END: - Proc->HandleAPI(s, Packet); - break; - - case APICommands::DBG_START ... APICommands::DBG_END: - Debug->HandleAPI(s, Packet); - break; - - case APICommands::KERN_START ... APICommands::KERN_END: - klog("Kernel API Call\n"); - - break; - - case APICommands::TARGET_START ... APICommands::TARGET_END: - Target->HandleAPI(s, Packet); - break; - - } - } - - // Clean up. :) - free(Packet); -} - -void API::Init() -{ - if (!Running) - { - klog("API Startup.\n"); - Proc = new class Proc(); - Debug = new class Debug(); - Target = new class Target(); - Listener = new SocketListener(ListenerCallback, NULL, 6900); - Running = true; - } -} - -void API::Term() -{ - if (Running) - { - delete Proc; - delete Debug; - delete Target; - delete Listener; - Running = false; - } -} \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/API.h b/Playstation/OrbisToolbox-2.0/API.h deleted file mode 100644 index 53cfdc1..0000000 --- a/Playstation/OrbisToolbox-2.0/API.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once -#include "Proc.h" -#include "Debug.h" -#include "Target.h" -#include "SocketListener.h" -#include "APIHelper.h" - -class API -{ -private: - static Proc* Proc; - static Debug* Debug; - static Target* Target; - static SocketListener* Listener; - - static void ListenerCallback(void* tdParam, OrbisNetId s); - -public: - static bool Running; - static void Init(); - static void Term(); -}; \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Common.h b/Playstation/OrbisToolbox-2.0/Common.h index 41a5fdb..6a60ec5 100644 --- a/Playstation/OrbisToolbox-2.0/Common.h +++ b/Playstation/OrbisToolbox-2.0/Common.h @@ -25,7 +25,6 @@ #include "Version.h" #include "Utilities.h" -#include "APIPackets.h" #include "Mono.h" #include "Detour.h" #include "Patcher.h" diff --git a/Playstation/OrbisToolbox-2.0/KDriver.cpp b/Playstation/OrbisToolbox-2.0/KDriver.cpp deleted file mode 100644 index 9667062..0000000 --- a/Playstation/OrbisToolbox-2.0/KDriver.cpp +++ /dev/null @@ -1,144 +0,0 @@ -#include "Common.h" -#include "KDriver.h" - -bool KDriver::TestDriver() -{ - int fd = sceKernelOpen("/dev/OrbisSuite", ORBIS_KERNEL_O_RDONLY, 0); - if (fd > 0) - { - klog("Driver Installed...\n"); - sceKernelClose(fd); - return true; - } - - klog("Driver Not Installed...\n"); - return false; -} - -bool KDriver::GetDriverInfo(KDriver_Info* Info) -{ - int fd = sceKernelOpen("/dev/OrbisSuite", 0, 0); - if (fd > 0) - { - int res = ioctl(fd, KDRIVER_INFO, Info); - - if (res != 0) - { - klog("KDRIVER_INFO failed with %d\n", res); - - sceKernelClose(fd); - - return false; - } - - sceKernelClose(fd); - - return true; - } - else - klog("Where kernel??\n"); - - return false; -} - -int KDriver::GetProcessList(int ProcessCount, ProcInfo* ProcList) -{ - auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0); - if (fd > 0) - { - auto Info = new KDriver_ProcList(); - Info->UserlandAddr = (uint64_t)ProcList; - Info->UserlandSize = ((sizeof(ProcInfo) * ProcessCount)); - Info->ProcCount = ProcessCount; - - auto res = ioctl(fd, PROC_LIST, Info); - - if (res != 0) - { - delete Info; - - sceKernelClose(fd); - - return res; - } - - sceKernelClose(fd); - - delete Info; - - return Info->ProcCount; - } - else - klog("Where kernel??\n"); - - return -1; -} - -int KDriver::LoadSPRX(const char* ProccessName, const char* Path, bool ShouldCallEntry) -{ - auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0); - if (fd > 0) - { - KDriver_ProcSPRX ProcSPRX; - ProcSPRX.CallType = 0; - strcpy(ProcSPRX.ProcName, ProccessName); - strcpy(ProcSPRX.Path, Path); - ProcSPRX.CallEntryExit = ShouldCallEntry; - - auto res = ioctl(fd, PROC_SPRX, &ProcSPRX); - - sceKernelClose(fd); - - return res; - } - else - klog("Where kernel??\n"); - - return -1; -} - -int KDriver::UnLoadSPRX(const char* ProccessName, const char* Name, bool ShouldCallExit) -{ - auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0); - if (fd > 0) - { - KDriver_ProcSPRX ProcSPRX; - ProcSPRX.CallType = 1; - strcpy(ProcSPRX.ProcName, ProccessName); - strcpy(ProcSPRX.Path, Name); - ProcSPRX.CallEntryExit = ShouldCallExit; - - auto res = ioctl(fd, PROC_SPRX, &ProcSPRX); - - sceKernelClose(fd); - - return res; - } - else - klog("Where kernel??\n"); - - return -1; -} - -int KDriver::UnLoadSPRX(const char* ProccessName, int ModuleHandle, bool ShouldCallExit) -{ - auto fd = sceKernelOpen("/dev/OrbisSuite", 0, 0); - if (fd > 0) - { - KDriver_ProcSPRX ProcSPRX; - ProcSPRX.CallType = 2; - strcpy(ProcSPRX.ProcName, ProccessName); - ProcSPRX.Handle = ModuleHandle; - ProcSPRX.CallEntryExit = ShouldCallExit; - - auto res = ioctl(fd, PROC_SPRX, &ProcSPRX); - - sceKernelClose(fd); - - return res; - } - else - klog("Where kernel??\n"); - - return -1; -} \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/KDriver.h b/Playstation/OrbisToolbox-2.0/KDriver.h deleted file mode 100644 index 3713ef0..0000000 --- a/Playstation/OrbisToolbox-2.0/KDriver.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include "../../Misc/DriverDefinitions.h" - -class KDriver -{ -public: - // Driver - static bool TestDriver(); - static bool GetDriverInfo(KDriver_Info* Info); - - // Proc - static int GetProcessList(int ProcessCount, ProcInfo* ProcList); - // AttachtoProcess - // DetachfromProcess - // ReadProcessMemory - // WriteProcessMemory - // GetProcessInfo - // GetModuleList - static int LoadSPRX(const char* ProccessName, const char* Path, bool ShouldCallEntry = true); - static int UnLoadSPRX(const char* ProccessName, const char* Name, bool ShouldCallExit = true); - static int UnLoadSPRX(const char* ProccessName, int ModuleHandle, bool ShouldCallExit = true); - -private: - -}; \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/Menu.cpp b/Playstation/OrbisToolbox-2.0/Menu.cpp index bf4a7da..db31d14 100644 --- a/Playstation/OrbisToolbox-2.0/Menu.cpp +++ b/Playstation/OrbisToolbox-2.0/Menu.cpp @@ -8,8 +8,6 @@ #include "Config.h" #include "LncUtil.h" #include "Daemons.h" -#include "KDriver.h" -#include "API.h" #include "NetWrapper.h" @@ -206,11 +204,7 @@ void Menu::Init() // Orbis Suite Debug Add_Option("id_orbis_api", []() -> void { - API::Term(); - API::Init(); - Notify("API Restarted!"); }); - Add_Option("id_orbis_api_toggle", &API::Running, Type_Boolean, []() ->void { API::Running ? API::Term() : API::Init(); }); Add_Option("id_orbis_test", []() -> void { klog("WIFI MAC: %s\nLAN MAC: %s\n", @@ -240,13 +234,7 @@ void Menu::Init() }); Add_Option("id_orbis_listproc", []() -> void { - ProcInfo Infos[200]; - auto count = KDriver::GetProcessList(200, (ProcInfo*)&Infos); - - for (int i = 0; i < count; i++) - { - klog("%i %s %s\n", Infos[i].PID, Infos[i].ProcName, Infos[i].TitleID); - } + }); Add_Option("id_orbis_listlocalproc", []() -> void { diff --git a/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj b/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj index aed5004..8c7af9e 100644 --- a/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj +++ b/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj @@ -78,22 +78,16 @@ del /s /q /f $(IntDir)\*.oelf - - - - - - @@ -101,7 +95,6 @@ del /s /q /f $(IntDir)\*.oelf - @@ -111,23 +104,17 @@ del /s /q /f $(IntDir)\*.oelf - - - - - - @@ -135,7 +122,6 @@ del /s /q /f $(IntDir)\*.oelf - @@ -144,7 +130,6 @@ del /s /q /f $(IntDir)\*.oelf - @@ -153,10 +138,8 @@ del /s /q /f $(IntDir)\*.oelf - - diff --git a/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj.filters b/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj.filters index f9d55ca..7db9a43 100644 --- a/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj.filters +++ b/Playstation/OrbisToolbox-2.0/OrbisToolbox-2.0.vcxproj.filters @@ -16,12 +16,6 @@ {a1e7d8c0-9965-4dae-9e21-fec87fa057a9} - - {531e5d39-42b8-4cf7-93d0-9fc3bd9fe82d} - - - {a61efd8d-78d4-4ce2-bf65-9db8d0c6c6f6} - {128fb9c5-726e-4ead-9a69-eacccaf065c9} @@ -58,18 +52,6 @@ {71a68f5f-0868-4608-b063-7a5913039770} - - {2034a675-8702-4fd0-921d-b001def607c9} - - - {1bf13e33-42d9-45c2-8bb2-c58f9ea326f2} - - - {86b8ee3f-43bf-4077-972b-674021d009d7} - - - {689ef1b6-f9c8-4d7b-9a4a-73e5d45aea97} - {4e4c3e09-ba94-450a-ae0e-3dc2999f2400} @@ -141,30 +123,6 @@ Header Files\Toolbox\UI - - Header Files\API - - - Header Files\API\Misc - - - Header Files\API\Misc - - - Header Files\API\CmdGroups - - - Header Files\API\CmdGroups - - - Header Files\API\CmdGroups - - - Header Files\API\CmdGroups - - - Header Files\API\CmdGroups - Header Files\Utilities @@ -195,9 +153,6 @@ Header Files\Utilities\PS Utils - - Header Files\Utilities\PS Utils - Header Files\Utilities\PS Utils @@ -263,27 +218,6 @@ Source Files\Toolbox\UI\Elements - - Source Files\API - - - Source Files\API\Misc - - - Source Files\API\CmdGroups - - - Source Files\API\CmdGroups - - - Source Files\API\CmdGroups - - - Source Files\API\CmdGroups - - - Source Files\API\CmdGroups - Source Files\Utilities @@ -314,9 +248,6 @@ Source Files\Utilities\PS Utils - - Source Files\Utilities\PS Utils - Source Files\Utilities\PS Utils diff --git a/Playstation/OrbisToolbox-2.0/OrbisToolbox.cpp b/Playstation/OrbisToolbox-2.0/OrbisToolbox.cpp index 3eadad6..ab6fa3f 100644 --- a/Playstation/OrbisToolbox-2.0/OrbisToolbox.cpp +++ b/Playstation/OrbisToolbox-2.0/OrbisToolbox.cpp @@ -2,35 +2,59 @@ #include "Settings_Menu.h" #include "System_Monitor.h" #include "GamePad.h" -#include "API.h" #include "RemoteCaller.h" RemoteCaller* CallInMonoThread = NULL; +Detour* SearchJob_RunDetour; +void* SearchJob_RunHook(MonoObject* instance) +{ + auto IsCancelled = Mono::Get_Property(Mono::UI_dll, "Sce.PlayStation.HighLevel.UI2", "Job", instance, "IsCancelled"); + + if (!IsCancelled) + { + auto SearchJob = Mono::Get_Class(Mono::App_exe, "Sce.Vsh.ShellUI.Settings.PkgInstaller", "SearchJob"); + Mono::Invoke(Mono::App_exe, SearchJob, instance, "SearchDir", Mono::New_String("/user/data/pkg"), Mono::New_String("/user/data/pkg")); + } + + return SearchJob_RunDetour->Stub(instance); +} + +void* InitThread(void* args) +{ + klog("!! Hello World !!\n"); + + Mono::Init(); + + if (GamePad::IsDown(GamePad::Buttons::Left | GamePad::Buttons::Triangle)) + { + Notify("Orbis Toolbox: Aborting Launch!!"); + return 0; + } + + // Toolbox + System_Monitor::Init(); + Settings_Menu::Init(); + //Title_Menu::Init(); + + // API + CallInMonoThread = new RemoteCaller(); + + Notify(ORBIS_TOOLBOX_NOTIFY); + + SearchJob_RunDetour = new Detour(); + SearchJob_RunDetour->DetourMethod(Mono::App_exe, "Sce.Vsh.ShellUI.Settings.PkgInstaller", "SearchJob", "Run", 0, (void*)SearchJob_RunHook); + + scePthreadExit(NULL); + return 0; +} + extern "C" { int __cdecl module_start(size_t argc, const void* args) { - klog("!! Hello World !!\n"); - - Mono::Init(); - - if (GamePad::IsDown(GamePad::Buttons::Left | GamePad::Buttons::Triangle)) - { - Notify("Orbis Toolbox: Aborting Launch!!"); - return 0; - } - - // Toolbox - System_Monitor::Init(); - Settings_Menu::Init(); - //Title_Menu::Init(); - - // API - API::Init(); - CallInMonoThread = new RemoteCaller(); - - Notify(ORBIS_TOOLBOX_NOTIFY); + OrbisPthread* hThread; + scePthreadCreate(&hThread, nullptr, InitThread, nullptr, "Init"); return 0; } @@ -45,16 +69,12 @@ extern "C" //Title_Menu::Term(); // API - API::Term(); delete CallInMonoThread; + delete SearchJob_RunDetour; + sceKernelSleep(4); return 0; } - - void _start() - { - - } } \ No newline at end of file diff --git a/Playstation/OrbisToolbox-2.0/SysfileUtilWrapper.cpp b/Playstation/OrbisToolbox-2.0/SysfileUtilWrapper.cpp index 48e0974..5b07cdc 100644 --- a/Playstation/OrbisToolbox-2.0/SysfileUtilWrapper.cpp +++ b/Playstation/OrbisToolbox-2.0/SysfileUtilWrapper.cpp @@ -1,24 +1,6 @@ #include "Common.h" #include "SysfileUtilWrapper.h" -void Print_Bytes(char* Bytes, size_t len) -{ - int Counter = 0; - for (size_t n = 0; n < len; n++) - { - printf("%02X ", Bytes[n]); - - if (Counter >= 20) - { - printf("\n"); - Counter = 0; - } - - Counter++; - } - printf("\n"); -} - char* SysfileUtilWrapper::GetString(const char* FilePath, const char* Key, unsigned int Size) { int fd = sceKernelOpen(FilePath, 0, 0511); diff --git a/Playstation/OrbisToolbox-2.0/Version.h b/Playstation/OrbisToolbox-2.0/Version.h index e343861..4ab3dfb 100644 --- a/Playstation/OrbisToolbox-2.0/Version.h +++ b/Playstation/OrbisToolbox-2.0/Version.h @@ -1,11 +1,11 @@ -#pragma once -#define ORBIS_TOOLBOX_MAJOR 2 -#define ORBIS_TOOLBOX_MINOR 0 -#define ORBIS_TOOLBOX_BUILDVERSION 218 -#define stringify(a) stringify_(a) -#define stringify_(a) #a -#if defined(ORBIS_TOOLBOX_DEBUG) -#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__) -#else -#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__) -#endif +#pragma once +#define ORBIS_TOOLBOX_MAJOR 2 +#define ORBIS_TOOLBOX_MINOR 0 +#define ORBIS_TOOLBOX_BUILDVERSION 249 +#define stringify(a) stringify_(a) +#define stringify_(a) #a +#if defined(ORBIS_TOOLBOX_DEBUG) +#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Dev Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__) +#else +#define ORBIS_TOOLBOX_BUILDSTRING ("[Orbis Toolbox " stringify(ORBIS_TOOLBOX_MAJOR) "." stringify(ORBIS_TOOLBOX_MINOR) "] Build " stringify(ORBIS_TOOLBOX_BUILDVERSION) " " __DATE__ " " __TIME__) +#endif diff --git a/Windows/Libraries/OrbisLib/Classes/Target/Process/Process.cs b/Windows/Libraries/OrbisLib/Classes/Target/Process/Process.cs index 5263577..0f2265d 100644 --- a/Windows/Libraries/OrbisLib/Classes/Target/Process/Process.cs +++ b/Windows/Libraries/OrbisLib/Classes/Target/Process/Process.cs @@ -16,16 +16,11 @@ namespace OrbisSuite public UInt64 DataSegmentBase; public UInt64 DataSegmentLen; - public ProcessInfo(Int32 PID, bool Attached, string Name, string TitleID, UInt64 TextSegmentBase, UInt64 TextSegmentLen, UInt64 DataSegmentBase, UInt64 DataSegmentLen) + public ProcessInfo(Int32 PID, string Name, string TitleID) { this.PID = PID; - this.Attached = Attached; this.Name = Name; this.TitleID = TitleID; - this.TextSegmentBase = TextSegmentBase; - this.TextSegmentLen = TextSegmentLen; - this.DataSegmentBase = DataSegmentBase; - this.DataSegmentLen = DataSegmentLen; } public ProcessInfo() @@ -73,7 +68,7 @@ namespace OrbisSuite Sock.Receive(RawPacket); Helpers.BytestoStruct(RawPacket, ref Packet); - yield return new ProcessInfo(Packet.ProcessID, Packet.Attached == 1 ? true : false, Packet.ProcName, Packet.TitleID, Packet.TextSegmentBase, Packet.TextSegmentLen, Packet.DataSegmentBase, Packet.DataSegmentLen); + yield return new ProcessInfo(Packet.ProcessID, Packet.Name, Packet.TitleID); } API.CompleteCall(Sock); diff --git a/Windows/Libraries/OrbisLib/Common/API/APIPackets.cs b/Windows/Libraries/OrbisLib/Common/API/APIPackets.cs index 0cbd191..2e5d522 100644 --- a/Windows/Libraries/OrbisLib/Common/API/APIPackets.cs +++ b/Windows/Libraries/OrbisLib/Common/API/APIPackets.cs @@ -18,6 +18,7 @@ namespace OrbisSuite.Common /* ##### Debugger functions ##### */ DBG_START, + API_DBG_ATTACH, /* Debugger attach to target */ API_DBG_DETACH, /* Debugger detach from target */ API_DBG_GET_CURRENT, @@ -63,19 +64,23 @@ namespace OrbisSuite.Common API_DBG_WATCHPOINT_REMOVE, API_DBG_WATCHPOINT_GETINFO, API_DBG_WATCHPOINT_LIST, + DBG_END, /* ############################## */ /* ###### Kernel functions ###### */ KERN_START, + API_KERN_BASE, API_KERN_READ, API_KERN_WRITE, + KERN_END, /* ############################## */ /* ###### Target functions ###### */ TARGET_START, + API_TARGET_INFO, API_TARGET_RESTMODE, API_TARGET_SHUTDOWN, @@ -85,7 +90,7 @@ namespace OrbisSuite.Common API_TARGET_SET_LED, API_TARGET_DUMP_PROC, API_TARGET_SET_SETTINGS, - //API_TARGET_LOAD_VSH_MODULE + TARGET_END, /* ############################## */ } @@ -119,29 +124,28 @@ namespace OrbisSuite.Common public struct ProcPacket { public int ProcessID; - public int Attached; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)] - public string ProcName; + public string Name; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 10)] public string TitleID; - public UInt64 TextSegmentBase; - public UInt64 TextSegmentLen; - public UInt64 DataSegmentBase; - public UInt64 DataSegmentLen; } [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)] - public struct ModuleListPacket + public struct SegmentInfo { - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)] - public string Name; + public UInt64 baseAddr; + public uint size; + public int prot; + } + + [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)] + public struct LibraryPacket + { + public Int64 Handle; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string Path; - public int Handle; - public UInt64 TextSegmentBase; - public UInt64 TextSegmentLen; - public UInt64 DataSegmentBase; - public UInt64 DataSegmentLen; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 64)] + public SegmentInfo[] Segments; } public enum ConsoleTypes diff --git a/Windows/Libraries/OrbisLib/Common/Config.cs b/Windows/Libraries/OrbisLib/Common/Config.cs index af62d5a..2f7b2d9 100644 --- a/Windows/Libraries/OrbisLib/Common/Config.cs +++ b/Windows/Libraries/OrbisLib/Common/Config.cs @@ -55,6 +55,6 @@ /// /// The version of the packets used to communicate with the Target Console. /// - public static readonly int PacketVersion = 1; + public static readonly int PacketVersion = 2; } } diff --git a/Windows/OrbisNeighborHood/Resources/BuildNumber.txt b/Windows/OrbisNeighborHood/Resources/BuildNumber.txt index 6ee2947..5e1590e 100644 --- a/Windows/OrbisNeighborHood/Resources/BuildNumber.txt +++ b/Windows/OrbisNeighborHood/Resources/BuildNumber.txt @@ -1 +1 @@ -1384 +1406 diff --git a/Windows/OrbisNeighborHood/Resources/BuildString.txt b/Windows/OrbisNeighborHood/Resources/BuildString.txt index 962dcaf..26f427e 100644 --- a/Windows/OrbisNeighborHood/Resources/BuildString.txt +++ b/Windows/OrbisNeighborHood/Resources/BuildString.txt @@ -1 +1 @@ -Version 3.0.1384 Debug Build Thursday December 01 2022 9:39 PM +Version 3.0.1406 Debug Build Saturday December 03 2022 10:47 PM