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

s.fridom

Новичок
10
12
как можно анимировать текстуры? например смена цвет градиентом
 

вайега52

cache miss
Модератор
3,062
3,296
как можно анимировать текстуры? например смена цвет градиентом
Это если речь идет про анимацию на уровне картинок (GIF довольно таки тяжелый, кстати, но для того, чтобры разобраться. пойдет). В других же случаях либо на CPU генерируешь пиксели для RwTexture->raster, либо пытаешься прикрутить шейдеры и вычислять тот же градиент на GPU
 
  • Влюблен
Реакции: s.fridom

AdCKuY_DpO4uLa

Адский дрочер
Друг
411
872
Решил я, с великого и неповторимого ассемблера, с целью интереса перейти на время на Си
Программа простая
1) Подключаб user32.dll
2) Вызываю оттуда функцию MessageBoxA чтобы вывести на экран сообщение
3) Выделяю виртуальную память в размере 256 байт
4) Создаю указатели типа char, передаю туда байты
5) Использую strcpy с целью заполнения значениями функцию MessageBoxA, чтобы на экране вывело:
Заголовок: ShellCode Works
А текст: test

А далее уже идет сам шеллкод, с ним вроде с норм, основная проблема заключается хер пойми в чем
Сам код:

С:
#include <windows.h>
#include <stdio.h>

int main()
{
    HMODULE hUser32 = LoadLibraryA("user32.dll");
    FARPROC pMessageBoxA = GetProcAddress(hUser32, "MessageBoxA");

    printf("MessageBoxA address: 0x%p\n", pMessageBoxA);
    PVOID pMemory = VirtualAlloc(NULL, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

    char* caption = (char*)pMemory + 100;
    char* text = (char*)pMemory + 120;  

    strcpy(caption, "Shellcode Works!");
    strcpy(text, "test");


    unsigned char shellcode[50];
    int pos = 0;


    shellcode[pos++] = 0x6A; shellcode[pos++] = 0x00;


    shellcode[pos++] = 0x68;
    memcpy(shellcode + pos, &caption, 4); pos += 4;

    shellcode[pos++] = 0x68;
    memcpy(shellcode + pos, &text, 4); pos += 4;


    shellcode[pos++] = 0x6A; shellcode[pos++] = 0x00;

    // тут вызываю messagebox
    shellcode[pos++] = 0xB8;
    memcpy(shellcode + pos, &pMessageBoxA, 4); pos += 4;

    // call eax
    shellcode[pos++] = 0xFF; shellcode[pos++] = 0xD0;

    // ret
    shellcode[pos++] = 0xC3;


    memcpy(pMemory, shellcode, pos);
    HANDLE hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)pMemory, NULL, 0, NULL);

    if (hThread) {
        WaitForSingleObject(hThread, INFINITE);
        CloseHandle(hThread);
        printf("Shellcode executed successfully\n");
    }

    VirtualFree(pMemory, 0, MEM_RELEASE);
    FreeLibrary(hUser32);

    return 0;
}

Ошибка:
Посмотреть вложение 279395

Я пытался через memcpy передать значения для MessageBox, не помогло


Шатал я ваши языки выше асма)
C++:
// Перед подключением всех заголовков / инклюдов

#define _CRT_SECURE_NO_WARNINGS

Либо используй безопасные функции
 
  • Нравится
Реакции: RichieKuklinski_

AdCKuY_DpO4uLa

Адский дрочер
Друг
411
872
У меня есть некие скопированные данные, как сделать так чтобы эти данные отправлялись моему боту в тг по апи его?
Я пытался через winhttp, но чет не работает.
На Си
Жески тип, юзай плюсы https://github.com/reo7sp/tgbotcpp
Весь остальной код можешь писать на си, компилятор спокойно сожрет
 

AdCKuY_DpO4uLa

Адский дрочер
Друг
411
872
Мужики все делают на TCP 😎
Тогда уж на curl + openssl писать, как раз под си, но все апи придется самому реализовывать, параллельно читая доку к бот апи тг. Как по мне, легче взять готовое, отработанное решение, чем городить лясопеды
 
  • Нравится
