Сейчас на форуме: zds, tyns777, JustLife, 2nd, morgot, Rio, CDK123 (+4 невидимых)

 eXeL@B —› Программирование —› Visual c++
Посл.ответ Сообщение

Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 января 2009 19:09
· Личное сообщение · #1

написал такой код
// L2wmxPatcher.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "Windows.h"

int _tmain(int argc, _TCHAR* argv[])
{
HWND hWnd = FindWindow(0,L"L2WxManager") ;
if(!hWnd)
{
MessageBoxA(0,"L2wmx window not found","Error",0) ;
return 0 ;
}

DWORD proc_id;
byte newdata[] = {213,219,248,221} ;
GetWindowThreadProcessId(hWnd, &proc_id);
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);

if(!proc_id)
{
MessageBoxA(0,"Can't open process","Error",0) ;
return 0 ;
}
if(!WriteProcessMemory(hProcess, (LPVOID)0xA89E4B, &newdata, sizeof(newdata), NULL))
{
MessageBoxA(0,"Can't write process memory","Error",0) ;
}
return 0;
}
(вижуал студио 2008, вин32 консольное приложение)
при выполнении выдает Can't write process memory, но если запускаю под отладчиком в IDA то он нормально выполняется, почему? и ка зделать чтоб он работал по-человечески?




Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 24 января 2009 19:13
· Личное сообщение · #2

if(!proc_id) имхо надо сменить на if(!hProcess)




Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 24 января 2009 19:59 · Поправил: inf1kek
· Личное сообщение · #3

А не проще ли создавать процесс, а потом туда писать?



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 24 января 2009 20:09
· Личное сообщение · #4

VirtualProtect еще никто не отменял



Ранг: 8.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 января 2009 20:41
· Личное сообщение · #5

>VirtualProtect еще никто не отменял
тогда уж VirtualProtectEx



Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 25 января 2009 00:50
· Личное сообщение · #6

if(!proc_id) имхо надо сменить на if(!hProcess) [/i]
да, я ступил. на самом деле получается что прога не может открыть процесс, хотя под идой открывает и патчит нормально. почему не получается открыть процесс?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 25 января 2009 09:55
· Личное сообщение · #7

Видимо, потому, что ида дебажные привилегии берёт. Выпрашивай себе привилегии отладки.



Ранг: 61.4 (постоянный), 1thx
Активность: 0.020
Статус: Участник

Создано: 25 января 2009 15:07
· Личное сообщение · #8

юзать PROCESS_ALL_ACCESS моветон.
да и имхо лучше получать количество записанных байт и сравнивать с размером записываемых.




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 25 января 2009 16:36
· Личное сообщение · #9

_frmn пишет:
тогда уж VirtualProtectEx


Без этого не получится.



Ранг: 3.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 26 января 2009 15:46 · Поправил: SnakeR
· Личное сообщение · #10

Archer пишет:
Видимо, потому, что ида дебажные привилегии берёт. Выпрашивай себе привилегии отладки.

да, зделал, все работает.
NIKOLA пишет:
_frmn пишет:
тогда уж VirtualProtectEx

Без этого не получится.

получилось


 eXeL@B —› Программирование —› Visual c++
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати