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

Gunborg Johansson

Потрачен
32
21
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
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.
Example of hooking the method of sending outcoming synchronization:
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;
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))
This is a RakPeer hook, not a RakClient.
 
Последнее редактирование:

Qsany

Потрачен
464
147
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/c++
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/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;
}
 
  • Нравится
Реакции: Qsany и etereon

AdCKuY_DpO4uLa

Известный
287
477
У меня есть 3 шрифта в ImGui, первый Arial, его я юзаю во всем проекте. Второй - иконочный и 3-й (стилизованный), я хочу юзать иконочный и стилизованный одновременно, но если я пушу (ImGui::PushFont) сразу оба шрифта подряд, то работает только тот, который я пушил вторым и Arial. Вопрос такой: как юзать стилизованный шрифт и иконочный одновременно?
 

Cake_

Известный
Проверенный
263
313
Ввести одномерный массив целых чисел размерностью N. Сформировать новый массив из элементов исходного массива, кратных 1-му элементу массива.
Помогите плз лабу сделать c/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

*/
upd: не увидел что спрашивал ты утром и что тебе уже ответили
 
  • Нравится
Реакции: Qsany

BigIce

Участник
24
13
Я хочу сделать триггер бот для кс 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)
    {

    }
}
 

checkdasound

Известный
Проверенный
963
406
Я хочу сделать триггер бот для кс 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)
    {

    }
}
могу помочь только с эмуляцией выстрела
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));
}
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,712
могу помочь только с эмуляцией выстрела
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));
}
костыли наше все
 
  • Нравится
Реакции: Vintik

Vintik

Мечтатель
Проверенный
1,470
920
Вызываем вот такое:
C++:
void SendChat(std::string msg)
{
    typedef int(__stdcall* SendMsg)(const char*);
    static SendMsg sendMsg = (SendMsg)(dwSAMP + 0x68E65);
    sendMsg(msg.c_str());
}
Получаем вот такое:
1605553766654.png

И чё делать? 😁
@KiN4StAt @checkdasound @Cake_ @redcode помогите плиз
 
Последнее редактирование:

Gunborg Johansson

Потрачен
32
21
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вызываем вот такое:
C++:
void SendChat(std::string msg)
{
    typedef int(__stdcall* SendMsg)(const char*);
    static SendMsg sendMsg = (SendMsg)(dwSAMP + 0x68E65);
    sendMsg(msg.c_str());
}
Получаем вот такое:
Посмотреть вложение 76066
И чё делать? 😁
@KiN4StAt @checkdasound @Cake_ @redcode помогите плиз
C++:
// samp.dll (r1):
.text:10068E60 fsub ds:flt_100D390C
What are you going to call?