Реакции: вайега52

0xff65

Участник
38
4
Приветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью cmake, далее пытался собрать sln решение, но как мне подсказал интернет оно написано для linux -
C++:
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
Как мне быть? Скачать образ и накатить на виртуальную машину? Или собрать через Windows Subsystem for Linux? Какого формата будет скомпилированный файл и как его запустить на локалке?

Или я движусь совсем не в том направлении? Типо как мне собрать sln файл на линукс (этого я не понимаю) если там 2к ошибок, что-то не так явно

Сурс (https://github.com/EquiNoxAdv/loader-master)
 
Последнее редактирование:

AdCKuY_DpO4uLa

Адский дрочер
Друг
411
872
Приветствую, пытаюсь собрать загрузчик состоящих из двух частей - серверной и клиентской, с клиентской стороны все нормально клиент лоадер собран, а вот с серверной возникли проблемы, собрал директорию с помощью cmake, далее пытался собрать sln решение, но как мне подсказал интернет оно написано для linux -
C++:
#include <arpa/inet.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
Как мне быть? Скачать образ и накатить на виртуальную машину? Или собрать через Windows Subsystem for Linux? Какого формата будет скомпилированный файл и как его запустить на локалке?

Или я движусь совсем не в том направлении? Типо как мне собрать sln файл на линукс (этого я не понимаю) если там 2к ошибок, что-то не так явно

Сурс (https://github.com/EquiNoxAdv/loader-master)
Все инструкции есть в репозитории. Ставь WSL с ubuntu какой-нибудь и на ней собирай
 
  • Нравится
Реакции: 0xff65 и вайега52

fuldic

Новичок
27
4
Скиньте основу ASI плагина для Visual Studio
 
Последнее редактирование:

malonex

Новичок
4
1
Как проверить, была ли отпущена определённая клавиша? Например: wasKeyReleased(vkeys.VK_RBUTTON)
 

yorenov

Участник
65
65
Альт как прожать? Так не воркает:

С++:
RakNet::BitStream bs;
    bs.ResetWritePointer();
    Synchronization::OnfootData onfootData{};
    std::memcpy(&onfootData,
                &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData,
                sizeof(Synchronization::OnfootData));
    onfootData.m_controllerState.m_bPedWalk = 1;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
    
    onfootData.m_controllerState.m_bPedWalk = 0;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(0);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
А так прожимает только 1 раз + ко всему - костыль
C++:
input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = 0;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
    input[0].ki.wScan = 0x38;

    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = 0;
    input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
    input[1].ki.wScan = 0x38;

    SendInput(2, input, sizeof(INPUT));
 

undefine

Участник
41
23
Альт как прожать? Так не воркает:

С++:
RakNet::BitStream bs;
    bs.ResetWritePointer();
    Synchronization::OnfootData onfootData{};
    std::memcpy(&onfootData,
                &RefNetGame()->GetPlayerPool()->GetLocalPlayer()->m_onfootData,
                sizeof(Synchronization::OnfootData));
    onfootData.m_controllerState.m_bPedWalk = 1;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(1024);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
   
    onfootData.m_controllerState.m_bPedWalk = 0;
    onfootData.m_controllerState.m_value = static_cast<uint8_t>(0);
    bs.Write(static_cast<BYTE>(ID_PLAYER_SYNC));
    bs.Write(reinterpret_cast<PCHAR>(&onfootData), sizeof(Synchronization::OnfootData));
    rakhook::send(&bs, HIGH_PRIORITY, RELIABLE_SEQUENCED, 1);
А так прожимает только 1 раз + ко всему - костыль
C++:
input[0].type = INPUT_KEYBOARD;
    input[0].ki.wVk = 0;
    input[0].ki.dwFlags = KEYEVENTF_SCANCODE;
    input[0].ki.wScan = 0x38;

    input[1].type = INPUT_KEYBOARD;
    input[1].ki.wVk = 0;
    input[1].ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
    input[1].ki.wScan = 0x38;

    SendInput(2, input, sizeof(INPUT));
ратку опять кинь, прожмется алт