diff --git a/build/visualstudio/nstool/nstool.vcxproj b/build/visualstudio/nstool/nstool.vcxproj
index 8d79358..3b23999 100644
--- a/build/visualstudio/nstool/nstool.vcxproj
+++ b/build/visualstudio/nstool/nstool.vcxproj
@@ -22,7 +22,7 @@
15.0
{775EF5EB-CA49-4994-8AC4-47B4A5385266}
nstool
- 10.0.17134.0
+ 10.0.17763.0
diff --git a/deps/libfnd b/deps/libfnd
index a3da67f..98a6f62 160000
--- a/deps/libfnd
+++ b/deps/libfnd
@@ -1 +1 @@
-Subproject commit a3da67f8bcbf794e3689b0496695a249e323b6e8
+Subproject commit 98a6f623361781e5bf4efbec0477efa9729de2cd
diff --git a/deps/liblz4 b/deps/liblz4
index 1dbb4a7..0e5a8c2 160000
--- a/deps/liblz4
+++ b/deps/liblz4
@@ -1 +1 @@
-Subproject commit 1dbb4a7988f91f0dbe854cb841b4ad5cdaff912e
+Subproject commit 0e5a8c29295a9046fff4ad5371a8ea682c7e0cb3
diff --git a/deps/libnintendo-es b/deps/libnintendo-es
index 5b46763..ba3036e 160000
--- a/deps/libnintendo-es
+++ b/deps/libnintendo-es
@@ -1 +1 @@
-Subproject commit 5b46763f7c35111bc67406ecadb4381436aa62b8
+Subproject commit ba3036e08dc0d58662c3fc38a3dbee46371e399a
diff --git a/deps/libnintendo-hac b/deps/libnintendo-hac
index 71f5f5d..112f9b5 160000
--- a/deps/libnintendo-hac
+++ b/deps/libnintendo-hac
@@ -1 +1 @@
-Subproject commit 71f5f5d9488bf24ee3c9196911880c5ecda7c0cc
+Subproject commit 112f9b59a3914dcc06a2713de8c7cd67112c57bb
diff --git a/deps/libnintendo-hac-hb b/deps/libnintendo-hac-hb
index dc434e4..e7f773b 160000
--- a/deps/libnintendo-hac-hb
+++ b/deps/libnintendo-hac-hb
@@ -1 +1 @@
-Subproject commit dc434e4605476c40f584e6e98f54fdd980eba2eb
+Subproject commit e7f773bf883c6f5db700df32a286aa110849d863
diff --git a/deps/libnintendo-pki b/deps/libnintendo-pki
index 509300a..ca22857 160000
--- a/deps/libnintendo-pki
+++ b/deps/libnintendo-pki
@@ -1 +1 @@
-Subproject commit 509300a121626a9221f2d8af42a06723481ebf33
+Subproject commit ca228576350a7ea3922ddc87ca43d68376d16fb2
diff --git a/deps/libpolarssl b/deps/libpolarssl
index 6573a1b..7cf5ebe 160000
--- a/deps/libpolarssl
+++ b/deps/libpolarssl
@@ -1 +1 @@
-Subproject commit 6573a1bd54a6a13bd468c6e17e631332eaff4449
+Subproject commit 7cf5ebe575b5330b946160bad05c6be917340ae9
diff --git a/src/CnmtProcess.cpp b/src/CnmtProcess.cpp
index 54c7777..6faef8c 100644
--- a/src/CnmtProcess.cpp
+++ b/src/CnmtProcess.cpp
@@ -1,8 +1,12 @@
+#include "CnmtProcess.h"
+
#include
#include
+
#include
#include
-#include "CnmtProcess.h"
+
+#include
CnmtProcess::CnmtProcess() :
mFile(),
@@ -61,10 +65,18 @@ void CnmtProcess::displayCnmt()
std::cout << "[ContentMeta]" << std::endl;
std::cout << " TitleId: 0x" << std::hex << std::setw(16) << std::setfill('0') << mCnmt.getTitleId() << std::endl;
std::cout << " Version: v" << std::dec << mCnmt.getTitleVersion() << " (" << _SPLIT_VER(mCnmt.getTitleVersion()) << ")"<< std::endl;
- std::cout << " Type: " << getContentMetaTypeStr(mCnmt.getContentMetaType()) << " (" << std::dec << mCnmt.getContentMetaType() << ")" << std::endl;
+ std::cout << " Type: " << nn::hac::ContentMetaUtil::getContentMetaTypeAsString(mCnmt.getContentMetaType()) << " (" << std::dec << mCnmt.getContentMetaType() << ")" << std::endl;
std::cout << " Attributes: 0x" << std::hex << (uint32_t)mCnmt.getAttributes() << std::endl;
- std::cout << " IncludesExFatDriver: " << getBoolStr(_HAS_BIT(mCnmt.getAttributes(), nn::hac::cnmt::ATTRIBUTE_INCLUDES_EX_FAT_DRIVER)) << std::endl;
- std::cout << " Rebootless: " << getBoolStr(_HAS_BIT(mCnmt.getAttributes(), nn::hac::cnmt::ATTRIBUTE_REBOOTLESS)) << std::endl;
+ if (mCnmt.getAttributes() != 0)
+ {
+ for (size_t bit = 0; bit < (sizeof(byte_t)*8); bit++)
+ {
+ if (_HAS_BIT(mCnmt.getAttributes(), bit))
+ {
+ std::cout << " > " << nn::hac::ContentMetaUtil::getContentMetaAttributeAsString((nn::hac::cnmt::ContentMetaAttribute)bit) << std::endl;
+ }
+ }
+ }
std::cout << " RequiredDownloadSystemVersion: v" << mCnmt.getRequiredDownloadSystemVersion() << " (" << _SPLIT_VER(mCnmt.getRequiredDownloadSystemVersion()) << ")"<< std::endl;
switch(mCnmt.getContentMetaType())
{
@@ -97,7 +109,7 @@ void CnmtProcess::displayCnmt()
{
const nn::hac::ContentInfo& info = mCnmt.getContentInfo()[i];
std::cout << " " << std::dec << i << std::endl;
- std::cout << " Type: " << getContentTypeStr(info.getContentType()) << " (" << std::dec << info.getContentType() << ")" << std::endl;
+ std::cout << " Type: " << nn::hac::ContentMetaUtil::getContentTypeAsString(info.getContentType()) << " (" << std::dec << info.getContentType() << ")" << std::endl;
std::cout << " Id: " << fnd::SimpleTextOutput::arrayToString(info.getContentId().data, nn::hac::cnmt::kContentIdLen, false, "") << std::endl;
std::cout << " Size: 0x" << std::hex << info.getContentSize() << std::endl;
std::cout << " Hash: " << fnd::SimpleTextOutput::arrayToString(info.getContentHash().bytes, sizeof(info.getContentHash()), false, "") << std::endl;
@@ -112,10 +124,18 @@ void CnmtProcess::displayCnmt()
std::cout << " " << std::dec << i << std::endl;
std::cout << " Id: 0x" << std::hex << std::setw(16) << std::setfill('0') << info.getTitleId() << std::endl;
std::cout << " Version: v" << std::dec << info.getTitleVersion() << " (" << _SPLIT_VER(info.getTitleVersion()) << ")"<< std::endl;
- std::cout << " Type: " << getContentMetaTypeStr(info.getContentMetaType()) << " (" << std::dec << info.getContentMetaType() << ")" << std::endl;
+ std::cout << " Type: " << nn::hac::ContentMetaUtil::getContentMetaTypeAsString(info.getContentMetaType()) << " (" << std::dec << info.getContentMetaType() << ")" << std::endl;
std::cout << " Attributes: 0x" << std::hex << (uint32_t)info.getAttributes() << std::endl;
- std::cout << " IncludesExFatDriver: " << getBoolStr(_HAS_BIT(info.getAttributes(), nn::hac::cnmt::ATTRIBUTE_INCLUDES_EX_FAT_DRIVER)) << std::endl;
- std::cout << " Rebootless: " << getBoolStr(_HAS_BIT(info.getAttributes(), nn::hac::cnmt::ATTRIBUTE_REBOOTLESS)) << std::endl;
+ if (info.getAttributes() != 0)
+ {
+ for (size_t bit = 0; bit < (sizeof(byte_t)*8); bit++)
+ {
+ if (_HAS_BIT(info.getAttributes(), bit))
+ {
+ std::cout << " > " << nn::hac::ContentMetaUtil::getContentMetaAttributeAsString((nn::hac::cnmt::ContentMetaAttribute)bit) << std::endl;
+ }
+ }
+ }
}
}
@@ -127,123 +147,4 @@ void CnmtProcess::displayCnmt()
const char* CnmtProcess::getBoolStr(bool state) const
{
return state? "TRUE" : "FALSE";
-}
-
-const char* CnmtProcess::getContentTypeStr(nn::hac::cnmt::ContentType type) const
-{
- const char* str = nullptr;
-
- switch (type)
- {
- case (nn::hac::cnmt::TYPE_META):
- str = "Meta";
- break;
- case (nn::hac::cnmt::TYPE_PROGRAM):
- str = "Program";
- break;
- case (nn::hac::cnmt::TYPE_DATA):
- str = "Data";
- break;
- case (nn::hac::cnmt::TYPE_CONTROL):
- str = "Control";
- break;
- case (nn::hac::cnmt::TYPE_HTML_DOCUMENT):
- str = "HtmlDocument";
- break;
- case (nn::hac::cnmt::TYPE_LEGAL_INFORMATION):
- str = "LegalInformation";
- break;
- case (nn::hac::cnmt::TYPE_DELTA_FRAGMENT):
- str = "DeltaFragment";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* CnmtProcess::getContentMetaTypeStr(nn::hac::cnmt::ContentMetaType type) const
-{
- const char* str = nullptr;
-
- switch (type)
- {
- case (nn::hac::cnmt::METATYPE_SYSTEM_PROGRAM):
- str = "SystemProgram";
- break;
- case (nn::hac::cnmt::METATYPE_SYSTEM_DATA):
- str = "SystemData";
- break;
- case (nn::hac::cnmt::METATYPE_SYSTEM_UPDATE):
- str = "SystemUpdate";
- break;
- case (nn::hac::cnmt::METATYPE_BOOT_IMAGE_PACKAGE):
- str = "BootImagePackage";
- break;
- case (nn::hac::cnmt::METATYPE_BOOT_IMAGE_PACKAGE_SAFE):
- str = "BootImagePackageSafe";
- break;
- case (nn::hac::cnmt::METATYPE_APPLICATION):
- str = "Application";
- break;
- case (nn::hac::cnmt::METATYPE_PATCH):
- str = "Patch";
- break;
- case (nn::hac::cnmt::METATYPE_ADD_ON_CONTENT):
- str = "AddOnContent";
- break;
- case (nn::hac::cnmt::METATYPE_DELTA):
- str = "Delta";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* CnmtProcess::getUpdateTypeStr(nn::hac::cnmt::UpdateType type) const
-{
- const char* str = nullptr;
-
- switch (type)
- {
- case (nn::hac::cnmt::UPDATETYPE_APPLY_AS_DELTA):
- str = "ApplyAsDelta";
- break;
- case (nn::hac::cnmt::UPDATETYPE_OVERWRITE):
- str = "Overwrite";
- break;
- case (nn::hac::cnmt::UPDATETYPE_CREATE):
- str = "Create";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* CnmtProcess::getContentMetaAttrStr(nn::hac::cnmt::ContentMetaAttribute attr) const
-{
- const char* str = nullptr;
-
- switch (attr)
- {
- case (nn::hac::cnmt::ATTRIBUTE_INCLUDES_EX_FAT_DRIVER):
- str = "IncludesExFatDriver";
- break;
- case (nn::hac::cnmt::ATTRIBUTE_REBOOTLESS):
- str = "Rebootless";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
+}
\ No newline at end of file
diff --git a/src/CnmtProcess.h b/src/CnmtProcess.h
index a9834fa..aa75790 100644
--- a/src/CnmtProcess.h
+++ b/src/CnmtProcess.h
@@ -33,8 +33,4 @@ private:
void displayCnmt();
const char* getBoolStr(bool state) const;
- const char* getContentTypeStr(nn::hac::cnmt::ContentType type) const;
- const char* getContentMetaTypeStr(nn::hac::cnmt::ContentMetaType type) const;
- const char* getUpdateTypeStr(nn::hac::cnmt::UpdateType type) const;
- const char* getContentMetaAttrStr(nn::hac::cnmt::ContentMetaAttribute attr) const;
};
\ No newline at end of file
diff --git a/src/GameCardProcess.cpp b/src/GameCardProcess.cpp
index d4c52d0..7271023 100644
--- a/src/GameCardProcess.cpp
+++ b/src/GameCardProcess.cpp
@@ -2,7 +2,7 @@
#include
#include
#include
-#include
+#include
#include "GameCardProcess.h"
GameCardProcess::GameCardProcess() :
@@ -10,6 +10,7 @@ GameCardProcess::GameCardProcess() :
mCliOutputMode(_BIT(OUTPUT_BASIC)),
mVerify(false),
mListFs(false),
+ mProccessExtendedHeader(false),
mRootPfs(),
mExtractInfo()
{
@@ -73,25 +74,53 @@ void GameCardProcess::importHeader()
throw fnd::Exception(kModuleName, "No file reader set.");
}
- // read header page
- (*mFile)->read((byte_t*)&mHdrPage, 0, sizeof(nn::hac::sGcHeaderPage));
+ // allocate memory for header
+ scratch.alloc(sizeof(nn::hac::sSdkGcHeader));
- // allocate memory for and decrypt sXciHeader
- scratch.alloc(sizeof(nn::hac::sGcHeader));
+ // read header region
+ (*mFile)->read((byte_t*)scratch.data(), 0, sizeof(nn::hac::sSdkGcHeader));
+ // determine if this is a SDK XCI or a "Community" XCI
+ if (((nn::hac::sSdkGcHeader*)scratch.data())->signed_header.header.st_magic.get() == nn::hac::gc::kGcHeaderStructMagic)
+ {
+ mIsTrueSdkXci = true;
+ mGcHeaderOffset = sizeof(nn::hac::sGcKeyDataRegion);
+ }
+ else if (((nn::hac::sGcHeader_Rsa2048Signed*)scratch.data())->header.st_magic.get() == nn::hac::gc::kGcHeaderStructMagic)
+ {
+ mIsTrueSdkXci = false;
+ mGcHeaderOffset = 0;
+ }
+ else
+ {
+ throw fnd::Exception(kModuleName, "GameCard image did not have expected magic bytes");
+ }
+
+ nn::hac::sGcHeader_Rsa2048Signed* hdr_ptr = (nn::hac::sGcHeader_Rsa2048Signed*)(scratch.data() + mGcHeaderOffset);
+
+ // generate hash of raw header
+ fnd::sha::Sha256((byte_t*)&hdr_ptr->header, sizeof(nn::hac::sGcHeader), mHdrHash.bytes);
+
+ // save the signature
+ memcpy(mHdrSignature, hdr_ptr->signature, fnd::rsa::kRsa2048Size);
+
+ // decrypt extended header
fnd::aes::sAes128Key header_key;
- mKeyCfg.getXciHeaderKey(header_key);
- nn::hac::GameCardUtils::decryptXciHeader((const byte_t*)&mHdrPage.header, scratch.data(), header_key.key);
-
+ if (mKeyCfg.getXciHeaderKey(header_key))
+ {
+ nn::hac::GameCardUtil::decryptXciHeader(&hdr_ptr->header, header_key.key);
+ mProccessExtendedHeader = true;
+ }
+
// deserialise header
- mHdr.fromBytes(scratch.data(), scratch.size());
+ mHdr.fromBytes((byte_t*)&hdr_ptr->header, sizeof(nn::hac::sGcHeader));
}
void GameCardProcess::displayHeader()
{
std::cout << "[GameCard Header]" << std::endl;
std::cout << " CardHeaderVersion: " << std::dec << (uint32_t)mHdr.getCardHeaderVersion() << std::endl;
- std::cout << " RomSize: " << getRomSizeStr(mHdr.getRomSizeType());
+ std::cout << " RomSize: " << nn::hac::GameCardUtil::getRomSizeAsString((nn::hac::gc::RomSize)mHdr.getRomSizeType());
if (_HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
std::cout << " (0x" << std::hex << (uint32_t)mHdr.getRomSizeType() << ")";
std::cout << std::endl;
@@ -103,14 +132,14 @@ void GameCardProcess::displayHeader()
{
if (_HAS_BIT(mHdr.getFlags(), i))
{
- std::cout << " " << getHeaderFlagStr(i) << std::endl;
+ std::cout << " " << nn::hac::GameCardUtil::getHeaderFlagsAsString((nn::hac::gc::HeaderFlags)i) << std::endl;
}
}
}
if (_HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " InitialData:" << std::endl;
- std::cout << " KekIndex: " << std::dec << (uint32_t)mHdr.getKekIndex() << std::endl;
+ std::cout << " KekIndex: " << nn::hac::GameCardUtil::getKekIndexAsString((nn::hac::gc::KekIndex)mHdr.getKekIndex()) << "(" << std::dec << (uint32_t)mHdr.getKekIndex() << ")" << std::endl;
std::cout << " TitleKeyDecIndex: " << std::dec << (uint32_t)mHdr.getTitleKeyDecIndex() << std::endl;
std::cout << " Hash:" << std::endl;
std::cout << " " << fnd::SimpleTextOutput::arrayToString(mHdr.getInitialDataHash().bytes, 0x10, true, ":") << std::endl;
@@ -128,22 +157,22 @@ void GameCardProcess::displayHeader()
{
std::cout << " RomAreaStartPage: 0x" << std::hex << mHdr.getRomAreaStartPage();
if (mHdr.getRomAreaStartPage() != (uint32_t)(-1))
- std::cout << " (0x" << std::hex << nn::hac::GameCardUtils::blockToAddr(mHdr.getRomAreaStartPage()) << ")";
+ std::cout << " (0x" << std::hex << nn::hac::GameCardUtil::blockToAddr(mHdr.getRomAreaStartPage()) << ")";
std::cout << std::endl;
std::cout << " BackupAreaStartPage: 0x" << std::hex << mHdr.getBackupAreaStartPage();
if (mHdr.getBackupAreaStartPage() != (uint32_t)(-1))
- std::cout << " (0x" << std::hex << nn::hac::GameCardUtils::blockToAddr(mHdr.getBackupAreaStartPage()) << ")";
+ std::cout << " (0x" << std::hex << nn::hac::GameCardUtil::blockToAddr(mHdr.getBackupAreaStartPage()) << ")";
std::cout << std::endl;
std::cout << " ValidDataEndPage: 0x" << std::hex << mHdr.getValidDataEndPage();
if (mHdr.getValidDataEndPage() != (uint32_t)(-1))
- std::cout << " (0x" << std::hex << nn::hac::GameCardUtils::blockToAddr(mHdr.getValidDataEndPage()) << ")";
+ std::cout << " (0x" << std::hex << nn::hac::GameCardUtil::blockToAddr(mHdr.getValidDataEndPage()) << ")";
std::cout << std::endl;
std::cout << " LimArea: 0x" << std::hex << mHdr.getLimAreaPage();
if (mHdr.getLimAreaPage() != (uint32_t)(-1))
- std::cout << " (0x" << std::hex << nn::hac::GameCardUtils::blockToAddr(mHdr.getLimAreaPage()) << ")";
+ std::cout << " (0x" << std::hex << nn::hac::GameCardUtil::blockToAddr(mHdr.getLimAreaPage()) << ")";
std::cout << std::endl;
std::cout << " PartitionFs Header:" << std::endl;
@@ -158,23 +187,24 @@ void GameCardProcess::displayHeader()
}
- if (mHdr.getFwVerMinor() != 0)
+ if (mProccessExtendedHeader)
{
std::cout << "[GameCard Extended Header]" << std::endl;
- std::cout << " FwVersion: v" << std::dec << mHdr.getFwVerMajor() << "." << mHdr.getFwVerMinor() << std::endl;
+ std::cout << " FwVersion: v" << std::dec << mHdr.getFwVersion() << "(" << nn::hac::GameCardUtil::getCardFwVersionDescriptionAsString((nn::hac::gc::FwVersion)mHdr.getFwVersion()) << ")" << std::endl;
std::cout << " AccCtrl1: 0x" << std::hex << mHdr.getAccCtrl1() << std::endl;
- std::cout << " CardClockRate: " << getCardClockRate(mHdr.getAccCtrl1()) << std::endl;
+ std::cout << " CardClockRate: " << nn::hac::GameCardUtil::getCardClockRateAsString((nn::hac::gc::CardClockRate)mHdr.getAccCtrl1()) << std::endl;
std::cout << " Wait1TimeRead: 0x" << std::hex << mHdr.getWait1TimeRead() << std::endl;
std::cout << " Wait2TimeRead: 0x" << std::hex << mHdr.getWait2TimeRead() << std::endl;
std::cout << " Wait1TimeWrite: 0x" << std::hex << mHdr.getWait1TimeWrite() << std::endl;
std::cout << " Wait2TimeWrite: 0x" << std::hex << mHdr.getWait2TimeWrite() << std::endl;
std::cout << " FwMode: 0x" << std::hex << mHdr.getFwMode() << std::endl;
+ std::cout << " CompatibilityType: " << nn::hac::GameCardUtil::getCompatibilityTypeAsString((nn::hac::gc::CompatibilityType)mHdr.getCompatibilityType()) << "(" << std::dec << mHdr.getCompatibilityType() << ")" << std::endl;
std::cout << " Update Partition Info:" << std::endl;
#define _SPLIT_VER(ver) std::dec << ((ver>>26) & 0x3f) << "." << ((ver>>20) & 0x3f) << "." << ((ver>>16) & 0xf) << "." << (ver & 0xffff)
std::cout << " CUP Version: v" << std::dec << mHdr.getUppVersion() << " (" << _SPLIT_VER(mHdr.getUppVersion()) << ")" << std::endl;
#undef _SPLIT_VER
std::cout << " CUP TitleId: 0x" << std::hex << std::setw(16) << std::setfill('0') << mHdr.getUppId() << std::endl;
- std::cout << " Partition Hash: " << fnd::SimpleTextOutput::arrayToString(mHdr.getUppHash(), 8, true, ":") << std::endl;
+ std::cout << " CUP Digest: " << fnd::SimpleTextOutput::arrayToString(mHdr.getUppHash(), 8, true, ":") << std::endl;
}
}
@@ -191,10 +221,9 @@ bool GameCardProcess::validateRegionOfFile(size_t offset, size_t len, const byte
void GameCardProcess::validateXciSignature()
{
fnd::rsa::sRsa2048Key header_sign_key;
- fnd::sha::sSha256Hash calc_hash;
- fnd::sha::Sha256((byte_t*)&mHdrPage.header, sizeof(nn::hac::sGcHeader), calc_hash.bytes);
+
mKeyCfg.getXciHeaderSignKey(header_sign_key);
- if (fnd::rsa::pkcs::rsaVerify(header_sign_key, fnd::sha::HASH_SHA256, calc_hash.bytes, mHdrPage.signature) != 0)
+ if (fnd::rsa::pkcs::rsaVerify(header_sign_key, fnd::sha::HASH_SHA256, mHdrHash.bytes, mHdrSignature) != 0)
{
std::cout << "[WARNING] GameCard Header Signature: FAIL" << std::endl;
}
@@ -236,80 +265,4 @@ void GameCardProcess::processPartitionPfs()
tmp.process();
}
-}
-
-const char* GameCardProcess::getRomSizeStr(byte_t rom_size) const
-{
- const char* str = nullptr;
-
- switch (rom_size)
- {
- case (nn::hac::gc::ROM_SIZE_1GB):
- str = "1GB";
- break;
- case (nn::hac::gc::ROM_SIZE_2GB):
- str = "2GB";
- break;
- case (nn::hac::gc::ROM_SIZE_4GB):
- str = "4GB";
- break;
- case (nn::hac::gc::ROM_SIZE_8GB):
- str = "8GB";
- break;
- case (nn::hac::gc::ROM_SIZE_16GB):
- str = "16GB";
- break;
- case (nn::hac::gc::ROM_SIZE_32GB):
- str = "32GB";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* GameCardProcess::getHeaderFlagStr(byte_t flag) const
-{
- const char* str = nullptr;
-
- switch (flag)
- {
- case (nn::hac::gc::FLAG_AUTOBOOT):
- str = "AutoBoot";
- break;
- case (nn::hac::gc::FLAG_HISTORY_ERASE):
- str = "HistoryErase";
- break;
- case (nn::hac::gc::FLAG_REPAIR_TOOL):
- str = "RepairTool";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-
-const char* GameCardProcess::getCardClockRate(uint32_t acc_ctrl_1) const
-{
- const char* str = nullptr;
-
- switch (acc_ctrl_1)
- {
- case (nn::hac::gc::CLOCK_RATE_25):
- str = "20 MHz";
- break;
- case (nn::hac::gc::CLOCK_RATE_50):
- str = "50 MHz";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
+}
\ No newline at end of file
diff --git a/src/GameCardProcess.h b/src/GameCardProcess.h
index d1cba42..4f4b43c 100644
--- a/src/GameCardProcess.h
+++ b/src/GameCardProcess.h
@@ -35,6 +35,7 @@ private:
KeyConfiguration mKeyCfg;
CliOutputMode mCliOutputMode;
bool mVerify;
+ bool mListFs;
struct sExtractInfo
{
@@ -53,10 +54,16 @@ private:
}
};
- bool mListFs;
-
- nn::hac::sGcHeaderPage mHdrPage;
+
+
+ bool mIsTrueSdkXci;
+ bool mIsSdkXciEncrypted;
+ size_t mGcHeaderOffset;
+ bool mProccessExtendedHeader;
+ byte_t mHdrSignature[fnd::rsa::kRsa2048Size];
+ fnd::sha::sSha256Hash mHdrHash;
nn::hac::GameCardHeader mHdr;
+
PfsProcess mRootPfs;
fnd::List mExtractInfo;
@@ -66,9 +73,4 @@ private:
void validateXciSignature();
void processRootPfs();
void processPartitionPfs();
-
- // strings
- const char* getRomSizeStr(byte_t rom_size) const;
- const char* getHeaderFlagStr(byte_t flag) const;
- const char* getCardClockRate(uint32_t acc_ctrl_1) const;
};
\ No newline at end of file
diff --git a/src/KeyConfiguration.cpp b/src/KeyConfiguration.cpp
index d268096..1698eab 100644
--- a/src/KeyConfiguration.cpp
+++ b/src/KeyConfiguration.cpp
@@ -2,7 +2,6 @@
#include
#include
#include
-#include
KeyConfiguration::KeyConfiguration()
{
@@ -211,7 +210,7 @@ void KeyConfiguration::clearGeneralKeyConfiguration()
for (size_t j = 0; j < kNcaKeakNum; j++)
{
mNcaKeyAreaEncryptionKey[j][i] = kNullAesKey;
- mNcaKeyAreaEncryptionKey[j][i] = kNullAesKey;
+ mNcaKeyAreaEncryptionKeyHw[j][i] = kNullAesKey;
}
}
}
diff --git a/src/KipProcess.cpp b/src/KipProcess.cpp
index 48b04dc..b980efb 100644
--- a/src/KipProcess.cpp
+++ b/src/KipProcess.cpp
@@ -1,9 +1,15 @@
+#include "KipProcess.h"
+
#include
#include
+
#include
#include
#include
-#include "KipProcess.h"
+
+#include
+#include
+
KipProcess::KipProcess():
mFile(),
@@ -141,7 +147,7 @@ void KipProcess::displayHeader()
std::cout << " Meta:" << std::endl;
std::cout << " Name: " << mHdr.getName() << std::endl;
std::cout << " TitleId: 0x" << std::hex << std::setw(16) << std::setfill('0') << mHdr.getTitleId() << std::endl;
- std::cout << " ProcessCategory: " << getProcessCategoryStr(mHdr.getProcessCategory()) << std::endl;
+ std::cout << " ProcessCategory: " << nn::hac::KernelInitialProcessUtil::getProcessCategoryAsString(mHdr.getProcessCategory()) << std::endl;
std::cout << " InstructionType: " << getInstructionTypeStr(mHdr.getFlagList().hasElement(nn::hac::kip::FLAG_INSTRUCTION_64BIT)) << std::endl;
std::cout << " AddrSpaceWidth: " << getAddressSpaceStr(mHdr.getFlagList().hasElement(nn::hac::kip::FLAG_ADDR_SPACE_64BIT)) << std::endl;
std::cout << " MemoryPool: " << getMemoryPoolStr(mHdr.getFlagList().hasElement(nn::hac::kip::FLAG_USE_SYSTEM_POOL_PARTITION)) << std::endl;
@@ -191,7 +197,7 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
if (kern.getSystemCalls().isSet())
{
- fnd::List syscalls = kern.getSystemCalls().getSystemCalls();
+ fnd::List syscalls = kern.getSystemCalls().getSystemCalls();
std::cout << " SystemCalls:" << std::endl;
std::cout << " ";
size_t lineLen = 0;
@@ -203,10 +209,11 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << std::endl;
std::cout << " ";
}
- std::cout << getSystemCallStr(syscalls[i]);
+ std::string syscall_string = nn::hac::KernelCapabilityUtil::getSystemCallAsString(syscalls[i]);
+ std::cout << syscall_string;
if (syscalls[i] != syscalls.atBack())
std::cout << ", ";
- lineLen += strlen(getSystemCallStr(syscalls[i]));
+ lineLen += syscall_string.length();
}
std::cout << std::endl;
}
@@ -218,12 +225,12 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << " MemoryMaps:" << std::endl;
for (size_t i = 0; i < maps.size(); i++)
{
- std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)maps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(maps[i].addr + maps[i].size) << 12) - 1) << " (perm=" << getMemMapPermStr(maps[i].perm) << ") (type=" << getMemMapTypeStr(maps[i].type) << ")" << std::endl;
+ std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)maps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(maps[i].addr + maps[i].size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(maps[i].perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(maps[i].type) << ")" << std::endl;
}
//std::cout << " IoMaps:" << std::endl;
for (size_t i = 0; i < ioMaps.size(); i++)
{
- std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)ioMaps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(ioMaps[i].addr + ioMaps[i].size) << 12) - 1) << " (perm=" << getMemMapPermStr(ioMaps[i].perm) << ") (type=" << getMemMapTypeStr(ioMaps[i].type) << ")" << std::endl;
+ std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)ioMaps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(ioMaps[i].addr + ioMaps[i].size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(ioMaps[i].perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(ioMaps[i].type) << ")" << std::endl;
}
}
if (kern.getInterupts().isSet())
@@ -258,7 +265,7 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
}
if (kern.getMiscFlags().isSet())
{
- fnd::List flagList = kern.getMiscFlags().getFlagList();
+ fnd::List flagList = kern.getMiscFlags().getFlagList();
std::cout << " Misc Flags:" << std::endl;
for (uint32_t i = 0; i < flagList.size(); i++)
@@ -269,7 +276,7 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << std::endl;
std::cout << " ";
}
- std::cout << getMiscFlagStr(flagList[i]);
+ std::cout << nn::hac::KernelCapabilityUtil::getMiscFlagAsString(flagList[i]);
if (flagList[i] != flagList.atBack())
std::cout << ", ";
std::cout << std::endl;
@@ -277,25 +284,6 @@ void KipProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
}
}
-const char* KipProcess::getProcessCategoryStr(nn::hac::kip::ProcessCategory var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::kip::PROCCAT_REGULAR):
- str = "NormalProcess";
- break;
- case (nn::hac::kip::PROCCAT_KERNAL_KIP):
- str = "KernelInitalProcess";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
const char* KipProcess::getInstructionTypeStr(bool is64Bit) const
{
return is64Bit? "64Bit" : "32Bit";
@@ -309,459 +297,4 @@ const char* KipProcess::getAddressSpaceStr(bool is64Bit) const
const char* KipProcess::getMemoryPoolStr(bool isSystemPool) const
{
return isSystemPool? "System" : "Application";
-}
-
-const char* KipProcess::getMiscFlagStr(nn::hac::MiscFlagsHandler::Flags flag) const
-{
- const char* str = nullptr;
-
- switch(flag)
- {
- case (nn::hac::MiscFlagsHandler::FLAG_ENABLE_DEBUG):
- str = "EnableDebug";
- break;
- case (nn::hac::MiscFlagsHandler::FLAG_FORCE_DEBUG):
- str = "ForceDebug";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* KipProcess::getSystemCallStr(byte_t syscall_id) const
-{
- const char* str = nullptr;
-
- switch(syscall_id)
- {
- case (0x01):
- str = "SetHeapSize";
- break;
- case (0x02):
- str = "SetMemoryPermission";
- break;
- case (0x03):
- str = "SetMemoryAttribute";
- break;
- case (0x04):
- str = "MapMemory";
- break;
- case (0x05):
- str = "UnmapMemory";
- break;
- case (0x06):
- str = "QueryMemory";
- break;
- case (0x07):
- str = "ExitProcess";
- break;
- case (0x08):
- str = "CreateThread";
- break;
- case (0x09):
- str = "StartThread";
- break;
- case (0x0a):
- str = "ExitThread";
- break;
- case (0x0b):
- str = "SleepThread";
- break;
- case (0x0c):
- str = "GetThreadPriority";
- break;
- case (0x0d):
- str = "SetThreadPriority";
- break;
- case (0x0e):
- str = "GetThreadCoreMask";
- break;
- case (0x0f):
- str = "SetThreadCoreMask";
- break;
- case (0x10):
- str = "GetCurrentProcessorNumber";
- break;
- case (0x11):
- str = "SignalEvent";
- break;
- case (0x12):
- str = "ClearEvent";
- break;
- case (0x13):
- str = "MapSharedMemory";
- break;
- case (0x14):
- str = "UnmapSharedMemory";
- break;
- case (0x15):
- str = "CreateTransferMemory";
- break;
- case (0x16):
- str = "CloseHandle";
- break;
- case (0x17):
- str = "ResetSignal";
- break;
- case (0x18):
- str = "WaitSynchronization";
- break;
- case (0x19):
- str = "CancelSynchronization";
- break;
- case (0x1a):
- str = "ArbitrateLock";
- break;
- case (0x1b):
- str = "ArbitrateUnlock";
- break;
- case (0x1c):
- str = "WaitProcessWideKeyAtomic";
- break;
- case (0x1d):
- str = "SignalProcessWideKey";
- break;
- case (0x1e):
- str = "GetSystemTick";
- break;
- case (0x1f):
- str = "ConnectToNamedPort";
- break;
- case (0x20):
- str = "SendSyncRequestLight";
- break;
- case (0x21):
- str = "SendSyncRequest";
- break;
- case (0x22):
- str = "SendSyncRequestWithUserBuffer";
- break;
- case (0x23):
- str = "SendAsyncRequestWithUserBuffer";
- break;
- case (0x24):
- str = "GetProcessId";
- break;
- case (0x25):
- str = "GetThreadId";
- break;
- case (0x26):
- str = "Break";
- break;
- case (0x27):
- str = "OutputDebugString";
- break;
- case (0x28):
- str = "ReturnFromException";
- break;
- case (0x29):
- str = "GetInfo";
- break;
- case (0x2a):
- str = "FlushEntireDataCache";
- break;
- case (0x2b):
- str = "FlushDataCache";
- break;
- case (0x2c):
- str = "MapPhysicalMemory";
- break;
- case (0x2d):
- str = "UnmapPhysicalMemory";
- break;
- case (0x2e):
- str = "GetFutureThreadInfo";
- break;
- case (0x2f):
- str = "GetLastThreadInfo";
- break;
- case (0x30):
- str = "GetResourceLimitLimitValue";
- break;
- case (0x31):
- str = "GetResourceLimitCurrentValue";
- break;
- case (0x32):
- str = "SetThreadActivity";
- break;
- case (0x33):
- str = "GetThreadContext3";
- break;
- case (0x34):
- str = "WaitForAddress";
- break;
- case (0x35):
- str = "SignalToAddress";
- break;
- case (0x36):
- str = "svc36";
- break;
- case (0x37):
- str = "svc37";
- break;
- case (0x38):
- str = "svc38";
- break;
- case (0x39):
- str = "svc39";
- break;
- case (0x3a):
- str = "svc3A";
- break;
- case (0x3b):
- str = "svc3B";
- break;
- case (0x3c):
- str = "DumpInfo";
- break;
- case (0x3d):
- str = "DumpInfoNew";
- break;
- case (0x3e):
- str = "svc3E";
- break;
- case (0x3f):
- str = "svc3F";
- break;
- case (0x40):
- str = "CreateSession";
- break;
- case (0x41):
- str = "AcceptSession";
- break;
- case (0x42):
- str = "ReplyAndReceiveLight";
- break;
- case (0x43):
- str = "ReplyAndReceive";
- break;
- case (0x44):
- str = "ReplyAndReceiveWithUserBuffer";
- break;
- case (0x45):
- str = "CreateEvent";
- break;
- case (0x46):
- str = "svc46";
- break;
- case (0x47):
- str = "svc47";
- break;
- case (0x48):
- str = "MapPhysicalMemoryUnsafe";
- break;
- case (0x49):
- str = "UnmapPhysicalMemoryUnsafe";
- break;
- case (0x4a):
- str = "SetUnsafeLimit";
- break;
- case (0x4b):
- str = "CreateCodeMemory";
- break;
- case (0x4c):
- str = "ControlCodeMemory";
- break;
- case (0x4d):
- str = "SleepSystem";
- break;
- case (0x4e):
- str = "ReadWriteRegister";
- break;
- case (0x4f):
- str = "SetProcessActivity";
- break;
- case (0x50):
- str = "CreateSharedMemory";
- break;
- case (0x51):
- str = "MapTransferMemory";
- break;
- case (0x52):
- str = "UnmapTransferMemory";
- break;
- case (0x53):
- str = "CreateInterruptEvent";
- break;
- case (0x54):
- str = "QueryPhysicalAddress";
- break;
- case (0x55):
- str = "QueryIoMapping";
- break;
- case (0x56):
- str = "CreateDeviceAddressSpace";
- break;
- case (0x57):
- str = "AttachDeviceAddressSpace";
- break;
- case (0x58):
- str = "DetachDeviceAddressSpace";
- break;
- case (0x59):
- str = "MapDeviceAddressSpaceByForce";
- break;
- case (0x5a):
- str = "MapDeviceAddressSpaceAligned";
- break;
- case (0x5b):
- str = "MapDeviceAddressSpace";
- break;
- case (0x5c):
- str = "UnmapDeviceAddressSpace";
- break;
- case (0x5d):
- str = "InvalidateProcessDataCache";
- break;
- case (0x5e):
- str = "StoreProcessDataCache";
- break;
- case (0x5f):
- str = "FlushProcessDataCache";
- break;
- case (0x60):
- str = "DebugActiveProcess";
- break;
- case (0x61):
- str = "BreakDebugProcess";
- break;
- case (0x62):
- str = "TerminateDebugProcess";
- break;
- case (0x63):
- str = "GetDebugEvent";
- break;
- case (0x64):
- str = "ContinueDebugEvent";
- break;
- case (0x65):
- str = "GetProcessList";
- break;
- case (0x66):
- str = "GetThreadList";
- break;
- case (0x67):
- str = "GetDebugThreadContext";
- break;
- case (0x68):
- str = "SetDebugThreadContext";
- break;
- case (0x69):
- str = "QueryDebugProcessMemory";
- break;
- case (0x6a):
- str = "ReadDebugProcessMemory";
- break;
- case (0x6b):
- str = "WriteDebugProcessMemory";
- break;
- case (0x6c):
- str = "SetHardwareBreakPoint";
- break;
- case (0x6d):
- str = "GetDebugThreadParam";
- break;
- case (0x6e):
- str = "svc6E";
- break;
- case (0x6f):
- str = "GetSystemInfo";
- break;
- case (0x70):
- str = "CreatePort";
- break;
- case (0x71):
- str = "ManageNamedPort";
- break;
- case (0x72):
- str = "ConnectToPort";
- break;
- case (0x73):
- str = "SetProcessMemoryPermission";
- break;
- case (0x74):
- str = "MapProcessMemory";
- break;
- case (0x75):
- str = "UnmapProcessMemory";
- break;
- case (0x76):
- str = "QueryProcessMemory";
- break;
- case (0x77):
- str = "MapProcessCodeMemory";
- break;
- case (0x78):
- str = "UnmapProcessCodeMemory";
- break;
- case (0x79):
- str = "CreateProcess";
- break;
- case (0x7a):
- str = "StartProcess";
- break;
- case (0x7b):
- str = "TerminateProcess";
- break;
- case (0x7c):
- str = "GetProcessInfo";
- break;
- case (0x7d):
- str = "CreateResourceLimit";
- break;
- case (0x7e):
- str = "SetResourceLimitLimitValue";
- break;
- case (0x7f):
- str = "CallSecureMonitor";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* KipProcess::getMemMapPermStr(nn::hac::MemoryMappingHandler::MemoryPerm type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::MemoryMappingHandler::MEM_RW):
- str = "RW";
- break;
- case (nn::hac::MemoryMappingHandler::MEM_RO):
- str = "RO";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* KipProcess::getMemMapTypeStr(nn::hac::MemoryMappingHandler::MappingType type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::MemoryMappingHandler::MAP_IO):
- str = "Io";
- break;
- case (nn::hac::MemoryMappingHandler::MAP_STATIC):
- str = "Static";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
}
\ No newline at end of file
diff --git a/src/KipProcess.h b/src/KipProcess.h
index 798f9af..47a88f2 100644
--- a/src/KipProcess.h
+++ b/src/KipProcess.h
@@ -33,12 +33,7 @@ private:
void displayHeader();
void displayKernelCap(const nn::hac::KernelCapabilityControl& kern);
- const char* getProcessCategoryStr(nn::hac::kip::ProcessCategory var) const;
const char* getInstructionTypeStr(bool is64Bit) const;
const char* getAddressSpaceStr(bool is64Bit) const;
const char* getMemoryPoolStr(bool isSystemPool) const;
- const char* getMiscFlagStr(nn::hac::MiscFlagsHandler::Flags flag) const;
- const char* getSystemCallStr(byte_t syscall_id) const;
- const char* getMemMapPermStr(nn::hac::MemoryMappingHandler::MemoryPerm type) const;
- const char* getMemMapTypeStr(nn::hac::MemoryMappingHandler::MappingType type) const;
};
\ No newline at end of file
diff --git a/src/MetaProcess.cpp b/src/MetaProcess.cpp
index c65316d..5e9b0ae 100644
--- a/src/MetaProcess.cpp
+++ b/src/MetaProcess.cpp
@@ -1,6 +1,12 @@
+#include "MetaProcess.h"
+
#include
#include
-#include "MetaProcess.h"
+
+#include
+#include
+#include
+#include
MetaProcess::MetaProcess() :
mFile(),
@@ -120,7 +126,7 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
if (fsaRightFound == false)
{
- std::cout << "[WARNING] ACI/FAC FsaRights: FAIL (" << getFsaRightStr(aci.getFileSystemAccessControl().getFsaRightsList()[i]) << " not permitted)" << std::endl;
+ std::cout << "[WARNING] ACI/FAC FsaRights: FAIL (" << nn::hac::FileSystemAccessUtil::getFsaRightAsString(aci.getFileSystemAccessControl().getFsaRightsList()[i]) << " not permitted)" << std::endl;
}
}
@@ -202,7 +208,7 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
if (rightFound == false)
{
- std::cout << "[WARNING] ACI/KC SystemCallList: FAIL (" << getSystemCallStr(aci.getKernelCapabilities().getSystemCalls().getSystemCalls()[i]) << " not permitted)" << std::endl;
+ std::cout << "[WARNING] ACI/KC SystemCallList: FAIL (" << nn::hac::KernelCapabilityUtil::getSystemCallAsString(aci.getKernelCapabilities().getSystemCalls().getSystemCalls()[i]) << " not permitted)" << std::endl;
}
}
// check memory maps
@@ -219,7 +225,7 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
{
const nn::hac::MemoryMappingHandler::sMemoryMapping& map = aci.getKernelCapabilities().getMemoryMaps().getMemoryMaps()[i];
- std::cout << "[WARNING] ACI/KC MemoryMap: FAIL (0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)map.addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(map.addr + map.size) << 12) - 1) << " (perm=" << getMemMapPermStr(map.perm) << ") (type=" << getMemMapTypeStr(map.type) << ") not permitted)" << std::endl;
+ std::cout << "[WARNING] ACI/KC MemoryMap: FAIL (0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)map.addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(map.addr + map.size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(map.perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(map.type) << ") not permitted)" << std::endl;
}
}
for (size_t i = 0; i < aci.getKernelCapabilities().getMemoryMaps().getIoMemoryMaps().size(); i++)
@@ -235,7 +241,7 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
{
const nn::hac::MemoryMappingHandler::sMemoryMapping& map = aci.getKernelCapabilities().getMemoryMaps().getIoMemoryMaps()[i];
- std::cout << "[WARNING] ACI/KC IoMemoryMap: FAIL (0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)map.addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(map.addr + map.size) << 12) - 1) << " (perm=" << getMemMapPermStr(map.perm) << ") (type=" << getMemMapTypeStr(map.type) << ") not permitted)" << std::endl;
+ std::cout << "[WARNING] ACI/KC IoMemoryMap: FAIL (0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)map.addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(map.addr + map.size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(map.perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(map.type) << ") not permitted)" << std::endl;
}
}
// check interupts
@@ -282,7 +288,7 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
if (rightFound == false)
{
- std::cout << "[WARNING] ACI/KC MiscFlag: FAIL (" << getMiscFlagStr(aci.getKernelCapabilities().getMiscFlags().getFlagList()[i]) << " not permitted)" << std::endl;
+ std::cout << "[WARNING] ACI/KC MiscFlag: FAIL (" << nn::hac::KernelCapabilityUtil::getMiscFlagAsString(aci.getKernelCapabilities().getMiscFlags().getFlagList()[i]) << " not permitted)" << std::endl;
}
}
}
@@ -290,9 +296,10 @@ void MetaProcess::validateAciFromAcid(const nn::hac::AccessControlInfo& aci, con
void MetaProcess::displayMetaHeader(const nn::hac::Meta& hdr)
{
std::cout << "[Meta Header]" << std::endl;
+ std::cout << " ACID KeyGeneration: " << std::dec << hdr.getAcidKeyGeneration() << std::endl;
std::cout << " Process Architecture Params:" << std::endl;
- std::cout << " Ins. Type: " << getInstructionTypeStr(hdr.getInstructionType()) << std::endl;
- std::cout << " Addr Space: " << getProcAddressSpaceTypeStr(hdr.getProcAddressSpaceType()) << std::endl;
+ std::cout << " Ins. Type: " << nn::hac::MetaUtil::getInstructionTypeAsString(hdr.getInstructionType()) << std::endl;
+ std::cout << " Addr Space: " << nn::hac::MetaUtil::getProcAddressSpaceTypeAsString(hdr.getProcAddressSpaceType()) << std::endl;
std::cout << " Main Thread Params:" << std::endl;
std::cout << " Priority: " << std::dec << (uint32_t)hdr.getMainThreadPriority() << std::endl;
std::cout << " CpuId: " << std::dec << (uint32_t)hdr.getMainThreadCpuId() << std::endl;
@@ -320,9 +327,10 @@ void MetaProcess::displayAciDescHdr(const nn::hac::AccessControlInfoDesc& acid)
std::cout << " Flags: " << std::endl;
for (size_t i = 0; i < acid.getFlagList().size(); i++)
{
- std::cout << " " << getAcidFlagStr(acid.getFlagList()[i]) << " (" << std::dec << (uint32_t)acid.getFlagList()[i] << ")" << std::endl;
+ std::cout << " " << nn::hac::AccessControlInfoUtil::getAcidFlagAsString(acid.getFlagList()[i]) << " (" << std::dec << (uint32_t)acid.getFlagList()[i] << ")" << std::endl;
}
}
+ std::cout << " Memory Region: " << nn::hac::AccessControlInfoUtil::getMemoryRegionAsString(acid.getMemoryRegion()) << " (" << std::dec << (uint32_t)acid.getMemoryRegion() << ")" << std::endl;
std::cout << " ProgramID Restriction" << std::endl;
std::cout << " Min: 0x" << std::hex << std::setw(16) << std::setfill('0') << acid.getProgramIdRestrict().min << std::endl;
std::cout << " Max: 0x" << std::hex << std::setw(16) << std::setfill('0') << acid.getProgramIdRestrict().max << std::endl;
@@ -344,7 +352,7 @@ void MetaProcess::displayFac(const nn::hac::FileSystemAccessControl& fac)
std::cout << std::endl;
std::cout << " ";
}
- std::cout << getFsaRightStr(fac.getFsaRightsList()[i]);
+ std::cout << nn::hac::FileSystemAccessUtil::getFsaRightAsString(fac.getFsaRightsList()[i]);
if (_HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
std::cout << " (bit " << std::dec << (uint32_t)fac.getFsaRightsList()[i] << ")";
if (fac.getFsaRightsList()[i] != fac.getFsaRightsList().atBack())
@@ -367,7 +375,7 @@ void MetaProcess::displayFac(const nn::hac::FileSystemAccessControl& fac)
std::cout << " Save Data Owner IDs:" << std::endl;
for (size_t i = 0; i < fac.getSaveDataOwnerIdList().size(); i++)
{
- std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << fac.getSaveDataOwnerIdList()[i].id << " (" << getSaveDataOwnerAccessModeStr(fac.getSaveDataOwnerIdList()[i].access_type) << ")" << std::endl;
+ std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << fac.getSaveDataOwnerIdList()[i].id << " (" << nn::hac::FileSystemAccessUtil::getSaveDataOwnerAccessModeAsString(fac.getSaveDataOwnerIdList()[i].access_type) << ")" << std::endl;
}
}
@@ -410,7 +418,7 @@ void MetaProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
if (kern.getSystemCalls().isSet())
{
- fnd::List syscalls = kern.getSystemCalls().getSystemCalls();
+ fnd::List syscalls = kern.getSystemCalls().getSystemCalls();
std::cout << " SystemCalls:" << std::endl;
std::cout << " ";
size_t lineLen = 0;
@@ -422,10 +430,11 @@ void MetaProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << std::endl;
std::cout << " ";
}
- std::cout << getSystemCallStr(syscalls[i]);
+ std::string syscall_name = nn::hac::KernelCapabilityUtil::getSystemCallAsString(syscalls[i]);
+ std::cout << syscall_name;
if (syscalls[i] != syscalls.atBack())
std::cout << ", ";
- lineLen += strlen(getSystemCallStr(syscalls[i]));
+ lineLen += syscall_name.length();
}
std::cout << std::endl;
}
@@ -437,12 +446,12 @@ void MetaProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << " MemoryMaps:" << std::endl;
for (size_t i = 0; i < maps.size(); i++)
{
- std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)maps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(maps[i].addr + maps[i].size) << 12) - 1) << " (perm=" << getMemMapPermStr(maps[i].perm) << ") (type=" << getMemMapTypeStr(maps[i].type) << ")" << std::endl;
+ std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)maps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(maps[i].addr + maps[i].size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(maps[i].perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(maps[i].type) << ")" << std::endl;
}
//std::cout << " IoMaps:" << std::endl;
for (size_t i = 0; i < ioMaps.size(); i++)
{
- std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)ioMaps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(ioMaps[i].addr + ioMaps[i].size) << 12) - 1) << " (perm=" << getMemMapPermStr(ioMaps[i].perm) << ") (type=" << getMemMapTypeStr(ioMaps[i].type) << ")" << std::endl;
+ std::cout << " 0x" << std::hex << std::setw(16) << std::setfill('0') << ((uint64_t)ioMaps[i].addr << 12) << " - 0x" << std::hex << std::setw(16) << std::setfill('0') << (((uint64_t)(ioMaps[i].addr + ioMaps[i].size) << 12) - 1) << " (perm=" << nn::hac::KernelCapabilityUtil::getMemMapPermAsString(ioMaps[i].perm) << ") (type=" << nn::hac::KernelCapabilityUtil::getMemMapTypeAsString(ioMaps[i].type) << ")" << std::endl;
}
}
if (kern.getInterupts().isSet())
@@ -477,7 +486,7 @@ void MetaProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
}
if (kern.getMiscFlags().isSet())
{
- fnd::List flagList = kern.getMiscFlags().getFlagList();
+ fnd::List flagList = kern.getMiscFlags().getFlagList();
std::cout << " Misc Flags:" << std::endl;
for (uint32_t i = 0; i < flagList.size(); i++)
@@ -488,631 +497,10 @@ void MetaProcess::displayKernelCap(const nn::hac::KernelCapabilityControl& kern)
std::cout << std::endl;
std::cout << " ";
}
- std::cout << getMiscFlagStr(flagList[i]);
+ std::cout << nn::hac::KernelCapabilityUtil::getMiscFlagAsString(flagList[i]);
if (flagList[i] != flagList.atBack())
std::cout << ", ";
std::cout << std::endl;
}
}
-}
-
-const char* MetaProcess::getInstructionTypeStr(nn::hac::meta::InstructionType type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::meta::INSTR_32BIT):
- str = "32Bit";
- break;
- case (nn::hac::meta::INSTR_64BIT):
- str = "64Bit";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getProcAddressSpaceTypeStr(nn::hac::meta::ProcAddrSpaceType type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::meta::ADDR_SPACE_64BIT):
- str = "64Bit";
- break;
- case (nn::hac::meta::ADDR_SPACE_32BIT):
- str = "32Bit";
- break;
- case (nn::hac::meta::ADDR_SPACE_32BIT_NO_RESERVED):
- str = "32Bit no reserved";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getAcidFlagStr(nn::hac::aci::Flag flag) const
-{
- const char* str = nullptr;
-
- switch(flag)
- {
- case (nn::hac::aci::FLAG_PRODUCTION):
- str = "Production";
- break;
- case (nn::hac::aci::FLAG_UNQUALIFIED_APPROVAL):
- str = "UnqualifiedApproval";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getMiscFlagStr(nn::hac::MiscFlagsHandler::Flags flag) const
-{
- const char* str = nullptr;
-
- switch(flag)
- {
- case (nn::hac::MiscFlagsHandler::FLAG_ENABLE_DEBUG):
- str = "EnableDebug";
- break;
- case (nn::hac::MiscFlagsHandler::FLAG_FORCE_DEBUG):
- str = "ForceDebug";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getFsaRightStr(nn::hac::fac::FsAccessFlag flag) const
-{
- const char* str = nullptr;
-
- switch(flag)
- {
- case (nn::hac::fac::FSA_APPLICATION_INFO):
- str = "ApplicationInfo";
- break;
- case (nn::hac::fac::FSA_BOOT_MODE_CONTROL):
- str = "BootModeControl";
- break;
- case (nn::hac::fac::FSA_CALIBRATION):
- str = "Calibration";
- break;
- case (nn::hac::fac::FSA_SYSTEM_SAVE_DATA):
- str = "SystemSaveData";
- break;
- case (nn::hac::fac::FSA_GAME_CARD):
- str = "GameCard";
- break;
- case (nn::hac::fac::FSA_SAVE_DATA_BACKUP):
- str = "SaveDataBackUp";
- break;
- case (nn::hac::fac::FSA_SAVE_DATA_MANAGEMENT):
- str = "SaveDataManagement";
- break;
- case (nn::hac::fac::FSA_BIS_ALL_RAW):
- str = "BisAllRaw";
- break;
- case (nn::hac::fac::FSA_GAME_CARD_RAW):
- str = "GameCardRaw";
- break;
- case (nn::hac::fac::FSA_GAME_CARD_PRIVATE):
- str = "GameCardPrivate";
- break;
- case (nn::hac::fac::FSA_SET_TIME):
- str = "SetTime";
- break;
- case (nn::hac::fac::FSA_CONTENT_MANAGER):
- str = "ContentManager";
- break;
- case (nn::hac::fac::FSA_IMAGE_MANAGER):
- str = "ImageManager";
- break;
- case (nn::hac::fac::FSA_CREATE_SAVE_DATA):
- str = "CreateSaveData";
- break;
- case (nn::hac::fac::FSA_SYSTEM_SAVE_DATA_MANAGEMENT):
- str = "SystemSaveDataManagement";
- break;
- case (nn::hac::fac::FSA_BIS_FILE_SYSTEM):
- str = "BisFileSystem";
- break;
- case (nn::hac::fac::FSA_SYSTEM_UPDATE):
- str = "SystemUpdate";
- break;
- case (nn::hac::fac::FSA_SAVE_DATA_META):
- str = "SaveDataMeta";
- break;
- case (nn::hac::fac::FSA_DEVICE_SAVE_CONTROL):
- str = "DeviceSaveData";
- break;
- case (nn::hac::fac::FSA_SETTINGS_CONTROL):
- str = "SettingsControl";
- break;
- case (nn::hac::fac::FSA_DEBUG):
- str = "Debug";
- break;
- case (nn::hac::fac::FSA_FULL_PERMISSION):
- str = "FullPermission";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getSaveDataOwnerAccessModeStr(nn::hac::fac::SaveDataOwnerIdAccessType type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::fac::SDO_READ):
- str = "Read";
- break;
- case (nn::hac::fac::SDO_WRITE):
- str = "Write";
- break;
- case (nn::hac::fac::SDO_READWRITE):
- str = "ReadWrite";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getSystemCallStr(byte_t syscall_id) const
-{
- const char* str = nullptr;
-
- switch(syscall_id)
- {
- case (0x01):
- str = "SetHeapSize";
- break;
- case (0x02):
- str = "SetMemoryPermission";
- break;
- case (0x03):
- str = "SetMemoryAttribute";
- break;
- case (0x04):
- str = "MapMemory";
- break;
- case (0x05):
- str = "UnmapMemory";
- break;
- case (0x06):
- str = "QueryMemory";
- break;
- case (0x07):
- str = "ExitProcess";
- break;
- case (0x08):
- str = "CreateThread";
- break;
- case (0x09):
- str = "StartThread";
- break;
- case (0x0a):
- str = "ExitThread";
- break;
- case (0x0b):
- str = "SleepThread";
- break;
- case (0x0c):
- str = "GetThreadPriority";
- break;
- case (0x0d):
- str = "SetThreadPriority";
- break;
- case (0x0e):
- str = "GetThreadCoreMask";
- break;
- case (0x0f):
- str = "SetThreadCoreMask";
- break;
- case (0x10):
- str = "GetCurrentProcessorNumber";
- break;
- case (0x11):
- str = "SignalEvent";
- break;
- case (0x12):
- str = "ClearEvent";
- break;
- case (0x13):
- str = "MapSharedMemory";
- break;
- case (0x14):
- str = "UnmapSharedMemory";
- break;
- case (0x15):
- str = "CreateTransferMemory";
- break;
- case (0x16):
- str = "CloseHandle";
- break;
- case (0x17):
- str = "ResetSignal";
- break;
- case (0x18):
- str = "WaitSynchronization";
- break;
- case (0x19):
- str = "CancelSynchronization";
- break;
- case (0x1a):
- str = "ArbitrateLock";
- break;
- case (0x1b):
- str = "ArbitrateUnlock";
- break;
- case (0x1c):
- str = "WaitProcessWideKeyAtomic";
- break;
- case (0x1d):
- str = "SignalProcessWideKey";
- break;
- case (0x1e):
- str = "GetSystemTick";
- break;
- case (0x1f):
- str = "ConnectToNamedPort";
- break;
- case (0x20):
- str = "SendSyncRequestLight";
- break;
- case (0x21):
- str = "SendSyncRequest";
- break;
- case (0x22):
- str = "SendSyncRequestWithUserBuffer";
- break;
- case (0x23):
- str = "SendAsyncRequestWithUserBuffer";
- break;
- case (0x24):
- str = "GetProcessId";
- break;
- case (0x25):
- str = "GetThreadId";
- break;
- case (0x26):
- str = "Break";
- break;
- case (0x27):
- str = "OutputDebugString";
- break;
- case (0x28):
- str = "ReturnFromException";
- break;
- case (0x29):
- str = "GetInfo";
- break;
- case (0x2a):
- str = "FlushEntireDataCache";
- break;
- case (0x2b):
- str = "FlushDataCache";
- break;
- case (0x2c):
- str = "MapPhysicalMemory";
- break;
- case (0x2d):
- str = "UnmapPhysicalMemory";
- break;
- case (0x2e):
- str = "GetFutureThreadInfo";
- break;
- case (0x2f):
- str = "GetLastThreadInfo";
- break;
- case (0x30):
- str = "GetResourceLimitLimitValue";
- break;
- case (0x31):
- str = "GetResourceLimitCurrentValue";
- break;
- case (0x32):
- str = "SetThreadActivity";
- break;
- case (0x33):
- str = "GetThreadContext3";
- break;
- case (0x34):
- str = "WaitForAddress";
- break;
- case (0x35):
- str = "SignalToAddress";
- break;
- case (0x36):
- str = "svc36";
- break;
- case (0x37):
- str = "svc37";
- break;
- case (0x38):
- str = "svc38";
- break;
- case (0x39):
- str = "svc39";
- break;
- case (0x3a):
- str = "svc3A";
- break;
- case (0x3b):
- str = "svc3B";
- break;
- case (0x3c):
- str = "DumpInfo";
- break;
- case (0x3d):
- str = "DumpInfoNew";
- break;
- case (0x3e):
- str = "svc3E";
- break;
- case (0x3f):
- str = "svc3F";
- break;
- case (0x40):
- str = "CreateSession";
- break;
- case (0x41):
- str = "AcceptSession";
- break;
- case (0x42):
- str = "ReplyAndReceiveLight";
- break;
- case (0x43):
- str = "ReplyAndReceive";
- break;
- case (0x44):
- str = "ReplyAndReceiveWithUserBuffer";
- break;
- case (0x45):
- str = "CreateEvent";
- break;
- case (0x46):
- str = "svc46";
- break;
- case (0x47):
- str = "svc47";
- break;
- case (0x48):
- str = "MapPhysicalMemoryUnsafe";
- break;
- case (0x49):
- str = "UnmapPhysicalMemoryUnsafe";
- break;
- case (0x4a):
- str = "SetUnsafeLimit";
- break;
- case (0x4b):
- str = "CreateCodeMemory";
- break;
- case (0x4c):
- str = "ControlCodeMemory";
- break;
- case (0x4d):
- str = "SleepSystem";
- break;
- case (0x4e):
- str = "ReadWriteRegister";
- break;
- case (0x4f):
- str = "SetProcessActivity";
- break;
- case (0x50):
- str = "CreateSharedMemory";
- break;
- case (0x51):
- str = "MapTransferMemory";
- break;
- case (0x52):
- str = "UnmapTransferMemory";
- break;
- case (0x53):
- str = "CreateInterruptEvent";
- break;
- case (0x54):
- str = "QueryPhysicalAddress";
- break;
- case (0x55):
- str = "QueryIoMapping";
- break;
- case (0x56):
- str = "CreateDeviceAddressSpace";
- break;
- case (0x57):
- str = "AttachDeviceAddressSpace";
- break;
- case (0x58):
- str = "DetachDeviceAddressSpace";
- break;
- case (0x59):
- str = "MapDeviceAddressSpaceByForce";
- break;
- case (0x5a):
- str = "MapDeviceAddressSpaceAligned";
- break;
- case (0x5b):
- str = "MapDeviceAddressSpace";
- break;
- case (0x5c):
- str = "UnmapDeviceAddressSpace";
- break;
- case (0x5d):
- str = "InvalidateProcessDataCache";
- break;
- case (0x5e):
- str = "StoreProcessDataCache";
- break;
- case (0x5f):
- str = "FlushProcessDataCache";
- break;
- case (0x60):
- str = "DebugActiveProcess";
- break;
- case (0x61):
- str = "BreakDebugProcess";
- break;
- case (0x62):
- str = "TerminateDebugProcess";
- break;
- case (0x63):
- str = "GetDebugEvent";
- break;
- case (0x64):
- str = "ContinueDebugEvent";
- break;
- case (0x65):
- str = "GetProcessList";
- break;
- case (0x66):
- str = "GetThreadList";
- break;
- case (0x67):
- str = "GetDebugThreadContext";
- break;
- case (0x68):
- str = "SetDebugThreadContext";
- break;
- case (0x69):
- str = "QueryDebugProcessMemory";
- break;
- case (0x6a):
- str = "ReadDebugProcessMemory";
- break;
- case (0x6b):
- str = "WriteDebugProcessMemory";
- break;
- case (0x6c):
- str = "SetHardwareBreakPoint";
- break;
- case (0x6d):
- str = "GetDebugThreadParam";
- break;
- case (0x6e):
- str = "svc6E";
- break;
- case (0x6f):
- str = "GetSystemInfo";
- break;
- case (0x70):
- str = "CreatePort";
- break;
- case (0x71):
- str = "ManageNamedPort";
- break;
- case (0x72):
- str = "ConnectToPort";
- break;
- case (0x73):
- str = "SetProcessMemoryPermission";
- break;
- case (0x74):
- str = "MapProcessMemory";
- break;
- case (0x75):
- str = "UnmapProcessMemory";
- break;
- case (0x76):
- str = "QueryProcessMemory";
- break;
- case (0x77):
- str = "MapProcessCodeMemory";
- break;
- case (0x78):
- str = "UnmapProcessCodeMemory";
- break;
- case (0x79):
- str = "CreateProcess";
- break;
- case (0x7a):
- str = "StartProcess";
- break;
- case (0x7b):
- str = "TerminateProcess";
- break;
- case (0x7c):
- str = "GetProcessInfo";
- break;
- case (0x7d):
- str = "CreateResourceLimit";
- break;
- case (0x7e):
- str = "SetResourceLimitLimitValue";
- break;
- case (0x7f):
- str = "CallSecureMonitor";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getMemMapPermStr(nn::hac::MemoryMappingHandler::MemoryPerm type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::MemoryMappingHandler::MEM_RW):
- str = "RW";
- break;
- case (nn::hac::MemoryMappingHandler::MEM_RO):
- str = "RO";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* MetaProcess::getMemMapTypeStr(nn::hac::MemoryMappingHandler::MappingType type) const
-{
- const char* str = nullptr;
-
- switch(type)
- {
- case (nn::hac::MemoryMappingHandler::MAP_IO):
- str = "Io";
- break;
- case (nn::hac::MemoryMappingHandler::MAP_STATIC):
- str = "Static";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
}
\ No newline at end of file
diff --git a/src/MetaProcess.h b/src/MetaProcess.h
index 1c734c8..2c838bb 100644
--- a/src/MetaProcess.h
+++ b/src/MetaProcess.h
@@ -43,14 +43,4 @@ private:
void displayFac(const nn::hac::FileSystemAccessControl& fac);
void displaySac(const nn::hac::ServiceAccessControl& sac);
void displayKernelCap(const nn::hac::KernelCapabilityControl& kern);
-
- const char* getInstructionTypeStr(nn::hac::meta::InstructionType type) const;
- const char* getProcAddressSpaceTypeStr(nn::hac::meta::ProcAddrSpaceType type) const;
- const char* getAcidFlagStr(nn::hac::aci::Flag flag) const;
- const char* getMiscFlagStr(nn::hac::MiscFlagsHandler::Flags flag) const;
- const char* getFsaRightStr(nn::hac::fac::FsAccessFlag flag) const;
- const char* getSaveDataOwnerAccessModeStr(nn::hac::fac::SaveDataOwnerIdAccessType type) const;
- const char* getSystemCallStr(byte_t syscall_id) const;
- const char* getMemMapPermStr(nn::hac::MemoryMappingHandler::MemoryPerm type) const;
- const char* getMemMapTypeStr(nn::hac::MemoryMappingHandler::MappingType type) const;
};
\ No newline at end of file
diff --git a/src/NacpProcess.cpp b/src/NacpProcess.cpp
index 83ea3d0..9ae16e9 100644
--- a/src/NacpProcess.cpp
+++ b/src/NacpProcess.cpp
@@ -1,9 +1,13 @@
+#include "NacpProcess.h"
+
#include
#include
#include
+
#include
#include
-#include "NacpProcess.h"
+
+#include
NacpProcess::NacpProcess() :
mFile(),
@@ -64,20 +68,20 @@ void NacpProcess::displayNacp()
std::cout << " ISBN: " << mNacp.getIsbn() << std::endl;
for (size_t i = 0; i < mNacp.getTitle().size(); i++)
{
- std::cout << " " << getLanguageStr(mNacp.getTitle()[i].language) << " Title:" << std::endl;
+ std::cout << " " << nn::hac::ApplicationControlPropertyUtil::getLanguageAsString(mNacp.getTitle()[i].language) << " Title:" << std::endl;
std::cout << " Name: " << mNacp.getTitle()[i].name << std::endl;
std::cout << " Publisher: " << mNacp.getTitle()[i].publisher << std::endl;
}
std::cout << " Logo:" << std::endl;
- std::cout << " Type: " << getLogoTypeStr(mNacp.getLogoType()) << std::endl;
- std::cout << " Handling: " << getLogoHandlingStr(mNacp.getLogoHandling()) << std::endl;
+ std::cout << " Type: " << nn::hac::ApplicationControlPropertyUtil::getLogoTypeAsString(mNacp.getLogoType()) << std::endl;
+ std::cout << " Handling: " << nn::hac::ApplicationControlPropertyUtil::getLogoHandlingAsString(mNacp.getLogoHandling()) << std::endl;
std::cout << " AddOnContent:" << std::endl;
std::cout << " BaseId: 0x" << std::hex << std::setw(16) << std::setfill('0') << mNacp.getAocBaseId() << std::endl;
- std::cout << " RegistrationType: " << getAocRegistrationTypeStr(mNacp.getAocRegistrationType()) << std::endl;
- std::cout << " RuntimeInstallMode: " << getRuntimeAocInstallModeStr(mNacp.getRuntimeAocInstallMode()) << std::endl;
+ std::cout << " RegistrationType: " << nn::hac::ApplicationControlPropertyUtil::getAocRegistrationTypeAsString(mNacp.getAocRegistrationType()) << std::endl;
+ std::cout << " RuntimeInstallMode: " << nn::hac::ApplicationControlPropertyUtil::getRuntimeAocInstallModeAsString(mNacp.getRuntimeAocInstallMode()) << std::endl;
std::cout << " Play Log:" << std::endl;
- std::cout << " PlayLogPolicy: " << getPlayLogPolicyStr(mNacp.getPlayLogPolicy()) << std::endl;
- std::cout << " PlayLogQueryCapability: " << getPlayLogQueryCapabilityStr(mNacp.getPlayLogQueryCapability()) << std::endl;
+ std::cout << " PlayLogPolicy: " << nn::hac::ApplicationControlPropertyUtil::getPlayLogPolicyAsString(mNacp.getPlayLogPolicy()) << std::endl;
+ std::cout << " PlayLogQueryCapability: " << nn::hac::ApplicationControlPropertyUtil::getPlayLogQueryCapabilityAsString(mNacp.getPlayLogQueryCapability()) << std::endl;
if (mNacp.getPlayLogQueryableApplicationId().size() > 0)
{
std::cout << " PlayLogQueryableApplicationId:" << std::endl;
@@ -87,11 +91,11 @@ void NacpProcess::displayNacp()
}
}
std::cout << " Parental Controls:" << std::endl;
- std::cout << " ParentalControlFlag: " << getParentalControlFlagStr(mNacp.getParentalControlFlag()) << std::endl;
+ std::cout << " ParentalControlFlag: " << nn::hac::ApplicationControlPropertyUtil::getParentalControlFlagAsString(mNacp.getParentalControlFlag()) << std::endl;
for (size_t i = 0; i < mNacp.getRatingAge().size(); i++)
{
std::cout << " Age Restriction:" << std::endl;
- std::cout << " Agency: " << getOrganisationStr(mNacp.getRatingAge()[i].organisation) << std::endl;
+ std::cout << " Agency: " << nn::hac::ApplicationControlPropertyUtil::getOrganisationAsString(mNacp.getRatingAge()[i].organisation) << std::endl;
std::cout << " Age: " << std::dec << (uint32_t)mNacp.getRatingAge()[i].age << std::endl;
}
@@ -115,51 +119,51 @@ void NacpProcess::displayNacp()
if (mNacp.getUserAccountSaveDataSize().journal_size > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " UserAccountSaveData:" << std::endl;
- std::cout << " Size: " << getSaveDataSizeStr(mNacp.getUserAccountSaveDataSize().size) << std::endl;
- std::cout << " JournalSize: " << getSaveDataSizeStr(mNacp.getUserAccountSaveDataSize().journal_size) << std::endl;
+ std::cout << " Size: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getUserAccountSaveDataSize().size) << std::endl;
+ std::cout << " JournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getUserAccountSaveDataSize().journal_size) << std::endl;
}
if (mNacp.getDeviceSaveDataSize().journal_size > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " DeviceSaveData:" << std::endl;
- std::cout << " Size: " << getSaveDataSizeStr(mNacp.getDeviceSaveDataSize().size) << std::endl;
- std::cout << " JournalSize: " << getSaveDataSizeStr(mNacp.getDeviceSaveDataSize().journal_size) << std::endl;
+ std::cout << " Size: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getDeviceSaveDataSize().size) << std::endl;
+ std::cout << " JournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getDeviceSaveDataSize().journal_size) << std::endl;
}
if (mNacp.getUserAccountSaveDataMax().journal_size > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " UserAccountSaveDataMax:" << std::endl;
- std::cout << " Size: " << getSaveDataSizeStr(mNacp.getUserAccountSaveDataMax().size) << std::endl;
- std::cout << " JournalSize: " << getSaveDataSizeStr(mNacp.getUserAccountSaveDataMax().journal_size) << std::endl;
+ std::cout << " Size: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getUserAccountSaveDataMax().size) << std::endl;
+ std::cout << " JournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getUserAccountSaveDataMax().journal_size) << std::endl;
}
if (mNacp.getDeviceSaveDataMax().journal_size > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " DeviceSaveDataMax:" << std::endl;
- std::cout << " Size: " << getSaveDataSizeStr(mNacp.getDeviceSaveDataMax().size) << std::endl;
- std::cout << " JournalSize: " << getSaveDataSizeStr(mNacp.getDeviceSaveDataMax().journal_size) << std::endl;
+ std::cout << " Size: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getDeviceSaveDataMax().size) << std::endl;
+ std::cout << " JournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getDeviceSaveDataMax().journal_size) << std::endl;
}
if (mNacp.getTemporaryStorageSize() > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
- std::cout << " TemporaryStorageSize: " << getSaveDataSizeStr(mNacp.getTemporaryStorageSize()) << std::endl;
+ std::cout << " TemporaryStorageSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getTemporaryStorageSize()) << std::endl;
}
if (mNacp.getCacheStorageSize().journal_size > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " CacheStorage:" << std::endl;
- std::cout << " Size: " << getSaveDataSizeStr(mNacp.getCacheStorageSize().size) << std::endl;
- std::cout << " JournalSize: " << getSaveDataSizeStr(mNacp.getCacheStorageSize().journal_size) << std::endl;
- std::cout << " MaxDataAndJournalSize: " << getSaveDataSizeStr(mNacp.getCacheStorageDataAndJournalSizeMax()) << std::endl;
+ std::cout << " Size: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getCacheStorageSize().size) << std::endl;
+ std::cout << " JournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getCacheStorageSize().journal_size) << std::endl;
+ std::cout << " MaxDataAndJournalSize: " << nn::hac::ApplicationControlPropertyUtil::getSaveDataSizeAsString(mNacp.getCacheStorageDataAndJournalSizeMax()) << std::endl;
std::cout << " StorageIndexMax: 0x" << std::hex << mNacp.getCacheStorageIndexMax() << std::endl;
}
std::cout << " Other Flags:" << std::endl;
- std::cout << " StartupUserAccount: " << getStartupUserAccountStr(mNacp.getStartupUserAccount()) << std::endl;
- std::cout << " UserAccountSwitchLock: " << getUserAccountSwitchLockValueStr(mNacp.getUserAccountSwitchLockValue()) << std::endl;
- std::cout << " AttributeFlag: " << getAttributeFlagStr(mNacp.getAttributeFlag()) << std::endl;
- std::cout << " CrashReportMode: " << getCrashReportModeStr(mNacp.getCrashReportMode()) << std::endl;
- std::cout << " HDCP: " << getHdcpStr(mNacp.getHdcp()) << std::endl;
- std::cout << " ScreenshotMode: " << getScreenshotModeStr(mNacp.getScreenshotMode()) << std::endl;
- std::cout << " VideoCaptureMode: " << getVideoCaptureModeStr(mNacp.getVideoCaptureMode()) << std::endl;
- std::cout << " DataLossConfirmation: " << getDataLossConfirmationStr(mNacp.getDataLossConfirmation()) << std::endl;
- std::cout << " RepairFlag: " << getRepairFlagStr(mNacp.getRepairFlag()) << std::endl;
+ std::cout << " StartupUserAccount: " << nn::hac::ApplicationControlPropertyUtil::getStartupUserAccountAsString(mNacp.getStartupUserAccount()) << std::endl;
+ std::cout << " UserAccountSwitchLock: " << nn::hac::ApplicationControlPropertyUtil::getUserAccountSwitchLockValueAsString(mNacp.getUserAccountSwitchLockValue()) << std::endl;
+ std::cout << " AttributeFlag: " << nn::hac::ApplicationControlPropertyUtil::getAttributeFlagAsString(mNacp.getAttributeFlag()) << std::endl;
+ std::cout << " CrashReportMode: " << nn::hac::ApplicationControlPropertyUtil::getCrashReportModeAsString(mNacp.getCrashReportMode()) << std::endl;
+ std::cout << " HDCP: " << nn::hac::ApplicationControlPropertyUtil::getHdcpAsString(mNacp.getHdcp()) << std::endl;
+ std::cout << " ScreenshotMode: " << nn::hac::ApplicationControlPropertyUtil::getScreenshotModeAsString(mNacp.getScreenshotMode()) << std::endl;
+ std::cout << " VideoCaptureMode: " << nn::hac::ApplicationControlPropertyUtil::getVideoCaptureModeAsString(mNacp.getVideoCaptureMode()) << std::endl;
+ std::cout << " DataLossConfirmation: " << nn::hac::ApplicationControlPropertyUtil::getDataLossConfirmationAsString(mNacp.getDataLossConfirmation()) << std::endl;
+ std::cout << " RepairFlag: " << nn::hac::ApplicationControlPropertyUtil::getRepairFlagAsString(mNacp.getRepairFlag()) << std::endl;
std::cout << " ProgramIndex: 0x" << std::hex << std::setw(2) << std::setfill('0') << (uint32_t)mNacp.getProgramIndex() << std::endl;
- std::cout << " Req NetworkLicenseOnLaunch: " << getRequiredNetworkServiceLicenseOnLaunchValueStr(mNacp.getRequiredNetworkServiceLicenseOnLaunchValue()) << std::endl;
+ std::cout << " Req NetworkLicenseOnLaunch: " << nn::hac::ApplicationControlPropertyUtil::getRequiredNetworkServiceLicenseOnLaunchValueAsString(mNacp.getRequiredNetworkServiceLicenseOnLaunchValue()) << std::endl;
if (mNacp.getApplicationErrorCodeCategory().empty() == false || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
{
std::cout << " ApplicationErrorCodeCategory: " << mNacp.getApplicationErrorCodeCategory() << std::endl;
@@ -172,498 +176,4 @@ void NacpProcess::displayNacp()
if (mNacp.getPresenceGroupId() > 0 || _HAS_BIT(mCliOutputMode, OUTPUT_EXTENDED))
std::cout << " PresenceGroupId: 0x" << std::hex << std::setw(16) << std::setfill('0') << mNacp.getPresenceGroupId() << std::endl;
}
-}
-
-const char* NacpProcess::getLanguageStr(nn::hac::nacp::Language var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::LANG_AmericanEnglish):
- str = "AmericanEnglish";
- break;
- case (nn::hac::nacp::LANG_BritishEnglish):
- str = "BritishEnglish";
- break;
- case (nn::hac::nacp::LANG_Japanese):
- str = "Japanese";
- break;
- case (nn::hac::nacp::LANG_French):
- str = "French";
- break;
- case (nn::hac::nacp::LANG_German):
- str = "German";
- break;
- case (nn::hac::nacp::LANG_LatinAmericanSpanish):
- str = "LatinAmericanSpanish";
- break;
- case (nn::hac::nacp::LANG_Spanish):
- str = "Spanish";
- break;
- case (nn::hac::nacp::LANG_Italian):
- str = "Italian";
- break;
- case (nn::hac::nacp::LANG_Dutch):
- str = "Dutch";
- break;
- case (nn::hac::nacp::LANG_CanadianFrench):
- str = "CanadianFrench";
- break;
- case (nn::hac::nacp::LANG_Portuguese):
- str = "Portuguese";
- break;
- case (nn::hac::nacp::LANG_Russian):
- str = "Russian";
- break;
- case (nn::hac::nacp::LANG_Korean):
- str = "Korean";
- break;
- case (nn::hac::nacp::LANG_TraditionalChinese):
- str = "TraditionalChinese";
- break;
- case (nn::hac::nacp::LANG_SimplifiedChinese):
- str = "SimplifiedChinese";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getStartupUserAccountStr(nn::hac::nacp::StartupUserAccount var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::USER_None):
- str = "None";
- break;
- case (nn::hac::nacp::USER_Required):
- str = "Required";
- break;
- case (nn::hac::nacp::USER_RequiredWithNetworkServiceAccountAvailable):
- str = "RequiredWithNetworkServiceAccountAvailable";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getTouchScreenUsageModeStr(nn::hac::nacp::TouchScreenUsageMode var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::TOUCH_None):
- str = "None";
- break;
- case (nn::hac::nacp::TOUCH_Supported):
- str = "Supported";
- break;
- case (nn::hac::nacp::TOUCH_Required):
- str = "Required";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getUserAccountSwitchLockValueStr(nn::hac::nacp::UserAccountSwitchLockValue var) const
-{
- const char* str = nullptr;
-
- switch (var)
- {
- case (nn::hac::nacp::UASL_Disable):
- str = "Disable";
- break;
- case (nn::hac::nacp::UASL_Enable):
- str = "Enable";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getAocRegistrationTypeStr(nn::hac::nacp::AocRegistrationType var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::AOC_AllOnLaunch):
- str = "AllOnLaunch";
- break;
- case (nn::hac::nacp::AOC_OnDemand):
- str = "OnDemand";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getAttributeFlagStr(nn::hac::nacp::AttributeFlag var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::ATTR_None):
- str = "None";
- break;
- case (nn::hac::nacp::ATTR_Demo):
- str = "Demo";
- break;
- case (nn::hac::nacp::ATTR_RetailInteractiveDisplay):
- str = "RetailInteractiveDisplay";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getParentalControlFlagStr(nn::hac::nacp::ParentalControlFlag var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::PC_None):
- str = "None";
- break;
- case (nn::hac::nacp::PC_FreeCommunication):
- str = "FreeCommunication";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getScreenshotModeStr(nn::hac::nacp::ScreenshotMode var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::SCRN_Allow):
- str = "Allow";
- break;
- case (nn::hac::nacp::SCRN_Deny):
- str = "Deny";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getVideoCaptureModeStr(nn::hac::nacp::VideoCaptureMode var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::VCAP_Disable):
- str = "Disable";
- break;
- case (nn::hac::nacp::VCAP_Manual):
- str = "Manual";
- break;
- case (nn::hac::nacp::VCAP_Enable):
- str = "Enable";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getDataLossConfirmationStr(nn::hac::nacp::DataLossConfirmation var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::DLOSS_None):
- str = "None";
- break;
- case (nn::hac::nacp::DLOSS_Required):
- str = "Required";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getPlayLogPolicyStr(nn::hac::nacp::PlayLogPolicy var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::PLP_All):
- str = "All";
- break;
- case (nn::hac::nacp::PLP_LogOnly):
- str = "LogOnly";
- break;
- case (nn::hac::nacp::PLP_None):
- str = "None";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getOrganisationStr(nn::hac::nacp::Organisation var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::ORGN_CERO):
- str = "CERO";
- break;
- case (nn::hac::nacp::ORGN_GRACGCRB):
- str = "GRACGCRB";
- break;
- case (nn::hac::nacp::ORGN_GSRMR):
- str = "GSRMR";
- break;
- case (nn::hac::nacp::ORGN_ESRB):
- str = "ESRB";
- break;
- case (nn::hac::nacp::ORGN_ClassInd):
- str = "ClassInd";
- break;
- case (nn::hac::nacp::ORGN_USK):
- str = "USK";
- break;
- case (nn::hac::nacp::ORGN_PEGI):
- str = "PEGI";
- break;
- case (nn::hac::nacp::ORGN_PEGIPortugal):
- str = "PEGIPortugal";
- break;
- case (nn::hac::nacp::ORGN_PEGIBBFC):
- str = "PEGIBBFC";
- break;
- case (nn::hac::nacp::ORGN_Russian):
- str = "Russian";
- break;
- case (nn::hac::nacp::ORGN_ACB):
- str = "ACB";
- break;
- case (nn::hac::nacp::ORGN_OFLC):
- str = "OFLC";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getLogoTypeStr(nn::hac::nacp::LogoType var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::LOGO_LicensedByNintendo):
- str = "LicensedByNintendo";
- break;
- case (nn::hac::nacp::LOGO_DistributedByNintendo):
- str = "DistributedByNintendo";
- break;
- case (nn::hac::nacp::LOGO_Nintendo):
- str = "Nintendo";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getLogoHandlingStr(nn::hac::nacp::LogoHandling var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::LHND_Auto):
- str = "Auto";
- break;
- case (nn::hac::nacp::LHND_None):
- str = "None";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getRuntimeAocInstallModeStr(nn::hac::nacp::RuntimeAocInstallMode var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::RTAOC_Deny):
- str = "Deny";
- break;
- case (nn::hac::nacp::RTAOC_AllowAppend):
- str = "AllowAppend";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getCrashReportModeStr(nn::hac::nacp::CrashReportMode var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::CREP_Deny):
- str = "Deny";
- break;
- case (nn::hac::nacp::CREP_Allow):
- str = "Allow";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getHdcpStr(nn::hac::nacp::Hdcp var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::HDCP_None):
- str = "None";
- break;
- case (nn::hac::nacp::HDCP_Required):
- str = "Required";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getPlayLogQueryCapabilityStr(nn::hac::nacp::PlayLogQueryCapability var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::PLQC_None):
- str = "None";
- break;
- case (nn::hac::nacp::PLQC_Whitelist):
- str = "Whitelist";
- break;
- case (nn::hac::nacp::PLQC_All):
- str = "All";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getRepairFlagStr(nn::hac::nacp::RepairFlag var) const
-{
- const char* str = nullptr;
-
- switch(var)
- {
- case (nn::hac::nacp::REPF_None):
- str = "None";
- break;
- case (nn::hac::nacp::REPF_SuppressGameCardAccess):
- str = "SuppressGameCardAccess";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-const char* NacpProcess::getRequiredNetworkServiceLicenseOnLaunchValueStr(nn::hac::nacp::RequiredNetworkServiceLicenseOnLaunchValue var) const
-{
- const char* str = nullptr;
-
- switch (var)
- {
- case (nn::hac::nacp::REQNETLIC_None):
- str = "None";
- break;
- case (nn::hac::nacp::REQNETLIC_Common):
- str = "Common";
- break;
- default:
- str = "Unknown";
- }
-
- return str;
-}
-
-std::string NacpProcess::getSaveDataSizeStr(int64_t size) const
-{
- static const int64_t kKiloByte = 1024;
- static const int64_t kMegaByte = 1024 * 1024;
-
- std::stringstream sstr;
-
-
- if (size < kKiloByte)
- {
- sstr << size << " B";
- }
- else if (size < kMegaByte)
- {
- sstr << (size/kKiloByte) << " KB";
- }
- else
- {
- sstr << (size/kMegaByte) << " MB";
- }
-
- return sstr.str();
}
\ No newline at end of file
diff --git a/src/NacpProcess.h b/src/NacpProcess.h
index aaeba21..7084d81 100644
--- a/src/NacpProcess.h
+++ b/src/NacpProcess.h
@@ -31,25 +31,4 @@ private:
void importNacp();
void displayNacp();
- const char* getLanguageStr(nn::hac::nacp::Language var) const;
- const char* getStartupUserAccountStr(nn::hac::nacp::StartupUserAccount var) const;
- const char* getUserAccountSwitchLockValueStr(nn::hac::nacp::UserAccountSwitchLockValue var) const;
- const char* getTouchScreenUsageModeStr(nn::hac::nacp::TouchScreenUsageMode var) const;
- const char* getAocRegistrationTypeStr(nn::hac::nacp::AocRegistrationType var) const;
- const char* getAttributeFlagStr(nn::hac::nacp::AttributeFlag var) const;
- const char* getParentalControlFlagStr(nn::hac::nacp::ParentalControlFlag var) const;
- const char* getScreenshotModeStr(nn::hac::nacp::ScreenshotMode var) const;
- const char* getVideoCaptureModeStr(nn::hac::nacp::VideoCaptureMode var) const;
- const char* getDataLossConfirmationStr(nn::hac::nacp::DataLossConfirmation var) const;
- const char* getPlayLogPolicyStr(nn::hac::nacp::PlayLogPolicy var) const;
- const char* getOrganisationStr(nn::hac::nacp::Organisation var) const;
- const char* getLogoTypeStr(nn::hac::nacp::LogoType var) const;
- const char* getLogoHandlingStr(nn::hac::nacp::LogoHandling var) const;
- const char* getRuntimeAocInstallModeStr(nn::hac::nacp::RuntimeAocInstallMode var) const;
- const char* getCrashReportModeStr(nn::hac::nacp::CrashReportMode var) const;
- const char* getHdcpStr(nn::hac::nacp::Hdcp var) const;
- const char* getPlayLogQueryCapabilityStr(nn::hac::nacp::PlayLogQueryCapability var) const;
- const char* getRepairFlagStr(nn::hac::nacp::RepairFlag var) const;
- const char* getRequiredNetworkServiceLicenseOnLaunchValueStr(nn::hac::nacp::RequiredNetworkServiceLicenseOnLaunchValue var) const;
- std::string getSaveDataSizeStr(int64_t size) const;
};
\ No newline at end of file
diff --git a/src/NcaProcess.cpp b/src/NcaProcess.cpp
index fcfb8db..334af7b 100644
--- a/src/NcaProcess.cpp
+++ b/src/NcaProcess.cpp
@@ -1,19 +1,22 @@
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
#include "NcaProcess.h"
+
#include "PfsProcess.h"
#include "RomfsProcess.h"
#include "MetaProcess.h"
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#include
+#include
+#include
NcaProcess::NcaProcess() :
mFile(),
@@ -112,7 +115,7 @@ void NcaProcess::importHeader()
// decrypt header block
fnd::aes::sAesXts128Key header_key;
mKeyCfg.getContentArchiveHeaderKey(header_key);
- nn::hac::ContentArchiveUtils::decryptContentArchiveHeader((byte_t*)&mHdrBlock, (byte_t*)&mHdrBlock, header_key);
+ nn::hac::ContentArchiveUtil::decryptContentArchiveHeader((byte_t*)&mHdrBlock, (byte_t*)&mHdrBlock, header_key);
// generate header hash
fnd::sha::Sha256((byte_t*)&mHdrBlock.header, sizeof(nn::hac::sContentArchiveHeader), mHdrHash.bytes);
@@ -128,7 +131,7 @@ void NcaProcess::generateNcaBodyEncryptionKeys()
memset(zero_aesctr_key.key, 0, sizeof(zero_aesctr_key));
// get key data from header
- byte_t masterkey_rev = nn::hac::ContentArchiveUtils::getMasterKeyRevisionFromKeyGeneration(mHdr.getKeyGeneration());
+ byte_t masterkey_rev = nn::hac::ContentArchiveUtil::getMasterKeyRevisionFromKeyGeneration(mHdr.getKeyGeneration());
byte_t keak_index = mHdr.getKeyAreaEncryptionKeyIndex();
// process key area
@@ -253,7 +256,7 @@ void NcaProcess::generatePartitionConfiguration()
}
// setup AES-CTR
- nn::hac::ContentArchiveUtils::getNcaPartitionAesCtr(&fs_header, info.aes_ctr.iv);
+ nn::hac::ContentArchiveUtil::getNcaPartitionAesCtr(&fs_header, info.aes_ctr.iv);
// save partition config
info.reader = nullptr;
@@ -356,7 +359,7 @@ void NcaProcess::generatePartitionConfiguration()
else if (info.enc_type == nn::hac::nca::CRYPT_AESXTS || info.enc_type == nn::hac::nca::CRYPT_AESCTREX)
{
error.clear();
- error << "EncryptionType(" << getEncryptionTypeStr(info.enc_type) << "): UNSUPPORTED";
+ error << "EncryptionType(" << nn::hac::ContentArchiveUtil::getEncryptionTypeAsString(info.enc_type) << "): UNSUPPORTED";
throw fnd::Exception(kModuleName, error.str());
}
else
@@ -443,11 +446,11 @@ void NcaProcess::validateNcaSignatures()
void NcaProcess::displayHeader()
{
std::cout << "[NCA Header]" << std::endl;
- std::cout << " Format Type: " << getFormatVersionStr(mHdr.getFormatVersion()) << std::endl;
- std::cout << " Dist. Type: " << getDistributionTypeStr(mHdr.getDistributionType()) << std::endl;
- std::cout << " Content Type: " << getContentTypeStr(mHdr.getContentType()) << std::endl;
+ std::cout << " Format Type: " << nn::hac::ContentArchiveUtil::getFormatVersionAsString((nn::hac::nca::HeaderFormatVersion)mHdr.getFormatVersion()) << std::endl;
+ std::cout << " Dist. Type: " << nn::hac::ContentArchiveUtil::getDistributionTypeAsString(mHdr.getDistributionType()) << std::endl;
+ std::cout << " Content Type: " << nn::hac::ContentArchiveUtil::getContentTypeAsString(mHdr.getContentType()) << std::endl;
std::cout << " Key Generation: " << std::dec << (uint32_t)mHdr.getKeyGeneration() << std::endl;
- std::cout << " Kaek Index: " << getKaekIndexStr((nn::hac::nca::KeyAreaEncryptionKeyIndex)mHdr.getKeyAreaEncryptionKeyIndex()) << " (" << std::dec << (uint32_t)mHdr.getKeyAreaEncryptionKeyIndex() << ")" << std::endl;
+ std::cout << " Kaek Index: " << nn::hac::ContentArchiveUtil::getKeyAreaEncryptionKeyIndexAsString((nn::hac::nca::KeyAreaEncryptionKeyIndex)mHdr.getKeyAreaEncryptionKeyIndex()) << " (" << std::dec << (uint32_t)mHdr.getKeyAreaEncryptionKeyIndex() << ")" << std::endl;
std::cout << " Size: 0x" << std::hex << mHdr.getContentSize() << std::endl;
std::cout << " ProgID: 0x" << std::hex << std::setw(16) << std::setfill('0') << mHdr.getProgramId() << std::endl;
std::cout << " Content Index: " << std::dec << mHdr.getContentIndex() << std::endl;
@@ -494,9 +497,9 @@ void NcaProcess::displayHeader()
std::cout << " " << std::dec << index << ":" << std::endl;
std::cout << " Offset: 0x" << std::hex << (uint64_t)info.offset << std::endl;
std::cout << " Size: 0x" << std::hex << (uint64_t)info.size << std::endl;
- std::cout << " Format Type: " << getFormatTypeStr(info.format_type) << std::endl;
- std::cout << " Hash Type: " << getHashTypeStr(info.hash_type) << std::endl;
- std::cout << " Enc. Type: " << getEncryptionTypeStr(info.enc_type) << std::endl;
+ std::cout << " Format Type: " << nn::hac::ContentArchiveUtil::getFormatTypeAsString(info.format_type) << std::endl;
+ std::cout << " Hash Type: " << nn::hac::ContentArchiveUtil::getHashTypeAsString(info.hash_type) << std::endl;
+ std::cout << " Enc. Type: " << nn::hac::ContentArchiveUtil::getEncryptionTypeAsString(info.enc_type) << std::endl;
if (info.enc_type == nn::hac::nca::CRYPT_AESCTR)
{
fnd::aes::sAesIvCtr ctr;
@@ -574,7 +577,7 @@ void NcaProcess::processPartitions()
pfs.setListFs(mListFs);
if (mHdr.getContentType() == nn::hac::nca::TYPE_PROGRAM)
{
- pfs.setMountPointName(std::string(getContentTypeForMountStr(mHdr.getContentType())) + ":/" + std::string(getProgramPartitionNameStr(index)));
+ pfs.setMountPointName(std::string(getContentTypeForMountStr(mHdr.getContentType())) + ":/" + nn::hac::ContentArchiveUtil::getProgramContentParititionIndexAsString((nn::hac::nca::ProgramContentPartitionIndex)index));
}
else
{
@@ -593,7 +596,7 @@ void NcaProcess::processPartitions()
romfs.setListFs(mListFs);
if (mHdr.getContentType() == nn::hac::nca::TYPE_PROGRAM)
{
- romfs.setMountPointName(std::string(getContentTypeForMountStr(mHdr.getContentType())) + ":/" + std::string(getProgramPartitionNameStr(index)));
+ romfs.setMountPointName(std::string(getContentTypeForMountStr(mHdr.getContentType())) + ":/" + nn::hac::ContentArchiveUtil::getProgramContentParititionIndexAsString((nn::hac::nca::ProgramContentPartitionIndex)index));
}
else
{
@@ -607,177 +610,6 @@ void NcaProcess::processPartitions()
}
}
-const char* NcaProcess::getFormatVersionStr(byte_t format_ver) const
-{
- const char* str = nullptr;
-
- switch (format_ver)
- {
- case (nn::hac::nca::FORMAT_NCA2):
- str = "NCA2";
- break;
- case (nn::hac::nca::FORMAT_NCA3):
- str = "NCA3";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* NcaProcess::getDistributionTypeStr(nn::hac::nca::DistributionType dist_type) const
-{
- const char* str = nullptr;
-
- switch (dist_type)
- {
- case (nn::hac::nca::DIST_DOWNLOAD):
- str = "Download";
- break;
- case (nn::hac::nca::DIST_GAME_CARD):
- str = "Game Card";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-
-const char* NcaProcess::getContentTypeStr(nn::hac::nca::ContentType cont_type) const
-{
- const char* str = nullptr;
-
- switch (cont_type)
- {
- case (nn::hac::nca::TYPE_PROGRAM):
- str = "Program";
- break;
- case (nn::hac::nca::TYPE_META):
- str = "Meta";
- break;
- case (nn::hac::nca::TYPE_CONTROL):
- str = "Control";
- break;
- case (nn::hac::nca::TYPE_MANUAL):
- str = "Manual";
- break;
- case (nn::hac::nca::TYPE_DATA):
- str = "Data";
- break;
- case (nn::hac::nca::TYPE_PUBLIC_DATA):
- str = "PublicData";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* NcaProcess::getEncryptionTypeStr(nn::hac::nca::EncryptionType enc_type) const
-{
- const char* str = nullptr;
-
- switch (enc_type)
- {
- case (nn::hac::nca::CRYPT_AUTO):
- str = "Auto";
- break;
- case (nn::hac::nca::CRYPT_NONE):
- str = "None";
- break;
- case (nn::hac::nca::CRYPT_AESXTS):
- str = "AesXts";
- break;
- case (nn::hac::nca::CRYPT_AESCTR):
- str = "AesCtr";
- break;
- case (nn::hac::nca::CRYPT_AESCTREX):
- str = "AesCtrEx";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* NcaProcess::getHashTypeStr(nn::hac::nca::HashType hash_type) const
-{
- const char* str = nullptr;
-
- switch (hash_type)
- {
- case (nn::hac::nca::HASH_AUTO):
- str = "Auto";
- break;
- case (nn::hac::nca::HASH_NONE):
- str = "None";
- break;
- case (nn::hac::nca::HASH_HIERARCHICAL_SHA256):
- str = "HierarchicalSha256";
- break;
- case (nn::hac::nca::HASH_HIERARCHICAL_INTERGRITY):
- str = "HierarchicalIntegrity";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* NcaProcess::getFormatTypeStr(nn::hac::nca::FormatType format_type) const
-{
- const char* str = nullptr;
-
- switch (format_type)
- {
- case (nn::hac::nca::FORMAT_ROMFS):
- str = "RomFs";
- break;
- case (nn::hac::nca::FORMAT_PFS0):
- str = "PartitionFs";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
-const char* NcaProcess::getKaekIndexStr(nn::hac::nca::KeyAreaEncryptionKeyIndex keak_index) const
-{
- const char* str = nullptr;
-
- switch (keak_index)
- {
- case (nn::hac::nca::KAEK_IDX_APPLICATION):
- str = "Application";
- break;
- case (nn::hac::nca::KAEK_IDX_OCEAN):
- str = "Ocean";
- break;
- case (nn::hac::nca::KAEK_IDX_SYSTEM):
- str = "System";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
-}
-
const char* NcaProcess::getContentTypeForMountStr(nn::hac::nca::ContentType cont_type) const
{
const char* str = nullptr;
@@ -807,28 +639,5 @@ const char* NcaProcess::getContentTypeForMountStr(nn::hac::nca::ContentType cont
break;
}
- return str;
-}
-
-const char* NcaProcess::getProgramPartitionNameStr(size_t i) const
-{
- const char* str = nullptr;
-
- switch (i)
- {
- case (nn::hac::nca::PARTITION_CODE):
- str = "code";
- break;
- case (nn::hac::nca::PARTITION_DATA):
- str = "data";
- break;
- case (nn::hac::nca::PARTITION_LOGO):
- str = "logo";
- break;
- default:
- str = "";
- break;
- }
-
return str;
}
\ No newline at end of file
diff --git a/src/NcaProcess.h b/src/NcaProcess.h
index 2b9ba2e..d467077 100644
--- a/src/NcaProcess.h
+++ b/src/NcaProcess.h
@@ -111,13 +111,5 @@ private:
void displayHeader();
void processPartitions();
- const char* getFormatVersionStr(byte_t format_ver) const;
- const char* getDistributionTypeStr(nn::hac::nca::DistributionType dist_type) const;
- const char* getContentTypeStr(nn::hac::nca::ContentType cont_type) const;
- const char* getEncryptionTypeStr(nn::hac::nca::EncryptionType enc_type) const;
- const char* getHashTypeStr(nn::hac::nca::HashType hash_type) const;
- const char* getFormatTypeStr(nn::hac::nca::FormatType format_type) const;
- const char* getKaekIndexStr(nn::hac::nca::KeyAreaEncryptionKeyIndex keak_index) const;
const char* getContentTypeForMountStr(nn::hac::nca::ContentType cont_type) const;
- const char* getProgramPartitionNameStr(size_t i) const;
};
\ No newline at end of file
diff --git a/src/NroProcess.cpp b/src/NroProcess.cpp
index f1da20d..ca7401b 100644
--- a/src/NroProcess.cpp
+++ b/src/NroProcess.cpp
@@ -128,7 +128,9 @@ void NroProcess::importCodeSegments()
void NroProcess::displayHeader()
{
std::cout << "[NRO Header]" << std::endl;
- std::cout << " RoCrt: " << fnd::SimpleTextOutput::arrayToString(mHdr.getRoCrt().data, nn::hac::nro::kRoCrtSize, false, "") << std::endl;
+ std::cout << " RoCrt: " << std::endl;
+ std::cout << " EntryPoint: 0x" << std::hex << mHdr.getRoCrtEntryPoint() << std::endl;
+ std::cout << " ModOffset: 0x" << std::hex << mHdr.getRoCrtModOffset() << std::endl;
std::cout << " ModuleId: " << fnd::SimpleTextOutput::arrayToString(mHdr.getModuleId().data, nn::hac::nro::kModuleIdSize, false, "") << std::endl;
std::cout << " NroSize: 0x" << std::hex << mHdr.getNroSize() << std::endl;
std::cout << " Program Sections:" << std::endl;
diff --git a/src/PfsProcess.cpp b/src/PfsProcess.cpp
index 3661fd1..36287e5 100644
--- a/src/PfsProcess.cpp
+++ b/src/PfsProcess.cpp
@@ -1,8 +1,13 @@
+#include "PfsProcess.h"
+
#include
#include
+
#include
#include
-#include "PfsProcess.h"
+
+#include
+
PfsProcess::PfsProcess() :
mFile(),
@@ -95,7 +100,7 @@ void PfsProcess::importHeader()
void PfsProcess::displayHeader()
{
std::cout << "[PartitionFS]" << std::endl;
- std::cout << " Type: " << getFsTypeStr(mPfs.getFsType()) << std::endl;
+ std::cout << " Type: " << nn::hac::PartitionFsUtil::getFsTypeAsString(mPfs.getFsType()) << std::endl;
std::cout << " FileNum: " << std::dec << mPfs.getFileList().size() << std::endl;
if (mMountName.empty() == false)
{
@@ -191,24 +196,4 @@ void PfsProcess::extractFs()
}
outFile.close();
}
-}
-
-const char* PfsProcess::getFsTypeStr(nn::hac::PartitionFsHeader::FsType type) const
-{
- const char* str = nullptr;
-
- switch (type)
- {
- case (nn::hac::PartitionFsHeader::TYPE_PFS0):
- str = "PFS0";
- break;
- case (nn::hac::PartitionFsHeader::TYPE_HFS0):
- str = "HFS0";
- break;
- default:
- str = "Unknown";
- break;
- }
-
- return str;
}
\ No newline at end of file
diff --git a/src/PfsProcess.h b/src/PfsProcess.h
index d49ba9a..8ae6fd7 100644
--- a/src/PfsProcess.h
+++ b/src/PfsProcess.h
@@ -50,6 +50,4 @@ private:
bool validateHeaderMagic(const nn::hac::sPfsHeader* hdr);
void validateHfs();
void extractFs();
-
- const char* getFsTypeStr(nn::hac::PartitionFsHeader::FsType type) const;
};
\ No newline at end of file
diff --git a/src/UserSettings.cpp b/src/UserSettings.cpp
index 46ce86e..97fae08 100644
--- a/src/UserSettings.cpp
+++ b/src/UserSettings.cpp
@@ -13,7 +13,7 @@
#include
#include
#include
-#include
+#include
#include
#include
#include
@@ -522,7 +522,7 @@ void UserSettings::populateKeyset(sCmdArgs& args)
fnd::aes::sAes128Key enc_title_key;
memcpy(enc_title_key.key, tik.getBody().getEncTitleKey(), 16);
fnd::aes::sAes128Key common_key, external_content_key;
- if (mKeyCfg.getETicketCommonKey(nn::hac::ContentArchiveUtils::getMasterKeyRevisionFromKeyGeneration(tik.getBody().getCommonKeyId()), common_key) == true)
+ if (mKeyCfg.getETicketCommonKey(nn::hac::ContentArchiveUtil::getMasterKeyRevisionFromKeyGeneration(tik.getBody().getCommonKeyId()), common_key) == true)
{
nn::hac::AesKeygen::generateKey(external_content_key.key, tik.getBody().getEncTitleKey(), common_key.key);
mKeyCfg.addNcaExternalContentKey(tik.getBody().getRightsId(), external_content_key);
@@ -609,7 +609,7 @@ FileType UserSettings::getFileTypeFromString(const std::string& type_str)
FileType type;
if (str == "gc" || str == "gamecard" || str == "xci")
- type = FILE_GC;
+ type = FILE_GAMECARD;
else if (str == "nsp")
type = FILE_NSP;
else if (str == "partitionfs" || str == "hashedpartitionfs" \
@@ -666,9 +666,11 @@ FileType UserSettings::determineFileTypeFromFile(const std::string& path)
#define _TYPE_PTR(st) ((st*)(scratch.data()))
#define _ASSERT_SIZE(sz) (scratch.size() >= (sz))
- // test npdm
- if (_ASSERT_SIZE(sizeof(nn::hac::sGcHeaderPage)) && _TYPE_PTR(nn::hac::sGcHeaderPage)->header.st_magic.get() == nn::hac::gc::kGcHeaderStructMagic)
- file_type = FILE_GC;
+ // test gamecard
+ if (_ASSERT_SIZE(sizeof(nn::hac::sGcHeader_Rsa2048Signed)) && _TYPE_PTR(nn::hac::sGcHeader_Rsa2048Signed)->header.st_magic.get() == nn::hac::gc::kGcHeaderStructMagic)
+ file_type = FILE_GAMECARD;
+ else if (_ASSERT_SIZE(sizeof(nn::hac::sSdkGcHeader)) && _TYPE_PTR(nn::hac::sSdkGcHeader)->signed_header.header.st_magic.get() == nn::hac::gc::kGcHeaderStructMagic)
+ file_type = FILE_GAMECARD;
// test pfs0
else if (_ASSERT_SIZE(sizeof(nn::hac::sPfsHeader)) && _TYPE_PTR(nn::hac::sPfsHeader)->st_magic.get() == nn::hac::pfs::kPfsStructMagic)
file_type = FILE_PARTITIONFS;
@@ -729,14 +731,14 @@ bool UserSettings::determineValidNcaFromSample(const fnd::Vec& sample) c
{
// prepare decrypted NCA data
byte_t nca_raw[nn::hac::nca::kHeaderSize];
- nn::hac::sContentArchiveHeader* nca_header = (nn::hac::sContentArchiveHeader*)(nca_raw + nn::hac::ContentArchiveUtils::sectorToOffset(1));
+ nn::hac::sContentArchiveHeader* nca_header = (nn::hac::sContentArchiveHeader*)(nca_raw + nn::hac::ContentArchiveUtil::sectorToOffset(1));
if (sample.size() < nn::hac::nca::kHeaderSize)
return false;
fnd::aes::sAesXts128Key header_key;
mKeyCfg.getContentArchiveHeaderKey(header_key);
- nn::hac::ContentArchiveUtils::decryptContentArchiveHeader(sample.data(), nca_raw, header_key);
+ nn::hac::ContentArchiveUtil::decryptContentArchiveHeader(sample.data(), nca_raw, header_key);
if (nca_header->st_magic.get() != nn::hac::nca::kNca2StructMagic && nca_header->st_magic.get() != nn::hac::nca::kNca3StructMagic)
return false;
diff --git a/src/common.h b/src/common.h
index df33d69..8625a8f 100644
--- a/src/common.h
+++ b/src/common.h
@@ -10,7 +10,7 @@ static const size_t kNcaKeakNum = nn::hac::nca::kKeyAreaEncryptionKeyNum;
enum FileType
{
- FILE_GC,
+ FILE_GAMECARD,
FILE_NSP,
FILE_PARTITIONFS,
FILE_ROMFS,
diff --git a/src/main.cpp b/src/main.cpp
index 2ed927b..5e0e45b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -40,7 +40,7 @@ int main(int argc, char** argv)
fnd::SharedPtr inputFile(new fnd::SimpleFile(user_set.getInputPath(), fnd::SimpleFile::Read));
- if (user_set.getFileType() == FILE_GC)
+ if (user_set.getFileType() == FILE_GAMECARD)
{
GameCardProcess obj;
diff --git a/src/version.h b/src/version.h
index 81e2c71..5089bc4 100644
--- a/src/version.h
+++ b/src/version.h
@@ -2,6 +2,6 @@
#define APP_NAME "NSTool"
#define BIN_NAME "nstool"
#define VER_MAJOR 1
-#define VER_MINOR 1
+#define VER_MINOR 2
#define VER_PATCH 0
#define AUTHORS "jakcron"
\ No newline at end of file