Логотип игрового форума RF-Cheats.ru    
Новости онлайн игр Обход античитов Чёрный рынок Реклама и привилегии Разработка читов Арбитраж

Регистрация Бан-лист Сообщество ПОПУЛЯРНОЕ
Вернуться   RF-Cheats.ru - форум читеров и ботоводов > > >

Взлом и программирование

: Аспекты программирования при реализации различных методик взлома.
Читы и обход фроста для RF Online без хайдаБоты и читы для Perfect World бесплатно без хайдаМоды и читы для World of Tanks (WoT) бесплатно без хайдаМоды и читы для Armored Warfare бесплатно без хайдаБоты и читы для DOTA 2 бесплатно без хайдаБоты и читы для Black Desert Online бесплатно без хайдаЧиты на ArcheAge бесплатно без хайдаЧиты для Warface бесплатно без хайдаВзлом ВКонтакте и ОдноклассниковСписок разделов со всеми играмиЧиты для онлайн игр






Ответ
 
Опции темы
Старый 22.11.2015, 19:39   #1
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Cheat Engine - Alloc(newmem,2048)


Нужна ваша помощь боле опытные кодеры ...
хочу выделить блок памяти что бы внедрить свой код (тк как делает СЕ)
Пишу на Delphi вот сам код :
Код:
begin
WindowName := FindWindow(nil,'Tomb Raider');
If WindowName = 0 then
begin
MessageDlg('Игра должна быть запущена до трейнера', mtwarning,[mbOK],0);
Exit;
end;
ThreadId := GetWindowThreadProcessId(WindowName,@pid);
proces := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
ptr := VirtualAllocEx(proces, nil, 2049, MEM_RESERVE, PAGE_READONLY);
// Поч не работает ? 
// И как вернуть адрес созданного блока памяти
end;
 
Ответить с цитированием


Старый 22.11.2015, 22:48   #2
лосяш
Иженер-механик
Аватар для лосяш
OFFLINE
Регистрация: 22.06.2011
Возраст: 45
Сообщений: 187
Благодарностей:
1,821 всего
Мнения: + 5692
Репутация: 5464

Цитата:
Сообщение от 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
Типа самый умный?

слесарь
 
Ответить с цитированием
Сказали спасибо:
GameOldHack (23.11.2015), Paladin (23.11.2015)
Старый 23.11.2015, 08:54   #3
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 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.
 
Ответить с цитированием
Старый 23.11.2015, 13:47   #4
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от Paladin Посмотреть сообщение
Лень разбираться в СЕ коде. Если я правильно понимаю, тебе нужно пропатчить код игры, поставив там где-то перенаправление на твой код?

Тогда где-то так:

PHP код:
var
    
bBufbyte;
    
dBufDWord;
  
pMemPointer;
    
OldProtectCardinal;
    
NumberOfBytesWrittenSIZE_T;
const
    
oldAddressDWord = $0051040// здесь "$0051040" - это адрес, по которому собираешься патчить
begin
    pMem 
:= Pointer(oldAddress);
    if 
VirtualProtectEx(procespMem1024PAGE_EXECUTE_READWRITEOldProtectthen
    begin
        
// jmp
        
bBuf := $E9;

        
// У WPM желательно проверять result и число записанных байт, я опустил этот момент
        
WriteProcessMemory(procespMem, @bBuf1NumberOfBytesWritten);

        
// Расчитываем адрес для jmp
        // Предполагается, что указатель PD уже получил от фукнкции VirtualAllocEx значение выделенной памяти
        
dBuf := DWord(pd) - oldAddress 5;

        
WriteProcessMemory(procespMem, @dBuf4NumberOfBytesWritten);

        
// Восстанавливаем атрибуты защиты памяти по умолчанию
        
VirtualProtectEx(procespMem1024OldProtectOldProtect);
    
end else
    
begin
        ShowMessage
('Не удалось изменить защиту участка памяти :(' #13#10 +
    
'Код ошибки: ' IntToStrGetLastError() ));
    
end;
end
Не забудь потом из кода, на который перенаправляешь, вернуться назад или вернуть управление (ret) (смотря что за код ты внедряешь).


Дальше давай сам. И не воруй чужие оффсеты в тере

Добавлено через 7 минут
Оффтоп
Вот что получается -




Решил не танцевать с бубном и пойти путем нуба и так указал адрес для создание пространства $06E80000 и туда веду запись инструкций
только вот это глупо ну для начала хватит ...
Хочу реализовать как в СЕ скрипты только мне нужно что бы создавалось пустое пространство в игре и по нужно мне адресу прописывался jump на ту пустоту дальше идут куча байт и возврат на нужный мне адрес
Код:
var
    bBuf: byte;
    dBuf: DWord;
  pMem: Pointer;
    OldProtect: Cardinal;
    NumberOfBytesWritten: DWORD_PTR;
    adreg:Cardinal;
const
    oldAddress: DWord = $0048D90B; // здесь "$0051040" - это адрес, по которому собираешься патчить
