diff --git a/DotNetCTFDumper/GUI/ErrorLogBox.cs b/DotNetCTFDumper/GUI/ErrorLogBox.cs index cf3e8f0..490078b 100644 --- a/DotNetCTFDumper/GUI/ErrorLogBox.cs +++ b/DotNetCTFDumper/GUI/ErrorLogBox.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.IO; using System.Windows.Forms; using System.Windows.Forms.VisualStyles; +using DotNetCTFDumper.Utils; namespace DotNetCTFDumper.GUI { @@ -21,8 +22,9 @@ namespace DotNetCTFDumper.GUI if (filename == null) filename = "UnknownFile"; textBox1.Text += $" {(filename)} : {sf.GetMethod()}: Line {sf.GetFileLineNumber()}\r\n\r\n"; - } + Logger.Log("ERROR: ",false,ConsoleColor.White,false); + Logger.Log(textBox1.Text,false,ConsoleColor.White,false); //Console.ReadKey(); } diff --git a/DotNetCTFDumper/GUI/MainConsole.Designer.cs b/DotNetCTFDumper/GUI/MainConsole.Designer.cs index 77d8ad5..f217fe4 100644 --- a/DotNetCTFDumper/GUI/MainConsole.Designer.cs +++ b/DotNetCTFDumper/GUI/MainConsole.Designer.cs @@ -32,25 +32,21 @@ namespace DotNetCTFDumper.GUI private void InitializeComponent() { System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainConsole)); - this.textBox1 = new System.Windows.Forms.TextBox(); + this.textBox1 = new System.Windows.Forms.RichTextBox(); this.SuspendLayout(); // // textBox1 // - this.textBox1.AllowDrop = true; this.textBox1.BackColor = System.Drawing.Color.Black; this.textBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.textBox1.ForeColor = System.Drawing.Color.Lime; this.textBox1.Location = new System.Drawing.Point(0, 0); - this.textBox1.Margin = new System.Windows.Forms.Padding(4, 15, 4, 3); - this.textBox1.MaxLength = 32767000; - this.textBox1.Multiline = true; this.textBox1.Name = "textBox1"; this.textBox1.ReadOnly = true; - this.textBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.textBox1.Size = new System.Drawing.Size(496, 592); this.textBox1.TabIndex = 0; + this.textBox1.Text = ""; this.textBox1.WordWrap = false; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); // // MainConsole // @@ -65,10 +61,9 @@ namespace DotNetCTFDumper.GUI this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Console"; this.ResumeLayout(false); - this.PerformLayout(); } - private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.RichTextBox textBox1; #endregion } diff --git a/DotNetCTFDumper/GUI/MainConsole.cs b/DotNetCTFDumper/GUI/MainConsole.cs index 3395253..c45e391 100644 --- a/DotNetCTFDumper/GUI/MainConsole.cs +++ b/DotNetCTFDumper/GUI/MainConsole.cs @@ -1,5 +1,6 @@ using System; using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; using System.Windows.Forms; namespace DotNetCTFDumper.GUI @@ -25,5 +26,64 @@ namespace DotNetCTFDumper.GUI ? $"[{date.Hour,2}:{date.Minute,2}:{date.Second,2}:{date.Millisecond,3}] {msg}\r\n" : "\r\n"); } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + setLineFormat(1,1); + textBox1.SelectionStart = textBox1.Text.Length; + // scroll it automatically + textBox1.ScrollToCaret(); + } + + [DllImport("user32", CharSet = CharSet.Auto)] + private static extern IntPtr SendMessage(HandleRef hWnd, int msg, int wParam, ref PARAFORMAT lParam); + const int PFM_SPACEBEFORE = 0x00000040; + const int PFM_SPACEAFTER = 0x00000080; + const int PFM_LINESPACING = 0x00000100; + const int SCF_SELECTION = 1; + const int EM_SETPARAFORMAT = 1095; + private void setLineFormat(byte rule, int space) + { + PARAFORMAT fmt = new PARAFORMAT(); + fmt.cbSize = Marshal.SizeOf(fmt); + fmt.dwMask = PFM_LINESPACING; + fmt.dyLineSpacing = space; + fmt.bLineSpacingRule = rule; + textBox1.SelectAll(); + SendMessage( new HandleRef( textBox1, textBox1.Handle ), + EM_SETPARAFORMAT, + SCF_SELECTION, + ref fmt + ); + } + public struct PARAFORMAT + { + public int cbSize; + public uint dwMask; + public short wNumbering; + public short wReserved; + public int dxStartIndent; + public int dxRightIndent; + public int dxOffset; + public short wAlignment; + public short cTabCount; + [MarshalAs( UnmanagedType.ByValArray, SizeConst = 32 )] + public int[] rgxTabs; + // PARAFORMAT2 from here onwards + public int dySpaceBefore; + public int dySpaceAfter; + public int dyLineSpacing; + public short sStyle; + public byte bLineSpacingRule; + public byte bOutlineLevel; + public short wShadingWeight; + public short wShadingStyle; + public short wNumberingStart; + public short wNumberingStyle; + public short wNumberingTab; + public short wBorderSpace; + public short wBorderWidth; + public short wBorders; + } } } \ No newline at end of file diff --git a/DotNetCTFDumper/GUI/MainForm.cs b/DotNetCTFDumper/GUI/MainForm.cs index c3c377c..e240043 100644 --- a/DotNetCTFDumper/GUI/MainForm.cs +++ b/DotNetCTFDumper/GUI/MainForm.cs @@ -547,7 +547,7 @@ namespace DotNetCTFDumper.GUI try { - var previewKey = Decryption.MakeKeyFromBytes(rawData, (byte) int.Parse((charBox.Text))); + var previewKey = Decryption.MakeKeyFromComb(rawData, (byte) int.Parse((charBox.Text))); hexBox1.ByteProvider = new DynamicByteProvider(previewKey); } @@ -769,7 +769,9 @@ namespace DotNetCTFDumper.GUI Thread.Sleep((int) (delay*1500)); } _isAnimRunning = false; - Thread.CurrentThread.Abort(); + try {Thread.CurrentThread.Abort();} + catch {} + } else { @@ -785,7 +787,7 @@ namespace DotNetCTFDumper.GUI { _isAnimRunning = false; _breakAnim = false; - Thread.CurrentThread.Abort(); + if(Thread.CurrentThread.IsAlive) Thread.CurrentThread.Abort(); break; } @@ -828,10 +830,7 @@ namespace DotNetCTFDumper.GUI PluginAPI.PluginAPI.ActivatePlugin(PluginAPI.PluginAPI.Plugins[pluginsList.SelectedIndex]); } - public void SoundTest() - { - - } + public void InitSounds() { diff --git a/DotNetCTFDumper/MMFParser/EXE/ChunkList.cs b/DotNetCTFDumper/MMFParser/EXE/ChunkList.cs index be09e7f..8159dc7 100644 --- a/DotNetCTFDumper/MMFParser/EXE/ChunkList.cs +++ b/DotNetCTFDumper/MMFParser/EXE/ChunkList.cs @@ -14,18 +14,18 @@ namespace DotNetCTFDumper.MMFParser.EXE public bool Verbose = false; public List Frames = new List(); - public void Read(ByteReader exeReader) + public void Read(ByteReader reader) { Chunks.Clear(); while (true) { Chunk chunk = new Chunk(Chunks.Count, this); chunk.Verbose = Verbose; - chunk.Read(exeReader); + chunk.Read(reader); chunk.Loader = LoadChunk(chunk); Chunks.Add(chunk); if (chunk.Id == 8750) chunk.BuildKey(); - if (exeReader.Tell() >= exeReader.Size()) break; + if (reader.Tell() >= reader.Size()) break; if (chunk.Id == 32639) break; //LAST chunkID } } @@ -41,7 +41,7 @@ namespace DotNetCTFDumper.MMFParser.EXE public byte[] ChunkData; public byte[] RawData; public ChunkFlags Flag; - public int Size = 0; + public int Size; public int DecompressedSize = -1; public bool Verbose = false; @@ -51,7 +51,7 @@ namespace DotNetCTFDumper.MMFParser.EXE _chunkList = actualChunkList; } - public ByteReader get_reader() + public ByteReader GetReader() { return new ByteReader(ChunkData); } @@ -99,7 +99,7 @@ namespace DotNetCTFDumper.MMFParser.EXE } } - + public void Print(bool extented) { if(extented) diff --git a/DotNetCTFDumper/MMFParser/EXE/DataLoader.cs b/DotNetCTFDumper/MMFParser/EXE/DataLoader.cs index 4bcd471..139d013 100644 --- a/DotNetCTFDumper/MMFParser/EXE/DataLoader.cs +++ b/DotNetCTFDumper/MMFParser/EXE/DataLoader.cs @@ -16,7 +16,7 @@ namespace DotNetCTFDumper.MMFParser.EXE protected DataLoader(Chunk chunk) { this._chunk = chunk; - this.Reader = chunk.get_reader(); + this.Reader = chunk.GetReader(); } public abstract void Read(); diff --git a/DotNetCTFDumper/MMFParser/EXE/Loaders/ChunkLoader.cs b/DotNetCTFDumper/MMFParser/EXE/Loaders/ChunkLoader.cs index cd3f4cc..4489244 100644 --- a/DotNetCTFDumper/MMFParser/EXE/Loaders/ChunkLoader.cs +++ b/DotNetCTFDumper/MMFParser/EXE/Loaders/ChunkLoader.cs @@ -20,7 +20,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders protected ChunkLoader(Chunk chunk) { this.Chunk = chunk; - this.Reader = chunk.get_reader(); + this.Reader = chunk.GetReader(); } diff --git a/DotNetCTFDumper/MMFParser/EXE/Loaders/Frame.cs b/DotNetCTFDumper/MMFParser/EXE/Loaders/Frame.cs index f32f176..a2fb98b 100644 --- a/DotNetCTFDumper/MMFParser/EXE/Loaders/Frame.cs +++ b/DotNetCTFDumper/MMFParser/EXE/Loaders/Frame.cs @@ -92,8 +92,7 @@ namespace DotNetCTFDumper.MMFParser.EXE.Loaders var frameReader = new ByteReader(Chunk.ChunkData); Chunks = new ChunkList(); - - Chunks.Verbose = false; + Chunks.Read(frameReader); var name = Chunks.GetChunk(); if (name != null) //Just to be sure diff --git a/DotNetCTFDumper/MMFParser/EXE/Loaders/ObjectNames.cs b/DotNetCTFDumper/MMFParser/EXE/Loaders/ObjectNames.cs index e77bf4a..1764d7d 100644 --- a/DotNetCTFDumper/MMFParser/EXE/Loaders/ObjectNames.cs +++ b/DotNetCTFDumper/MMFParser/EXE/Loaders/ObjectNames.cs @@ -4,7 +4,7 @@ using static DotNetCTFDumper.MMFParser.EXE.ChunkList; namespace DotNetCTFDumper.MMFParser.EXE.Loaders { - class ObjectNames : ChunkLoader//Fucking trash + class ObjectNames : ChunkLoader//2.5+ trash { public override void Print(bool ext) { diff --git a/DotNetCTFDumper/Utils/BitDict.cs b/DotNetCTFDumper/Utils/BitDict.cs index 45a56b1..26560ef 100644 --- a/DotNetCTFDumper/Utils/BitDict.cs +++ b/DotNetCTFDumper/Utils/BitDict.cs @@ -46,7 +46,7 @@ namespace DotNetCTFDumper.Utils public static string ToDebugString(IDictionary dictionary) { - return string.Join(";", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()); + return string.Join(";", dictionary.Select(kv => kv.Key + "=" + kv.Value).ToArray()); } public override string ToString() diff --git a/DotNetCTFDumper/Utils/Decompressor.cs b/DotNetCTFDumper/Utils/Decompressor.cs index d36416d..8f1cb6c 100644 --- a/DotNetCTFDumper/Utils/Decompressor.cs +++ b/DotNetCTFDumper/Utils/Decompressor.cs @@ -18,10 +18,8 @@ namespace DotNetCTFDumper.Utils public static ByteReader DecompressAsReader(ByteReader exeReader, out int decompressed) { - Int32 decompSize = exeReader.ReadInt32(); - Int32 compSize = exeReader.ReadInt32(); - decompressed = decompSize; - return new ByteReader(decompress_block(exeReader, compSize, decompSize)); + + return new ByteReader(Decompress(exeReader, out decompressed)); } public static byte[] decompress_block(ByteReader reader, int size, int decompSize) diff --git a/DotNetCTFDumper/Utils/Decryption.cs b/DotNetCTFDumper/Utils/Decryption.cs index e57524e..f875136 100644 --- a/DotNetCTFDumper/Utils/Decryption.cs +++ b/DotNetCTFDumper/Utils/Decryption.cs @@ -6,7 +6,7 @@ namespace DotNetCTFDumper.Utils { static class Decryption { - private static byte[] DecryptionKey; + private static byte[] _decryptionKey; public static byte MagicChar = 54; public static void MakeKey(string data1, string data2, string data3) @@ -25,17 +25,14 @@ namespace DotNetCTFDumper.Utils Marshal.FreeHGlobal(rawKeyPtr); - DecryptionKey = key; - Logger.Log($"First 16-Bytes of key: {DecryptionKey.GetHex(16)}", true, ConsoleColor.Yellow); - File.WriteAllBytes($"{Settings.DumpPath}\\key.bin", DecryptionKey); + _decryptionKey = key; + Logger.Log($"First 16-Bytes of key: {_decryptionKey.GetHex(16)}", true, ConsoleColor.Yellow); + File.WriteAllBytes($"{Settings.DumpPath}\\key.bin", _decryptionKey); } - public static byte[] MakeKeyFromBytes(string data, byte magicChar = 54) + public static byte[] MakeKeyFromComb(string data, byte magicChar = 54) { var rawKeyPtr = Marshal.StringToHGlobalAnsi(data); - //var bytes = Encoding.UTF8.GetBytes(data); - //var rawKeyPtr = Marshal.AllocHGlobal(bytes.Length); - //Marshal.Copy(bytes,0,rawKeyPtr,bytes.Length); var ptr = Decryption.make_key_combined(rawKeyPtr, magicChar); byte[] key = new byte[256]; @@ -73,8 +70,8 @@ namespace DotNetCTFDumper.Utils IntPtr inputChunkPtr = Marshal.AllocHGlobal(chunkData.Length); Marshal.Copy(chunkData, 0, inputChunkPtr, chunkData.Length); - IntPtr keyPtr = Marshal.AllocHGlobal(DecryptionKey.Length); - Marshal.Copy(DecryptionKey, 0, keyPtr, DecryptionKey.Length); + IntPtr keyPtr = Marshal.AllocHGlobal(_decryptionKey.Length); + Marshal.Copy(_decryptionKey, 0, keyPtr, _decryptionKey.Length); var outputChunkPtr = decode_chunk(inputChunkPtr, chunkSize, MagicChar, keyPtr);