Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 25.10.2020, 22:53   #1
Новичок
 
Регистрация: 31.07.2019
Сообщений: 8
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
0day пока неопределено
Восклицание Сериализация Пакета перед отправкой Lineage 2

Не много погуглив, перерыв весь этот форум (возможно упустил что-то), касаемо получения правильного адреса функции SendPacket. Теперь хочу поэкспериментировать над сие чудом, и что собственно скрывается за капотом.

Сразу скажу, что я не гуру и не знаток C++, перейдя с Delphi на C++ у меня есть какой-то опыт работы с типами данных. И я не прошу Вас писать что-то за меня.

Взятый пример из форума функции SendPacket для использования.
Код:
void hSendPck(unsigned int This, char* Format, ...) {

	unsigned char buf[1024];
	int size = 0, len;
	wchar_t* wstr;

	va_list args;
	va_start(args, Format);

	while (*Format != 0)
	{
		switch (*Format)
		{
		case 'c':
			*(unsigned char*)(buf + size) = va_arg(args, unsigned char);
			size++;
			break;
		case 'h':
			*(unsigned short int*) (buf + size) = va_arg(args, unsigned short int);
			size += 2;
			break;
		case 'd':
			*(unsigned int*)(buf + size) = va_arg(args, unsigned int);
			size += 4;
			break;
		case 'Q':
			*(unsigned __int64*)(buf + size) = va_arg(args, unsigned __int64);
			size += 8;
			break;
		case 'b':
			len = va_arg(args, unsigned int);
			memcpy(buf + size, va_arg(args, void*), len);
			size += len;
			break;
		case 'S':
			wstr = va_arg(args, wchar_t*);
			if (wstr == 0)
			{
				len = 2;
				*(unsigned short int*) (buf + size) = 0;
			}
			else
			{
				len = wcslen(wstr) * 2 + 2;
				memcpy(buf + size, wstr, len);
			}
			size += len;
			break;

		}
		Format++;
	}
	va_end(args);
	
	return (*true_SendPacket)(This, "b", size, (int)buf);
}
Нашёл пример из статьи о структуре и сериализации данных здесь https://beej.us/guide/bgnet/html/#serialization

Я увидел хороший пример из этого источника о создании пакета с помощью этого, как и моём случае с отправкой SendPacket.

Код:
unsigned int pack(unsigned char *buf, char *format, ...)
{
    va_list ap;

    signed char c;              // 8-bit
    unsigned char C;

    int h;                      // 16-bit
    unsigned int H;

    long int l;                 // 32-bit
    unsigned long int L;

    long long int q;            // 64-bit
    unsigned long long int Q;

    float f;                    // floats
    double d;
    long double g;
    unsigned long long int fhold;

    char *s;                    // strings
    unsigned int len;

    unsigned int size = 0;

    va_start(ap, format);

    for(; *format != '\0'; format++) {
        switch(*format) {
        case 'c': // 8-bit
            size += 1;
            c = (signed char)va_arg(ap, int); // promoted
            *buf++ = c;
            break;

        case 'C': // 8-bit unsigned
            size += 1;
            C = (unsigned char)va_arg(ap, unsigned int); // promoted
            *buf++ = C;
            break;

        case 'h': // 16-bit
            size += 2;
            h = va_arg(ap, int);
            packi16(buf, h);
            buf += 2;
            break;

        case 'H': // 16-bit unsigned
            size += 2;
            H = va_arg(ap, unsigned int);
            packi16(buf, H);
            buf += 2;
            break;

        case 'l': // 32-bit
            size += 4;
            l = va_arg(ap, long int);
            packi32(buf, l);
            buf += 4;
            break;

        case 'L': // 32-bit unsigned
            size += 4;
            L = va_arg(ap, unsigned long int);
            packi32(buf, L);
            buf += 4;
            break;

        case 'q': // 64-bit
            size += 8;
            q = va_arg(ap, long long int);
            packi64(buf, q);
            buf += 8;
            break;

        case 'Q': // 64-bit unsigned
            size += 8;
            Q = va_arg(ap, unsigned long long int);
            packi64(buf, Q);
            buf += 8;
            break;

        case 'f': // float-16
            size += 2;
            f = (float)va_arg(ap, double); // promoted
            fhold = pack754_16(f); // convert to IEEE 754
            packi16(buf, fhold);
            buf += 2;
            break;

        case 'd': // float-32
            size += 4;
            d = va_arg(ap, double);
            fhold = pack754_32(d); // convert to IEEE 754
            packi32(buf, fhold);
            buf += 4;
            break;

        case 'g': // float-64
            size += 8;
            g = va_arg(ap, long double);
            fhold = pack754_64(g); // convert to IEEE 754
            packi64(buf, fhold);
            buf += 8;
            break;

        case 's': // string
            s = va_arg(ap, char*);
            len = strlen(s);
            size += len + 2;
            packi16(buf, len);
            buf += 2;
            memcpy(buf, s, len);
            buf += len;
            break;
        }
    }

    va_end(ap);

    return size;
}

