Объявление

Свернуть
Пока нет объявлений.

Corona QR програмирование сертификата не проходящего проверку

Свернуть
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • ну не знаю, почтовые куеры и многие другие я не анализировал
    поизучай историю и зачем оно нужно
    https://datatracker.ietf.org/doc/dra...tstrom-base45/


    1. Introduction A QR-code is used to encode text as a graphical image. Depending on the characters used in the text various encoding options for a QR- code exist, e.g. Numeric, Alphanumeric and Byte mode. Even in Byte mode a typical QR-code reader tries to interpret a byte sequence as a UTF-8 or ISO/IEC 8859-1 encoded text. Thus QR-codes cannot be used to encode arbitrary binary data directly. Such data has to be converted into an appropriate text before that text could be encoded as a QR-code. Compared to already established Base64, Base32 and Base16 encoding schemes, that are described in RFC 4648 [RFC4648], the Base45 scheme described in this document offer a more compact QR- code encoding. One important difference from those and Base45 is the key table and that the padding with '=' is not required.

    Комментарий


    • Я уже прежде заходил на этот сайт и читат эту депешу.
      В ней указано авторское право и правила кодирования.
      Это то, что выставили официально.
      Обратите внимание на дату создания "начала проекта" -
      1-ое июля 2021, а истекает он 2-го января 2022-го.

      Нажмите на изображение для увеличения. 

