mirror of
https://github.com/GaryOderNichts/WiiUIdent.git
synced 2025-01-09 07:09:23 +01:00
SubmitScreen.cpp: Update for server-side changes.
This commit is contained in:
parent
171c3fb9ce
commit
b90158c146
@ -11,50 +11,70 @@
|
|||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
#include <cacert_pem.h>
|
#include <cacert_pem.h>
|
||||||
|
|
||||||
|
#include <mocha/mocha.h>
|
||||||
|
|
||||||
|
struct IOSCEccSignedCert {
|
||||||
|
uint32_t signature_type; // [0x000] 0x00010002 or 0x00010005
|
||||||
|
uint8_t signature[0x3C]; // [0x004] ECC signature
|
||||||
|
uint8_t reserved1[0x40]; // [0x040] All zeroes
|
||||||
|
char issuer[0x40]; // [0x080] Issuer
|
||||||
|
uint32_t key_type; // [0x0C0] Key type (2)
|
||||||
|
char console_id[0x40]; // [0x0C4] Console ID ("NGxxxxxxxx")
|
||||||
|
uint32_t ng_id; // [0x104] NG ID
|
||||||
|
uint8_t pub_key[0x3C]; // [0x108] ECC public key
|
||||||
|
uint8_t reserved2[0x3C]; // [0x10C] All zeroes
|
||||||
|
};
|
||||||
|
WUT_CHECK_SIZE(IOSCEccSignedCert, 0x180);
|
||||||
|
|
||||||
// POST data
|
// POST data
|
||||||
struct post_data {
|
struct post_data {
|
||||||
char system_model[16]; // [0x000] seeprom[0xB8]
|
char system_model[16]; // [0x000] seeprom[0xB8]
|
||||||
char system_serial[16]; // [0x010] seeprom[0xAC] + seeprom[0xB0] - need to mask the last 3 digits
|
char system_serial[16]; // [0x010] seeprom[0xAC] + seeprom[0xB0] - need to mask the last 3 digits
|
||||||
uint8_t mfg_date[6]; // [0x020] seeprom[0xC4]
|
uint8_t mfg_date[6]; // [0x020] seeprom[0xC4]
|
||||||
uint8_t productArea; // [0x026]
|
uint8_t productArea; // [0x026]
|
||||||
uint8_t gameRegion; // [0x027]
|
uint8_t gameRegion; // [0x027]
|
||||||
uint32_t sec_level; // [0x028] otp[0x080]
|
uint32_t sec_level; // [0x028] otp[0x080]
|
||||||
uint16_t boardType; // [0x02C] seeprom[0x21]
|
uint16_t boardType; // [0x02C] seeprom[0x21]
|
||||||
uint16_t boardRevision; // [0x02E] seeprom[0x22]
|
uint16_t boardRevision; // [0x02E] seeprom[0x22]
|
||||||
uint16_t bootSource; // [0x030] seeprom[0x23]
|
uint16_t bootSource; // [0x030] seeprom[0x23]
|
||||||
uint16_t ddr3Size; // [0x032] seeprom[0x24]
|
uint16_t ddr3Size; // [0x032] seeprom[0x24]
|
||||||
uint16_t ddr3Speed; // [0x034] seeprom[0x25]
|
uint16_t ddr3Speed; // [0x034] seeprom[0x25]
|
||||||
uint16_t sataDevice; // [0x036] seeprom[0x2C]
|
uint16_t ddr3Vendor; // [0x036] seeprom[0x29]
|
||||||
uint16_t consoleType; // [0x038] seeprom[0x2D]
|
uint16_t sataDevice; // [0x038] seeprom[0x2C]
|
||||||
uint16_t reserved1; // [0x03A]
|
uint16_t consoleType; // [0x03A] seeprom[0x2D]
|
||||||
uint32_t bsp_rev; // [0x03C] bspGetHardwareVersion();
|
uint32_t bsp_rev; // [0x03C] bspGetHardwareVersion();
|
||||||
uint16_t ddr3Vendor; // [0x040] seeprom[0x29]
|
uint32_t wiiu_root_ms_id; // [0x040] otp[0x280]
|
||||||
uint8_t reserved2[62]; // [0x042]
|
uint32_t wiiu_root_ca_id; // [0x044] otp[0x284]
|
||||||
|
uint32_t wiiu_ng_id; // [0x048] otp[0x21C]
|
||||||
|
uint32_t wiiu_ng_key_id; // [0x04C] otp[0x288]
|
||||||
|
uint8_t reserved2[48]; // [0x050]
|
||||||
|
|
||||||
// [0x080]
|
// [0x080]
|
||||||
struct {
|
struct {
|
||||||
uint32_t cid[4]; // [0x080] CID
|
uint32_t cid[4]; // [0x080] CID
|
||||||
uint32_t mid_prv; // [0x090] Manufacturer and product revision
|
uint32_t mid_prv; // [0x090] Manufacturer and product revision
|
||||||
uint32_t blockSize; // [0x094] Block size
|
uint32_t blockSize; // [0x094] Block size
|
||||||
uint64_t numBlocks; // [0x098] Number of blocks
|
uint64_t numBlocks; // [0x098] Number of blocks
|
||||||
char name1[128]; // [0x0A0] Product name
|
|
||||||
} mlc;
|
} mlc;
|
||||||
|
|
||||||
// [0x120]
|
// [0x0A0]
|
||||||
uint8_t otp_sha256[32]; // [0x120] OTP SHA-256 hash (to prevent duplicates)
|
uint8_t otp_sha256[32]; // [0x0A0] OTP SHA-256 hash (to prevent duplicates)
|
||||||
}; // size == 0x140 (320)
|
|
||||||
WUT_CHECK_SIZE(post_data, 0x140);
|
// [0x0C0]
|
||||||
|
IOSCEccSignedCert device_cert; // [0x0C0] Device client certificate
|
||||||
|
}; // size == 0x240 (576)
|
||||||
|
WUT_CHECK_SIZE(post_data, 0x240);
|
||||||
|
|
||||||
struct post_data_hashed {
|
struct post_data_hashed {
|
||||||
struct post_data data;
|
struct post_data data;
|
||||||
uint8_t post_sha256[32]; // [0x140] SHA-256 hash of post_data, with adjustments
|
uint8_t post_sha256[32]; // [0x140] SHA-256 hash of post_data, with adjustments
|
||||||
}; // size == 0x160 (352)
|
}; // size == 0x260 (608)
|
||||||
WUT_CHECK_SIZE(post_data_hashed, 0x160);
|
WUT_CHECK_SIZE(post_data_hashed, 0x260);
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
|
||||||
const char* desc =
|
const char desc[] =
|
||||||
"This will submit statistical data to the developers of WiiUIdent,\n"
|
"This will submit statistical data to the developers of WiiUIdent,\n"
|
||||||
"which will help to determine various statistics about Wii U consoles,\n"
|
"which will help to determine various statistics about Wii U consoles,\n"
|
||||||
"e.g. eMMC manufacturers. The submitted data may be publicly accessible\n"
|
"e.g. eMMC manufacturers. The submitted data may be publicly accessible\n"
|
||||||
@ -183,9 +203,24 @@ void SubmitScreen::SubmitSystemData()
|
|||||||
pd->ddr3Vendor = seeprom.bc.ddr3Vendor;
|
pd->ddr3Vendor = seeprom.bc.ddr3Vendor;
|
||||||
pd->sataDevice = seeprom.bc.sataDevice;
|
pd->sataDevice = seeprom.bc.sataDevice;
|
||||||
pd->consoleType = seeprom.bc.consoleType;
|
pd->consoleType = seeprom.bc.consoleType;
|
||||||
|
pd->wiiu_root_ms_id = otp.wiiUCertBank.rootCertMSId;
|
||||||
|
pd->wiiu_root_ca_id = otp.wiiUCertBank.rootCertCAId;
|
||||||
|
pd->wiiu_ng_id = otp.wiiUNGBank.ngId;
|
||||||
|
pd->wiiu_ng_key_id = otp.wiiUCertBank.rootCertNGKeyId;
|
||||||
|
|
||||||
if (bspGetHardwareVersion(&pd->bsp_rev) != 0) {
|
if (bspGetHardwareVersion(&pd->bsp_rev) != 0) {
|
||||||
pd->bsp_rev = 0;
|
error = "Failed to get BSP revision";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Device certificate
|
||||||
|
// IOSC_GetDeviceCertificate() isn't directly accessible from PPC,
|
||||||
|
// so we'll cheat by reading a known buffer in the kernel. (2.13.01)
|
||||||
|
for (uint32_t i = 0; i < sizeof(pd->device_cert) / 4; i++) {
|
||||||
|
if (Mocha_IOSUKernelRead32(0x04024d40 + (i * 4), ((uint32_t*)&pd->device_cert) + i) != MOCHA_RESULT_SUCCESS) {
|
||||||
|
error = "Failed to read device certificate";
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// System serial number
|
// System serial number
|
||||||
@ -220,7 +255,8 @@ void SubmitScreen::SubmitSystemData()
|
|||||||
pd->mlc.mid_prv = mlcDev->GetMID() << 16 | mlcDev->GetPRV();
|
pd->mlc.mid_prv = mlcDev->GetMID() << 16 | mlcDev->GetPRV();
|
||||||
pd->mlc.numBlocks = mlcDev->GetNumBlocks();
|
pd->mlc.numBlocks = mlcDev->GetNumBlocks();
|
||||||
pd->mlc.blockSize = mlcDev->GetBlockSize();
|
pd->mlc.blockSize = mlcDev->GetBlockSize();
|
||||||
strncpy(pd->mlc.name1, mlcDev->GetName().c_str(), sizeof(pd->mlc.name1) - 1);
|
// NOTE: Not copying pd->mlc.name1 because the eMMC device name
|
||||||
|
// is fully contained within the MLC CID.
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Utils::SHA256(&otp, sizeof(otp), pd->otp_sha256, sizeof(pd->otp_sha256)) != 0) {
|
if (Utils::SHA256(&otp, sizeof(otp), pd->otp_sha256, sizeof(pd->otp_sha256)) != 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user