Гость Killer23 Опубликовано 5 мая, 2013 Поделиться Опубликовано 5 мая, 2013 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.Runtime.InteropServices;[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4]namespace WindowsFormsApplication1{ public partial class Form1 : Form { [DllImport("kernel32.dll")] public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId); [DllImport("kernel32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool CloseHandle(IntPtr hObject); [DllImport("kernel32.dll", SetLastError = true)] static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten); [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead); [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead); [DllImport("kernel32.dll", SetLastError = true)] static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead); public int pID; public Form1() { InitializeComponent(); GetProcess("TombRaider"); FindSignature();[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] } public void GetProcess(string name) { var plist = Process.GetProcesses(); if (plist.Count() != 0) { foreach (var process in plist) { if (process.ProcessName == name) { pID = process.Id; MessageBox.Show("Процесс найден!"); return; } } } return; }[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] public int FindSignature() { var moduleName = "TombRaider.exe"; var startAddress = 0; var sizeToAllocate = 0; var pattern = new int[] {0x3B, 0x51, 0x0C, 0x7D, 0x77, 0x53, 0x8B, 0x5D, 0x0C, 0x3B, 0xDF, 0x7C, 0x6E, 0x3B, 0x59, 0x08, 0x7D, 0x69, 0x8B, 0xB8, 0xD0, 0x00, 0x00, 0x00, 0x8B, 0x80, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0xAF}; if (pID != 0) { foreach (var p in Process.GetProcesses()) { if (p.Id == pID) { foreach (ProcessModule m in p.Modules) { if (m.ModuleName == moduleName) { startAddress = (int)m.BaseAddress; sizeToAllocate = m.ModuleMemorySize; break; } } } } var handle = OpenProcess(0x001F0FFF, false, pID); if (handle != IntPtr.Zero) { byte[] buffer = new byte[sizeToAllocate]; int bytesread; ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread); CloseHandle(handle); var counter = 0; if (pattern.Length <= buffer.Length) { for (var i = 0; i < buffer.Length; i++) { if (buffer[i] == pattern[0] | pattern[0] == -1) { for (var j = 0; j < pattern.Length; j++) { if (buffer[i + j] == pattern[j] | pattern[j] == -1) { counter++; if (counter == pattern.Length) { var result = i + startAddress; return (int)result; } } else { counter = 0; } } } } } } } return -1; }[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] public void WriteBytes(int address, byte[] bytes) { var dummy = new UIntPtr(); if (pID != 0) { var handle = OpenProcess(0x001F0FFF, false, pID); WriteProcessMemory(handle, (IntPtr)address, bytes, (uint)bytes.Length, out dummy); CloseHandle(handle); } }[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] private void button1_Click(object sender, EventArgs e) { var myFoundAddress = FindSignature(); //Вызов возвратит тебе или -1 (если не нашёл), или адрес (если нашёл) if (myFoundAddress != -1)//Проверяем, что адрес найден { //var handle = OpenProcess(All, false, pID);//Получаем хендл процесса с правами на запись в память //if(handle!=0)//Проверяем, что хэндл получен[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] byte[] myValues = new byte[] { 0x90, 0x90, 0x90 }; var size = 3; var dummy = new UIntPtr(); var handle = OpenProcess(0x1F0FFF, false, pID); WriteProcessMemory(handle, (IntPtr)myFoundAddress, myValues, (uint)size, out dummy);//Пишем 0) CloseHandle(handle); //Закрываем хэндл[/size][/font][/color][color=#282828][font=helvetica, arial, sans-serif][size=4] } } }}посмотрите пожалуйста что тут не так??? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 6 мая, 2013 Поделиться Опубликовано 6 мая, 2013 Для начала очисти код от лишних бб-кодов (скорее всего, они попали сюда и в твой код из-за копипасты). Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Killer23 Опубликовано 6 мая, 2013 Поделиться Опубликовано 6 мая, 2013 Для начала очисти код от лишних бб-кодов (скорее всего, они попали сюда и в твой код из-за копипасты).они сюда попали после того как я вставил кодusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Diagnostics;using System.Runtime.InteropServices;namespace WindowsFormsApplication1{public partial class Form1 : Form{[DllImport("kernel32.dll")]public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);[DllImport("kernel32.dll", SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]static extern bool CloseHandle(IntPtr hObject);[DllImport("kernel32.dll", SetLastError = true)]static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);[DllImport("kernel32.dll", SetLastError = true)]static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);[DllImport("kernel32.dll", SetLastError = true)]static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead);[DllImport("kernel32.dll", SetLastError = true)]static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead);public int pID;public Form1(){InitializeComponent();GetProcess("TombRaider");FindSignature();}public void GetProcess(string name){var plist = Process.GetProcesses();if (plist.Count() != 0){foreach (var process in plist){if (process.ProcessName == name){pID = process.Id;MessageBox.Show("Процесс найден!");return;}}}return;}public int FindSignature(){var moduleName = "TombRaider.exe";var startAddress = 0;var sizeToAllocate = 0;var pattern = new int[] {0x3B, 0x51, 0x0C, 0x7D, 0x77, 0x53, 0x8B, 0x5D, 0x0C, 0x3B, 0xDF, 0x7C, 0x6E, 0x3B, 0x59, 0x08, 0x7D, 0x69, 0x8B, 0xB8, 0xD0, 0x00, 0x00, 0x00, 0x8B, 0x80, 0xCC, 0x00, 0x00, 0x00, 0x0F, 0xAF};if (pID != 0){foreach (var p in Process.GetProcesses()){if (p.Id == pID){foreach (ProcessModule m in p.Modules){if (m.ModuleName == moduleName){startAddress = (int)m.BaseAddress;sizeToAllocate = m.ModuleMemorySize;break;}}}}var handle = OpenProcess(0x001F0FFF, false, pID);if (handle != IntPtr.Zero){byte[] buffer = new byte[sizeToAllocate];int bytesread;ReadProcessMemory(handle, (IntPtr)startAddress, buffer, sizeToAllocate, out bytesread);CloseHandle(handle);var counter = 0;if (pattern.Length <= buffer.Length){for (var i = 0; i < buffer.Length; i++){if (buffer[i] == pattern[0] | pattern[0] == -1){for (var j = 0; j < pattern.Length; j++){if (buffer[i + j] == pattern[j] | pattern[j] == -1){counter++;if (counter == pattern.Length){var result = i + startAddress;return (int)result;}}else{counter = 0;}}}}}}}return -1;}public void WriteBytes(int address, byte[] bytes){var dummy = new UIntPtr();if (pID != 0){var handle = OpenProcess(0x001F0FFF, false, pID);WriteProcessMemory(handle, (IntPtr)address, bytes, (uint)bytes.Length, out dummy);CloseHandle(handle);}}private void button1_Click(object sender, EventArgs e){var myFoundAddress = FindSignature(); //Вызов возвратит тебе или -1 (если не нашёл), или адрес (если нашёл)if (myFoundAddress != -1)//Проверяем, что адрес найден{//var handle = OpenProcess(All, false, pID);//Получаем хендл процесса с правами на запись в память//if(handle!=0)//Проверяем, что хэндл полученbyte[] myValues = new byte[] { 0x90, 0x90, 0x90 };var size = 3;var dummy = new UIntPtr();var handle = OpenProcess(0x1F0FFF, false, pID);WriteProcessMemory(handle, (IntPtr)myFoundAddress, myValues, (uint)size, out dummy);//Пишем 0)CloseHandle(handle); //Закрываем хэндл}}} Ссылка на комментарий Поделиться на другие сайты Поделиться
Laziz Опубликовано 6 мая, 2013 Поделиться Опубликовано 6 мая, 2013 Все правильно, все работает! Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость O(_eg Опубликовано 7 мая, 2013 Поделиться Опубликовано 7 мая, 2013 В конце кода добавь скобку "}". Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость O(_eg Опубликовано 7 мая, 2013 Поделиться Опубликовано 7 мая, 2013 http://i.shotnes.com/a/07/fl3m1cpx.sn0_5188e6e7e211a.png. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения