summaryrefslogtreecommitdiff
path: root/Source/Core/DiscIO/Src/VolumeCreator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/DiscIO/Src/VolumeCreator.cpp')
-rw-r--r--Source/Core/DiscIO/Src/VolumeCreator.cpp34
1 files changed, 32 insertions, 2 deletions
diff --git a/Source/Core/DiscIO/Src/VolumeCreator.cpp b/Source/Core/DiscIO/Src/VolumeCreator.cpp
index 862cb028bf..69b846b86b 100644
--- a/Source/Core/DiscIO/Src/VolumeCreator.cpp
+++ b/Source/Core/DiscIO/Src/VolumeCreator.cpp
@@ -127,8 +127,38 @@ IVolume* CreateVolumeFromCryptedWiiImage(IBlobReader& _rReader, u32 _VolumeType)
FILE* pT = fopen(WII_MASTERKEY_FILE, "rb");
if (pT == NULL)
{
- PanicAlert("Can't open " WII_MASTERKEY_FILE);
- return NULL;
+ PanicAlert("Can't open '" WII_MASTERKEY_FILE "'.\n If you know the key, now it's the time to paste it into '" WII_MASTERKEY_FILE_HEX "' before pressing [OK].");
+
+ pT = fopen(WII_MASTERKEY_FILE_HEX, "r");
+ if(pT==NULL)
+ return NULL;
+
+ static char hexkey[32];
+ if(fread(hexkey,1,32,pT)<32)
+ {
+ fclose(pT);
+ return NULL;
+ }
+ fclose(pT);
+
+ static char binkey[16];
+ char *t=hexkey;
+ for(int i=0;i<16;i++)
+ {
+ char h[3]={*(t++),*(t++),0};
+ binkey[i] = strtol(h,NULL,16);
+ }
+
+ pT = fopen(WII_MASTERKEY_FILE, "wb");
+ if(pT==NULL)
+ return NULL;
+
+ fwrite(binkey,16,1,pT);
+ fclose(pT);
+
+ pT = fopen(WII_MASTERKEY_FILE, "rb");
+ if(pT==NULL)
+ return NULL;
}
fread(g_MasterKey, 16, 1, pT);