Другое С/С++ Вопрос - Ответ

Receiver

leet-cheats 👑
Проверенный
619
882
Можно ли как-то в realtime хукать функции и вообще работать с памятью? Пробовал консольным приложением менять че-то (используя SAMP-API c++), но не получалось, хотя с длл все норм. Можете, пожалуйста, обьяснить, что я делаю не так?
Читать и писать память достаточно легко, для этого есть ReadProcessMemory и WriteProcessMemory. С хуками сложнее, тут надо ставить брейкпоинты, либо инжектить код с установкой хуков и пробросом сообщений в твоё приложение (например через сокеты). Это будет работать достаточно медленно, так что не рекомендую ставить хуки из внешнего приложения. Напомню что External приложения не должны редактировать память процесса, чтобы не быть обнаруженными.
 
  • Нравится
  • Вау
Реакции: legendabrn и reussssya

Receiver

leet-cheats 👑
Проверенный
619
882
1689250767290.png

Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
1689250796965.png

Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
 

whyega52

Гений, миллионер, плейбой, долбаеб
Модератор
2,778
2,598
можно получить его с, например, RakPeer::HandleRPCPacket (https://github.com/imring/RakHook/blob/master/src/RakHook/rakhook.cpp#L30)
или с RakClientInterface, поскольку он является родительским для RakClient (https://github.com/dashr9230/SA-MP/blob/master/raknet/RakClient.h#L31)
RakClientInterface - sizeof(RakPeer)
Посмотреть вложение 206717
сейчас проверил, не работает, как я понимаю, в хэндлрпц кидается не интерфейс ракпира, а он сам из-за чего вмп не хочет работать (тестил на 14 методе)
C++:
virtual bool Send( RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, PlayerID playerId, bool broadcast )=0;
 

reussssya

Новичок
28
8
Посмотреть вложение 207793
Это хорошая C++ библиотека для взаимодействия с внешними процессами. Там как раз есть то что тебе нужно - инжект кода:
Посмотреть вложение 207794
Если ты имел в виду из чего-то нативного, то такого нет.
Единственная библиотека которая поставляется, это STL и она мультиплатформенная, поэтому там не предусмотрена работа с WINAPI.
Ой , что-то я оглянулся и в статье мне показалось, что автор использовал С99, а сам код пока глянуть не удосужился
 

korsarsan

Участник
74
26
Имеются проблемы с выводом hp другого персонажа
Вот этот код постоянно выводит значение 1000
C++:
CPed* aPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
        float fbarr = aPed->m_fHealth;
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float fHealth = pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->fActorHealth;
Может кто знает как нормально вывести hp другого перса
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,650
2,535
Вот этот код постоянно выводит значение 1000
C++:
CPed* aPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
float fbarr = aPed->m_fHealth;
так устроен самп. он хранит значения здоровьев в своих пулах
А этот код показывает hp не точно, там постоянно меньше чем на самом деле есть, причем как то рандомно, когда hp 100 он покажет 100, но по мере уменьшения оно становится все менее точно.
C++:
float fHealth = pSAMP->getPlayers()->pRemotePlayer[iPlayerID]->pPlayerData->fActorHealth;
всё дело в том, как калкор хранит значения хп и брони в синхронизации. не исправить
 
  • Клоун
  • Грустно
Реакции: Fott и korsarsan