Показать сообщение отдельно
Старый 23.11.2015, 08:54  
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 468
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от 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 надо!!

Если копируешь откуда-то код - то хотя бы гугли описание функций:
https://msdn.microsoft.com/ru-ru/lib...=vs.85%29.aspx
И Правда большое спасибо что указал на ошибки
кому интересно вот хоть и сырой ну робочий код :
Код:
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

Последний раз редактировалось dark; 25.12.2017 в 17:17.
 
Ответить с цитированием