С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
-20 / 1 / 1
Регистрация: 23.02.2017
Сообщений: 30
1

С++ Socket API Hook

05.02.2018, 03:14. Показов 4125. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Хочу сделать хук, который будет отправлять пакеты по открытому сокету на сервер (при этом он будет использовать клиент онлайн игры).

Суть такова. Думаю многие знают программу WpePro. В ней отправка уже перехваченных пакетов осуществляется через открытый сокет, при чем Id этого сокета после перезахода игры меняется.
В чем весь вопрос.. нужно сделать программу, которая будет присоединяться к процессу игры, и автоматически отправлять нужный пакет на сервер. (к примеру, программа сама будет писать в чат игры, или что-то вроде этого)

Чтобы лучше понять о чем идёт речь, предлагаю посмотреть короткое видео (не моё). (на всякий случай вот ссылка на него -> https://youtu.be/WHezTriTfRc)



Насчет видео, в нём ясна задача программы, но её реализация, лично для меня, не очень понятна по нескольким причинам:
1) не виден весь код программы;
2) в видео программа отправляет пакеты используя WS2_32.dll (насколько я понял), НО проблема в том, что такое не прокатит, если эта онлайн игра будет открываться через браузер, как Flash игра (с официального игрового сервера).

Любая информация по этой теме будет очень полезна, т.к. я не нашел почти ни одной подобной темы. Спасибо.
0
Programming
Эксперт
9485 / 562 / 19
Регистрация: 12.04.2006
Сообщений: 11,671
Блог
05.02.2018, 03:14
Ответы с готовыми решениями:

В чем преимущество trampoline hook над обычным hook?
Объясните пожалуйста в чем преимущество trampoline hook и hook? Никак не могу понять

(API Hook) Перехват действий в системной галерее
Здравствуйте форумчане!) Назрела такая вот задача: необходимо перехватить момент открытия фото...

Socket на API
Пишу Socket клиента на API (win). заполняю sockaddr_in и когда так - dst.sin_addr.s_addr =...

win api socket
Подскажите пожалуйста, как с помощью win api socket клиент отсылает сообщения серверу? Соединение...

8
Software Developer
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,330
05.02.2018, 12:05 2
Цитата Сообщение от DmitryAllen Посмотреть сообщение
Хочу сделать хук, который будет отправлять пакеты


Добавлено через 2 минуты
Цитата Сообщение от DmitryAllen Посмотреть сообщение
я не нашел почти ни одной подобной темы
Потому что вы написали какую-то дичь
1
-20 / 1 / 1
Регистрация: 23.02.2017
Сообщений: 30
05.02.2018, 19:11  [ТС] 3
Лучший ответ, браво.

Для особых интеллектуалов я предоставил видео, в котором показано ВСЁ что я хотел бы реализовать, и прошу помощи у компетентных людей. (я могу быть даже НЕ программист, но человек, с желанием либо потребностью сделать определенную программу, учтите и это, пожалуйста)
К этим словам
Хочу сделать хук, который будет отправлять пакеты
придираться не стоит.

Я понимаю, вы крутой программист, честь Вам и хвала (естественно обойдетесь), но будьте прежде всего человеком. В этой теме я прошу помощи в том, в чем не могу разобраться сам. Или этот форум исключительно для крутых кодеров?

Надеюсь я понятно выразился в этот раз, для Вас, уважаемый, и не нужно своими комментариями делать из меня непонятно кого, тем самым провоцируя остальных отвечать так же. Не знаете что ответить в этой теме - не отвечайте ничего. Надеюсь в следующий раз вы используете хоть не много мудрости, если она у Вас есть, и не будете писать "дичь" мне.
0
Software Developer
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,330
05.02.2018, 19:46 4
Охренеть, как грубо...
1 - вы просите написать программу для взлома, а это запрещено правилами форума
2 - вы просите написать ещё и бесплатно
И не нужно дерзить
1
-20 / 1 / 1
Регистрация: 23.02.2017
Сообщений: 30
05.02.2018, 20:01  [ТС] 5
decrement, 1) я прошу помочь мне хотя бы с поиском нужной информации, для отправки пакетов таким же способом, каким это делает программа WpePro, только средствами C++
2) снова напомню, что прошу о помощи, и это абсолютно никого не обязывает вообще отвечать мне

Насчет грубости и дерзости, простите если задел ваши чувства, но посмотрите на то, как вы мне ответили, адекватно ли это вообще? Более чем уверен что нет. Нет уважения у вас - нет уважения к вам.