Название:	image26.png 
Просмотров:	1385 
Размер:	210.0 Кб 
ID:	7283
      Но до этого времени, эта библиотека нигде не фигурирует. Зачем вообще настолько заморачиваться с новым алгоритмом, если уже пошёл второй десяток лет "проверенной в бою"- Base64?
      Я сам работал в торговле и ревизором и кладовщиком довольно долгое время и имел дело со сканерами ТСД
      Как правило, товар ищется по линейному штрихкоду, содержащему 13 цифр. С QR конечно всё сложнее, туда можна записать гораздо больше информации.
      Но я никогда прежде не встречал, чтобы товар по хитрому кодировали. Для чего?
      Вот и здесь, они разрабатывали эту библиотеку ещё задолго до начала эпидемии. Только тогда они не называли её сертификатом.
      Или Вы действительно верите в ту чушь, что китаец съел летучую мышь и заболел "короной", став нулевым пациентом?
      Да китайцы всю жизнь едят разных змей, червяков, жуков и медуз и живут по 100 лет.
      Всё это было спланировано заранее.
      Вложения

      Комментарий


      • конечно никто в здравом уме не верит в барановирус.
        но вот про библиотеку для куер считаю слишком притянуто за уши, но может быть и так, как предпологаешь ты.

        интересно чтото еще кроме гринпаса использует эту библиотеку?
        вопрос в том, зачем именно Base45 для сертивиката? чем другие не устраивали?


        I just tried rendering a QR code of the 692 characters of the introductory paragraph (with lines joined appropriately), and compared it with a QR code of the same text, uppercased and with out-of-range characters `,`, `[` and `]` changed to %. This reduced an 89×89 code down to 77×77, a 24% reduction in area. If this is roughly the ratio, then Base45-encoding binary data by QR code will yield roughly 17% area savings compared with Base64. (Base45 gets 50% bloat, then 24% shrink = multiple of 1.14; Base64 gets 33% bloat = multiple of 1.33; Base45 / Base64 = 1.14 / 1.33 = 0.83.)
        Base64 in binary: log₂ 64 / 8 = 75.000% efficient

        Base45 in alphanumeric: 4 log₂ 256 / 33 = 96.970% efficient
        https://news.ycombinator.com/item?id=27603173
        вот и вся отгадка, эффективно для куера и буквочисел

        Комментарий


        • Помогите разобраться...
          Пример ручного кодирования :

          Строка Foobar

          Используем таблицу :

          Нажмите на изображение для увеличения.   Название:	G2AI_Dc9UKo.jpg  Просмотров:	0  Размер:	114.7 Кб  ID:	7329


          1: Превращаем в список байтов UTF8
          [70, 111, 111, 98, 97, 114]
          ... То есть :
          F - 70
          o - 111
          o - 111
          b - 98
          a - 97
          r - 114

          2: Превращаем в группы по 2 байта
          [[70, 111], [111, 98], [97, 114]]

          3 : Превращаем целые числа, рассматривая группы как базу 256
          [18031, 28514, 24946]

          4: Превращаем в группы из трёх целых чисел, меньше 45
          [8, 40, 31, 14, 3, 29, 12, 14, 16]

          5: Превращаем в закодированную строку
          8+VE3TCEG
          ...

          Проблема возникает на третьем пункте, например откуда берётся число 18031 ?
          Соответственно, нет смысла разбираться далее, если "споткнулись" об текущий пункт.
          Последний раз редактировалось Delphi_RTTI; 01-12-2021, 08:57 PM.

          Комментарий


          • Четвёртый и пятый пункт не менее загадочен, чем третий :
            Что означает: "Превращаем в группы из трёх чисел, меньше 45"?
            Как можно из числа
            18031 получить в результате 8, 40, 31 ?
            По-какому алгоритму это просчитывать?

            Комментарий


            • Вот алфавит Base45 :

              "00" => "0",
              "01" => "1",
              "02" => "2",
              "03" => "3",
              "04" => "4",
              "05" => "5",
              "06" => "6",
              "07" => "7",
              "08" => "8",
              "09" => "9",
              "10" => "A",
              "11" => "B",
              "12" => "C",
              "13" => "D",
              "14" => "E",
              "15" => "F",
              "16" => "G",
              "17" => "H",
              "18" => "I",
              "19" => "J",
              "20" => "K",
              "21" => "L",
              "22" => "M",
              "23" => "N",
              "24" => "O",
              "25" => "P",
              "26" => "Q",
              "27" => "R",
              "28" => "S",
              "29" => "T",
              "30" => "U",
              "31" => "V",
              "32" => "W",
              "33" => "X",
              "34" => "Y",
              "35" => "Z",
              "36" => " ",
              "37" => "$",
              "38" => "%",
              "39" => "*",
              "40" => "+",
              "41" => "-",
              "42" => ".",
              "43" => "/",
              "44" => ":"
              Но даже эта таблица мне не помагает, не могу сопоставить числа. Что с чем сравнивать?
              Нет формулы, а пример не достаточно подробный.

              Комментарий


              • ну мля коллега, сам выдумал себе нелегкий путь, так сам и решай. другие пользуются готовыми библиотеками. походу опытные и не тратят силы в пустую

                уже бы брутфорс запутить стоило и за это время ты бы приблизился к цели в 10 световых лет, на все 4ре дня!!!
                не успеешь на 1% забрутфорсить и нынешний приват кий уже будет анулирован, тк год прошел

                Комментарий


                • Зачем удалять сообщений и фото?
                  Правда глаза колит?
                  Последний раз редактировалось Delphi_RTTI; 03-12-2021, 10:57 PM.

                  Комментарий


                  • Сообщение от Delphi_RTTI Посмотреть сообщение
                    Попробую поспрашивать на форуме "4pda".
                    По-сути, в библиотеки всего 2 функции для ко/декодирования строки.
                    JSON в топку, я нашёл альтернативу в виде широкой строки WideString и не нужно создавать каждый раз объект для пары "Имя" : "значение".
                    Это вообще полная дурость.
                    Зачем генерировать QR?
                    У меня есть безумная идея, хочу проверить, но только
                    после интегрирования библиотеки в свой проект.
                    Работал с JSON на Delphi7, есть отличная библиотека SuperObject.pas

                    Комментарий


                    • Всем привет!
                      Неделю потратил на написание "с нуля" библиотеки Base45 на Delphi...
                      Долго и нудно вникал в алгоритм ко/декодирования строки. Оф-описание слишком сжато и тема раскрыта не полностью.
                      Итак, приведу пример кодирования и объясню на понятном, русском языке :
                      Отдельно приведу пример для чётного и нечётного количества символов.
                      ...
                      Кодируем строку Delphi ( Строка имеет чётное количество символов - 6 )
                      Используя таблицу :

                      Нажмите на изображение для увеличения.   Название:	ANSI.png  Просмотров:	0  Размер:	24.6 Кб  ID:	7455

                      Разбираем строку на символы : 'D', 'e', 'l', 'p', 'h', 'i' - [68, 101, 108, 112, 104, 105]
                      ...

                      Так как число чётное, собираем в группы по два байта:
                      [68, 101] [108, 112] [104, 105]
                      ...
                      Далее используем формулу : C = A * 256 + B
                      То есть :
                      68 * 256 + 101 = 17509
                      108 * 256 + 112 = 27760
                      104 * 256 + 105 = 26729

                      ...
                      Мы получаем три числа : [17509], [27760], [26729]
                      ...
                      Превращаем каждое число в группу из трёх целых чисел, меньше 45 :
                      (4, 29, 8), (40, 31, 13), (44, 8, 13)
                      ...
                      Как ? - В той формуле, что они выставили на сайте, находится 3 неизвестных переменных.
                      Мне удалось вывести обратную формулу и найти каждое значение отдельно :
                      ...

                      Первое число : 17509 : 45 : 45 = 8.64 ( без остатка = 8 )
                      Обозначим результат X
                      ...
                      Находим второе число :
                      B = X * 45 * 45
                      C = (17509 - B) : 45
                      То есть : 8 * 45 * 45 = 16200
                      (17509 - 16200) : 45 = 29.08
                      ( без остатка 29 )
                      ...
                      Находим третье число :
                      Y = C * 45
                      Z = B + Y

                      29 * 45 = 1305
                      Z = 16200 + 1305 = 17505

                      Результат ( 3-е число ) - 17509 - Z = 4
                      Итог : (8, 29, 4) в обратном порядке.

                      Тоже самое, проделываем для остальных пар чисел
                      ...
                      Теперь, используя их таблицу Base45, я определил так :

                      PHP код:
                      const // Кодируем
                        
                      Enc45: array[0..44of Char =
                        (
                      '0','1','2','3','4','5','6','7','8','9','A','B',' C','D','E','F','G','H','I',
                        
                      'J','K','L','M','N','O','P','Q','R','S','T','U','V ','W','X','Y','Z',' ','$',
                        
                      '%','*','+','-','.','/',':');

                      const 
                      // Декодируем
                        
                      Dec45 '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'
                      ...
                      Числа 4, 29, 8, 40, 31, 13, 44, 8, 13 соответствуют закодированной строке 4T8+VD:8D (заглавными)
                      ...
                      НО, и это ещё не всё...
                      Если кодируемая строка имеет нечётное число символов, например
                      Delphi5 ( 7 символов )
                      тогда последний (нечётный) кодируется следующим образом :
                      ...
                      Символ '5' согласно ANSI таблице, имеет код 53
                      Кодируем в двух байтах :


                      [R, W] - байты нечётного числа
                      R = Q : 45;
                      W = Q - (45 * R);
                      Выходит [8, 1]
                      Полная строка : 4T8+VD:8D81
                      ...
                      Вынос мозга...
                      Метод расшифровки выложу чуть позже.
                      Кого интересует библиотека Base45.dcu для Delphi 7, пишите.
                      Вложения
                      Последний раз редактировалось Delphi_RTTI; 10-12-2021, 04:43 PM.

                      Комментарий


                      • Расшифровка строки на Base45
                        Алгоритм кодирования я выложил выше, а вот сейчас будем раскодировать...
                        Итак, имеется всё та же строка 4T8+VD:8D
                        ...
                        Разбиваем строку на символы и преобразовываем в числа :
                        '4', 'T', '8', '+', 'V', 'D', ':', '8', 'D'
                        Используя алфавит Base45, получаем числа :
                        4, 29, 8, 40, 31, 13, 44, 8, 13
                        ...
                        Число чётное. Собираем в группы по три : (4, 29, 8) (40, 31, 13) (44, 8, 13)
                        Теперь используем обратную формулу, выложенную мной в предыдущем посту :
                        X = A + B * 45 + C * 45 * 45
                        Конечно же - A, B, C это 4, 29, 8 в первом случае пары
                        ...
                        Итого:

                        4 + 29 * 45 + 8 * 45 * 45 = 17509
                        40 + 31 * 45 + 13 * 45 * 45 = 27760
                        44 + 8 * 45 + 13 * 45 * 45 = 26729

                        ...
                        Получаем массив чисел:
                        [17509] [27760] [26729]

                        Разбираем числа в группы по два байта, по формуле :
                        X = A : 256 то есть 17509 : 256 = 68 (Первый байт).
                        Z = 68 * 256 = 17408

                        Y = A - Z то есть 17509 - 17408 = 101 (Второй байт).
                        ...
                        И так для каждого числа, которое кстати не может превышать 65535 ( тип Word в Делфи)
                        Теперь собираем числа в строку :
                        (68, 101, 108, 112, 104, 105)
                        И преобразовываем каждый код в символ:
                        68 - D
                        101 - e
                        108 - l
                        112 - p
                        104 - h
                        105 - i

                        Раскодировали...
                        ...

                        Теперь обсудим случай, если закодированная строка имеет нечётное количество символов.
                        Пусть будет та же
                        4T8+VD:8D81
                        Последнюю пару символов мы не можем разбить на три, так как их там всего два - 81
                        Делаем следующее :
                        Обозначим переменные :

                        P - Последний символ = 1
                        E - Предпоследний = 8

                        R:= E div 45;
                        W:= E - (45 * R); // Первый байт
                        //
                        X:= P div 45;
                        Y:= P - (45 * X); // Второй байт

                        X:= Y + (45 * W);
                        И мы получаем Х, равный 53, что в таблице ANSI = '5'
                        53 = [8, 1]
                        ...
                        Вот и вся загадка библиотеки Base45 ...
                        Так как я библиотеку для Delphi уже написал, то нет необходимости играться каждый раз с формулами для ручного ко/декодирования.
                        Процесс полностью автоматизирован и можно по-символьно наблюдать кодируемый текст.

                        Нажмите на изображение для увеличения. 

Название:	_2021-12-10_210656.png 
Просмотров:	757 
Размер:	29.8 Кб 
ID:	7457
                        Удачи !!!
                        Последний раз редактировалось Delphi_RTTI; 10-12-2021, 09:07 PM.

                        Комментарий


                        • молодца, теперь расскажи каков был план. библиотека есть. что дальше?
                          брутфорс от противного?

                          Комментарий


                          • Помогите пожалуйста нужен срочно диг-пасс
                            и за работы

                            Комментарий


                            • Привет!
                              Сегодня тестировал библиотеку Base45 на предмет длинной строки, до ~ 1500 символов. Результат сравнивал с онлайн ко/декодером. При кодировании - 1:1,
                              а при расшифровке небольшая неувязочка. Я с ней уже завтра разберусь. Моя идея и эксперимент не увенчались успехом и я подозреваю, что дело даже не в Base45.
                              Как вообще можна было додуматься кроме кодирования строки её ещё и сжимать ?
                              (кстати не особо эфективно). Я потерял логическую цепь последовательности действий. А правильно бутфорсить ещё нужно уметь, а не от фонаря, методом подбора лепить инфу куда не попадя.
                              Проводил эксперимент : Полностью остановил приложение "SafeBorder", очистил Кэш и данные, выключил интернет. Запускаю приложение и при сканировании рабочего (настоящего) QR, он проверку проходит. Соответственно, ключ хранится не в самом приложении, а зашит в код. Я думаю, что если бы ключ действительно хранился в телефоне, то народные умельцы из 4pda, уже давно бы его взломали.
                              Второй вопрос : что обозначают данные на скриншоте?,-
                              год рожденья бабушки?


                              image widget

                              Комментарий


                              • Сориентируйте меня по логической цепочке.
                                Для начала формируем обычную строку, в виде JSON.
                                Далее конвертация в CBOR.
                                Далее сжатие ZLIB
                                Далее кодирование Base45
                                Ну и собственно запись готовой строки в QR.
                                Верно?

                                Комментарий

                                Обработка...
                                X