Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя
Показано с 11 по 20 из 38
  1. #11
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Немного оффтопа
      Открыть/закрыть
    В чём то идея хорошая такого подключения, моды можно толкать при этом зная что его не раскодируют и не украдут, а в чём то и плохо, до паролей добраться легче, но опять же кто полезет из разрабов хостинга смотреть пароли если у них и так всё на ладошке в бд) всё таки это хорошая идея

  2. #12
    Аватар для AlexDizaro
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.08.2015
    Сообщений
    6
    Репутация:
    0 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    Немного оффтопа
      Открыть/закрыть
    В чём то идея хорошая такого подключения, моды можно толкать при этом зная что его не раскодируют и не украдут, а в чём то и плохо, до паролей добраться легче, но опять же кто полезет из разрабов хостинга смотреть пароли если у них и так всё на ладошке в бд) всё таки это хорошая идея
    Кажется меня так и никто не понял
    Под гибкой настройкой я имел ввиду возможность переключения в настройках возможность сохранения в файл или же в самом моде

  3. #13
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    В чем проблема, хранить зашифрованный пароль и прочии настройки в файле? (Ну или .cfg)
    В том, что злоумышленнику достаточно будет только восстановить функцию для расшифровки. В Pawn это достаточно просто, на самом деле, т.к. используется совсем небольшой набор инструкций. В то же время, если хранить пароль внутри мода, будет больше возможностей спрятать его среди прочих данных. Или можно вообще составить пароль из других данных в моде (например, взять какие-нибудь случайные символы из строк, используемых под правила игры на сервере, сообщения об ошибках и т.п.) и этот пароль использовать для доступа к БД. Чтобы расшифровать такой пароль, злоумышленнику придётся не только восстановить функцию, но ещё и найти все те строки, которые используются для составления пароля.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. #14
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от AlexDizaro Посмотреть сообщение
    Кажется меня так и никто не понял
    Под гибкой настройкой я имел ввиду возможность переключения в настройках возможность сохранения в файл или же в самом моде
    Так опишите ситуацию более подробно. Что именно Вы хотите сделать, в каких ситуациях собираетесь использовать и для чего это вообще нужно. Прямо разжуйте на пальцах и тогда Вам сразу помогут. А угадывать желания по тексту тут никто не умеет
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  5. #15
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    В том, что злоумышленнику достаточно будет только восстановить функцию для расшифровки. В Pawn это достаточно просто, на самом деле, т.к. используется совсем небольшой набор инструкций. В то же время, если хранить пароль внутри мода, будет больше возможностей спрятать его среди прочих данных. Или можно вообще составить пароль из других данных в моде (например, взять какие-нибудь случайные символы из строк, используемых под правила игры на сервере, сообщения об ошибках и т.п.) и этот пароль использовать для доступа к БД. Чтобы расшифровать такой пароль, злоумышленнику придётся не только восстановить функцию, но ещё и найти все те строки, которые используются для составления пароля.
    Прибавляетем к паролю пару символов слева, по середине и в конец.
    Используем Base64 (вот, кстати плагин)
    И тогда мне будет очень, жаль "Тру хаскеров" которые будут это переводить. Алгоритм подстановки символов можно сделать через рандом.

    А ещё можно одну часть пароля закодировать в Base64, а вторую часть например в sha512.
    Потом скрепить строку и готово.
    А кто чёрт возьми будет знать, что так сделано?
    Последний раз редактировалось $continue$; 03.01.2016 в 17:30. Причина: upd
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  6. #16
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    А ещё можно одну часть пароля закодировать в Base64, а вторую часть например в sha512.
    Потом скрепить строку и готово.
    А кто чёрт возьми будет знать, что так сделано?
    Тот, кто может дизассемблировать мод и восстановить шифрующую функцию. Есть такие люди.
    Кстати говоря, с плагином даже проще, чем с кастомной функцией: восстанавливать нужно только код на Pawn и чем меньше такого кода, тем проще расшифровать пароль.



    Цитата Сообщение от AlexDizaro Посмотреть сообщение
    Кажется меня так и никто не понял
    Под гибкой настройкой я имел ввиду возможность переключения в настройках возможность сохранения в файл или же в самом моде
    PHP код:
    new const DATABASE_CONFIG_FILE_NAME "dbconf.txt";
    #define    DATABASE__USE_CONFIG_FILE
    #define    DATABASE__DEFAULT_HOST        "localhost"
    #define    DATABASE__DEFAULT_USER        "root"
    #define    DATABASE__DEFAULT_NAME        "palladium"
    #define    DATABASE__DEFAULT_PASSWORD    ""


    #if !defined USE_MYSQL_CONFIG_FILE

    new const database_host[] = DATABASE__DEFAULT_HOST;
    new const 
    database_user[] = DATABASE__DEFAULT_USER;
    new const 
    database_name[] = DATABASE__DEFAULT_NAME;
    new const 
    database_pass[] = DATABASE__DEFAULT_PASSWORD;

    #else // !defined USE_MYSQL_CONFIG_FILE

    new database_host[64] = DATABASE__DEFAULT_HOST;
    new 
    database_user[16] = DATABASE__DEFAULT_USER;
    new 
    database_name[32] = DATABASE__DEFAULT_NAME;
    new 
    database_pass[32] = DATABASE__DEFAULT_PASSWORD;

    public 
    OnGameModeInit()
    {
        new 
    File:config_file_handle fopen(DATABASE_CONFIG_FILE_NAME);
        if (
    _:config_file_handle == 0)
        {
            
    printf(
                
    "Warning: Couldn't open file %s! Applying default settings...",
                
    DATABASE_CONFIG_FILE_NAME
            
    );
            
    database_host DATABASE__DEFAULT_HOST;
            
    database_user DATABASE__DEFAULT_USER;
            
    database_name DATABASE__DEFAULT_NAME;
            
    database_pass DATABASE__DEFAULT_PASSWORD;
            return;
        }
        static const 
    read_warning_str[] =
            
    "Warning: Length of the %s string exceeds the limit of %d characters.";
        if (
    fread(config_file_handledatabase_host) > sizeof(database_host) - 1)
            
    printf(read_warning_str"host"sizeof(database_host) - 1);
        if (
    fread(config_file_handledatabase_user) > sizeof(database_user) - 1)
            
    printf(read_warning_str"user"sizeof(database_user) - 1);
        if (
    fread(config_file_handledatabase_name) > sizeof(database_name) - 1)
            
    printf(read_warning_str"user"sizeof(database_name) - 1);
        if (
    fread(config_file_handledatabase_pass) > sizeof(database_pass) - 1)
            
    printf(read_warning_str"user"sizeof(database_pass) - 1);
        
    fclose(config_file_handle);
    #if defined mysql_config__OnGameModeInit
        
    mysql_config__OnGameModeInit();
    #endif
    }
    #if defined _ALS_OnGameModeInit
        #undef OnGameModeInit
    #else
        #define _ALS_OnGameModeInit
    #endif
    forward mysql_config__OnGameModeInit();
    #define OnGameModeInit mysql_config__OnGameModeInit

    #endif // !defined USE_MYSQL_CONFIG_FILE 
    P.S.: Код не тестировался, используйте на свой страх и риск.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  7. #17
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    P.S.: Код не тестировался, используйте на свой страх и риск.
    PHP код:
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"DATABASE_CONFIG_FILE_NAME"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_host"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_name"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_pass"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_user" 
    Что тут не так могло пойти?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  8. #18
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от vovandolg Посмотреть сообщение
    PHP код:
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"DATABASE_CONFIG_FILE_NAME"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_host"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_name"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_pass"
    D:\Program\ÀðáàéòåíÑÀÌÏ\pawnoÓËÜÒ\mod.pwn(44746) : warning 203symbol is never used"database_user" 
    Что тут не так могло пойти?
    А ты "mysql_connect" не забыл изменить, вставив эти переменные?
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. #19
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    PHP код:
    //и куда его вписывать если он в инклуде как бы уже вписан
    D:\Program\12\pawno12\mod.pwn(44747) : warning 203symbol is never used"DATABASE_CONFIG_FILE_NAME" 
    PHP код:
    //Поменял в самом моде
    ConnectMySQL(database_hostdatabase_userdatabase_namedatabase_pass);
    //и выбило
    error 035argument type mismatch (argument 1)

    //Вот как построен коннект
    stock ConnectMySQL(host[], user[], db[], pass[])
    {
        
    connects mysql_connect(hostuserdbpass);
        if(
    mysql_errno() == 0printf("Подключение к базе успешно");
        else return 
    printf("Подключиться к базе не удалось");
        
    mysql_function_query(connects,"SET NAMES cp1251",false,"","");
        
    mysql_function_query(connects,"set character_set_client=\'cp1251\'",false,"","");
        
    mysql_function_query(connects,"set character_set_results=\'cp1251\'",false,"","");
        
    mysql_function_query(connects,"set collation_connection=\'cp1251_general_ci\'",false,"","");
        
    mysql_function_query(connects,"SELECT * FROM `bizz`",true,"LoadBizz","");
        
    mysql_function_query(connects,"SELECT * FROM `House`",true,"LoadProperty","");
        
    mysql_function_query(connects,"SELECT * FROM `meria`",true,"OnLoadKaznaCallback","");
        
    mysql_function_query(connects,"SELECT * FROM `other`",true,"OnLoadMaterialsCallback","");
        return 
    1;

    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

  10. #20
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В общем, вот как у меня вышло без перехвата
    PHP код:
    #define    USE_MYSQL_CONFIG_FILE
    #define    DATABASE__DEFAULT_HOST        "localhost"
    #define    DATABASE__DEFAULT_USER        "root"
    #define    DATABASE__DEFAULT_NAME        "sa-mp"
    #define    DATABASE__DEFAULT_PASSWORD    ""


    #if !defined USE_MYSQL_CONFIG_FILE

    new const database_host[] = DATABASE__DEFAULT_HOST;
    new const 
    database_user[] = DATABASE__DEFAULT_USER;
    new const 
    database_name[] = DATABASE__DEFAULT_NAME;
    new const 
    database_pass[] = DATABASE__DEFAULT_PASSWORD;

    #else

    new const DATABASE_CONFIG_FILE_NAME[] = "dbconf.txt";
    new 
    database_host[64] = DATABASE__DEFAULT_HOST;
    new 
    database_user[16] = DATABASE__DEFAULT_USER;
    new 
    database_name[32] = DATABASE__DEFAULT_NAME;
    new 
    database_pass[32] = DATABASE__DEFAULT_PASSWORD;

    #endif 
    PHP код:
    public OnGameModeInit()
    {
        
    #if defined USE_MYSQL_CONFIG_FILE
        
    new File:config_file_handle fopen(DATABASE_CONFIG_FILE_NAME);
        if (
    _:config_file_handle == 0)
        {
            
    printf(
                
    "Warning: Couldn't open file %s! Applying default settings...",
                
    DATABASE_CONFIG_FILE_NAME
            
    );
            
    strcat(database_hostDATABASE__DEFAULT_HOST64);
            
    strcat(database_userDATABASE__DEFAULT_USER16);
            
    strcat(database_nameDATABASE__DEFAULT_NAME32);
            
    strcat(database_passDATABASE__DEFAULT_PASSWORD32);
        }
        static const 
    read_warning_str[] =
            
    "Warning: Length of the %s string exceeds the limit of %d characters.";
        if (
    fread(config_file_handledatabase_host) > sizeof(database_host) - 1)
            
    printf(read_warning_str"host"sizeof(database_host) - 1);
        if (
    fread(config_file_handledatabase_user) > sizeof(database_user) - 1)
            
    printf(read_warning_str"user"sizeof(database_user) - 1);
        if (
    fread(config_file_handledatabase_name) > sizeof(database_name) - 1)
            
    printf(read_warning_str"bd_name"sizeof(database_name) - 1);
        if (
    fread(config_file_handledatabase_pass) > sizeof(database_pass) - 1)
            
    printf(read_warning_str"bd_password"sizeof(database_pass) - 1);
        
    fclose(config_file_handle);

        
    strdel(database_hoststrlen(database_host)-2strlen(database_host));
        
    strdel(database_userstrlen(database_user)-2strlen(database_user));
        
    strdel(database_namestrlen(database_name)-2strlen(database_name));
        
    strdel(database_passstrlen(database_pass)-2strlen(database_pass));
        
    #endif

        
    mysql_connect_ID mysql_connect(database_hostdatabase_userdatabase_namedatabase_pass);
        return 
    1;

    В коде DC достаточно недочётов. Сейчас попробую и версию с перехватом реализовать.

    P.S. Только учти, что формат записей в конфиг-файле будет такой:
    PHP код:
    localhost
    root
    sa
    -mp 
    Для удобства работы можно перевести весь код под mxINI, дабы можно было к конфигурациям приписывать ключи, намекающие на предназначение этих конфигураций

    - - - Добавлено - - -

    Собственно, вот, вроде, рабочая версия перехвата
    PHP код:
    #define    USE_MYSQL_CONFIG_FILE
    #define    DATABASE__DEFAULT_HOST        "localhost"
    #define    DATABASE__DEFAULT_USER        "root"
    #define    DATABASE__DEFAULT_NAME        "palladium"
    #define    DATABASE__DEFAULT_PASSWORD    ""


    #if !defined USE_MYSQL_CONFIG_FILE

    new const database_host[] = DATABASE__DEFAULT_HOST;
    new const 
    database_user[] = DATABASE__DEFAULT_USER;
    new const 
    database_name[] = DATABASE__DEFAULT_NAME;
    new const 
    database_pass[] = DATABASE__DEFAULT_PASSWORD;

    #else // !defined USE_MYSQL_CONFIG_FILE

    new const DATABASE_CONFIG_FILE_NAME[] = "dbconf.txt";
    new 
    database_host[64] = DATABASE__DEFAULT_HOST;
    new 
    database_user[16] = DATABASE__DEFAULT_USER;
    new 
    database_name[32] = DATABASE__DEFAULT_NAME;
    new 
    database_pass[32] = DATABASE__DEFAULT_PASSWORD;

    public 
    OnGameModeInit()
    {
        new 
    File:config_file_handle fopen(DATABASE_CONFIG_FILE_NAME);
        if (
    _:config_file_handle == 0)
        {
            
    printf(
                
    "Warning: Couldn't open file %s! Applying default settings...",
                
    DATABASE_CONFIG_FILE_NAME
            
    );
            
    strcat(database_hostDATABASE__DEFAULT_HOST64);
            
    strcat(database_userDATABASE__DEFAULT_USER16);
            
    strcat(database_nameDATABASE__DEFAULT_NAME32);
            
    strcat(database_passDATABASE__DEFAULT_PASSWORD32);
            return;
        }
        static const 
    read_warning_str[] =
            
    "Warning: Length of the %s string exceeds the limit of %d characters.";
        if (
    fread(config_file_handledatabase_host) > sizeof(database_host) - 1)
            
    printf(read_warning_str"host"sizeof(database_host) - 1);
        if (
    fread(config_file_handledatabase_user) > sizeof(database_user) - 1)
            
    printf(read_warning_str"user"sizeof(database_user) - 1);
        if (
    fread(config_file_handledatabase_name) > sizeof(database_name) - 1)
            
    printf(read_warning_str"name"sizeof(database_name) - 1);
        if (
    fread(config_file_handledatabase_pass) > sizeof(database_pass) - 1)
            
    printf(read_warning_str"pass"sizeof(database_pass) - 1);
        
    fclose(config_file_handle);

        
    strdel(database_hoststrlen(database_host)-2strlen(database_host));
        
    strdel(database_userstrlen(database_user)-2strlen(database_user));
        
    strdel(database_namestrlen(database_name)-2strlen(database_name));
        
    strdel(database_passstrlen(database_pass)-2strlen(database_pass));
    #if defined mysql_config__OnGameModeInit
        
    mysql_config__OnGameModeInit();
    #endif
    }
    #if defined _ALS_OnGameModeInit
        #undef OnGameModeInit
    #else
        #define _ALS_OnGameModeInit
    #endif
    forward mysql_config__OnGameModeInit();
    #define OnGameModeInit mysql_config__OnGameModeInit

    #endif // !defined USE_MYSQL_CONFIG_FILE 
    И вот скрин того, как должен выглядеть файл:
      Открыть/закрыть

    Если данные не указаны, под них обязательно должна быть пустая строка (даже если это последняя строка, как у меня, в случае с паролем)
    Последний раз редактировалось DeimoS; 27.02.2016 в 00:34.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  11. 2 пользователя(ей) сказали cпасибо:
    Edwin (05.07.2016) vovandolg (27.02.2016)
 

 
Страница 2 из 4 ПерваяПервая 1 2 3 4 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

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