Zygisk-Il2CppDumper icon indicating copy to clipboard operation
Zygisk-Il2CppDumper copied to clipboard

傳回byte[]的max_length不準確 導致讀取時崩潰

Open benwong01f611 opened this issue 1 year ago • 0 comments

遊戲內有個解密函數傳回byte[],已經成功調用,但寫出到檔案時就崩潰了。程式如下:


typedef Il2CppArray *(*GetBytes)(Il2CppString *);

// method為解蜜函數
auto ptr = ((GetBytes) method->methodPointer)(
    il2cpp_string_new("/path/to/encrypted/file")
);

auto outPath = "/path/to/write/out";
std::ofstream outStream(outPath, std::ios::binary);

auto rawData = ptr->vector;
for (int j = 0; j < ptr->max_length; ++j) {
	LOGD("Writing chunk...");
	outStream.write(reinterpret_cast<char*>(&rawData[j]), 8);
	LOGD("Chunk complete");
}
LOGD("Write complete");
outStream.close();
LOGD("Stream close");

~~去到某個位置顯示Writing chunk...後就崩了,我推算是因為寫出的長度為8,但資料長度並不能整除8,所以導致崩潰。會有甚麼方法能得知byte[]正確的長度嗎?~~

~~而且部分vector內有很多\x00,導致寫出的檔案末段也有很多\x00,但用AssetStudio解包是沒有問題的。~~

=====更新===== 長度為879347的bytes到200000左右就崩了,出現SIGSERV,所以應該是ptr->max_length不準確

benwong01f611 avatar Jul 06 '23 03:07 benwong01f611