예제 #1
0
파일: Form1.cs 프로젝트: XboxChaos/Liberty
        private void btnFix_Click(object sender, EventArgs e)
        {
            if (_stream != null && _stream.CanWrite && streamReader != null && textBox1.Text != "")
            {
                streamWriter = new SaveWriter(new FileStream(textBox1.Text, FileMode.OpenOrCreate));

                // Load the whole stream into memory
                MemoryStream memoryStream = new MemoryStream((int)streamReader.Length);
                memoryStream.SetLength(streamReader.Length);
                streamReader.Seek(0x00, SeekOrigin.Begin);
                streamReader.ReadBlock(memoryStream.GetBuffer(), 0, (int)memoryStream.Length);

                // Hash the contents
                memoryStream.Position = 0x2D25C;
                memoryStream.Write(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, 0, 20);
                byte[] hash = SaveSHA1.ComputeHash(memoryStream.GetBuffer());

                // Write the new digest
                streamWriter.Seek(0x2D25C, SeekOrigin.Begin);
                foreach (byte hashPart in hash)
                {
                    streamWriter.WriteByte(hashPart);
                }

                streamWriter.Close();

                MessageBox.Show("Save resigned.");
            }
        }