Сейчас на форуме: Rio (+5 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Доступ к памяти war3 |
Посл.ответ | Сообщение |
|
Создано: 29 мая 2008 16:45 · Личное сообщение · #1 Всем привет! я пробовал (из с#) получить доступ к памяти процесса игры WarCraft3, но у меня ничего не получилось, пишет доступ запрещен, я даже не могу получить список использованных dll процессом не могу получить заголовок процесса с помощью winapi функции kernel32.dll - OpenProccess() Кто-нибудь может что посоветовать? ![]() ![]() |
|
Создано: 30 мая 2008 10:57 · Личное сообщение · #2 |
|
Создано: 31 мая 2008 00:59 · Личное сообщение · #3 ..... Process[] wc3 = Process.GetProcessesByName("war3"); int m_hProcess = OpenProcess(0x001F0FFF, false, wc3[0].Id); ..... ..... [DllImport("kernel32")] static extern int OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId); в m_hProcess должен быть записан хэдр процесса с блокнотом и остальными программами получается, а вот с вариком нет есть программы, которые, я думаю, могут получать доступ (вот ссылка _http://www.pingme.ru/namespoofer.zip, эта программка может поменять ник в игре) ![]() |
|
Создано: 31 мая 2008 11:59 · Личное сообщение · #4 |
|
Создано: 31 мая 2008 16:08 · Личное сообщение · #5 |
|
Создано: 31 мая 2008 17:15 · Поправил: Stack · Личное сообщение · #6 Xao пишет: а ты делал что-нибудь подобное? Пытался трейнер сделать. Если что можешь погуглить на тему WriteProcessMemory и ReadProcessMemory. Xao пишет: но интересно, а как прочитать память, не создавая процесс Ну еще GetWindowThreadProcessId+OpenProcess(PROCESS_ALL_ACCESS,False,id процесса который ты получил при помощи первой функции); Ну еще можешь снимок процессов создать и сравнить с каждым если твой то опять openProcess Вот помойму ошибка Xao пишет: Process.GetProcessesByName("war3") - может war3.exe. ----- Md5 fcbb6c9c9a5029b24d70f2d67c7cca74 ![]() |
|
Создано: 01 июня 2008 23:28 · Поправил: Xao · Личное сообщение · #7 Xao пишет: Process[] wc3 = Process.GetProcessesByName("war3"); int m_hProcess = OpenProcess(0x001F0FFF, false, wc3[0].Id); это правильно, он выдает мне такой же ИД процесса (wc3[0].Id), какой и при CreateProcess, я тут нашел, что надо получить token для привелегий (_http://support.microsoft.com/?scid=kb;en-us;131065), только потом можно использовать OpenProcess Ну доступ к памяти получил ![]() ![]() я тут кстати пробовал запускать варик с особыми параметрами, типа не полноэкранный режим, а в окне, но ничего не получилось, за это, кстати, отвечает структура STARTUPINFO const uint NORMAL_PRIORITY_CLASS = 0x0020; bool retValue; string Application = @"D:\Игры\Warcraft III\war3.exe"; string CommandLine = @"C:\boot.ini"; PROCESS_INFORMATION pInfo = new PROCESS_INFORMATION(); STARTUPINFO sInfo = new STARTUPINFO(); SECURITY_ATTRIBUTES pSec = new SECURITY_ATTRIBUTES(); SECURITY_ATTRIBUTES tSec = new SECURITY_ATTRIBUTES(); pSec.nLength = Marshal.SizeOf(pSec); tSec.nLength = Marshal.SizeOf(tSec); sInfo.dwFlags = 0x00000001; //использование wShowWindow sInfo.wShowWindow = 6; //режим окна - minimized retValue = CreateProcess(Application, CommandLine, ref pSec, ref tSec, false, NORMAL_PRIORITY_CLASS, IntPtr.Zero, null, ref sInfo, out pInfo); ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Доступ к памяти war3 |