mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-03 00:39:14 +00:00
Only extract contents marked in the CIA content index.
This commit is contained in:
+15
-13
@@ -102,23 +102,25 @@ void cia_save(cia_context* ctx, u32 type, u32 flags)
|
|||||||
chunk = (ctr_tmd_contentchunk*)(body->contentinfo + (sizeof(ctr_tmd_contentinfo) * TMD_MAX_CONTENTS));
|
chunk = (ctr_tmd_contentchunk*)(body->contentinfo + (sizeof(ctr_tmd_contentinfo) * TMD_MAX_CONTENTS));
|
||||||
|
|
||||||
for(i = 0; i < getbe16(body->contentcount); i++) {
|
for(i = 0; i < getbe16(body->contentcount); i++) {
|
||||||
sprintf(tmpname, "%s.%04x.%08x", path->pathname, getbe16(chunk->index), getbe32(chunk->id));
|
if(ctx->header.contentindex[i >> 3] & (0x80 >> (i & 7))) {
|
||||||
fprintf(stdout, "Saving content #%04x to %s\n", getbe16(chunk->index), tmpname);
|
sprintf(tmpname, "%s.%04x.%08x", path->pathname, getbe16(chunk->index), getbe32(chunk->id));
|
||||||
|
fprintf(stdout, "Saving content #%04x to %s\n", getbe16(chunk->index), tmpname);
|
||||||
|
|
||||||
contentflags = getbe16(chunk->type);
|
contentflags = getbe16(chunk->type);
|
||||||
docrypto = contentflags & 1 && !(flags & PlainFlag);
|
docrypto = contentflags & 1 && !(flags & PlainFlag);
|
||||||
|
|
||||||
if(docrypto) // Decrypt if needed
|
if(docrypto) // Decrypt if needed
|
||||||
{
|
{
|
||||||
ctx->iv[0] = (getbe16(chunk->index) >> 8) & 0xff;
|
ctx->iv[0] = (getbe16(chunk->index) >> 8) & 0xff;
|
||||||
ctx->iv[1] = getbe16(chunk->index) & 0xff;
|
ctx->iv[1] = getbe16(chunk->index) & 0xff;
|
||||||
|
|
||||||
ctr_init_cbc_decrypt(&ctx->aes, ctx->titlekey, ctx->iv);
|
ctr_init_cbc_decrypt(&ctx->aes, ctx->titlekey, ctx->iv);
|
||||||
|
}
|
||||||
|
|
||||||
|
cia_save_blob(ctx, tmpname, offset, getbe64(chunk->size) & 0xffffffff, docrypto);
|
||||||
|
|
||||||
|
offset += getbe64(chunk->size) & 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
cia_save_blob(ctx, tmpname, offset, getbe64(chunk->size) & 0xffffffff, docrypto);
|
|
||||||
|
|
||||||
offset += getbe64(chunk->size) & 0xffffffff;
|
|
||||||
chunk++;
|
chunk++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Executable
BIN
Binary file not shown.
Reference in New Issue
Block a user