Моя проблема в состоит в непонимании, где указывать ID пакета? Буду пробовать повторить пакет (взятый с L2PHX) по следующему примеру:
HEX Код:
2F 2B 05 00 00 00 00 00 00 00
Код:
Тип: 0x2F (RequestMagicSkillUse)
Pазмер: 10+2
0002 d  MagicID: 1323 (0x0000052B)
0006 d  CtrlPressed: 0 (0x00000000)
0010 c  ShiftPressed: 0 (0x00)
Я понимаю, что должен сделать приблизительно вот как?
Но в каком месте ID пакета указывать?
Код:
hSendPck(unh, "ddc", 1323, 0, 0);
PS: Прошу прощения за такие вопросы, укажите на ошибки/ что я пропустил.
Исключительно в образовательных целях )

Последний раз редактировалось 0day, 25.10.2020 в 22:57.
0day вне форума   Ответить с цитированием
Старый 25.10.2020, 23:36   #2
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,229
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

пока ждем, что папки скажут... но у меня вопрос это получается ты посылаешь пакет путем использования какой-то функции? а напрямую сразу данные нельзя слать? типа выделяешь кусочек памяти, туда втуливаешь этот самый пакет как есть 2F 2B 05 00 00 00 00 00 00 00 и потом посылаешь.
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 26.10.2020, 02:52   #3
Новичок
 
Регистрация: 31.07.2019
Сообщений: 8
Сказал Спасибо: 5
Имеет 0 спасибок в 0 сообщенях
0day пока неопределено
По умолчанию

Цитата:
Сообщение от SeregaZ Посмотреть сообщение
пока ждем, что папки скажут... но у меня вопрос это получается ты посылаешь пакет путем использования какой-то функции? а напрямую сразу данные нельзя слать? типа выделяешь кусочек памяти, туда втуливаешь этот самый пакет как есть 2F 2B 05 00 00 00 00 00 00 00 и потом посылаешь.
Пакет как есть можно отправить функцией send() из стандартного набора WinSock, предварительно хукнув её. Вариант этот сразу отпадает из-за необходимости шифрования пакет(а/ов) с помощью Blowfish (XOR/RSA), а так же поиск ключа для шифрования.

Если открыть L2 через IDA и поставить бряки на функции из класса UNetworkHandler можно невооруженным глазом увидеть вызовы SendPacket. Получить адрес функции, затем из своего кода шаманить с ней.

Вопрос лишь в правильной структуре и формата пакета, чтобы его принял сервер или клиент.

Последний раз редактировалось 0day, 26.10.2020 в 13:51.
0day вне форума   Ответить с цитированием
Старый 28.10.2020, 21:26   #4
Местный
 
Аватар для ScythLab
 
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
ScythLab пока неопределено
По умолчанию

hSendPck(unh, "cddc", 0x2F, 1323, 0, 0);
__________________
Хобби: разработка бота для Lineage.
ScythLab вне форума   Ответить с цитированием
За это сообщение ScythLab нажился спасибкой от:
Старый 10.11.2020, 08:36   #5
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