begin
WindowName := FindWindow(nil,'Plants vs. Zombies');
ThreadId := GetWindowThreadProcessId(WindowName,@pid);
proces := OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
pd := VirtualAllocEx(proces,Ptr($06E80000), 2048, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
s := IntToHex(DWord(pd), 8);
pMem := Pointer(oldAddress);
    if VirtualProtectEx(proces, pMem, 1024, PAGE_EXECUTE_READWRITE, OldProtect) then
    begin
        // jmp
        bBuf := $E9;
        // У WPM желательно проверять result и число записанных байт, я опустил этот момент
        WriteProcessMemory(proces, pMem, @bBuf, 1, NumberOfBytesWritten);
        // Расчитываем адрес для jmp
        // Предполагается, что указатель PD уже получил от фукнкции VirtualAllocEx значение выделенной памяти
        dBuf := DWord(pd) - oldAddress - 5;
        WriteProcessMemory(proces, pMem, @dBuf, 4, NumberOfBytesWritten);
        // Восстанавливаем атрибуты защиты памяти по умолчанию
        VirtualProtectEx(proces, pMem, 1024, OldProtect, OldProtect);
    end else
    begin
        ShowMessage('Не удалось изменить защиту участка памяти :(' + #13#10 +
    'Код ошибки: ' + IntToStr( GetLastError() ));
    end;

end;

Последний раз редактировалось dark; 25.12.2017 в 17:17.
 
Ответить с цитированием
Старый 23.11.2015, 17:34   #5
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от Paladin Посмотреть сообщение
тьфу, наморосил чутка. Ща через пол часика к компу вернусь - покажу где я косячнул.

Ты в VirtualAllocEx не указывай лучше адрес, он далеко не факт что таким будет, это значение как рекомендация, а винда даст память там, где сама захочет

Добавлено через 25 минут
*** скрытый текст ***
Огромное тебе спасибо помог от души ))
Все прекрасно работает
Позже выложу исходник - чернетка ))
 
Ответить с цитированием
Старый 25.12.2017, 17:14   #6
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от Paladin Посмотреть сообщение
В 32-битных процессах для call и jmp адрес для вызова\прыжка высчитывается так:

address := (NewAddress - OldAddress - 5);
А как для х64 считать ?.
 
Ответить с цитированием
Старый 25.12.2017, 17:25   #7
dark
Читодел
Аватар для dark
OFFLINE
Регистрация: 09.04.2007
Сообщений: 965
Благодарностей:
36,572 всего
Мнения: + 37684
Репутация: 116379
Отправить сообщение для dark с помощью ICQ Отправить сообщение для dark с помощью Skype™

Цитата:
Сообщение от GameOldHack Посмотреть сообщение
А как для х64 считать ?.
в вашу тему не вникал, но сорсы свои посмотрел
в х64 я по крайней мере прыгаю по абсолютному адресу
Код:
mov rax,addr
jmp rax

Cheats Development | Создание читов на заказ

Я не оказываю услуги гаранта!
База данных кидал: blacklist.rf-cheats.ru
Обязательно проверяйте человека через чёрный список прежде чем совершать с ним сделку.
 
Ответить с цитированием
Старый 25.12.2017, 18:19   #8
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Кто то уже сталкивался в данной проблемой только на C#.. Перейти | forum.cheatengine.org

Как и обещал выкладываю чернетку.
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 300 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.

@Dark - Ну как быть с х64 процессах ?
Код HTML:
В 32-битных процессах для call и jmp адрес для вызова\прыжка высчитывается так:

address := (NewAddress - OldAddress - 5);
Прыжок я то создаю только вот не туда куда нужно.

Скачать Исходник
Скрытый текст (вы должны войти под своим логином или зарегистрироваться и иметь 300 сообщение(ий)):
У вас нет прав чтобы видеть скрытый текст, содержащейся здесь.
Чтобы его прочитать, вы должны заработать сообщения. Как это сделать бесплатно, описано в правилах форума. Как купить доступ, описано в Платных услугах.









 
Ответить с цитированием
Старый 25.12.2017, 18:58   #9
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от Paladin Посмотреть сообщение
Adress нИпАзОрься плис

FF 25 вместо E9, я полагаю, то, что тебе нужно
Ну блин это чернетка на скорую руку... Прасти

ПаСтОй ну ведь формула осталась прежней ?
Новый - Старый - 5 [Только теперь вместо - 5 будет - 6 ]
 
Ответить с цитированием
Старый 25.12.2017, 19:16   #10
GameOldHack
Подпольщик Tera
Аватар для GameOldHack
OFFLINE
Регистрация: 16.03.2015
Сообщений: 450
Благодарностей:
196 всего
Мнения: + 469
Репутация: 589
Отправить сообщение для GameOldHack с помощью Skype™

Цитата:
Сообщение от Paladin Посмотреть сообщение
мне лень щас думать, дальше давай сам)
ПаМаГи - я готов заплатить.
 
Ответить с цитированием
Ответ



Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cheat engine cold Взлом, баги и читы для RF Online 0 21.01.2015 04:29
СХ с помощью CE (Cheat Engine) passion1305 R2 Online читы 5 20.11.2012 03:49
Cheat Engine Kokakolay Архив (Баги, Читы, Эксплойты БЕЗ ХАЙДА) 12 30.10.2011 12:18
Cheat Engine pacman F.A.Q. 1 11.06.2008 17:38

Мир танков | Проект "Армата" | ArcheAge | Black Desert | РФ Онлайн | Айон | Майнкрафт | Браузерные игры
Элдер скролс | Р2 Онлайн | Реквием Онлайн | ПУБГ | Роял Квест | ГТА Санадреас | Контра | Дота 2
Мир кораблей | Лост Арк | Arma2 DayZ mod | The War Z | Карос: Начало | Tera Online
Читы для всех Онлайн-игр