Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import random
- import math
- # Все переменные используемые мной, как счетчики увеличивающиеся инкрементированием имеют пометку "inc"
- class Hex:
- hex_string = ''
- row = -10
- def string_creator(self, hex_byte, file_dir, inc):
- size_info = Hex.file_size_info(file_dir)
- if inc == size_info:
- if len(Hex.hex_string) == 21:
- Hex.string_mod(hex_byte)
- else:
- Hex.hex_string = Hex.hex_string + ' ' + hex_byte
- hex_byte = '00'
- while len(Hex.hex_string) != 50:
- if len(Hex.hex_string) == 21:
- Hex.string_mod(hex_byte)
- else:
- Hex.hex_string = Hex.hex_string + ' ' + hex_byte
- hex_row = Hex.hex_string
- Hex.matrix_creator(hex_row)
- Hex.hex_string = ''
- if len(Hex.hex_string) != 21 and len(Hex.hex_string) < 48 and len(Hex.hex_string) != 47:
- Hex.hex_string = Hex.hex_string + ' ' + hex_byte
- elif len(Hex.hex_string) == 21:
- Hex.string_mod(hex_byte)
- elif len(Hex.hex_string) == 47:
- Hex.hex_string = Hex.hex_string + ' ' + hex_byte
- hex_row = Hex.hex_string # Я знаю, что сейчас ты словил(а) фейспалм, но я не мог не сделать этого.
- Hex.matrix_creator(hex_row)
- Hex.hex_string = ''
- # Получение байтовой длинны файла
- def file_size_info(file_dir):
- size_file = os.stat(file_dir)
- return size_file.st_size
- # Счетчик строк
- @staticmethod
- def row_creator():
- Hex.row = Hex.row + 10
- return f'{Hex.row:08d}'
- # Постановка | в середине строки
- @staticmethod
- def string_mod(hex_byte):
- Hex.hex_string = Hex.hex_string + ' ' + hex_byte + ' ' + '|'
- # Ascii код строки
- @staticmethod
- def ascii_creator(hex_row):
- ascii_nosplit = ''.join(c for c in hex_row if c not in ('|', ' '))
- ascii_no0a = ascii_nosplit.replace('0a', '2e')
- ascii_no0d = ascii_no0a.replace('0d', '2e')
- ascii_row = bytes.fromhex(ascii_no0d).decode('windows-1251')
- return ascii_row
- # Собиратель строк
- @staticmethod
- def matrix_creator(hex_row):
- row_iter_int = Hex.row_creator()
- row_iter_str = str(row_iter_int)
- ascii_row = Hex.ascii_creator(hex_row)
- input_row = row_iter_str + '|' + hex_row + ' |' + ascii_row
- print(input_row)
- # Вызов шалупони, начало редактора
- def main():
- print(r'__________________________________________________')
- print(r'====================HEX.Editor====================')
- print(r'__________________________________________________')
- print('\n---------------enter file directory--------------- \n')
- file_dir = input('')
- shelypon()
- print('00000000| 00 01 02 03 04 05 06 07 | 08 09 0a 0b 0c 0d 0e 0f | ASCII_COD ')
- file_work(file_dir)
- print('\nДля редактирования байта введите его положение и то на, что хотите его изменить.'
- 'Шаблон: row, column, byte'
- '\nПример:\n'
- '00000000| 00 01 02 03 04 05 06 07 | 08 09 0a 0b 0c 0d 0e 0f | ASCII_COD \n'
- '00001210| 37\n'
- '00001210, 0a, 2e')
- print('\n----but first enter the free directory to work----\n')
- intermediate_dir = input('')
- print('\nНачинайте редактирование байтов\n')
- edit_user = input('')
- separation(edit_user, file_dir, intermediate_dir)
- # Создание файла для редактора, вызов записи в этот файл
- def writing_blocks_file(inc_change, inc_file_sharing, file_extract_blocks, mix, change_to, file_dir, mb_block,
- intermediate_dir):
- number_blocks = 1
- file_block = open(intermediate_dir, "wb")
- block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block)
- write_to_file(file_extract_blocks, mix, inc_change, change_to, file_block, number_blocks, inc_file_sharing,
- mb_block)
- file_extract_blocks.close() # такое закрытие необходимо, для открытия в другом редиме
- file_block.close()
- file_reload(file_dir, inc_file_sharing, mb_block, intermediate_dir)
- # Перезапись файла
- def file_reload(file_dir, inc_file_sharing, mb_block, intermediate_dir):
- file_copying = open(intermediate_dir, "rb")
- file_insertions = open(file_dir, 'wb')
- file_copying.seek(0, 0)
- file_insertions.seek(0, 0)
- inc_rewriting = 0
- while inc_rewriting != inc_file_sharing:
- many_byte = file_copying.read(mb_block)
- file_insertions.write(many_byte)
- inc_rewriting += 1
- file_copying.close()
- file_insertions.close()
- # Запись блоков которые не изменны
- def block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block):
- while number_blocks != inc_change or number_blocks != inc_file_sharing:
- regenerated_block = file_extract_blocks.read(mb_block)
- file_block.write(regenerated_block)
- number_blocks += 1
- # Запись блока с изменением
- def write_to_file(file_extract_blocks, mix, inc_change, change_to, file_block, number_blocks, inc_file_sharing,
- mb_block):
- change_in_block = mix - (mb_block * (inc_change - 1))
- many_byte = file_extract_blocks.read(change_in_block - 1)
- file_block.write(many_byte)
- one_byte = file_extract_blocks.read(1)
- one_byte = bytes.fromhex(change_to)
- file_block.write(one_byte)
- many_byte = file_extract_blocks.read(mb_block - change_in_block)
- file_block.write(many_byte)
- if number_blocks != inc_file_sharing:
- number_blocks += 1
- block_writer(number_blocks, inc_change, inc_file_sharing, file_extract_blocks, file_block, mb_block)
- # Запись в файл
- def separation(edit_user, file_dir, intermediate_dir):
- mb_block = 1024 * 1024
- row_edit = edit_user[0:8]
- column_edit = edit_user[10:12]
- change_to = edit_user[14:16]
- mix = mixing(column_edit, row_edit)
- file_size = file_siz(file_dir)
- inc_file_sharing = math.ceil(file_size / (mb_block - 1))
- inc_change = math.ceil(mix / (mb_block - 1))
- with open(file_dir, 'rb') as file_extract_blocks:
- writing_blocks_file(inc_change, inc_file_sharing, file_extract_blocks, mix, change_to, file_dir, mb_block,
- intermediate_dir)
- os.remove(intermediate_dir)
- # Получение смешения
- def mixing(column_edit, row_edit):
- row_int = int(row_edit)
- row_16 = (row_int * 16) / 10
- column_int = int(column_edit, 16)
- row_16 = int(row_16 + column_int) + 1
- return row_16
- # Получение байтовой длинны файла
- def file_siz(file_dir):
- size_file = os.stat(file_dir)
- return size_file.st_size
- # Открытие файла, получение хекс-байт строк
- def file_work(file_dir):
- with open(file_dir, 'rb') as file_showing:
- # file_showing.lseek(file_showing, 0, 0)
- # one_byte = os.read(file_1, 0)
- size_info = file_siz(file_dir)
- inc = 0
- while True:
- if inc == size_info:
- break
- sixteen_byte = file_showing.read(1)
- hex_byte_sixteen = bytes.hex(sixteen_byte)
- inc += 1
- # string_creator(hex_byte, inc, size_info) # умножить на 16 для кол ва байт
- #hex_str = Hex()
- Hex.string_creator(hex_byte, file_dir, inc)
- # Шелупонь
- def shelypon():
- damki = random.randint(1, 10)
- if damki == 1:
- print('Заходи, сбоку заходи!')
- elif damki == 2:
- print('Ай, мляяя, маслину поймал')
- elif damki == 3:
- print('Манаалиииииит!')
- elif damki == 4:
- print('Ты бы еще консервных банок насобирал...')
- elif damki == 5:
- print('Посадил как-то дед репку. В Зоне… И выросла репка большая-пребольшая.'
- 'Такая большая… что еслиб не ствол — хрен бы дед от нее отбился!')
- elif damki == 6:
- print('Молодые сталкеры не умеют собирать артефакты… Зато ОПЫТНЫЕ — умеют НЕ собирать.')
- elif damki == 7:
- print('В небе как-то столкнулись НАШ и американский спутники.'
- 'Американцы врут, ЧТО их спутник был нешпионским. А наши врут, что наш спутник был … неуправляемым.')
- elif damki == 8:
- print('Как то раз ПЛОТЬ увидела неподалеку долговца. И хрюкает, значит, своим поросятам:'
- '— Ну-ка детки (доброжелательно). Быстро закройте уши… Сейчас он по нам промажет и ТАК материться будет!')
- elif damki == 9:
- print('Бродит, говорят, по зоне ходячая аномалия — непьющий и некурящий сталкер.'
- 'Приманивается на запах молочка или манной каши. Способ дистанционного обнаружения —'
- ' на расстоянии 200 метров от объекта… счетчик Гейгера зашкаливает.')
- elif damki == 10:
- print('Ты валыной не свети')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement