whoknows Posted October 23, 2023 Posted October 23, 2023 more - flerka.github.io/personal-blog/2022-06-21-ahead-of-time-compilation/ well explained by @th3pt python-Split dotNET AOT native compiled files-th3pt.rar 2
whoknows Posted October 23, 2023 Author Posted October 23, 2023 C# implementation { public Form1() { InitializeComponent(); } #region TextBox DragDrop private void textBox1_DragDrop(object sender, DragEventArgs e) { string[] FileList = (string[])e.Data.GetData(DataFormats.FileDrop, false); if (FileList[0].ToLower().EndsWith(".dll") || FileList[0].ToLower().EndsWith(".exe")) textBox1.Text = FileList[0]; } private void textBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; } #endregion private void btn_Click(object sender, EventArgs e) { if (!File.Exists(textBox1.Text)) { MessageBox.Show("File does not exist"); return; } string rootDir = Path.GetDirectoryName(textBox1.Text); string rootDirExtracted = Path.Combine(rootDir, "_extracted"); byte[] mz = new byte[] { 77, 90, 144, 0, 3 }; //4D5A900003 List<byte[]> d = SplitByteArray(File.ReadAllBytes(textBox1.Text), mz); int j = 0; foreach (byte[] item in d) { if (item.Length == 0) continue; string fl = string.Format("{0}\\part{1}.exe", rootDirExtracted, j.ToString()); Directory.CreateDirectory(rootDirExtracted); //dump file File.WriteAllBytes(fl, mz.Concat(item).ToArray()); //read original filename from PE properties string originalFileName = System.Diagnostics.FileVersionInfo.GetVersionInfo(fl).OriginalFilename; if (!string.IsNullOrEmpty(originalFileName)) { string fullPathOriginalFileName = Path.Combine(rootDirExtracted, originalFileName); if (File.Exists(fullPathOriginalFileName)) fullPathOriginalFileName = Path.Combine(rootDirExtracted, string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(originalFileName), j, Path.GetExtension(originalFileName))); File.Move(fl, fullPathOriginalFileName); } j++; } } /// private static List<byte[]> SplitByteArray(byte[] source, byte[] split) { List<byte[]> segments = new List<byte[]>(); int startIndex = 0; while (startIndex < source.Length) { int foundIndex = FindSplitIndex(source, startIndex, split); if (foundIndex == -1) { // If the split sequence is not found, add the remaining bytes. foundIndex = source.Length; } int length = foundIndex - startIndex; byte[] segment = new byte[length]; Buffer.BlockCopy(source, startIndex, segment, 0, length); segments.Add(segment); startIndex = foundIndex + split.Length; } return segments; } private static int FindSplitIndex(byte[] source, int startIndex, byte[] split) { for (int i = startIndex; i <= source.Length - split.Length; i++) { bool found = true; for (int j = 0; j < split.Length; j++) { if (source[i + j] != split[j]) { found = false; break; } } if (found) { return i; } } return -1; // Split not found } } 1
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now