Hex_CoderV3.1

Скрипт Hex_CoderV3.1 2022-02-12

Здарова, хлопцы. В данной публикации будет более детальный разбор мною написанного кода, которую наконец-то удалось допилить до полного функционала как чистый скрипт.
Сам скрипт представляется как набор 3 ключевых функций: PIXELATION2, PIXELATION и UNPIXELATION. Суть данных функций говорят их имена. Первые 2 функции занимаются созданием на основе текстовых данных пикселей, которые содержат в себе те самые текстовые данные. Потом функция объединяет пиксели в 1 картинку.

Картинка сама по себе делится на 2 линии: первая - текст, вторая - длина истины. Длина истины - это подлинная длина текста в байтах(каждый символ переводятся в байты по сути сразу). И тут действуют 2 закона: закон о кратности, закон о прямоугольности(я все придумал как упрощение дела). Первый закон можно трактовать так: "кол-во байтов должно быть кратно контейнерам(пикселям)", т.е если у нас есть n-ое кол-во байтов данных, то для них нужно выделить n/3 пикселей, чтобы все помещалось, иначе механизм преобразования просто пошлет в далекие края на переделку. Второй закон трактуется так: "пиксели должны размещаться так, чтобы те образовывали прямоугольник". Скажу вкратце - нет прямоугольника - нет картинки(так принято).

На примере 1 функции я расскажу что да как работает.
функция пикселизации текста через консоль напрямую:
def PIXELATION2(text):
  n, table, line_lenght, stroka, list_all = 0, [], [], [], []
  text = text.encode("UTF-8")
  while len(text) != n:
    table.append(text[n])
    n +=1
  lenf = len(table)
  if len(table) % 3 != 0:
    while len(table) % 3 != 0:
      table.append(random.randrange(1, 255))
  leght_s = len(table) // 3
  while lenf > 0:
    line_lenght.append(((lenf % 256), 0, 0))
    lenf = lenf // 256
  for k in range(0, (leght_s - len(line_lenght))):
      line_lenght.append((0, random.randrange(1, 255), random.randrange(1, 255))) 
  for i in range(leght_s):
    tiple = (table[i*3], table[i*3+1], table[i*3+2])
    stroka.append(tiple)
  list_all.append(stroka)
  list_all.append(line_lenght)
  array = np.array(list_all, dtype=np.uint8)
  new_image = Image.fromarray(array)
  return new_image.save('new' + str(random.randrange(1, 10000000)) + '.png')
схема такая: вы пишете в консоль текст, потом через цикл while получаем набор байтов 1 списком. Далее этот список гоняем в 2 темы: тема с линией истины и линией текста.
код линии текста:
линия текста:
## соблюдаем первый и второй законы сразу
if len(table) % 3 != 0:
    while len(table) % 3 != 0:
      table.append(random.randrange(1, 255))
код линии истины:
длина истины:
  leght_s = len(table) // 3 ##подумаем о первом законе немнога
  while lenf > 0:
    line_lenght.append(((lenf % 256), 0, 0))
    lenf = lenf // 256
  for k in range(0, (leght_s - len(line_lenght))): ## здесь второй закон живет
      line_lenght.append((0, random.randrange(1, 255), random.randrange(1, 255)))
Позже идет конечное действие - создание самой картинки:
создание картинок:
## схемка по созданию картинки
for i in range(leght_s):
    tiple = (table[i*3], table[i*3+1], table[i*3+2])
    stroka.append(tiple)
  list_all.append(stroka)
  list_all.append(line_lenght)
  array = np.array(list_all, dtype=np.uint8)
  new_image = Image.fromarray(array)
  return new_image.save('new' + str(random.randrange(1, 10000000)) + '.png')
Далее идем к функции UNPIXELATION. Ее же суть обратная первым функциям: разобрать картинку на байты и преобразовать в текстовый файл.
Первое, что делает функция - это считывание данных с картинки:
чтение картинки:
 im = Image.open(file_name, 'r')
 pixel_values = list(im.getdata())
 im.close()
Потом поиск 2-х линий:
ищем байты нужные:
  for i in range(len(massive)):
    massive1.append(massive[i][0])
    massive1.append(massive[i][1])
    massive1.append(massive[i][2])
  for j in range(lenght*2):
    if pixel_values[j][1] == 0 and pixel_values[j][2] == 0 and pixel_values[j][0] != 0:
          massive_lenghttrue.append(pixel_values[j][0])
Далее идут обратные действия, которые по итогу приводят к конечному действию - преобразование полученных из картинки данных в текст:​
вывод:
  file_out = open('result' + str(random.randrange(1, 10000000)) + '.txt', 'wb')
  MassiveByte = bytearray(massive_tr)
  file_out.write(MassiveByte) 
  file_out.close()

VIRUSTOTAL
GITHUB
YOUTUBE (демонстрация работы)
  • 1644642345406.png
    1644642345406.png
    55.3 KB · Просмотры: 77
Автор
Moren_1488
Скачивания
3
Просмотры
922
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Другие ресурсы пользователя Moren_1488

Сверху Снизу