зачем такой огород? что нужно? отправить пакет средствами клиента?
вот код:
Код:
MOV ECX,[UNetHandler]
  mov ESI,ECX
  MOV ECX,DWORD PTR DS:[ESI+0x48]
  MOV EDX,DWORD PTR DS:[ECX]
  PUSH answ
  PUSH 0x43
  PUSH mask                     //; ASCII "cd"
  PUSH ECX
  CALL [EDX+0x6c]
  add esp,0x10
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Elecktron вне форума   Ответить с цитированием
Старый 10.11.2020, 13:17   #6
Местный
 
Аватар для ScythLab
 
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
ScythLab пока неопределено
По умолчанию

Elecktron, ну да, твой код конечно значительно проще, особенно если учесть:
- необходимость понимания ассемблера, чтобы разобраться с косяками
- могут быть исключения (как думаешь многие смогут понять почему и сам то сможешь ответить на этот вопрос?)
- могут быть исключения если в mask будет не 2 символа (тоже сильно сомневаюсь, что многие поймут почему)
- небольшая придирка: подходит для хроник GF+ (на C4 и IT не
сработает)

А так в целом твой вариант значительно проще
__________________
Хобби: разработка бота для Lineage.
ScythLab вне форума   Ответить с цитированием
Старый 10.11.2020, 21:56   #7
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

это код для ц4.
если человек захочет что-либо понять - он спросит.
и самое главное - мой код рабочий.

