Как можно перезаписать входящий пакет, без использования SF?
mod_sa/src/HookedRakClient.cpp at v4.4.1.3 · BlastHackNet/mod_sa
Multi-purpose cheat tool for GTA San Andreas and SA-MP - BlastHackNet/mod_sa
Как можно перезаписать входящий пакет, без использования SF?
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
Посмотреть вложение 74865
Посмотреть вложение 74867
if (strcmp(info, "Ник пригласившего игрока бла-бла") == 0) {
}
// тоже самое, но в c++ стиле
if (std::string{info} == "Ник пригласившго бла-бла") {
}
Как сделать проверку на этот диалог в RPC который дает мне сервер, код ниже не работает, find не умею пользоваться
Посмотреть вложение 74865
Посмотреть вложение 74867
if(strstr(cInfo, "Введите ник игрока, пригласившего вас на сервер или промокод") &&
strstr(cCaption, "{FFFFFF}Приглашение | {ae433d}Регистрация")) {
//
}
without SFFor example:
C++:auto sendPacketHandler(BitStream *const bitStream, const uint32_t packetPriority, const uint32_t packetReliability, const char orderingChannel) const { #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wattributes" using sendPacket_t = bool(__thiscall *)(const RakClient *const, BitStream *const, const uint32_t, const uint32_t, const char); #pragma GCC diagnostic pop uint8_t packetId{}; bitStream->Read(packetId); if (packetId == ID_PLAYER_SYNC) { stOnFootData onFootData{}; bitStream->Read(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData)); bitStream->ResetWritePointer(); onFootData.fPosition[2] += 5.f; bitStream->Write(packetId); bitStream->Write(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData)); } auto sendPacket{sendPacket_t(originalVirtualTable[6])}; return sendPacket(rakClientInterface, bitStream, packetPriority, packetReliability, orderingChannel); }
There I showed you how to overwrite an outcoming packet instead of an incoming one. From the context, I realized that you need a ready-made solution.without SF
constexpr auto sampModuleHandle{"samp.dll"};
constexpr auto sampRakClientOffset{0x3C9};
constexpr auto sampNetGameOffset{0x21A0F8};
constexpr auto sampRakClientSize{55u};
constexpr auto sampPlayerSync{207u};
constexpr auto sampVehicleSync{200u};
constexpr auto sampAimSync{203u};
constexpr auto sampBulletSync{206u};
constexpr auto sampSpectatorSync{212u};
class RakClient;
class CNetGame;
RakClient *rakClientInterface{};
CNetGame *netGame{};
uint32_t *fakeVirtualTable{};
uint32_t *originalVirtualTable{};
class AnyClassName
{
public:
auto sendPacketHandler(BitStream *const bitStream, const uint32_t packetPriority,
const uint32_t packetReliability, const char orderingChannel) const
{
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wattributes"
using sendPacket_t = bool(__thiscall *)(const RakClient *const, BitStream *const,
const uint32_t, const uint32_t, const char);
#pragma GCC diagnostic pop
uint8_t packetId{};
bitStream->Read(packetId);
if (packetId == sampPlayerSync)
{
stOnFootData onFootData{};
bitStream->Read(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData));
bitStream->ResetWritePointer();
// Do whatever you want with BitStream.
bitStream->Write(packetId);
bitStream->Write(reinterpret_cast<__int8 *>(&onFootData), sizeof(stOnFootData));
}
auto sendPacket{sendPacket_t(originalVirtualTable[6])};
return sendPacket(rakClientInterface, bitStream, packetPriority, packetReliability, orderingChannel);
}
AnyClassName()
{
std::thread hookThread([&]()
{
while (true)
{
auto moduleHandle{uint32_t(::GetModuleHandle(sampModuleHandle))};
if (moduleHandle)
{
netGame = *reinterpret_cast<CNetGame **>(
moduleHandle + sampNetGameOffset);
if (netGame)
{
rakClientInterface = *reinterpret_cast<RakClient **>(
uint32_t(netGame) + sampRakClientOffset);
if (rakClientInterface)
{
originalVirtualTable = *reinterpret_cast<uint32_t **>(
rakClientInterface);
fakeVirtualTable = new uint32_t[sampRakClientSize];
memcpy(fakeVirtualTable, originalVirtualTable,
sampRakClientSize * sizeof(uint32_t));
*reinterpret_cast<uint32_t **>(rakClientInterface) = fakeVirtualTable;
fakeVirtualTable[6] = force_cast<uint32_t>(&AntiCheat::sendPacketHandler);
break;
}
}
}
std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
});
hookThread.detach();
}
} AnyObjectName;
This is a RakPeer hook, not a RakClient.R1:
C++:typedef Packet* (__fastcall* RakPeer_Receive)(void*); RakPeer_Receive fpReceive = NULL; Packet* __fastcall HOOK_RakPeer_Receive(void* pRakPeer) { Packet* packet = fpReceive(pRakPeer); if (packet != nullptr && packet->data) { // your code } return packet; } MH_CreateAndEnableHook(dwSampModule + 0x31180, &HOOK_RakPeer_Receive, reinterpret_cast<LPVOID*>(&fpReceive))
That makes a difference?This is a RakPeer hook, not a RakClient.
Yes.That makes a difference?
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
#include <iostream>
#include <vector>
int main() {
std::vector<int> arrayOutput;
int n;
int first = 0;
std::cin >> n;
std::cin >> first;
for (int i= 0; i < n - 1; i++) {
int temp;
std::cin >> temp;
if (temp % first == 0)
arrayOutput.push_back(temp);
}
for (std::vector<int>::iterator i = arrayOutput.begin(); i != arrayOutput.end(); i++)
std::cout<< *i << " ";
std::cout << std::endl;
}
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
#include <iostream>
#include <vector>
int main()
{
const size_t N = 8;
int sourceArray[N] = {};
std::vector<int> outArray;
for (size_t i = 0; i < N; i++)
std::cin >> sourceArray[i];
for (auto value : sourceArray)
if (value % sourceArray[0] == 0)
outArray.push_back(value);
for (auto value : outArray)
std::cout << "outArray: " << value << std::endl;
system("pause");
return 0;
}
/*
input:
4
8
12
16
21
78
22
11
output:
outArray: 4
outArray: 8
outArray: 12
outArray: 16
*/
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
DWORD PID;
DWORD Memory = 0x0D8011F8;
HWND Window = FindWindowA(0, ("Counter-Strike"));
int mem;
GetWindowThreadProcessId(Window, &PID);
HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);
ReadProcessMemory(Process, (LPVOID)Memory, &mem, sizeof(mem), 0);
if (mem == 2)
{
}
}
могу помочь только с эмуляцией выстрелаЯ хочу сделать триггер бот для кс 1.6, и уже нашёл все значения. Скажите, как можно симулировать нажатие мыши, чтобы при наведении на врага скрипт сам нажимал ЛКМ?
C++:#include <iostream> #include <Windows.h> using namespace std; int main() { DWORD PID; DWORD Memory = 0x0D8011F8; HWND Window = FindWindowA(0, ("Counter-Strike")); int mem; GetWindowThreadProcessId(Window, &PID); HANDLE Process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID); ReadProcessMemory(Process, (LPVOID)Memory, &mem, sizeof(mem), 0); if (mem == 2) { } }
#include <Windows.h>
void Shoot()
{
INPUT Input = { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0, 0 };
SendInput(1, &Input, sizeof(INPUT));
Sleep(100);
Input.mi.dwFlags = MOUSEEVENTF_LEFTUP;
SendInput(1, &Input, sizeof(INPUT));
}
костыли наше всемогу помочь только с эмуляцией выстрела
C++:#include <Windows.h> void Shoot() { INPUT Input = { INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0, 0 }; SendInput(1, &Input, sizeof(INPUT)); Sleep(100); Input.mi.dwFlags = MOUSEEVENTF_LEFTUP; SendInput(1, &Input, sizeof(INPUT)); }