Как более опытный человек, вы могли просто попытаться помочь неопытному, а не показать ему какой он глупый, ничего не знает и тд. посмотрите на ситуацию с моей стороны, и надеюсь вы меня поймете. Спасибо, и еще раз прошу прощения.
1
Software Developer
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,330
05.02.2018, 21:19 6
Лучший ответ Сообщение было отмечено DmitryAllen как решение

Решение

Цитата Сообщение от DmitryAllen Посмотреть сообщение
Как более опытный человек, вы могли просто попытаться помочь неопытному, а не показать ему какой он глупый, ничего не знает и тд.
Никто не сомневается в Вашей мудрости
А по поводу темы (а то у меня появилось какое-то чувство долга, всё таки был неправ) предложу
https://habrahabr.ru/company/i... og/140456/
http://www.cyberguru.ru/win32/win32-hooks.html
http://forum.codenet.ru/q26500... B9+winsock
P.S. Когда появится больше свободного времени, может помогу реализовать часть Вашей задачи.
1
-20 / 1 / 1
Регистрация: 23.02.2017
Сообщений: 30
06.02.2018, 08:04  [ТС] 7
decrement, вот за это прям огромное спасибо)

Добавлено через 9 часов 28 минут
decrement, первая тема, из трёх Вами предложенных, наиболее приблизила меня к цели, еще раз хотел сказать спасибо)
0
Software Developer
315 / 229 / 113
Регистрация: 03.05.2017
Сообщений: 1,330
07.02.2018, 15:09 8
Лучший ответ Сообщение было отмечено DmitryAllen как решение

Решение

Цитата Сообщение от decrement Посмотреть сообщение
P.S. Когда появится больше свободного времени, может помогу реализовать часть Вашей задачи.
Покажу как это делается на примере клиент-серверного приложения, которое работает по протоколу UDP.

Клиент.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <winsock2.h>
 
#pragma comment(lib, "ws2_32.lib")
 
int main (int argc, char* argv [])
{
    const char IP [] = "127.0.0.1"; // ИР адрес нашего сервера.
    const int PORT = 648; // Порт нашего сервера.
    
    char szMessage [] = "Test Message"; // Оригинальное сообщение которое отсылаем серверу.
    
    WSADATA wsa_data;
    if (WSAStartup (0x202, &wsa_data) || wsa_data.wVersion != 0x202)
    {
        std::cerr << "WSAStartup failed!" << std::endl;
        system ("pause > nul");
        return EXIT_FAILURE;
    }
    
    SOCKET s = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        std::cerr << "socket failed!" << std::endl;
        system ("pause > nul");
        WSACleanup ();
        return EXIT_FAILURE;
    }
 
    SOCKADDR_IN sa;
    sa.sin_family           = AF_INET;
    sa.sin_port             = htons (PORT);
    sa.sin_addr.S_un.S_addr = inet_addr (IP);
    
    int nmsg = 0;
 
    // Будет слать сообщение серверу, пока не будет нажата клавиша escape.
    while (TRUE)
    {
        if (sendto (s, szMessage, lstrlen (szMessage) + 1, 0, (SOCKADDR *) &sa, sizeof (sa)) == SOCKET_ERROR)
        {
            std::cerr << "sendto failed!" << std::endl;
            system ("pause > nul");
            closesocket (s);
            WSACleanup ();
            return EXIT_FAILURE;
        }
        else
        {
            std::cout << nmsg << ": message has been sent" << std::endl;
            nmsg ++;
        }
        Sleep (1000);
    }
    
    closesocket (s);
    WSACleanup ();
    return EXIT_SUCCESS;
}


Сервер.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <iostream>
#include <winsock2.h>
 
#pragma comment(lib, "ws2_32.lib")
 
