Как найти все переменные, которые использует exe-файл?
Как найти все переменные, которые использует exe-файл?
Я имею в виду, можно ли оштрафовать Адрес, Тип или имя переменной ?
У меня есть exe-файл, который не знает, на каком языке написан.
Но когда вы запустите его, процесс начнет работать, и переменные будут инициализированы в оперативной памяти.
Я умею читать по памяти
Я знаю, что переменные (адрес,тип,имя) тоже находятся в памяти.
Но я не знаю, что такое байты для какой переменной.
Вот как я читаю память о процессе.
Что я уже пробовал:
const int PROCESS_WM_READ = 0x0010; const int PROCESS_ALL_ACCESS = 0x1F0FFF; [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll")] public static extern bool ReadProcessMemory(int hProcess, long lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesRead); [DllImport("kernel32.dll", SetLastError = true)] static extern bool WriteProcessMemory(int hProcess, long lpBaseAddress, byte[] lpBuffer, int dwSize, ref int lpNumberOfBytesWritten); public Process process; public IntPtr processHandle; void Read() { process = Process.GetProcessesByName("ProcessesName")[0]; processHandle = OpenProcess(PROCESS_WM_READ, false, process.Id); IntPtr startOffset = process.MainModule.BaseAddress; IntPtr endOffset = IntPtr.Add(startOffset, process.MainModule.ModuleMemorySize); string startOffsetStr = startOffset.ToString("X"); string endOffsetStr = endOffset.ToString("X"); int start = int.Parse(startOffsetStr, NumberStyles.HexNumber); int end = int.Parse(endOffsetStr, NumberStyles.HexNumber); int totalBytes = end - start; int bytesRead = 0; byte[] buffer = new byte[totalBytes]; ReadProcessMemory((int)processHandle, start, buffer, buffer.Length, ref bytesRead); string result = ByteArrayToHexString(buffer); File.WriteAllText("C:\\result.txt", result); } public static string ByteArrayToHexString(byte[] baytes) { StringBuilder hex = new StringBuilder(baytes.Length * 2); for (int i = baytes.Length - 1; i >= 0; i--) { hex.AppendFormat("{0:x2}", baytes[i]); } return hex.ToString(); }
Заранее благодарю вас.
johannesnestler
"У меня есть exe-файл, который не знает, на каком языке написан"... [- да и вы не узнаете (может быть, догадываетесь, хотя и с большим количеством знаний) - https://en.wikipedia.org/wiki/.exe ]
"Я знаю,что переменные (адрес,тип, имя) тоже находятся в памяти". ... [ нет, это не так - это просто адрес]
Эти предложения показывают мне, что вы должны узнать много, прежде чем вы сможете взломать процессы или реинжинирировать их.
Может быть, вы скажете нам свою конечную цель - может быть, есть лучший способ ее достичь?