Код:
//01 - movebackwardtolocation
void __cdecl MoveBackwardToLocation(DWORD MoveToX,DWORD MoveToY,DWORD MoveToZ,DWORD CurrentX,DWORD CurrentY,DWORD CurrentZ)
{
 char *mask = "cddddddd";
 asm
 {
  mov ECX,[UNetworkHandler]
  mov ESI,ECX
  mov ECX,DWORD PTR DS:[ESI+0x48]
  mov EDX,DWORD PTR DS:[ECX]
  mov EAX,0x01
  push EAX
  mov EAX,CurrentZ
  push EAX
  mov EAX,CurrentY
  push EAX
  mov EAX,CurrentX
  push EAX
  mov EAX,MoveToZ
  push EAX
  mov EAX,MoveToY
  push EAX
  mov EAX,MoveToX
  push EAX
  push $1
  push mask
  push ECX
  call DWORD PTR DS:[EDX+0x64]
  add ESP,0x28
 }
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...

Последний раз редактировалось Elecktron, 10.11.2020 в 23:12.
Elecktron вне форума   Ответить с цитированием
За это сообщение Elecktron нажился спасибкой от:
Старый 11.11.2020, 01:44   #8
Местный
 
Аватар для ScythLab
 
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
ScythLab пока неопределено
По умолчанию

Цитата:
Сообщение от Elecktron Посмотреть сообщение
мой код рабочий
Жаль только, что в твоем коде на кой-то ляд используется регистр ESI и ему не восстанавливается его изначальное значение, что в некоторых случаях МОЖЕТ привести к исключению или ошибках в других частях программы. Вот именно поэтому и нужно знать ассемблер, чтобы не писать код с так называемым "непредсказуемым поведением".
И ассемблер полезно использовать там, где в нем есть необходимость, а не бездумно пихать куда попало (особенно если до конца не понимаешь как он работает), да и твой код прекрасно записывается на с++:
Код:
#define PACK_MTL 0x01
void Init()
{
  ClientSocket = *(DWORD*)((DWORD)UNetworkHandler + 0x48);
  true_SendPacket = *(_SendPacket*)((*(DWORD*)ClientSocket) + SendPackOffset);
}

void MoveBackwardToLocation(DWORD MoveToX,DWORD MoveToY,DWORD MoveToZ,DWORD CurrentX,DWORD CurrentY,DWORD CurrentZ)
{
  true_SendPacket(ClientSocket, "cddddddd", PACK_MTL, MoveToX, MoveToY, MoveToZ, CurrentX, CurrentY, CurrentZ, 1);
}
при этом в с++ варианте код реально рабочий, универсальный, не приводит к глупым ошибкам, когда у тебя меняется маска, да и явно выглядит попроще, неправда ли?
__________________
Хобби: разработка бота для Lineage.
ScythLab вне форума   Ответить с цитированием
За это сообщение ScythLab нажился спасибкой от:
Старый 15.05.2025, 19:40   #9
Местный
 
Регистрация: 26.04.2025
Адрес: TAJIR4D Login
Сообщений: 729
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
FrankJScott пока неопределено
По умолчанию Top Pyeongtaek Business Massage Site

In response to the guy inquiring about therapeutic spa and wellness, 60 massage, detox lymphatic massage, relax and rejuvenate, the well massage, my hands massage, wellness centre and spa, melbourne massage services, give yourself a lymphatic drainage massage, massage services website, I highly recommend this visit website for Pyeongtaek business massage info or massage for pain relief near me, highly rated massage therapist near me, energy massage reviews, jin jing spa, best massage center, massage west, massage in my home, you need massage, find a massage, lymphatic drainage massage therapist, as well as this agree with about Pyeongtaek business massage advice not to mention good massage, massage & wellness, massage home service, deep massage therapist, deep muscles massage, relax in massage, swedish massage for beginners, you have massage, best place to get a massage, lymph drainage near me, as well as this find for Pyeongtaek business massage details which is also great. Also, have a look at this link on Pyeongtaek business massage blog as well as good massage and relax, my massage spa, 90 minute swedish massage, deep tissue massage melbourne, best type of massage to get, pain relief massage at home, hands on massage, a health massage, best type of massage for relaxation, relax & restore therapeutic massage, not forgetting sites such as this get the facts on Pyeongtaek business massage site as well as popular massage spa, relaxation and therapeutic massage, my body massage, massage is good for, in spa massage, a fantastic read on which is worth considering with body massage melbourne, deep tissue massage and lymphatic drainage, be well therapeutic massage, energy massage spa, deep tissue massage step by step, for good measure. Check more @ Top Tajir4D Link Alternatif Guide 7f130c9
FrankJScott вне форума   Ответить с цитированием
Старый 19.05.2025, 01:36   #10
Местный
 
Регистрация: 26.04.2025
Адрес: TAJIR4D Login
Сообщений: 729
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
FrankJScott пока неопределено
По умолчанию Recommended AI Stock Predictions Analysis Site

In response to the guy talking about buy shares in chat gpt, stock symbol for chat gpt, buy chat gpt stock, ai based stock trading, us stock analysis website, intelligence stocks, best tool for stock market analysis, ai artificial intelligence stock, ai stock today, best ai software for stock trading, I highly recommend this linked here about AI stock investing analysis blog or best stock websites, all ai stocks, stock analysis application, investing tools for stocks, ai stocks to buy now, best trading prediction software, ai in trading stocks, best app for stock market prediction, stock picking system, top stocks for ai, and don't forget this cool AI stock trading analysis forum which is worth considering with trading ai software, top artificial intelligence stocks to buy, ai based stock analysis, artificial intelligence and stock trading, best stock valuation website, ai stock to buy, chat gpt stocks, best tool for stock market analysis, best stock trading analysis software, buy stock in openai, bearing in mind this extra resources about AI stock trading platform tips which is also great. Also, have a look at this on the main page about AI stock trading platform tips alongside all free stock reports, best investment research apps, ai model to predict stock market, stock prediction software free, companies to invest in for ai, stock tools for analysis, bot trading stocks, best ai software stocks, ai software companies stock, free stock picks for today, as well as this click this for AI stock picker analysis blog bearing in mind top app for stock analysis, ai for stock analysis, best long term ai stocks, ai for day trading, al technology stock, read more for alongside all chat gpt ai stock, ai technology shares, stock price prediction software, ai stock picking software, best investment research apps, for good measure. Check more @ Cool AI Stock Investing Analysis Website 50c5b33
FrankJScott вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 21:07.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!