int main (int argc, char* argv [])
{
    const char IP [] = "127.0.0.1"; // ИР адрес нашего сервера.
    const int PORT = 648; // Порт нашего сервера.
    
    WSADATA wsa_data;
    if (WSAStartup (0x202, &wsa_data) || wsa_data.wVersion != 0x202)
    {
        std::cerr << "WSAStartup failed!" << std::endl;
        system ("pause > nul");
        return EXIT_FAILURE;
    }
 
    SOCKET s = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET)
    {
        std::cerr << "socket failed!" << std::endl;
        system ("pause > nul");
        WSACleanup ();
        return EXIT_FAILURE;
    }
 
    SOCKADDR_IN sa;
    sa.sin_family           = AF_INET;
    sa.sin_port             = htons (PORT);
    sa.sin_addr.S_un.S_addr = inet_addr (IP);
 
    if (bind (s, (SOCKADDR *) &sa, sizeof (sa)) == SOCKET_ERROR)
    {       
        std::cerr << "bind failed!" << std::endl;
        system ("pause > nul");
        closesocket (s);
        WSACleanup ();
        return EXIT_FAILURE;
    }
 
    SOCKADDR_IN nsa;
    int nsa_size = sizeof (nsa);
 
    char buffer [1024] = {0};
    int nmsg = 0;
    while (TRUE)
    {
        if (recvfrom (s, buffer, sizeof (buffer), 0, (SOCKADDR *) &nsa, &nsa_size) == SOCKET_ERROR)
        {       
            std::cerr << "recvfrom failed!" << std::endl;
            system ("pause > nul");
            closesocket (s);
            WSACleanup ();
            return EXIT_FAILURE;
        }
        else
        {
            std::cout << nmsg << ": " << buffer << std::endl;
            nmsg ++;
        }
    }
    
    closesocket (s);
    WSACleanup ();
    return EXIT_SUCCESS;
}


DLL которую будем инжектить.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <winsock2.h>
#include <windows.h>
 
#pragma comment(lib, "ws2_32.lib")
 
DWORD old_address = 0x01241152; // Адрес, в котором находится вызов функции которую перехватываем.
DWORD new_address = 0; // Адрес функции, на которую хотим заменить.
const char szNewMessage [] = "Hacked"; // Сообщение на которое заменяем старое.
 
int WSAAPI new_sendto (
    IN SOCKET s,
    __in_bcount(len) const char FAR * buf,
    IN int len,
    IN int flags,
    __in_bcount(tolen) const struct sockaddr FAR * to,
    IN int tolen
)
{
    // Если нужно менять не всё, а при конкретному количеству байт, то снимите комментарии со следующих строк.
    //if (!lstrcmp (buf, "Pattern"))
        return sendto (s, szNewMessage, lstrlen (szNewMessage) + 1, flags, to, tolen);
    //else
    //  return sendto (s, buf, len, flags, to, tolen);
}
 
void CallNewFunc ()
{
    __asm call dword ptr new_address
}
 
DWORD WINAPI Hook_Thread (LPVOID)
{
    new_address = (DWORD) new_sendto;
    
    DWORD old_protect = 0;
    VirtualProtect ((void *) old_address, 6, PAGE_EXECUTE_READWRITE, &old_protect);
    memcpy ((void *) old_address, (PBYTE) CallNewFunc, 6);
    VirtualProtect ((void *) old_address, 6, old_protect, &old_protect);
    ::ExitThread (1337);
}
 
BOOL APIENTRY DllMain (HINSTANCE hInstance, DWORD dwReason, LPVOID reserved)
{
    switch (dwReason)
    {
        case DLL_PROCESS_ATTACH:
            CreateThread (NULL, 0, Hook_Thread, NULL, 0, NULL);
            break;
        
        case DLL_PROCESS_DETACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
            break;
    }
    return TRUE;
}


В old_address кладём адрес где находится вызов функции sendto в приложении Клиент.
Адрес (которой меняется при каждом запуске) можно посмотреть через Cheat Engine.
Инжектировать можно через Winject.
Всё это делалось в IDE Visual Studio 2008 с конфигурацией Release

Добавлено через 5 минут
Или если не хочется делать инжект через стороннее приложение, можете написать код для внедрения в приложения, кажется это называют PE Inject
1
-20 / 1 / 1
Регистрация: 23.02.2017
Сообщений: 30
07.02.2018, 15:10  [ТС] 9
decrement, просто бесконечно благодарен А то весь google обыскал за несколько дней, ничего не помогло.
Буду разбираться с этим что и как) Спасибо еще раз огромнейшее))
0
07.02.2018, 15:10
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
07.02.2018, 15:10
Помогаю со студенческими работами здесь

recv (socket api)
при первом в хождении в цикл рекв возвращает как положено количество принятых байт,но потом...

Email socket API
Вообщем приспичело написать свой email клиент. Прочитал про imaplib, smtplib, все хорошо, все...

FTP-client на Socket API
Здравствуйте. Решил написать простенький FTP-клиент, всё получилось, кроме команды RETR. При...

Подключение по конкретному IP в socket API (C++, *NIX)
Я работаю на OS X над приложением, использующим библиотеку &lt;sys/socket.h&gt;. Мне нужно, чтобы клиент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru