На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! правила раздела Алгоритмы
1. Помните, что название темы должно хоть как-то отражать ее содержимое (не создавайте темы с заголовком ПОМОГИТЕ, HELP и т.д.). Злоупотребление заглавными буквами в заголовках тем ЗАПРЕЩЕНО.
2. При создании темы постарайтесь, как можно более точно описать проблему, а не ограничиваться общими понятиями и определениями.
3. Приводимые фрагменты исходного кода старайтесь выделять тегами code.../code
4. Помните, чем подробнее Вы опишете свою проблему, тем быстрее получите вразумительный совет
5. Запрещено поднимать неактуальные темы (ПРИМЕР: запрещено отвечать на вопрос из серии "срочно надо", заданный в 2003 году)
6. И не забывайте о кнопочках TRANSLIT и РУССКАЯ КЛАВИАТУРА, если не можете писать в русской раскладке :)
Модераторы: Akina, shadeofgray
Страницы: (4) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Шифр, который нельзя взломать
    Заявляю на весь Советский Союз!!Да что там на весь Союз  -  на весь Мир!Я придумал  шифр ,который нельзя взломать  :).Хотя мой друг говарил мне что его можно  взломать очень легко  ;D я все равно ему не верю.(не зря я Овен  :D) Пока его никто не взломает не поверю.Так что  криптоаналитики (если такие тут есть ) попробуйте взломать! А теперь к делу.
    Алгоритм шифрования примитивный.Обьясняю.Есть трехмерная матрица размером 8x8x8 соответственно и ключ 8x8x8 ;на вход матрицы подается блок данных 8x8.Анализируется
    состаяние каждого бита каждого  подключа из блока подключей  ::).Если 1 ротация влево с последущей вертикальной  ротацией и так с каждым битом.Потом xor входного блока с блоком подключей.И так дальше.(обьясняю и конечно не важно  ;D ).
    Шифруем текст:
    ExpandedWrap disabled
       <br> ;На входе в устройство<br> ;"Hi Zver!"<br> ;в Hex<br> ;0x48 0x69 0x20  0x5A 0x76 0x65 0x72 0x21   <br> ;на выходе<br> ;0xEB 0x1D 0x2C 0xC0 0x21 0xAB 0xF4 0x10<br>
     
    Ну что открытый текст есть , шифрованный тоже.Остался только сам алгоритм шифрования.Хотя многие программеры с неохотай показывают свои исходники я покажу я не жмот.Написал все это давольно быстро а вот одну ошибку отлавливал почти 8 часов  ;D
    Сообщение отредактировано: Zveruga -
      Sorry были траблы с Netom оттяпался кусочек прожки ;D.Попробую еще раз
      ExpandedWrap disabled
        <br> Right_Offset proc<br> push eax<br> ror byte ptr [esi + edx],01h       ;ротация вправо<br> call Set_Old_Bits                     ;Установка все битов<br> call Vertical_Roter_Up              ;Вертикальная ротация вверх<br> call Set_New_Bits                   ;устанавливаем новые биты<br> pop eax      <br> ret<br> Right_Offset endp<br> <br> <br> <br> Left_Offset proc<br> push eax<br> rol byte ptr [esi + edx],01h            ;ротация влево<br> call Set_Old_Bits                         ;установка всех битов<br> call Vertical_Roter_Down              ;вертикальное смещение вниз<br> call Set_New_Bits                       ;Устанавливываем новые биты<br> pop eax<br> ret<br> Left_Offset endp<br> <br> Set_Old_Bits proc<br> push eax<br> xor eax,eax<br> mov  al,byte ptr [esi]<br> bt   ax,bx<br> jc _Set_Bit_0                        ;Бит установлен<br> mov Bit_0,0<br> jmp Check_Bit_1                    ;Следущий бит<br> _Set_Bit_0:<br> mov Bit_0,1<br> <br> Check_Bit_1:<br> mov al,byte ptr [esi + 01h]<br> bt ax,bx<br> jc _Set_Bit_1<br> mov Bit_1,0<br> jmp Check_Bit_2<br> _Set_Bit_1:<br> mov Bit_1,1<br> <br> Check_Bit_2:<br> mov al,byte ptr [esi + 02h]<br> bt ax,bx<br> jc _Set_Bit_2<br> mov Bit_2,0<br> jmp Check_Bit_3<br> _Set_Bit_2:<br> mov Bit_2,1<br> <br> Check_Bit_3:<br> mov al,byte ptr [esi + 03h]<br> bt ax,bx<br> jc _Set_Bit_3<br> mov Bit_3,0<br> jmp Check_Bit_4<br> _Set_Bit_3:<br> mov Bit_3,1<br> <br> Check_Bit_4:<br> mov al,byte ptr [esi + 04h]<br> bt ax,bx<br> jc _Set_Bit_4<br> mov Bit_4,0<br> jmp Check_Bit_5<br> _Set_Bit_4:<br> mov Bit_4,1<br> <br> Check_Bit_5:<br> mov al,byte ptr [esi + 05h]<br> bt ax,bx<br> jc _Set_Bit_5<br> mov Bit_5,0<br> jmp Check_Bit_6<br> _Set_Bit_5:<br> mov Bit_5,1<br> <br> Check_Bit_6:<br> mov al,byte ptr [esi + 06h]<br> bt ax,bx<br> jc _Set_Bit_6<br> mov Bit_6,0<br> jmp Check_Bit_7<br> _Set_Bit_6:<br> mov Bit_6,1<br><br><br> Check_Bit_7:<br> mov al,byte ptr [esi + 07h]<br> bt ax,bx<br> jc _Set_Bit_7<br> mov Bit_7,0<br> jmp Exit_1<br> _Set_Bit_7:<br> mov Bit_7,1<br> <br> Exit_1: <br> pop eax<br> ret<br> Set_Old_Bits endp<br> <br> <br> Set_New_Bits proc<br> push eax<br> xor eax,eax <br> mov al,byte ptr [esi]                   ;Загрузка первого байта из блока<br> <br> cmp New_Bit_0 , 1                     ;Проверка бита <br> je  Set_Bit_0                             ;Да установить<br> btr ax,bx                                  ;Сбросить<br> jmp Byte_1                               ;Выход<br> Set_Bit_0:                                <br> bts ax,bx                                   ;Установка <br> <br> Byte_1:<br> mov byte ptr [esi],al<br> mov al,byte ptr [esi + 01h]<br> cmp New_Bit_1 , 1<br> je Set_Bit_1<br> btr ax,bx<br> jmp Byte_2<br> Set_Bit_1:<br> bts ax,bx      <br> <br> Byte_2:<br> mov byte ptr [esi + 01h],al<br> mov al,byte ptr [esi + 02h]<br> cmp New_Bit_2 , 1<br> je Set_Bit_2<br> btr ax,bx<br> jmp Byte_3<br> Set_Bit_2:<br> bts ax,bx      <br> <br> Byte_3:<br> mov byte ptr [esi+ 02h],al<br> mov al,byte ptr [esi + 03h]<br> cmp New_Bit_3 , 1<br> je Set_Bit_3<br> btr ax,bx<br> jmp Byte_4<br> Set_Bit_3:<br> bts ax,bx      <br> <br> Byte_4:<br> mov byte ptr [esi + 03h],al<br> mov al,byte ptr [esi + 04h]<br> cmp New_Bit_4 , 1<br> je Set_Bit_4<br> btr ax,bx<br> jmp Byte_5<br> Set_Bit_4:<br> bts ax,bx      <br> <br> Byte_5:<br> mov byte ptr [esi + 04h],al<br> mov al,byte ptr [esi + 05h]<br> cmp New_Bit_5 , 1<br> je Set_Bit_5<br> btr ax,bx<br> jmp Byte_6<br> Set_Bit_5:<br> bts ax,bx      <br> <br> Byte_6:<br> mov byte ptr [esi + 05h],al<br> mov al,byte ptr [esi + 06h]<br> cmp New_Bit_6 , 1<br> je Set_Bit_6<br> btr ax,bx<br> jmp Byte_7<br> Set_Bit_6:<br> bts ax,bx      <br><br><br> Byte_7:<br> mov byte ptr [esi + 06h],al<br> mov al,byte ptr [esi + 07h]<br> cmp New_Bit_7 , 1<br> je Set_Bit_7<br> btr ax,bx<br> jmp Exit<br> Set_Bit_7:<br> bts ax,bx      <br> <br> Exit:<br> mov byte ptr [esi+07h],al<br> pop eax<br> ret<br> Set_New_Bits endp<br> <br> Xor_Blocks proc<br> mov al,byte ptr [esi]                      ;операция xor с байтом блока ключа, блок на блок :)<br> xor al,byte ptr [edi]<br> xchg al,[esi]<br> mov al,byte ptr [esi + 01h]<br> xor al,byte ptr [edi + 01h]       <br> xchg al,[esi + 01h]<br> mov al,byte ptr [esi + 02h]<br> xor al,byte ptr [edi + 02h] <br> xchg al,[esi + 02h]<br> mov al,byte ptr [esi + 03h]<br> xor al,byte ptr [edi + 03h] <br> xchg al,[esi + 03h]<br> mov al,byte ptr [esi + 04h]<br> xor al,byte ptr [edi + 04h] <br> xchg al,[esi + 04h]<br> mov al,byte ptr [esi + 05h]<br> xor al,byte ptr [edi + 05h] <br> xchg al,[esi + 05h]<br> mov al,byte ptr [esi + 06h]<br> xor al,byte ptr [edi + 06h]<br> xchg al,[esi + 06h]<br> mov al,byte ptr [esi + 07h]<br> xor al,byte ptr [edi + 07h]  <br> xchg al,[esi + 07h]<br> ret<br> Xor_Blocks endp <br> <br> Deshifr_Down_Offset proc<br> push eax<br> call Set_Old_Bits<br> call Vertical_Roter_Down<br> call Set_New_Bits<br> rol byte ptr [esi + edx],01h<br> pop eax<br> ret<br> Deshifr_Down_Offset endp<br> <br> Deshifr_Up_Offset proc<br> push eax<br> call Set_Old_Bits<br> call Vertical_Roter_Up<br> call Set_New_Bits<br> ror byte ptr [esi + edx],01h<br> pop eax<br> ret<br> Deshifr_Up_Offset endp<br> <br> Vertical_Roter_Down proc<br> push eax<br> xor eax,eax<br> mov al,Bit_0<br> mov New_Bit_1,al<br> mov al,Bit_1<br> mov New_Bit_2,al<br> mov al,Bit_2<br> mov New_Bit_3,al<br> mov al,Bit_3<br> mov New_Bit_4,al<br> mov al,Bit_4<br> mov New_Bit_5,al<br> mov al,Bit_5<br> mov New_Bit_6,al<br> mov al,Bit_6<br> mov New_Bit_7,al<br> mov al,Bit_7<br> mov New_Bit_0,al<br> pop eax<br> ret<br> Vertical_Roter_Down endp<br> <br> Vertical_Roter_Up proc<br> push eax<br> xor eax,eax<br> mov al,Bit_7<br> mov New_Bit_6,al<br> mov al,Bit_6<br> mov New_Bit_5,al<br> mov al,Bit_5<br> mov New_Bit_4,al<br> mov al,Bit_4<br> mov New_Bit_3,al<br> mov al,Bit_3<br> mov New_Bit_2,al<br> mov al,Bit_2<br> mov New_Bit_1,al<br> mov al,Bit_1 <br> mov New_Bit_0,al<br> mov al,Bit_0<br> mov New_Bit_7,al      <br> pop eax<br> ret<br> Vertical_Roter_Up endp<br> <br> BSCAS_Shifr proc<br> pusha<br> Shifr_Byte:<br> push edi                              ;Сохранить указател на ключ  <br> push ecx                             ;сахраним число входных блоков <br> xor ebx,ebx                          ;Обнуляем регистры на всякие пожарные<br> xor eax,eax<br> xor edx,edx<br> <br> mov cl,08h                           ;8 блоков подключей <br> Key_Block:<br> push ecx                              ;сохранить число блоков <br> mov cl,08h                            ;число подключей<br> @Loop_Per_Key:                    ;цикл по прохаждению подключей<br> push ecx                               ;сохранить число подключей<br> mov al,byte ptr [edi + edx]       ;подключ в al<br> mov cl,08h                            ;пробег по байту<br> @Loop_Per_Byte_Of_Key:<br> bt ax,bx<br> jc _LeftOffset                       ;Бит установлен ? <br> call Right_Offset                    ;Нет не установлен<br> jmp Next_Bit_Of_Key<br> _LeftOffset:<br> call Left_Offset<br> Next_Bit_Of_Key:<br> inc bx                                   ;следущий бит ключа   <br> loop @Loop_Per_Byte_Of_Key<br><br> xor ebx,ebx                            ;обнулим индекс столбцов<br> inc edx                                  ;увеличим индекс строк<br> pop ecx                                 ;восстановим стчечик подключей<br> loop @Loop_Per_Key<br>  <br> call Xor_Blocks                        ;операция xor над блоками<br>      <br> pop ecx                                 ;восстановим счетчик блоков<br> xor edx,edx                            ;обнулим индекс строк<br> xor ebx,ebx<br> add edi,08h                            ;переместим указатель на следущий блок ключей<br> loop Key_Block<br>    <br> pop ecx                                ;восстановим число входных блоков<br> pop edi                                 ;восстановим указатель на ключ <br> add esi,08h                           ;перейдем к следующему блоку    <br> loop Shifr_Byte<br> popa      <br> ret<br> BSCAS_Shifr endp<br> <br> BSCAS_Deshifr proc<br> pusha<br> xor eax,eax                         ;очищаем eax,edx,ebx ( мусор нам не нужен :) )<br> xor ebx,ebx<br> xor edx,edx<br> add edi,56                           ;перемещаем указатель на последний блок ключа                      <br> Deshifr_Octo_Byte:<br> push ecx                             ;сохраняем число входных блоков <br> push edi                              ;сохраняем указатель на ключ<br> <br> mov cl,08h                           ;число блоков подключей<br> Deshifr_Loop_Key_Block: <br> push ecx                              ;сохраняем число блоков подключей<br> ;Начальная стадия         -       операции xor шифрованного блока с блоком подключей<br> call Xor_Blocks<br> mov cl,08h                            ;количество подключей в блоке<br> mov dl,07h                            ;начинаем снизу блока подключей <br> Deshifr_Loop_Per_Key:<br> push ecx                               ;сохраняем количество подключей<br> mov al,byte ptr [edi + edx]       ;подключ   <br> mov cl,08h                             ;пробег по байту <br> mov bl,07h<br> Deshifr_Loop_Per_Byte_Of_Key:<br> bt ax,bx                                ;Бит установлен ?  <br> jc   _Deshifr_Up_Offset            ;Да установлен<br> call Deshifr_Down_Offset          ;Нет не установлен  <br> jmp _Deshifr_Inc<br> _Deshifr_Up_Offset:<br> call Deshifr_Up_Offset  <br> _Deshifr_Inc:<br> dec  bx                                 ;уменьшаем указатель сталбцов<br> loop Deshifr_Loop_Per_Byte_Of_Key<br><br> xor ebx,ebx                            ;устанавливаем индекс сталбцов в ноль <br> dec edx                                 ;уменьшаем  индекс строк <br> pop ecx                                 ;восстанавливаем количество подключей<br> loop Deshifr_Loop_Per_Key<br>    <br> sub edi,08h                             ;переход к следующему блоку ключей <br> xor edx,edx                             ;устанавливаем индекс строки в ноль<br> pop ecx                                  ;Восстанавливаем количество блоков ключей<br> loop Deshifr_Loop_Key_Block <br>  <br> pop edi                                   ;восстанавливаем указатель на ключ<br> pop ecx                                  ;восстанавливаем количество блоков к дешифрации<br> loop Deshifr_Octo_Byte<br> popa      <br> ret<br> BSCAS_Deshifr endp<br>
        Если тебе не трудно, будь так добр, изложить нормально, с введением всех терминов и т.п., твой алгоритм... а исходники, это дело второстепенное.
          Цитата SVK , 26.03.03, 19:59:40
          Если тебе не трудно, будь так добр, изложить нормально, с введением всех терминов и т.п., твой алгоритм... а исходники, это дело второстепенное.

          Хорошо попробую еще раз.Надо проста немного пространственного воображения и все.
          Размер матрицы 8x8x8 .Ключ является 8x8x8 разрядным и его биты  являются соответственно  элементами матрицы.Далее на вход подается блок данных размером 8x8.
           
          Допустим у нас есть блок подключей(всего их восемь):
          ExpandedWrap disabled
            <br>101010111 <= анализ отсюда<br>101010101<br>001000101<br>101001101<br>100000101<br>100100101<br>101010101<br>101010101<br>

          Начинаем его анализировать.Так как бит установлен и он имеет например индекс j,k мы делаем следующую операцию - ротация влево j строки  входного блока и ротация и последующая ротация k -го столбца входного блока.Тоесть биты блока подключей  представляют из себя векторы ротации.После выполнения 64 шагов ротаций происходит
          операция xor с двух блокав.И передача входного блока на следущий раунд шифрования  

            Ммммм... Я, к стати, то же Овен... ;D Посему, убеждать тебя, извини, но не буду... ;D Времени меньше чем нет... ;D ;D ;D

            Самое слабое место твоего шифра -- работа с многомерным массивом фиксированной длины. Представь -- есть файл, который будет длмннее твоего шифрумого массива 8х8. Тебе его придется дополнять до 8х8 чем-то (к примеру, нулями)... Вывод, думаю, очевиден. ;D

            Далее. Если честно, то лучше погляди где-нибудь сырцы на стандартные алгоритмы блочного шифрования... (тот же DES или Triple-DES -- описано весьма и весьма не плохо... И довольно простенько... Особенно сам по себе DES... На нем столько уже упражнялись... ;D ;D ;D). Когда посмотришь, IMHO, желание создавать алгоритмы шифров само собой пройдет... ;D ;D ;D
              :):)
              1) симметричный ключ
              2) его фиксированный размер (как уже сказали:) )
              3) в чем принципиально отличие от того же xor'а с 2048битным ключом?
                Цитата Zveruga, 26.03.03, 19:28:24
                Я придумал  шифр ,который нельзя взломать... 

                Не бывает неломаемых шифров, в принципе любой шифр можно вскрыть элемнтарным перебором ключей, другое дело, что это может занять слишком много времени...
                  Цитата the_Shadow, 26.03.03, 21:44:00
                  Если честно, то лучше погляди где-нибудь сырцы на стандартные алгоритмы блочного шифрования... (тот же DES или Triple-DES -- описано весьма и весьма не плохо... И довольно простенько... Особенно сам по себе DES... На нем столько уже упражнялись... ;D ;D ;D). Когда посмотришь, IMHO, желание создавать алгоритмы шифров само собой пройдет... ;D ;D ;D

                  Тогда-уж лучше наш Гост, там хотяб колдовства с табличными данными нет (вроде).

                  Может быть алгоритм и хорош, но тебе надо это доказать:
                  - любой ключ должен обеспечить одинаковую степень защиты (или процедура генерации хороших ключей, следовательно их уже будет меньше)
                  - необоснованность манипуляций над ключем (ротация влево, а почему не вправо; на одну позицию, а почему не на две или варьируемое значение и т.д.)
                  - его можно быстро перебрать (по сравнению с тем-же DES, мне так кажеться)
                  - и это еще не все...

                  Удачи ;)

                    можно мне исходник проги получить ?
                      да... теперь вопросы....
                      Цитата

                      Хорошо попробую еще раз.Надо проста немного пространственного воображения и все.

                      даа без этого никуда...
                      Цитата

                      Размер матрицы 8x8x8 .Ключ является 8x8x8 разрядным и его биты  являются соответственно  элементами матрицы.Далее на вход подается блок данных размером 8x8.

                      те ключ это еще одна матрица 8x8x8 так ? получается что блок из 64байт мы ксорим другими 64ю байтами и на каждом шаге мы еще меняем ключ ? так ?
                      Цитата

                      Допустим у нас есть блок подключей(всего их восемь):
                      101010111 <= анализ отсюда
                      101010101
                      001000101
                      101001101
                      100000101
                      100100101
                      101010101
                      101010101
                      Начинаем его анализировать.Так как бит установлен и он имеет например индекс j,k мы

                      те в самом начале j и k равны по единице так ? j=1,k=1
                      Цитата

                      делаем следующую операцию - ротация влево j строки  входного блока и ротация и последующая ротация k -го столбца входного блока.

                      что значит 'и ротация и последущая ротация' ты сам то понял что  понаписал ?
                      ладно допустим... мы сдвинули влево первую строчку куда делся выпихнутый бит ? допустим у нас циклическая ротация те все остается на месте.. а куда мы сдвигаем столбец то ? вправо в лево ?
                      Цитата

                      Тоесть биты блока подключей  представляют из себя векторы ротации.После выполнения 64 шагов ротаций происходит
                      операция xor с двух блокав.И передача входного блока на следущий раунд шифрования  

                      каких блоков ?? что ты с чем ксоришь ? ты можешь НОРМАЛЬНО описать всю эту процедуру ??  тут не телепаты сидят и мысли чужие не умеют читать.
                      да и еще можно мне исходник проги!?
                        Цитата SVK , 27.03.03, 10:08:17

                        - необоснованность манипуляций над ключем (ротация влево, а почему не вправо; на одну позицию, а почему не на две или варьируемое значение и т.д.)

                        Все обоснованно.Если бит установлен то ротация влево с последущей вертикальной ротацией вниз, если бит сброшен ротация вправо с последующей ротацией вверх.И манипуляция производится с входным блоком а не с ключом.
                        Цитата

                        - его можно быстро перебрать (по сравнению с тем-же DES, мне так кажеться)

                        Перебрать быстро число размерностью в 64 байта  :) .Ты представляеш себе это число ?

                        Что касается уязвимости.Нет тут никакой уязвимости.Почему я так говарю.Вот смотрите:
                        Противник имея открытый и шифрованый текст никогда не узнает ключ которым был зашифрован этот текст потому что он не знает все промежуточных состаяний на этапе шифрования.Всего таких состаяний 8.Вот например откуда он будет знать значение последнего 8 блока подключей если он не знает значение 7 блока.Ведь конечный шифрованый блок мог получиться какими только  угодно сдвигами.И еще  один плюс к моему алгоритму  :) .В нем можно увеличивать количество шифровальных устройств при этом будет увеличиваться и значение ключа.Тоесть можно обганять развитие вычеслительной техники так что  ключ  будет невозможно перебрать.(Ох надеюсь что я не ошибаюсь)

                        2 IXODes У нас есть 8 битовых плоскостей размер 8x8.Это наш ключ.(В моем представлении эта матрица).У нас есть входной блок 8 байт или таже битовая плоскасть
                        размером 8x8 .На первом раунде шифрования все операции выполняются над входной битовой плоскостью и первой битовой плоскостью ключа.Сделали все ротации делаем
                        W  xor B1  W - входной блок , B1 - первая битовая плоскасть подключей и  
                        передаем нашу входную плоскасть дальше.


                        Да и еще.Люди если кто знает какого-нибудь криптоаналитика предложите ему взломать
                        этот шифр  :)(уж очень интересно можно его взломать или нет).А если взломаете чтож я тут на днях подумал ::).Придумал еще более крутейший алгоритм  :) .Если этот взломаете я вам предложу и его.
                        А пока меня не переубедите - "Мой алгоритм нельзя взломать"(только атака грубой силой)  :)
                          - любой ключ должен обеспечить одинаковую степень защиты (или необходима процедура генерации хороших ключей, следовательно их уже будет меньше)

                          Цитата
                          Все обоснованно.Если бит установлен то ротация влево с последущей вертикальной ротацией вниз, если бит сброшен ротация вправо с последующей ротацией вверх.И манипуляция производится с входным блоком а не с ключом.

                          Знаешь математические фокусы... там зритель проводит массу вычислений, а фокусник потом дает ответ - очень похоже :)
                            хе,  а что ты подразумеваешь под словом "взломать"?

                            самый тупой xor если ключ неизвестен можно взломать?
                              Цитата SVK , 27.03.03, 15:32:20

                              Знаешь математические фокусы... там зритель проводит массу вычислений, а фокусник потом дает ответ - очень похоже :)

                              Только вот найдется ли этот фокусник который даст мне ответ на мою массу вычислений ;D.Вот в чем вопрос :)
                                To Zed

                                "Не бывает неломаемых шифров, в принципе любой шифр можно вскрыть элемнтарным перебором ключей, другое дело, что это может занять слишком много времени..."

                                Бывает, но только у "овнов", был бы я овен, сам бы пару десятков придумал
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0431 ]   [ 15 queries used ]   [ Generated: 3.05.24, 07:12 GMT ]