• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Бинарник и Utf-8

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Собственно имеем ситуацию, берем и открываем файл через нотесстрим как бинарный и работаем с ним.
Всё бы хорошо но там содержится уникод - русские и украинские буквы
Это приводит к тому, что нужно прочитать ДВА байта а не один, и собрать в стринг из них ОДНУ букву
Тоесть к примеру, глядя бинарник мы видим: D0 9F - это соответствует русской букве "П", уникод этой буквы 1055
Сразу выбил формулу, что если взять два байта то стринг мы получим
s1 = Uchr$(b1*256+b2-52352)
тоесть D0 9F я преобразовал в букву "П"
так вот мне интересно откуда взялась эта цифра 52352??
Подозреваю, что она сильно зависит от первого байта
Есть где нибудь правила уникода? :)
 
A

Akupaka

Всё бы хорошо но там содержится уникод - русские и украинские буквы
Вообще-то, сама кириллица это не юникод еще.

Тоесть к примеру, глядя бинарник мы видим: D0 9F - это соответствует русской букве "П"
Уникод буквы "П" (1055) = H041F, Это UTF-16.
А откуда твоя формула? Просто придумал? :)

Твой файл, из твоего описания, записан в UTF-8.
Преобразование из Unicode to UTF-8.
Символы Unicoda в диапазоне 0x00000080 — 0x000007FF записываются в виде двух байт 110xxxxx 10xxxxxx
Т.е. 11 бит размещаются в двух байтах так: 5 бит в старшем байте, 6 - в младшем.
"П" = UTF-8 Hex D09F = UTF-8 Bin 1101 0000 1001 1111 -> Unicode Bin 0000 0100 0001 1111 = Unicode Hex 041F

Откуда цифра 52352? :) Из твоей формулы - ты ее обратным вычислением получил.
Вот тут посмотри про формирование UTF-8
 

VladSh

начинающий
Lotus Team
11.12.2009
1 784
157
BIT
57
так вот мне интересно откуда взялась эта цифра 52352??
Подозреваю, что она сильно зависит от первого байта
Есть где нибудь правила уникода? :)
Может быть это BOM?
Что-то есть здесь:
 

ToxaRat

Чёрный маг
Green Team
06.11.2007
3 332
42
BIT
0
Akupaka
Преобразование из Unicode to UTF-8.
Символы Unicoda в диапазоне 0x00000080 — 0x000007FF записываются в виде двух байт 110xxxxx 10xxxxxx
Т.е. 11 бит размещаются в двух битах так: 5 бит в старшем байте, 6 - в младшем.
"П" = UTF-8 Hex D09F = UTF-8 Bin 1101 0000 1001 1111 -> Unicode Bin 0000 0100 0001 1111 = Unicode Hex 041F
благодарствую, это именно то что нужно! :)
а цифру я да, от обратного получил, но при пересечении русско/украинского она становилась не верной
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!