Make compatible with both libnx v2.0.0 and v1.6.0
This commit is contained in:
		
							
								
								
									
										2
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Makefile
									
									
									
									
									
								
							| @@ -32,7 +32,7 @@ include $(DEVKITPRO)/libnx/switch_rules | |||||||
| #--------------------------------------------------------------------------------- | #--------------------------------------------------------------------------------- | ||||||
| APP_TITLE	:=	Lockpick | APP_TITLE	:=	Lockpick | ||||||
| APP_AUTHOR	:=	shchmue | APP_AUTHOR	:=	shchmue | ||||||
| APP_VERSION	:=	1.1.1 | APP_VERSION	:=	1.2 | ||||||
|  |  | ||||||
| TARGET		:=	$(subst $e ,_,$(notdir $(APP_TITLE))) | TARGET		:=	$(subst $e ,_,$(notdir $(APP_TITLE))) | ||||||
| BUILD		:=	build | BUILD		:=	build | ||||||
|   | |||||||
| @@ -34,7 +34,7 @@ Notes | |||||||
|  |  | ||||||
| Building | Building | ||||||
| = | = | ||||||
| Release built with `libnx v1.6.0`. | Release built with `libnx v2.0.0` but still builds and runs with `v1.6.0`. | ||||||
|  |  | ||||||
| Uses `freetype` which comes with `switch-portlibs` via `devkitPro pacman`: | Uses `freetype` which comes with `switch-portlibs` via `devkitPro pacman`: | ||||||
| ``` | ``` | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								changelog.md
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								changelog.md
									
									
									
									
									
								
							| @@ -1,4 +1,14 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  | ## Version 1.2 | ||||||
|  | * Update for libnx v2.0.0 compatibility and still runs when built with v1.6.0 | ||||||
|  |   * The binary got even smaller! | ||||||
|  | * Accelerate finding FS keys | ||||||
|  |   * No longer find BIS sources as they're hardcoded (whoops) | ||||||
|  |   * Find all keys on first pass hashing FS instead of hashing the whole thing from the beginning repeatedly (__*whoops*__) | ||||||
|  |  | ||||||
|  | ## Version 1.1.1 | ||||||
|  | * No longer try to dump SD seed and ES keys on 1.0.0 as they're not available until 2.0.0 | ||||||
|  |  | ||||||
| ## Version 1.1 | ## Version 1.1 | ||||||
| * Changed titlekey dump methodology | * Changed titlekey dump methodology | ||||||
|   * No longer crashes sysmodule, reboot no longer needed |   * No longer crashes sysmodule, reboot no longer needed | ||||||
|   | |||||||
| @@ -34,8 +34,16 @@ | |||||||
|  |  | ||||||
| #include "sha256.h" | #include "sha256.h" | ||||||
|  |  | ||||||
|  | #ifdef RGBX8 | ||||||
|  |     #define LIBNX_200 | ||||||
|  | #endif | ||||||
|  |  | ||||||
| namespace Common { | namespace Common { | ||||||
|     static u32 framebuf_width = 0; |     static u32 framebuf_width = 0; | ||||||
|  | #ifdef LIBNX_200 | ||||||
|  |     static Framebuffer fb; | ||||||
|  |     static u32 stride; | ||||||
|  | #endif | ||||||
|     static u32 *framebuf; |     static u32 *framebuf; | ||||||
|     // FreeType vars |     // FreeType vars | ||||||
|     static FT_Library library; |     static FT_Library library; | ||||||
| @@ -111,7 +119,9 @@ namespace Common { | |||||||
|  |  | ||||||
|         PlFontData font; |         PlFontData font; | ||||||
|  |  | ||||||
|  | #ifndef LIBNX_200 | ||||||
|         consoleInit(NULL); |         consoleInit(NULL); | ||||||
|  | #endif | ||||||
|  |  | ||||||
|         plGetSharedFontByType(&font, PlSharedFontType_Standard); |         plGetSharedFontByType(&font, PlSharedFontType_Standard); | ||||||
|  |  | ||||||
| @@ -119,10 +129,18 @@ namespace Common { | |||||||
|         FT_New_Memory_Face(library, static_cast<FT_Byte *>(font.address), font.size, 0, &face); |         FT_New_Memory_Face(library, static_cast<FT_Byte *>(font.address), font.size, 0, &face); | ||||||
|         FT_Set_Char_Size(face, 0, 6*64, 300, 300); |         FT_Set_Char_Size(face, 0, 6*64, 300, 300); | ||||||
|  |  | ||||||
|         gfxSetMode(GfxMode_LinearDouble); // todo: update for nwindow/framebuffer | #ifdef LIBNX_200 | ||||||
|  |         framebufferCreate(&fb, nwindowGetDefault(), FB_WIDTH, FB_HEIGHT, PIXEL_FORMAT_RGBA_8888, 2); | ||||||
|  |         framebufferMakeLinear(&fb); | ||||||
|  |         framebuf = (u32 *)framebufferBegin(&fb, &stride); | ||||||
|  |         framebuf_width = stride / sizeof(u32); | ||||||
|  |         memset(framebuf, 0, stride*FB_HEIGHT); | ||||||
|  |         framebufferEnd(&fb); | ||||||
|  | #else | ||||||
|  |         gfxSetMode(GfxMode_LinearDouble); | ||||||
|         framebuf = (u32 *)gfxGetFramebuffer(&framebuf_width, NULL); |         framebuf = (u32 *)gfxGetFramebuffer(&framebuf_width, NULL); | ||||||
|         memset(framebuf, 0, gfxGetFramebufferSize()); |         memset(framebuf, 0, gfxGetFramebufferSize()); | ||||||
|          | #endif | ||||||
|         draw_text(0x10, 0x020, YELLOW, "Lockpick! by shchmue"); |         draw_text(0x10, 0x020, YELLOW, "Lockpick! by shchmue"); | ||||||
|  |  | ||||||
|         draw_set_rect(814, 452 + 42 * 0, 450, 42, FLAG_RED); |         draw_set_rect(814, 452 + 42 * 0, 450, 42, FLAG_RED); | ||||||
| @@ -148,7 +166,7 @@ namespace Common { | |||||||
|         draw_text(0x10, 0x0e0, CYAN, "Saving keys to keyfile..."); |         draw_text(0x10, 0x0e0, CYAN, "Saving keys to keyfile..."); | ||||||
|         draw_text(0x10, 0x110, CYAN, "Total time elapsed:"); |         draw_text(0x10, 0x110, CYAN, "Total time elapsed:"); | ||||||
|  |  | ||||||
|         consoleUpdate(NULL); |         update_display(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     void get_tegra_keys(Key &sbk, Key &tsec, Key &tsec_root) { |     void get_tegra_keys(Key &sbk, Key &tsec, Key &tsec_root) { | ||||||
| @@ -206,17 +224,29 @@ namespace Common { | |||||||
|             u64 kDown = hidKeysDown(CONTROLLER_P1_AUTO); |             u64 kDown = hidKeysDown(CONTROLLER_P1_AUTO); | ||||||
|             if (kDown & KEY_PLUS) break; |             if (kDown & KEY_PLUS) break; | ||||||
|  |  | ||||||
|             consoleUpdate(NULL); |             update_display(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | #ifdef LIBNX_200 | ||||||
|  |         framebufferClose(&fb); | ||||||
|  | #else | ||||||
|  |         consoleExit(NULL); | ||||||
|  | #endif | ||||||
|         FT_Done_Face(face); |         FT_Done_Face(face); | ||||||
|         FT_Done_FreeType(library); |         FT_Done_FreeType(library); | ||||||
|  |  | ||||||
|         consoleExit(NULL); |  | ||||||
|  |  | ||||||
|         appletUnlockExit(); |         appletUnlockExit(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     void update_display() { | ||||||
|  | #ifdef LIBNX_200 | ||||||
|  |         framebufferBegin(&fb, &stride); | ||||||
|  |         framebufferEnd(&fb); | ||||||
|  | #else | ||||||
|  |         consoleUpdate(NULL); | ||||||
|  | #endif | ||||||
|  |     } | ||||||
|  |  | ||||||
|     void sha256(const u8 *data, u8 *hash, size_t length) { |     void sha256(const u8 *data, u8 *hash, size_t length) { | ||||||
|         struct sha256_state ctx; |         struct sha256_state ctx; | ||||||
|         sha256_init(&ctx); |         sha256_init(&ctx); | ||||||
|   | |||||||
| @@ -24,6 +24,9 @@ | |||||||
|  |  | ||||||
| #include <switch/types.h> | #include <switch/types.h> | ||||||
|  |  | ||||||
|  | #define FB_WIDTH  1280 | ||||||
|  | #define FB_HEIGHT 720 | ||||||
|  |  | ||||||
| #define GREEN   RGBA8_MAXALPHA(0, 0xff, 0) | #define GREEN   RGBA8_MAXALPHA(0, 0xff, 0) | ||||||
| #define RED     RGBA8_MAXALPHA(0xff, 0, 0) | #define RED     RGBA8_MAXALPHA(0xff, 0, 0) | ||||||
| #define CYAN    RGBA8_MAXALPHA(0, 0xff, 0xff) | #define CYAN    RGBA8_MAXALPHA(0, 0xff, 0xff) | ||||||
| @@ -61,6 +64,9 @@ namespace Common { | |||||||
|     // print exit |     // print exit | ||||||
|     void wait_to_exit(); |     void wait_to_exit(); | ||||||
|  |  | ||||||
|  |     // refresh display | ||||||
|  |     void update_display(); | ||||||
|  |  | ||||||
|     void sha256(const u8 *data, u8 *hash, size_t length); |     void sha256(const u8 *data, u8 *hash, size_t length); | ||||||
|     // reads "<keyname> = <hexkey>" and returns byte vector |     // reads "<keyname> = <hexkey>" and returns byte vector | ||||||
|     byte_vector key_string_to_byte_vector(std::string key_string); |     byte_vector key_string_to_byte_vector(std::string key_string); | ||||||
|   | |||||||
| @@ -251,16 +251,16 @@ void KeyCollection::get_keys() { | |||||||
|     char keys_str[32]; |     char keys_str[32]; | ||||||
|     sprintf(keys_str, "Total keys found: %lu", Key::get_saved_key_count()); |     sprintf(keys_str, "Total keys found: %lu", Key::get_saved_key_count()); | ||||||
|     Common::draw_text(0x2a0, 0x110, CYAN, keys_str); |     Common::draw_text(0x2a0, 0x110, CYAN, keys_str); | ||||||
|     Common::draw_text(0x80, 0x140, GREEN, "Keys saved to \"/switch/prod.keys\"!"); |     Common::draw_text(0x80, 0x140, YELLOW, "Keys saved to \"/switch/prod.keys\"!"); | ||||||
|  |  | ||||||
|     Common::draw_text(0x10, 0x170, CYAN, "Dumping titlekeys..."); |     Common::draw_text(0x10, 0x170, CYAN, "Dumping titlekeys..."); | ||||||
|     consoleUpdate(NULL); |     Common::update_display(); | ||||||
|     profiler_time = profile(&KeyCollection::get_titlekeys, *this); |     profiler_time = profile(&KeyCollection::get_titlekeys, *this); | ||||||
|     Common::draw_text_with_time(0x10, 0x170, GREEN, "Dumping titlekeys...", profiler_time); |     Common::draw_text_with_time(0x10, 0x170, GREEN, "Dumping titlekeys...", profiler_time); | ||||||
|     sprintf(keys_str, "Titlekeys found: %lu", titlekeys_dumped); |     sprintf(keys_str, "Titlekeys found: %lu", titlekeys_dumped); | ||||||
|     Common::draw_text(0x2a0, 0x170, CYAN, keys_str); |     Common::draw_text(0x2a0, 0x170, CYAN, keys_str); | ||||||
|     if (titlekeys_dumped > 0) |     if (titlekeys_dumped > 0) | ||||||
|         Common::draw_text(0x80, 0x1a0, GREEN, "Titlekeys saved to \"/switch/title.keys\"!"); |         Common::draw_text(0x80, 0x1a0, YELLOW, "Titlekeys saved to \"/switch/title.keys\"!"); | ||||||
|     else |     else | ||||||
|         Common::draw_text(0x80, 0x1a0, GREEN, "No titlekeys found. Either you've never played or installed a game or dump failed."); |         Common::draw_text(0x80, 0x1a0, GREEN, "No titlekeys found. Either you've never played or installed a game or dump failed."); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user