Minor code and memory initialization fixes

* Explicitly initialize member variables in SELFDecrypter, MemInfo, and
VirtualMemoryBlock
* Zero out memory used for counter/nonce in aes-ctr
* Fix use of a ControlInfo pointer after it is added to an Array via
Array::Move (which makes it an invalid pointer) in
SELFDecrypter::LoadHeaders
This commit is contained in:
nohbdy 2014-03-27 21:50:30 -05:00
parent 64145d7d62
commit d533572ee9
3 changed files with 8 additions and 4 deletions

View File

@ -2,7 +2,7 @@
#include "unself.h"
SELFDecrypter::SELFDecrypter(vfsStream& s)
: self_f(s), key_v()
: self_f(s), key_v(), data_buf_length(0)
{
}
@ -92,9 +92,10 @@ bool SELFDecrypter::LoadHeaders(bool isElf32)
{
ControlInfo* cinfo = new ControlInfo();
cinfo->Load(self_f);
ctrlinfo_arr.Move(cinfo);
i += cinfo->size;
ctrlinfo_arr.Move(cinfo);
}
// Read ELF section headers.
@ -369,6 +370,9 @@ bool SELFDecrypter::DecryptData()
self_f.Seek(meta_shdr[i].data_offset);
self_f.Read(buf, meta_shdr[i].data_size);
// Zero out our ctr nonce
memset(ctr_stream_block, 0, sizeof(ctr_stream_block));
// Perform AES-CTR encryption on the data blocks.
aes_setkey_enc(&aes, data_key, 128);
aes_crypt_ctr(&aes, meta_shdr[i].data_size, &ctr_nc_off, data_iv, ctr_stream_block, buf, buf);

View File

@ -535,7 +535,7 @@ template<> __forceinline u64 MemoryBase::ReverseData<2>(u64 val) { return Revers
template<> __forceinline u64 MemoryBase::ReverseData<4>(u64 val) { return Reverse32(val); }
template<> __forceinline u64 MemoryBase::ReverseData<8>(u64 val) { return Reverse64(val); }
VirtualMemoryBlock::VirtualMemoryBlock() : MemoryBlock()
VirtualMemoryBlock::VirtualMemoryBlock() : MemoryBlock(), m_reserve_size(0)
{
}

View File

@ -13,7 +13,7 @@ struct MemInfo
{
}
MemInfo()
MemInfo() : addr(0), size(0)
{
}
};