Перейти к содержанию

Чтение, запись строки по адресу памяти игры


Рекомендуемые сообщения

Это я и без вас знал, мне нужна реализация, как записывается строка в память, когда я читаю получаются кракозябры, а когда записываю вылеты игры,

Покажите рабочий пример на делфи, если кто то в этом соображает!

Ссылка на комментарий
Поделиться на другие сайты

Это я и без вас знал, мне нужна реализация, как записывается строка в память, когда я читаю получаются кракозябры, а когда записываю вылеты игры,

Покажите рабочий пример на делфи, если кто то в этом соображает!

Точно также как и любой другой тип данных она записывается.

Ссылка на комментарий
Поделиться на другие сайты

Ничего не получается, сидел 6 часов, опух, флоат и 4 байта легко записываются, строки не хотят....

Пишите рабочие примеры, кто знает, либо кидайте ссылки кто это делал на делфи и у кого получилось.Строка юникод.

Ссылка на комментарий
Поделиться на другие сайты

Ничего не получается, сидел 6 часов, опух, флоат и 4 байта легко записываются, строки не хотят....

Пишите рабочие примеры, кто знает, либо кидайте ссылки кто это делал на делфи и у кого получилось.Строка юникод.

Если строка юникод, то 1 символ это 2 байта.

Ссылка на комментарий
Поделиться на другие сайты

просто )) переводишь хек кодировку в дек кодировку и с дек кодировки переводишь в текст .. в делфи если следовать такому методу текст получаеться задом на перед ... тогда тебе нада юзнуть функцию реверса текста .... и вуала все работает .... делал так когда ломал КС выводил хп и ники игроков на форму

Ссылка на комментарий
Поделиться на другие сайты

Поподробнее опиши перевод из дек кодировки в текст и желательно пример, чтения, записи строки в адрес

Не слушай эту ерунду.

Смотри у тебя есть строка в юникоде. Всё что тебе нужно это передать функции WriteProcessMemory указатель на неё и указать размер равный - длина строка * 2

Ссылка на комментарий
Поделиться на другие сайты

Coder, пробовал как ты говоришь, у меня не получилось, что то я не то делаю.Нужен рабочий пример.

Думаю перевести это в дельфи как два пальца об асфальт.


std::wstring str(L"test");
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, ид_процесса);
WriteProcessMemory(hProc, (void*)адрес_куда_пишем, str.c_str(), str.length() * 2, 0);
CloseHandle(hProc);

Ссылка на комментарий
Поделиться на другие сайты

Хэндл процесса должен быть валидным и как минимум с правами VM_READ, а также ansi string не есть unicode string. и как я смотрю память под строку ты нифига не выделяешь.

Ссылка на комментарий
Поделиться на другие сайты

Замечания справедливые, но это был лишь кусок кода....Вот немного исправил:

procedure TForm1.Button25Click(Sender: TObject);
var
hProc: THandle;
prilID,AdressCh,numRead,write:DWORD;
Buffer:PWideChar;
Strwrite:WideString;
addll:integer;
begin
Strwrite:='test';
hProc :=0;
prilID:=GetProcess('a.exe');
hProc := OpenProcess(Process_All_Access, False, prilID);
if hProc <> 0 then
try
addll:=Ulong(GetBaseAddressEXE(prilID,'b.dll'))+$101E03;
ReadProcessMemory(hProc, ptr(addll), @AdressCh, 8, numRead);
label42.Caption:=Inttohex(AdressCh,0);
Buffer:= AllocMem(5);
ReadProcessMemory(hProc, ptr(AdressCh), Buffer, 5, numRead);
TntEdit1.text:=WideCharToString(Buffer);
StringToWideChar(Strwrite, Buffer, 4);
WriteProcessMemory(hProc, ptr(AdressCh), Buffer, 4, write);
finally
CloseHandle(hProc);
FreeMem(Buffer);
end;
end;

Код не работает, что я не так делаю?

Изменено пользователем Coder
Код нужно вставлять с соответсвующим тэгом
Ссылка на комментарий
Поделиться на другие сайты

ReadProcessMemory возвращает вопросы . Все провел, адрес совпадает с адресом найденным в чит енжине. код GetLastError() = 18

http://msdn.microsoft.com/en-us/library/windows/desktop/ms680553(v=vs.85).aspx

ReadProcessMemory возвращает int (BOOL = int, bool = bool).

http://msdn.microsoft.com/en-us/library/ms681382(VS.85).aspx ищи свой код здесь (если это 0x18, то ошибка очевидно - Error bad length, то о чём я тебе и говорил, ты в DWORD читаешь QWORD (8 Байт).

Ссылка на комментарий
Поделиться на другие сайты

в AdressCh адресс, в котором находится строка

Изменил на 4 байта, изменений нет.

Когда первый раз нажимаю кнопку ошибка 1447, второй раз 18.

Вот так сделал,осталась ошибка 18

ReadProcessMemory(hProc, ptr(addll), @AdressCh, {8}4, numberRead);

label43.Caption:=inttostr(GetLastError());

Ссылка на комментарий
Поделиться на другие сайты

А ничего, что в указанном куске кода чтение идет не из процесса, а из какого-то теоретического модуля? Может, стоит подумать над кодом, прежде чем пытаться на его основе делать свой чит?

Ссылка на комментарий
Поделиться на другие сайты

.Чтение как раз должно идти из библиотеки!Я поэтому и спрашиваю.Что не правильно тут.Это не чей то чит это просто инфа взятая из инета, не все как ты пишут по чужим читам....

Ссылка на комментарий
Поделиться на другие сайты

.Чтение как раз должно идти из библиотеки!Я поэтому и спрашиваю.Что не правильно тут.Это не чей то чит это просто инфа взятая из инета, не все как ты пишут по чужим читам....

Error bad length, то о чём я тебе и говорил, ты в DWORD читаешь QWORD (8 Байт).

Ссылка на комментарий
Поделиться на другие сайты

Ты вникай в вопросы а потом пиши!Или тебе пофиг лишь бы что то вставить?Кота поставил все можно?

Ещё раз говорю - ошибка в том, что длина буфера меньше, чем ты читаешь!

У тебя буфер 4 байта, а ты пытаешься читать 8 байт!

Ссылка на комментарий
Поделиться на другие сайты

Кота поставил все можно?

Дружок, дерзить прекрати, и гормоны свои успокой. Это раз. Прежде чем что-то голословно утверждать - трижды подумай. Это два. Про три и четыре я даже говорить ничего не стану, если кому из нашей команды будет интересно, скажут за меня, ибо я не привык хвастаться. На этом оффтоп закончим.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.