Skip to content
This repository has been archived by the owner on Sep 15, 2023. It is now read-only.

Commit

Permalink
replace external sha256 library with internal and change order of men…
Browse files Browse the repository at this point in the history
…u points
  • Loading branch information
jimzrt committed Oct 3, 2019
1 parent 148ace3 commit a055def
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 268 deletions.
4 changes: 2 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ include $(DEVKITARM)/base_rules
################################################################################

IPL_LOAD_ADDR := 0x40003000
LPVERSION_MAJOR := 1
LPVERSION_MAJOR := 0
LPVERSION_MINOR := 0
LPVERSION_BUGFX := 0
LPVERSION_BUGFX := 2

################################################################################

Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ It is heavily based on [Lockpick_RCM](https:/shchmue/Lockpick_RCM) a

Massive Thanks to CTCaer, shchmue and blawar!

This project is in early stage, so have a nand backup!! There is not much of error handling going on.

Usage
=
* Launch Incoginito_RCM.bin using your favorite payload injector
Expand Down
106 changes: 36 additions & 70 deletions source/keys/keys.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@

#include "../libs/fatfs/diskio.h"
#include <string.h>
#include "sha256.h"

extern bool sd_mount();
extern void sd_unmount();
Expand Down Expand Up @@ -431,7 +430,19 @@ bool readData(u8 *buffer, u32 offset, u32 length, u8 enc)

u8 *tmp = (u8 *)malloc(sectorCount * NX_EMMC_BLOCKSIZE);

disk_read_prod(tmp, sector, sectorCount, enc);
u32 clusterOffset = sector % 32;
u32 sectorOffset = 0;
while (clusterOffset + sectorCount > 32)
{
u32 sectorToRead = 32 - clusterOffset;
disk_read_prod(tmp + (sectorOffset * NX_EMMC_BLOCKSIZE), sector, sectorToRead, enc);
sector += sectorToRead;
sectorCount -= sectorToRead;
clusterOffset = 0;
sectorOffset += sectorToRead;
}

disk_read_prod(tmp + (sectorOffset * NX_EMMC_BLOCKSIZE), sector, sectorCount, enc);

memcpy(buffer, tmp + newOffset, length);

Expand Down Expand Up @@ -499,86 +510,41 @@ bool writeData(u8 *buffer, u32 offset, u32 length, u8 enc)
bool writeHash(u32 hashOffset, u32 offset, u32 sz)
{

u8 *buffer = (u8 *)malloc(NX_EMMC_BLOCKSIZE);

SHA256_CTX ctx;
sha256_init(&ctx);

u32 newOffset = offset % NX_EMMC_BLOCKSIZE;

if (newOffset > 0 && newOffset + sz >= NX_EMMC_BLOCKSIZE)
{
u32 toRead = NX_EMMC_BLOCKSIZE - newOffset;
readData(buffer, offset, toRead, ENCRYPTED);
sha256_update(&ctx, buffer, toRead);

sz -= toRead;
offset += toRead;
}

while (sz > NX_EMMC_BLOCKSIZE)
{

readData(buffer, offset, NX_EMMC_BLOCKSIZE, ENCRYPTED);
sha256_update(&ctx, buffer, NX_EMMC_BLOCKSIZE);

sz -= NX_EMMC_BLOCKSIZE;
offset += NX_EMMC_BLOCKSIZE;
}

if (sz > 0)
{

readData(buffer, offset, sz, ENCRYPTED);
sha256_update(&ctx, buffer, sz);
}
u8 *buffer = (u8 *)malloc(sz);
readData(buffer, offset, sz, ENCRYPTED);
u8 hash[0x20];
sha256_final(&ctx, hash);
se_calc_sha256(hash, buffer, sz);

writeData(hash, hashOffset, 0x20, ENCRYPTED);

free(buffer);
return true;
}

// void test(){
// u32 size = 32768;
// u8 *buffer = (u8 *)malloc(NX_EMMC_BLOCKSIZE);
// u8* bigBuffer = (u8 *)malloc(size);
// u32 offset = 0;
// readData(bigBuffer, 0, size, ENCRYPTED);
// while(size > NX_EMMC_BLOCKSIZE){
// readData(buffer, offset, NX_EMMC_BLOCKSIZE, ENCRYPTED);
// if(memcmp(buffer, bigBuffer + offset, NX_EMMC_BLOCKSIZE) != 0){
// gfx_printf("arry mismatch on offset %d", offset);

// }
// size -= NX_EMMC_BLOCKSIZE;
// offset += NX_EMMC_BLOCKSIZE;
// }
// }

bool verifyHash(u32 hashOffset, u32 offset, u32 sz)
{
bool result = false;
u8 *buffer = (u8 *)malloc(NX_EMMC_BLOCKSIZE);

SHA256_CTX ctx;
sha256_init(&ctx);

u32 newOffset = offset % NX_EMMC_BLOCKSIZE;

if (newOffset > 0 && sz >= NX_EMMC_BLOCKSIZE)
{
u32 toRead = NX_EMMC_BLOCKSIZE - newOffset;
readData(buffer, offset, toRead, ENCRYPTED);
sha256_update(&ctx, buffer, toRead);

sz -= toRead;
offset += toRead;
}

while (sz > NX_EMMC_BLOCKSIZE)
{

readData(buffer, offset, NX_EMMC_BLOCKSIZE, ENCRYPTED);
sha256_update(&ctx, buffer, NX_EMMC_BLOCKSIZE);

sz -= NX_EMMC_BLOCKSIZE;
offset += NX_EMMC_BLOCKSIZE;
}

if (sz > 0)
{

readData(buffer, offset, sz, ENCRYPTED);
sha256_update(&ctx, buffer, sz);
}
u8 *buffer = (u8 *)malloc(sz);
readData(buffer, offset, sz, ENCRYPTED);
u8 hash1[0x20];
sha256_final(&ctx, hash1);
se_calc_sha256(hash1, buffer, sz);

u8 hash2[0x20];

Expand Down
158 changes: 0 additions & 158 deletions source/keys/sha256.c

This file was deleted.

35 changes: 0 additions & 35 deletions source/keys/sha256.h

This file was deleted.

7 changes: 4 additions & 3 deletions source/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -255,11 +255,12 @@ void restore_emunand()
btn_wait();
}
ment_t ment_top[] = {
MDEF_HANDLER("Incognito (SysNAND)", incognito_sysnand, COLOR_ORANGE),
MDEF_HANDLER("Incognito (emuMMC)", incognito_emunand, COLOR_ORANGE),
MDEF_CAPTION("", COLOR_YELLOW),
MDEF_HANDLER("Backup (SysNAND)", backup_sysnand, COLOR_ORANGE),
MDEF_HANDLER("Backup (emuMMC)", backup_emunand, COLOR_ORANGE),
MDEF_CAPTION("", COLOR_YELLOW),
MDEF_HANDLER("Incognito (SysNAND)", incognito_sysnand, COLOR_ORANGE),
MDEF_HANDLER("Incognito (emuMMC)", incognito_emunand, COLOR_ORANGE),

MDEF_CAPTION("", COLOR_YELLOW),
MDEF_HANDLER("Restore (SysNAND)", restore_sysnand, COLOR_ORANGE),
MDEF_HANDLER("Restore (emuMMC)", restore_emunand, COLOR_ORANGE),
Expand Down

0 comments on commit a055def

Please sign in to comment.