Цитата:
Сообщение от Paladin
Что у тебя не работает? У тебя адрес в переменную ptr функция возвращает. Лучше её конечно обозвать просто как p, потому что ptr в delphi - это название функции преобразования значения в указатель.
Тебе вывести надо или что? Или возвращает Nil? Если вывести - то:
var:
s: string;
begin
s := IntToHex(DWord(ptr), 8);
ShowMessage(s);
end;
Добавлено через 2 минуты
MEM_RESERVE, PAGE_READONLY
Атрибуты тоже неверные. Вместо MEM RESERVE советую MEM_COMMIT. А насчет PAGE_READONLY - ты же туда потом писать будешь, так почему READONLY? PAGE_EXECUTE_READWRITE надо!!
Если копируешь откуда-то код - то хотя бы гугли описание функций:
|
И Правда большое спасибо что указал на ошибки
кому интересно вот хоть и сырой ну робочий код :
Код:
begin
WindowName := FindWindow(nil,'Form1');
If WindowName = 0 then
begin
MessageDlg('Игра должна быть запущена до трейнера', mtwarning,[mbOK],0);
Exit;
end;
ThreadId := GetWindowThreadProcessId(WindowName,@pid);
proces := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
pd := VirtualAllocEx(proces, nil, 2049, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
s := IntToHex(DWord(pd), 8);
ShowMessage(s);
end;
Добавлено через 1 час 25 минут
Блок памяти создается отлично только вот столкнулся с проблемой
Не могу понять как создать jmp на нужный мне адрес (в моем случаи это адрес с переменной pd) + если взять байты (код) с СЕ скрипта конечный jmp который должен нас вернуть на основной участок кода не возвращает нас на нужный адрес
Код:
begin
WindowName := FindWindow(nil,'Plants vs. Zombies');
If WindowName = 0 then
begin
MessageDlg('Игра должна быть запущена до трейнера.', mtwarning,[mbOK],0);
Exit;
end;
ThreadId := GetWindowThreadProcessId(WindowName,@pid);
proces := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
pd := VirtualAllocEx(proces,nil, 2048, MEM_COMMIT,PAGE_EXECUTE_READWRITE);
s := IntToHex(DWord(pd), 8);
GWrite(pid,pd,'C7 47 24 99 99 09 00 83 47 24 01 8B 47 24 E9 50 B3 2C',0);
Edit1.Text:= s;//Выводим адресс
//VirtualFreeEx(proces, pd, 2048,MEM_DECOMMIT);
end;
Чернетка :
Код:
Plants vs zombies v
Растения без перезарядки : 83 ?? ?? 01 8B ?? ?? ?? ?? ?? ?? ?? C7 ?? ?? ?? ?? ?? ?? C6 ?? ?? ?? C6 ?? ?? ?? ??
Protect : Execute/Read only
Adress Start Jump : game.exe+8B35C [0048B35C] - E9 9F 4C D3 FF 90 90 - jmp 001C0000
0048B35C - 83 47 24 01 - add dword ptr [edi+24],01
0048B360 - 8B 47 24 - mov eax,[edi+24]
0048B363 - 3B 47 28 - cmp eax,[edi+28]
0048B366 - 7E 14 - jle 0048B37C
0048B368 - C7 47 24 00 00 00 00 - mov [edi+24],00000000
End Jump : PD
mod.bytes : C7 47 24 99 99 09 00 83 47 24 01 8B 47 24 E9 50 B3 2C
001C0000 - C7 47 24 99 99 09 00 - mov [edi+24],00099999 : [00000000]
001C0007 - 83 47 24 01 - add dword ptr [edi+24],01
001C000B - 8B 47 24 - mov eax,[edi+24]
001C000E - E9 50 B3 2C 00 - jmp game.exe+8B363 [0048B363]
СЕ - скрипт -
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
mov [edi+24],99999
originalcode:
add dword ptr [edi+24],01
mov eax,[edi+24]
exit:
jmp returnhere
"game.exe"+8B35C:
jmp newmem
nop
nop
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"game.exe"+8B35C:
add dword ptr [edi+24],01
mov eax,[edi+24]
//Alt: db 83 47 24 01 8B 47 24