Показано с 41 по 50 из 50
-
08.02.2023, 22:45 #41
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
отвечал в ЛС, а потом решил опубликовать - описанная ситуация очень часто встречается.
Админы "редиски", грохнули тему "Пропатченая платформа 1С 8.3. Не работает", там много полезного было написано.
И еще вопрос, все УТ 10.3, 11.5 на разных пк вылетают с крахом "Ключ защиты программы больше недоступен". как правило в конфигураторе, когда накатываешь доработки, это от "качества DATA" зависит, можно как то побороть?
1) в качестве мести за признаки взлома (проверка памяти ключа),
и
2) может появляться на слабых компах (у меня дома на ноуте HP550 с WinXP тест Гилёва не проходил (лиц-я от HASPLM) - как раз из-за "Ключ ... больше недоступен").
Замечу, что HASPLM раздает лицензии по сетевому протоколу UDP. У него есть серьёзный недостаток - никакой гарантии доставки пакета до получателя.
Предположим платформа (она всегда работает многопоточно) параллельно обновлению конфы отправила запрос к HASPLM выполнить какой-то запрос к ключу (прочитать из памяти ключа, или EncodeData/DecodeData с какой-то цепочкой байт), и HASPLM мгновенно прислала ответ, но высокая нагрузка на процессор создает такие обстоятельства, что драйвер сетевой карты похерит все приходящие сетевые пакеты, если его буфер входных данных заполнен, а он не успевает его разгребсти из-за нехватки времени ЦПУ из-за слабости процессора (мало физических ядер, мал размер буфера данных и буфера команд внутри ЦПУ, мала частота работы ядра ЦПУ, низкая скорость работы модулей памяти на мат.плате, и прочая и прочая)
Как проверить "качество DATA"? У меня есть патч для либы backbas, который выключает все "курения бамбука по 60-90 сек" при проверке памяти ключа (она же DATA в дампе), проверка происходит мгновенно - толстый клиент или взлетает, или сразу показывает крах "Ключ ... больше недоступен" (не надо ждать 70-80 минут, как в случае с непатченным изделием).
"курение бамбука по 60-90 сек" - это противодействие изучению работы изделия в отладчике.
Если "качество DATA" проверено и не вызывает мести в виде краха "потеря ключа", то что можно предпринять для борьбы с этим крахом?
1) пробовать поставить локальную ВМ (хоть с виндой+мультик+HASPLM, хоть с линуксом+эмулятор+HASPLM), раздающую лицензии через HASPLM. Сетевая карточка у ВМ виртуальная, авось это поможет не терять UDP-пакеты (сам это не проверял, извиняйте за авантюризм)
2) обновлять конфу под линуксом, изделие под линукс лечить унипатчем (унипатч - это эмулятор, внедрённый в код изделия; нет проблемы потери UDP-пакетов, летящих от HASPLM).
3) лицензию на взлёт должен выдавать сервер кластера - нет проблемы потери UDP-пакетов, летящих от HASPLM, т.к. общение идет по протоколу TCP (есть гарантия доставки пакета до получателя)."кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
18 пользователя(ей) сказали cпасибо:
blademaster (28.02.2023), bnmbnmbnm (09.02.2023), Den-1977 (09.02.2023), Dim-soft (02.07.2023), freeraider (13.02.2023), g0ga (11.02.2023), garik-kg (09.02.2023), ilya.sh (09.02.2023), kelt44 (06.03.2023), Megakiller (09.02.2023), mvl000 (14.02.2023), olegtelec (10.02.2023), redhat2020 (12.02.2023), root7 (20.01.2024), Timothy6551 (09.02.2023), vovashulga (19.03.2023), zed_ds (02.03.2023), _BigB_ (08.02.2023)
-
13.06.2023, 21:38 #42
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
бесплатная IDA 8.3 для Linux-x64
Код:SHA256 checksums F9912C333F8B98331F0EC41ACDE839089D0237ADE32A3CF32F81A2B754232922 idafree83_linux.run
бесплатная IDA 8.3 для Windows-x64
Код:SHA256 checksums 10080A057704630578E697C6BB0B09968A54138075CACAB175F62D60C71D0A1F idafree83_windows.exe
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
-
12.07.2023, 13:20 #43
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Сообщение от yurykk;
Потом испытал SN=FFFXFFXX (опять поправил Data[9],Data[10]) - получился рабочий дамп.
Четыре палёных дампа для мультика воскресли из пепла!
Генератор 9 и 10 байта (NN,MM) можно будет внедрить в код последнего унипатча, если сектанты продолжат хардкодить палёные SN.Последний раз редактировалось HPDX2300; 12.07.2023 в 17:52.
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
-
15.07.2023, 22:57 #44
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
В первых строках скрипта меняете пары {SERVER_KEY_SN, SERVER_KEY_Data} и {CLIENT_KEY_SN, CLIENT_KEY_Data}.
Внимание: не все поля в дампе надо менять. Впрочем, делайте как хотите, ибо это допускается.
Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.
Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не Локальный!)
Порядок байтов во всех полях, и, в частности, в CLIENT_KEY_SN - как в исполняемых модулях для процессора Intel - младший байт идет первым
Недавно я написал: "Четыре палёных дампа для мультика воскресли из пепла!"
В подтверждение этих слов - я подставил в скрипте данные из дампов виндового унипатча с двумя палёными SN и чуть-чуть модифицировал SN и Data так, чтобы получились дампы, выдерживающие 2-х этапную проверку изделием памяти ключа.
Повторю для "чайников":
это патчер изделия для линукса-x64
код ниже сохранить в файл unipatch.py
запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
python3 unipatch.py
если предварительно выполнить:
chmod +x unipatch.py
, то запускать можно будеть так:
./unipatch.py
Код:#!/usr/bin/env python3 import sys, os, glob, mmap SERVER_KEY_PASSWORD = bytearray(b'\x7A\x23\x25\x41') #SERVER_KEY_SN=0x281DCF71 - blocked, so modify it a bit: 0x281DCE71 => Data[9-10]: BC 07 SERVER_KEY_SN = bytearray(b'\x71\xCE\x1D\x28') SERVER_KEY_HASPTYPE = bytearray(b'\x01\x00\x00\x00') SERVER_KEY_MEMORYSIZE=bytearray(b'\x01\x00\x00\x00') SERVER_KEY_SecTable =bytearray(b'\x15\xEA\x8F\xEA\x73\xEA\xEB\xEA') SERVER_KEY_Data=bytearray(b'\ \x01\x00\x00\x00\x00\x00\x00\xD0\xBC\x07\x3F\x28\x30\x02\xE5\x6F\ \x3E\x39\xD4\x76\x9F\x6F\xD4\x76\x21\x57\x02\x41\xC3\xCC\xD5\xA7\ \x4B\x4C\xC2\x81\x64\x84\x55\x76\x41\xE1\x5E\x2C\x18\xA7\x6F\xF2\ \x08\xE1\x40\xA0\x4E\x94\xA7\x4A\xB5\x41\x53\x6D\x48\xC3\x6D\xE4\ \xA4\xEC\xC8\x9C\x27\x7D\xE0\x79\x51\xB1\x25\xC6\xA1\x69\x14\xFB\ \x03\x7B\xC5\x1B\xE3\xEF\xA3\x1E\x04\xB5\xA5\xE1\x4E\xC8\x5D\x28\ \x99\x30\x10\x39\x2F\x8D\xB3\xE0\x95\xF0\x36\x91\x56\x46\xC4\x75') SERVER_KEY_LicNum = bytearray(b'\x01\x00') CLIENT_KEY_PASSWORD = bytearray(b'\xCB\x70\x6D\x3B') # CLIENT_KEY_SN=0x1B93C5D6 - blocked, so modify it a bit: 0x1B93C4D6 => Data[9-10]: 97 F1 CLIENT_KEY_SN = bytearray(b'\xD6\xC4\x93\x1B') CLIENT_KEY_HASPTYPE = bytearray(b'\x0A\x00\x00\x00') CLIENT_KEY_MEMORYSIZE=bytearray(b'\x04\x00\x00\x00') CLIENT_KEY_SecTable =bytearray(b'\x9A\x21\x2C\x25\xDE\x65\x6C\x65') CLIENT_KEY_Data=bytearray(b'\ \x01\x00\x00\x00\x00\x00\x00\x08\x97\xF1\x84\xCF\xDC\x4E\x1E\xBB\ \x55\x6E\x19\x91\x2D\x4A\x74\xA3\x33\x7D\x33\x69\x30\xE3\x5C\x64\ \xE5\xD7\x5B\x51\xC3\xC4\x9D\x0F\xF7\xD5\xF6\xA4\x34\x0E\xE5\xE5\ \x4B\x63\x44\x2E\x80\x73\x06\xF8\x6A\xD1\x37\xBA\x0F\x9A\xFD\x74\ \x7B\x5C\x89\xAE\x3B\xAC\x18\xBB\x71\x8A\x9B\x85\x7C\x13\x1D\x9F\ \xBF\x55\x82\x70\x6D\x87\xDA\x18\x0A\xBD\xC4\x22\x05\xA5\x28\xD4\ \x54\xB2\xBC\x38\xF1\xF2\xE6\xF4\x54\x09\x42\x4C\xB2\xE1\x1D\xAB') CLIENT_KEY_LicNum = bytearray(b'\x64\x00') pattern = bytearray(b'\x41\x81\x78\x08\x6C\x68\x73\x68') unipatch = bytearray(b'\x51\x53\x52\x57\x56\xE8\x88\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xA0\x00\x00\x00\x00\x00\x00\x00\xA4\x00\x00\x00\x00\x00\x00\x00\xA8\x00\x00\x00\x00\x00\x00\x00\xAC\x00\x00\x00\x00\x00\x00\x00\xB0\x00\x00\x00\x00\x00\x00\x00\xB1\x00\x00\x00\x00\x00\x00\x00\xB2\x00\x00\x00\x00\x00\x00\x00\xFA\x00\x00\x00\x00\x00\x00\x00\xFA\x10\x00\x00\x00\x00\x00\x00\x06\x11\x00\x00\x00\x00\x00\x00\xC4\x10\x00\x00\x00\x00\x00\x00\xC8\x10\x00\x00\x00\x00\x00\x00\xCC\x10\x00\x00\x00\x00\x00\x00\xD0\x10\x00\x00\x00\x00\x00\x00\xD4\x10\x00\x00\x00\x00\x00\x00\xD5\x10\x00\x00\x00\x00\x00\x00\xD6\x10\x00\x00\x00\x00\x00\x00\x1E\x11\x00\x00\x00\x00\x00\x00\x0E\x13\x00\x00\x00\x00\x00\x00\x1A\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFB\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x57\x42\x50\x54\x01\x00\x00\x00\x70\x00\x00\x00\x00\x00\x21\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x01\x02\x4A\x1F\x01\x18\x02\x08\x01\x14\x2C\x33\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xDB\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\xFE\xFF\x00\x01\x02\x4A\x1F\x01\x04\x07\x08\x01\x10\x34\x07\x00\x5E\x48\x89\xC9\x48\x31\xC0\x48\x31\xD2\x8A\x41\x16\x89\x06\x48\x89\xF3\x48\x83\xC6\x10\x48\x83\xF8\x01\x75\x0D\xC6\x41\x28\x01\xC6\x41\x30\x00\xE9\x32\x02\x00\x00\x66\x8B\x51\x20\xC1\xE2\x10\x66\x8B\x51\x24\x48\x8B\x3E\x3B\x14\x3E\x75\x02\x74\x10\x48\x83\xC6\x50\x48\x8B\x3E\x3B\x14\x3E\x0F\x85\x0D\x02\x00\x00\x89\x53\x04\x48\x89\x73\x08\x48\x83\xF8\x03\x74\x06\x48\x83\xF8\x2C\x75\x21\x48\x03\x76\x38\x48\x31\xC0\x8B\x41\x28\x48\xD1\xE0\x48\x0F\xB7\x04\x06\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\xD9\x01\x00\x00\x48\x83\xF8\x68\x75\x27\x48\x03\x76\x38\xB8\x70\x00\x00\x00\x48\x0F\xB7\x04\x06\xC7\x41\x28\x01\x00\x00\x00\x89\x41\x2C\x89\x41\x30\xC7\x41\x34\xFF\xFF\x00\x00\xE9\xAC\x01\x00\x00\x48\x83\xF8\x05\x75\x2A\x48\x31\xC0\x48\x8B\x56\x18\x8B\x04\x16\x89\x41\x28\x48\x8B\x56\x10\x8B\x04\x16\x89\x41\x2C\xC7\x41\x30\xDE\x00\x00\x00\xC7\x41\x34\x3C\x23\x00\x00\xE9\x7C\x01\x00\x00\x48\x83\xF8\x06\x74\x05\x83\xF8\x2E\x75\x22\x48\x03\x76\x08\x48\x31\xC0\x8B\x06\x48\x0F\xB7\xF8\xC1\xE8\x10\x89\x79\x28\x89\x41\x2C\xC7\x41\x30\x00\x00\x00\x00\xE9\x4F\x01\x00\x00\x48\x83\xF8\x28\x75\x1A\xC7\x41\x28\x00\x00\x00\x00\xC7\x41\x2C\x00\x00\x00\x00\xC7\x41\x30\x00\x00\x00\x00\xE9\x2F\x01\x00\x00\x48\x83\xF8\x2A\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x1D\x01\x00\x00\x48\x83\xF8\x2B\x75\x0C\xC7\x41\x30\x00\x00\x00\x00\xE9\x0B\x01\x00\x00\x48\x83\xF8\x30\x75\x05\xE9\x00\x01\x00\x00\x48\x83\xF8\x32\x74\x06\x48\x83\xF8\x34\x75\x32\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\xC2\x00\x00\x00\x83\xF8\x33\x74\x06\x48\x83\xF8\x33\x75\x35\x48\x03\x76\x38\x48\x31\xC0\x48\x8B\x79\x40\x8B\x41\x28\x48\xD1\xE0\x48\x01\xC6\x48\x89\xC8\x48\x31\xC9\x8B\x48\x2C\x48\x87\xF7\x9C\xFC\xF3\x66\xA5\x9D\x48\x89\xC1\xC7\x41\x30\x00\x00\x00\x00\xE9\x82\x00\x00\x00\x83\xF8\x3C\x74\x05\x83\xF8\x58\x75\x31\x83\x79\x2C\x08\x72\x72\x51\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\xE8\x85\x0B\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x47\x83\xF8\x3D\x74\x05\x83\xF8\x59\x75\x31\x83\x79\x2C\x08\x72\x37\x51\x48\x31\xD2\x8B\x51\x2C\x48\x8B\x49\x40\x48\x81\xEC\x00\x01\x00\x00\x49\x89\xE0\xE8\x34\x10\x00\x00\x48\x81\xC4\x00\x01\x00\x00\x59\xC7\x41\x30\x00\x00\x00\x00\xEB\x0C\x83\xF8\x55\x75\x02\xEB\x05\xB8\x78\x56\x34\x12\x5E\x5F\x5A\x5B\x59\xC3\x56\x57\x48\x89\xD6\x48\x89\xCF\x31\xC9\x44\x89\xC1\xF3\xA4\x5F\x5E\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x18\x8B\x44\x24\x20\x83\xE0\x1F\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x28\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x20\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x88\x44\x24\x04\x0F\xB6\x44\x24\x04\x83\xF0\x01\x8B\x4C\x24\x20\xC1\xE9\x03\x21\xC8\x8B\x4C\x24\x20\x31\xC1\x89\xC8\x8B\x4C\x24\x20\xC1\xE9\x04\x31\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0A\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x07\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x02\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x05\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x04\x85\xC0\x74\x15\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x08\x8B\x0C\x24\x31\xC1\x89\xC8\x89\x04\x24\x8B\x04\x24\x83\xE0\x01\x89\x04\x24\x8B\x44\x24\x20\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x28\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xD1\xE0\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x0C\x24\x8B\x40\x0F\x09\xC8\x48\x8B\x4C\x24\x28\x89\x41\x0F\x48\x8B\x44\x24\x28\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x4C\x24\x04\x31\xC8\x83\xE0\x01\x48\x83\xC4\x18\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\xC7\x44\x24\x30\x1F\x00\x00\x00\x48\x8B\x44\x24\x58\x8B\x40\x14\x89\x44\x24\x20\x8B\x44\x24\x20\x35\x89\x19\x08\x01\x89\x44\x24\x20\x8B\x44\x24\x20\xC1\xE8\x0C\x89\x44\x24\x20\xC7\x44\x24\x24\x0A\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC8\x89\x44\x24\x24\x83\x7C\x24\x24\x05\x76\x69\x0F\xB6\x44\x24\x20\x83\xE0\x0F\x89\x44\x24\x2C\x83\x7C\x24\x2C\x00\x74\x0A\xC7\x44\x24\x38\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x38\x00\x00\x00\x00\x83\x7C\x24\x2C\x0B\x73\x0A\xC7\x44\x24\x3C\x01\x00\x00\x00\xEB\x08\xC7\x44\x24\x3C\x00\x00\x00\x00\x8B\x44\x24\x3C\x8B\x4C\x24\x38\x21\xC1\x89\xC8\x8B\x4C\x24\x24\xD3\xE0\x8B\x4C\x24\x30\x09\xC1\x89\xC8\x89\x44\x24\x30\x8B\x44\x24\x20\xC1\xE8\x04\x89\x44\x24\x20\xEB\x86\x8B\x44\x24\x30\xC1\xE8\x06\x48\x8B\x4C\x24\x58\x88\x41\x13\x48\x8B\x44\x24\x58\x0F\xB6\x40\x13\xC1\xE0\x06\x83\xC8\x1F\x48\x8B\x4C\x24\x58\x89\x41\x0F\xC7\x44\x24\x24\x01\x00\x00\x00\xC7\x44\x24\x28\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x24\xFF\xC0\x89\x44\x24\x24\x83\x7C\x24\x24\x27\x77\x6A\x8B\x44\x24\x28\x48\x8B\x4C\x24\x50\x0F\xB6\x04\x01\x48\x8B\x54\x24\x58\x89\xC1\xE8\xA6\xFD\xFF\xFF\x89\x44\x24\x34\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x34\x89\x44\x24\x28\x48\x8B\x44\x24\x50\x8B\x00\x83\xE0\x01\x3B\x44\x24\x34\x75\x12\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x50\x89\x01\xEB\x15\x48\x8B\x44\x24\x50\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x50\x89\x01\xEB\x85\x48\x83\xC4\x48\xC3\x48\x89\x4C\x24\x08\x48\x83\xEC\x48\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\xC1\xF8\x05\x83\xE0\x01\x48\x8B\x4C\x24\x50\x88\x41\x0A\x48\x8B\x44\x24\x50\x0F\xB6\x40\x02\xC1\xF8\x07\x83\xE0\x01\x83\xF0\x01\x88\x44\x24\x24\x0F\xB6\x44\x24\x24\x85\xC0\x74\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\x89\x44\x24\x3C\xEB\x0E\x48\x8B\x44\x24\x50\x0F\xB6\x00\xF7\xD0\x89\x44\x24\x3C\x0F\xB6\x44\x24\x3C\x88\x44\x24\x26\xC7\x44\x24\x28\x00\x00\x00\x00\x48\x8B\x44\x24\x50\x0F\xB6\x40\x01\x83\xE0\x1F\x88\x44\x24\x25\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x04\x7D\x3D\x0F\xB6\x44\x24\x28\xC0\xE0\x02\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x83\xF1\x01\x83\xE1\x01\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x28\x09\xC1\x89\xC8\x88\x44\x24\x28\x0F\xB6\x44\x24\x25\xD0\xE8\x88\x44\x24\x25\xEB\xB2\x0F\xB6\x44\x24\x28\x35\xFF\x00\x00\x00\x88\x44\x24\x2A\x0F\xB6\x44\x24\x28\x88\x44\x24\x29\x0F\xB6\x44\x24\x2A\x88\x44\x24\x2B\xC7\x44\x24\x2C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x2C\xFF\xC0\x89\x44\x24\x2C\x83\x7C\x24\x2C\x08\x0F\x8D\x9F\x00\x00\x00\x8B\x44\x24\x2C\x83\xC0\x08\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x08\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x29\x31\xC1\x89\xC8\x88\x44\x24\x29\x8B\x44\x24\x2C\x83\xC0\x18\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\x8B\x4C\x24\x2C\x83\xC1\x18\xBA\x1F\x00\x00\x00\x29\xCA\x89\xD1\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x0F\xB6\x4C\x24\x25\x31\xC8\x8B\x4C\x24\x2C\xD3\xE0\x0F\xB6\x4C\x24\x2B\x31\xC1\x89\xC8\x88\x44\x24\x2B\xE9\x4C\xFF\xFF\xFF\x48\x8B\x44\x24\x50\xC7\x40\x0B\x00\x00\x00\x00\xC7\x44\x24\x20\x00\x00\x00\x00\xC7\x44\x24\x30\x1F\x00\x00\x00\xEB\x0A\x8B\x44\x24\x30\xFF\xC8\x89\x44\x24\x30\x83\x7C\x24\x30\x00\x0F\x8C\xA4\x00\x00\x00\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x48\x8B\x4C\x24\x50\x89\x41\x0F\xC7\x44\x24\x38\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x38\xFF\xC0\x89\x44\x24\x38\x83\x7C\x24\x38\x0C\x7D\x14\x48\x8B\x54\x24\x50\x8B\x4C\x24\x30\xE8\xA6\x00\x00\x00\x88\x44\x24\x34\xEB\xDB\x8B\x44\x24\x20\xD1\xE0\x89\x44\x24\x20\x8B\x44\x24\x30\xC1\xF8\x02\x25\xFE\x00\x00\x00\x48\x98\x48\x8B\x4C\x24\x50\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x8B\x4C\x24\x30\x83\xE1\x01\x31\xC8\x8B\x4C\x24\x30\x8B\x54\x24\x28\xD3\xEA\x89\xD1\x83\xE1\x01\x31\xC8\x0F\xB6\x4C\x24\x34\x31\xC8\x8B\x4C\x24\x20\x09\xC1\x89\xC8\x89\x44\x24\x20\xE9\x47\xFF\xFF\xFF\x48\x8B\x44\x24\x50\x8B\x4C\x24\x20\x89\x48\x0B\x0F\xB6\x44\x24\x26\xC1\xE0\x03\x0F\xB6\x4C\x24\x24\xC1\xE1\x02\x09\xC8\x0F\xB6\x4C\x24\x24\xD1\xE1\x09\xC8\x0F\xB6\x4C\x24\x24\x09\xC8\x48\x8B\x4C\x24\x50\x89\x41\x0F\x48\x83\xC4\x48\xC3\x48\x89\x54\x24\x10\x89\x4C\x24\x08\x48\x83\xEC\x28\x8B\x44\x24\x30\x83\xE0\x1F\x89\x44\x24\x30\x8B\x44\x24\x30\xD1\xE8\x83\xE0\x03\xE8\x10\x00\x00\x00\x80\x04\x00\x00\xA0\x04\x00\x00\x80\x05\x00\x00\xA0\x05\x00\x00\x59\x8B\x04\x81\x89\x44\x24\x04\xC7\x44\x24\x08\x00\x00\x00\x00\xC7\x44\x24\x0C\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x0C\xFF\xC0\x89\x44\x24\x0C\x83\x7C\x24\x0C\x0C\x7D\x3D\x8B\x44\x24\x0C\x0F\xB6\xC8\x8B\x44\x24\x04\xD3\xE8\x83\xE0\x01\x85\xC0\x74\x27\x8B\x44\x24\x0C\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x10\x0F\xB6\xC8\x48\x8B\x44\x24\x10\x8B\x40\x0F\xD3\xE8\x8B\x4C\x24\x08\x31\xC1\x89\xC8\x89\x44\x24\x08\xEB\xB2\x8B\x44\x24\x30\x83\xE0\x01\xC1\xE0\x02\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\xC1\xE8\x02\x25\xFE\x00\x00\x00\x48\x8B\x4C\x24\x38\x0F\xB6\x44\x01\x02\xB9\x1F\x00\x00\x00\x2B\x4C\x24\x30\x83\xE1\x07\xD3\xF8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x0F\xB6\x49\x0A\x31\xC8\x88\x04\x24\x48\x8B\x44\x24\x38\x8B\x40\x0F\xD1\xE0\x0F\xB6\x0C\x24\x8B\x54\x24\x08\x31\xCA\x89\xD1\x83\xE1\x01\x09\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x8B\x44\x24\x30\x48\x8B\x4C\x24\x38\x48\x89\x4C\x24\x18\x0F\xB6\xC8\x48\x8B\x44\x24\x18\x8B\x40\x0B\xD3\xE8\x83\xE0\x01\x48\x8B\x4C\x24\x38\x8B\x49\x0F\x31\xC1\x89\xC8\x48\x8B\x4C\x24\x38\x89\x41\x0F\x48\x8B\x44\x24\x38\x8B\x40\x0F\xC1\xE8\x0B\x0F\xB6\x0C\x24\x31\xC8\x83\xE0\x01\x48\x83\xC4\x28\xC3\x48\x89\x54\x24\x10\x48\x89\x4C\x24\x08\x48\x83\xEC\x38\x48\x8B\x44\x24\x48\x83\x78\x14\x00\x74\x14\x48\x8B\x54\x24\x48\x48\x8B\x4C\x24\x40\xE8\x3F\xFA\xFF\xFF\xE9\x97\x00\x00\x00\x48\x8B\x4C\x24\x48\xE8\xA6\xFB\xFF\xFF\xC7\x44\x24\x20\x01\x00\x00\x00\xC7\x44\x24\x24\x00\x00\x00\x00\xEB\x0A\x8B\x44\x24\x20\xFF\xC0\x89\x44\x24\x20\x83\x7C\x24\x20\x27\x77\x6A\x8B\x44\x24\x24\x48\x8B\x4C\x24\x40\x0F\xB6\x04\x01\x48\x8B\x54\x24\x48\x89\xC1\xE8\x2E\xFE\xFF\xFF\x89\x44\x24\x28\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\xD1\xE0\x0B\x44\x24\x28\x89\x44\x24\x24\x48\x8B\x44\x24\x40\x8B\x00\x83\xE0\x01\x3B\x44\x24\x28\x75\x12\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x48\x8B\x4C\x24\x40\x89\x01\xEB\x15\x48\x8B\x44\x24\x40\x8B\x00\xD1\xE8\x35\x62\x00\x50\x80\x48\x8B\x4C\x24\x40\x89\x01\xEB\x85\x48\x83\xC4\x38\xC3\x49\x89\xE3\x48\x83\xEC\x68\x45\x85\xC0\x49\x89\x5B\xF8\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4D\x89\x63\xD8\x44\x8B\x61\x04\x44\x89\xC5\x48\x89\xD6\x48\x89\xCB\x45\x89\xE1\x45\x89\x63\xC8\x74\x26\x49\x8D\x4B\xC8\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xD0\x1D\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xE2\xFE\xFF\xFF\x44\x8B\x4C\x24\x30\x8B\x03\x44\x31\xC8\x89\xC1\x44\x31\xE0\x35\xC3\x25\x34\x80\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x03\x89\x0B\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x03\x89\xC2\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x13\x31\xC8\x85\xED\x48\x8B\x6C\x24\x58\x89\x43\x04\x41\x89\xC4\x89\xC2\x89\x44\x24\x34\x74\x27\x48\x8D\x4C\x24\x34\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x5D\x1E\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x55\xFE\xFF\xFF\x8B\x54\x24\x34\x44\x8B\x4C\x24\x30\x8B\x03\x48\x8B\x7C\x24\x48\x31\xD0\x89\xC1\x44\x31\xE0\x4C\x8B\x64\x24\x40\x35\x4A\x00\x2C\x5B\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x33\x03\x89\x0B\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x03\x48\x85\xF6\x89\x0B\x89\x43\x04\x48\x8B\x5C\x24\x60\x74\x06\x44\x89\x0E\x89\x56\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x6E\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x49\x89\xE3\x48\x83\xEC\x68\x49\x89\x5B\xF8\x48\x89\xCB\x49\x89\x6B\xF0\x49\x89\x73\xE8\x49\x89\x7B\xE0\x4C\x89\xCF\x44\x8B\x09\x4D\x89\x63\xD8\x45\x89\xC4\x44\x89\xC8\x48\x89\xD6\x35\x4A\x00\x2C\x5B\xC1\xC0\x19\x33\x41\x04\x44\x89\x49\x04\x89\x01\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x14\x89\x4B\x04\x44\x31\xC8\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0F\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x0A\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\x4A\x00\x2C\x5B\xC1\xC0\x05\x33\x43\x04\x89\x4B\x04\x89\xC1\x8B\x43\x04\x31\xC8\x89\x4B\x04\x35\x4A\x00\x2C\x5B\x45\x85\xE4\x89\x03\x89\xC5\x41\x89\xC0\x89\x44\x24\x34\x74\x37\x48\x8B\x07\x49\x8D\x4B\xCC\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x49\x89\x4B\xB8\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\xE1\x1F\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\xD1\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x43\x04\x44\x31\xC0\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x0A\x89\x4B\x04\x31\xE8\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x08\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x06\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x04\x33\x43\x04\x89\x4B\x04\x89\xC1\x35\xC3\x25\x34\x80\xC1\xC0\x02\x33\x43\x04\x89\xC2\x89\xC8\x31\xD0\x89\x53\x04\x35\xC3\x25\x34\x80\x45\x85\xE4\x4C\x8B\x64\x24\x40\x89\x03\x89\xC5\x89\xC1\x89\x44\x24\x30\x74\x3D\x48\x8B\x07\x48\x8D\x4C\x24\x30\x44\x0F\xB7\x48\x1E\x44\x0F\xB7\x40\x0C\x0F\xB7\x50\x08\x48\x89\x4C\x24\x20\xE8\x00\x00\x00\x00\x5A\x48\x81\xEA\x8E\x20\x00\x00\x48\x8B\x12\x48\x03\x52\x20\xE8\x24\xFC\xFF\xFF\x44\x8B\x44\x24\x34\x8B\x4C\x24\x30\x8B\x43\x04\x48\x8B\x7C\x24\x48\x89\x6B\x04\x48\x8B\x6C\x24\x58\x31\xC8\x48\x85\xF6\x89\x03\x48\x8B\x5C\x24\x60\x74\x06\x89\x0E\x44\x89\x46\x04\x48\x8B\x74\x24\x50\x48\x83\xC4\x68\xC3\x48\x83\xEC\x08\x4C\x8D\x0C\x24\x41\xB8\x01\x00\x00\x00\x49\x89\x09\x8B\x41\x5C\x48\xC1\xE0\x20\x8B\x49\x12\x48\x09\xC1\x48\x89\xCA\x48\x83\xC2\x08\xE8\x23\xFE\xFF\xFF\x48\x83\xC4\x08\xC3\x48\x89\xE0\x48\x81\xEC\xE8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\xB8\x08\x00\x00\x00\x44\x8D\x72\x07\x41\x89\xD7\x4C\x89\xC5\x41\xC1\xEE\x03\x41\x83\xE7\x07\x48\x89\xCB\x44\x0F\x44\xF8\x45\x31\xC9\x41\x8D\x46\xFF\x85\xC0\x44\x89\x7C\x24\x28\x44\x89\x4C\x24\x24\x45\x89\xC8\x44\x89\x4C\x24\x20\x45\x89\xCD\x45\x8D\x51\x02\x0F\x84\x7A\x02\x00\x00\x48\x8B\x7C\x24\x30\x44\x8B\x64\x24\x54\x4D\x89\xD7\x44\x31\x03\x44\x31\x4B\x04\x45\x85\xED\x8B\x0B\x8B\x53\x04\x0F\x85\x16\x01\x00\x00\x45\x39\xFE\x0F\x86\xDB\x00\x00\x00\x66\x44\x89\x6D\x10\x48\x8B\x03\x48\x89\xE9\x48\x89\x44\x24\x38\x48\x8D\x44\x24\x38\x48\x89\x7C\x24\x40\x89\x45\x12\x48\x8D\x44\x24\x38\x66\x44\x89\x7D\x16\x48\xC1\xE8\x20\x66\x44\x89\x6D\x3E\x89\x45\x5C\xE8\x1C\xFD\xFF\xFF\x48\x8B\x7C\x24\x40\x48\x8B\x44\x24\x38\x48\x89\x7C\x24\x30\x8B\x74\x24\x34\x48\x89\x03\x89\x7C\x24\x50\x48\x8D\x54\x24\x54\x66\x44\x89\x6D\x16\x45\x8D\x45\x05\x8B\x4A\xFC\x48\x83\xC2\x14\x8D\x04\x31\x83\xE1\x1F\x89\x42\xEC\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xEC\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF0\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF0\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF4\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF4\x8D\x04\x31\x83\xE1\x1F\x89\x42\xF8\x89\xF8\xD3\xC8\x31\x44\x24\x54\x8B\x4A\xF8\x8D\x04\x31\x83\xE1\x1F\x89\x42\xFC\x44\x8B\x64\x24\x54\x89\xF8\xD3\xC8\x41\x31\xC4\x49\xFF\xC8\x44\x89\x64\x24\x54\x75\x8A\xE9\x42\x01\x00\x00\x48\x89\xD8\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x45\x16\x01\x00\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\x89\x5D\x12\xE8\x52\xFC\xFF\xFF\x66\xC7\x45\x16\x00\x00\xE9\x10\x01\x00\x00\x8B\x44\x24\x50\x46\x8D\x04\x21\x4C\x8D\x4C\x24\x5C\x8D\x34\x02\x44\x89\x03\x4D\x89\xFA\x89\x73\x04\x44\x89\xC1\x44\x89\xC2\x49\x83\xC1\x30\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xD4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xE4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xF2\x83\xE1\x1F\xD3\xC2\x41\x2B\x51\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF0\x44\x89\xC1\x44\x89\xC6\xC1\xE9\x04\x31\xD6\x83\xE1\x1F\xD3\xC6\x41\x2B\x71\xF4\x41\x31\xF0\x89\xF1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x45\x03\x41\xF8\x49\xFF\xCA\x0F\x85\x0F\xFF\xFF\xFF\x44\x89\x03\x89\x73\x04\x44\x8B\x03\x44\x8B\x4B\x04\x41\x8D\x46\xFF\x41\xFF\xC5\x48\x83\xC3\x08\x44\x89\x44\x24\x20\x41\x39\xC5\x44\x89\x4C\x24\x24\x0F\x82\xA0\xFD\xFF\xFF\x44\x8B\x7C\x24\x28\x41\xBA\x02\x00\x00\x00\xEB\x05\x44\x8B\x64\x24\x54\x45\x85\xFF\x4C\x8B\xAC\x24\xD8\x00\x00\x00\x74\x2C\x48\x8D\x44\x24\x20\x48\x89\xDF\x48\x8D\x4C\x24\x20\x48\x29\xC7\x44\x89\xFA\x0F\xB6\x04\x0F\x48\xFF\xC1\x30\x41\xFF\x48\xFF\xCA\x75\xF1\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x41\x83\xFE\x02\x0F\x86\xFF\x00\x00\x00\x44\x03\x4C\x24\x50\x48\x8D\x74\x24\x5C\x45\x01\xE0\x44\x89\xC1\x44\x89\xC2\x48\x83\xC6\x30\xC1\xE9\x04\x44\x31\xCA\x83\xE1\x1F\xD3\xC2\x2B\x56\xCC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xD4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xD8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xDC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE0\x44\x89\xC1\x44\x89\xC7\xC1\xE9\x04\x31\xD7\x83\xE1\x1F\xD3\xC7\x2B\x7E\xE4\x41\x31\xF8\x89\xF9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xE8\x44\x89\xC1\x44\x89\xC2\xC1\xE9\x04\x31\xFA\x83\xE1\x1F\xD3\xC2\x2B\x56\xEC\x41\x31\xD0\x89\xD1\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF0\x44\x89\xC1\x45\x89\xC1\xC1\xE9\x04\x41\x31\xD1\x83\xE1\x1F\x41\xD3\xC1\x44\x2B\x4E\xF4\x45\x31\xC8\x44\x89\xC9\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC0\x44\x03\x46\xF8\x49\xFF\xCA\x0F\x85\x10\xFF\xFF\xFF\xEB\x51\x41\x83\xFE\x01\x75\x0D\x8B\x03\x89\x44\x24\x20\x8B\x43\x04\x89\x44\x24\x24\x48\x8D\x44\x24\x20\x48\x89\xE9\x66\xC7\x45\x10\x00\x00\x89\x45\x12\x48\x8D\x44\x24\x20\x66\xC7\x45\x16\x01\x00\x48\xC1\xE8\x20\x66\xC7\x45\x3E\x00\x00\x89\x45\x5C\xE8\x7D\xF9\xFF\xFF\x44\x8B\x4C\x24\x24\x44\x8B\x44\x24\x20\x66\xC7\x45\x16\x00\x00\x4C\x8B\xA4\x24\xE0\x00\x00\x00\x48\x8B\xAC\x24\xF8\x00\x00\x00\x41\x83\xFE\x01\x4C\x8B\xB4\x24\xD0\x00\x00\x00\x76\x1B\x45\x85\xFF\x74\x0C\x48\x8D\x73\xF8\x44\x89\xF9\x48\x89\xDF\xF3\xA4\x44\x89\x43\xF8\x44\x89\x4B\xFC\xEB\x07\x44\x89\x03\x44\x89\x4B\x04\x4C\x8B\xBC\x24\xC8\x00\x00\x00\x48\x8B\xBC\x24\x08\x01\x00\x00\x48\x8B\xB4\x24\x00\x01\x00\x00\x48\x8B\x9C\x24\xF0\x00\x00\x00\x48\x81\xC4\xE8\x00\x00\x00\xC3\x48\x89\xE0\x48\x81\xEC\xF8\x00\x00\x00\x48\x89\x58\x08\x48\x89\x68\x10\x48\x89\x70\x18\x48\x89\x78\x20\x4C\x89\x60\xF8\x4C\x89\x68\xF0\x4C\x89\x70\xE8\x4C\x89\x78\xE0\x48\x89\xCB\x8D\x4A\x07\x89\xD0\xBA\x08\x00\x00\x00\xC1\xE9\x03\x83\xE0\x07\x4C\x89\xC7\x0F\x44\xC2\x45\x31\xFF\x83\xF9\x01\x89\x4C\x24\x30\x44\x8D\x62\x04\x44\x89\x7C\x24\x2C\x44\x89\x7C\x24\x34\x44\x89\x7C\x24\x28\x45\x89\xFE\x89\x44\x24\x38\x0F\x86\x9F\x01\x00\x00\x83\xC1\xFE\x44\x89\xFE\x89\x4C\x24\x20\x0F\x84\x8F\x01\x00\x00\x48\x8B\x44\x24\x40\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xF6\x44\x8B\x03\x44\x8B\x73\x04\x45\x89\xC7\x44\x89\x44\x24\x28\x0F\x85\xEE\x00\x00\x00\x48\x89\x44\x24\x50\x48\x8D\x44\x24\x48\x66\x89\x77\x10\x48\x8B\x0B\x89\x47\x12\x48\x8D\x44\x24\x48\x48\xC1\xE8\x20\x48\x89\x4C\x24\x48\x48\x89\xF9\x66\xC7\x47\x16\x02\x00\x66\x89\x77\x3E\x89\x47\x5C\xE8\x0E\xFA\xFF\xFF\x48\x8B\x44\x24\x48\x4C\x8D\x44\x24\x64\x48\x89\x03\x48\x8B\x44\x24\x50\x44\x8D\x56\x05\x48\x89\x44\x24\x40\x44\x8B\x4C\x24\x44\x66\x89\x77\x16\x89\x44\x24\x60\x41\x8B\x48\xFC\x49\x83\xC0\x14\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xEC\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xEC\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF0\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF0\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF4\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF4\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xF8\x89\xC2\xD3\xCA\x31\x54\x24\x64\x41\x8B\x48\xF8\x42\x8D\x14\x09\x83\xE1\x1F\x41\x89\x50\xFC\x44\x8B\x6C\x24\x64\x89\xC2\xD3\xCA\x41\x31\xD5\x49\xFF\xCA\x44\x89\x6C\x24\x64\x0F\x85\x77\xFF\xFF\xFF\x8B\x6C\x24\x60\xEB\x4B\x45\x89\xE3\x45\x89\xF1\x4C\x8D\x94\x24\xC0\x00\x00\x00\x45\x2B\x42\x04\x44\x89\xC9\x49\x83\xEA\x08\xC1\xE9\x07\x83\xE1\x1F\x41\xD3\xC8\x45\x31\xC8\x45\x03\x4A\x08\x44\x89\xC1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC9\x45\x31\xC1\x41\x83\xC3\xFF\x75\xD0\x45\x29\xE8\x41\x29\xE9\x44\x89\x4B\x04\x44\x89\x03\x8B\x4C\x24\x34\xFF\xC6\x48\x83\xC3\x08\x31\x4B\xF8\x8B\x4C\x24\x2C\x44\x89\x7C\x24\x34\x31\x4B\xFC\x3B\x74\x24\x20\x44\x89\x74\x24\x2C\x0F\x82\x88\xFE\xFF\xFF\x8B\x44\x24\x38\x45\x31\xFF\xEB\x09\x44\x8B\x6C\x24\x64\x8B\x6C\x24\x60\x85\xC0\x44\x89\x7C\x24\x20\x44\x89\xFE\x44\x89\x7C\x24\x24\x74\x1A\x48\x8D\x53\x08\x48\x8D\x4C\x24\x20\x41\x89\xC0\xE8\xB8\xED\xFF\xFF\x8B\x74\x24\x24\x44\x8B\x7C\x24\x20\x44\x8B\x5C\x24\x30\x41\x83\xFB\x01\x75\x32\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x75\xF8\xFF\xFF\x66\xC7\x47\x16\x00\x00\xE9\x29\x01\x00\x00\x41\x83\xFB\x02\x75\x34\x48\x89\xD8\x48\x89\xF9\x66\xC7\x47\x10\x00\x00\x48\xC1\xE8\x20\x66\xC7\x47\x16\x01\x00\x66\xC7\x47\x3E\x00\x00\x89\x47\x5C\x89\x5F\x12\xE8\x3D\xF8\xFF\xFF\x44\x8B\x5C\x24\x30\x66\xC7\x47\x16\x00\x00\xEB\x55\x8B\x13\x44\x8B\x43\x04\x45\x89\xE2\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC2\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x41\x83\xFB\x01\x89\x13\x44\x89\x43\x04\x0F\x86\x9A\x00\x00\x00\x44\x33\x3B\x33\x73\x04\x8B\x44\x24\x38\x85\xC0\x44\x89\x7C\x24\x20\x89\x74\x24\x24\x74\x31\x4C\x8D\x44\x24\x20\x49\x89\xD9\x48\x8D\x4B\x08\x4D\x29\xC1\x49\x89\xC0\x48\x8D\x54\x24\x20\x0F\xB6\x01\x48\xFF\xC1\x48\xFF\xC2\x49\xFF\xC8\x41\x88\x44\x11\xFF\x0F\xB6\x42\xFF\x88\x41\xFF\x75\xE6\x41\x83\xFB\x02\x0F\x84\xED\xFE\xFF\xFF\x8B\x13\x44\x8B\x43\x04\x4C\x8D\x8C\x24\xC0\x00\x00\x00\x41\x2B\x51\x04\x44\x89\xC1\x49\x83\xE9\x08\xC1\xE9\x07\x83\xE1\x1F\xD3\xCA\x44\x31\xC2\x45\x03\x41\x08\x89\xD1\xC1\xE9\x04\x83\xE1\x1F\x41\xD3\xC8\x41\x31\xD0\x41\x83\xC4\xFF\x75\xD2\x44\x29\xEA\x41\x29\xE8\x44\x89\x43\x04\x89\x13\x8B\x44\x24\x28\x4C\x8B\xBC\x24\xD8\x00\x00\x00\x4C\x8B\xAC\x24\xE8\x00\x00\x00\x31\x03\x44\x31\x73\x04\x4C\x8B\xA4\x24\xF0\x00\x00\x00\x4C\x8B\xB4\x24\xE0\x00\x00\x00\x48\x8B\x9C\x24\x00\x01\x00\x00\x48\x8B\xBC\x24\x18\x01\x00\x00\x48\x8B\xB4\x24\x10\x01\x00\x00\x48\x8B\xAC\x24\x08\x01\x00\x00\x48\x81\xC4\xF8\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\x57\x59\xE9\xF9\xD5\xFF\xFF') fullfname=os.getcwd()+'/backbas.so' a=0xBA unipatch[a:a+4]=SERVER_KEY_PASSWORD a=a+4 unipatch[a:a+4]=SERVER_KEY_SN a=a+4 unipatch[a:a+4]=SERVER_KEY_HASPTYPE a=a+4 unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE a=a+6 unipatch[a:a+8]=SERVER_KEY_SecTable a=a+0x48 unipatch[a:a+0x70]=SERVER_KEY_Data a=a+0x70 unipatch[a:a+2]=SERVER_KEY_LicNum a=0x112E unipatch[a:a+4]=CLIENT_KEY_PASSWORD a=a+4 unipatch[a:a+4]=CLIENT_KEY_SN a=a+4 unipatch[a:a+4]=CLIENT_KEY_HASPTYPE a=a+4 unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE a=a+6 unipatch[a:a+8]=CLIENT_KEY_SecTable a=a+0x48 unipatch[a:a+0x70]=CLIENT_KEY_Data a=a+0x70 unipatch[a:a+2]=CLIENT_KEY_LicNum try: fp = open(fullfname, 'r+') if os.stat(fp.name).st_size > 0: mm = mmap.mmap(fp.fileno(), 0) # WTF? "to smoke": man 5 elf if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0: print ("what a fuck are you giving me?") sys.exit() e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8) print (f"e_phoff = {hex(e_phoff)}") e_phentsize = mm[0x36]+(mm[0x37]<<8) print (f"e_phentsize = {hex(e_phentsize)}") e_phnum = mm[0x38]+(mm[0x39]<<8) print (f"e_phnum = {hex(e_phnum)}") for i in range(e_phnum): p = e_phoff + i * e_phentsize p_type = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8) p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8) if (p_type==1 and p_flags==5): print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}") print(f"mm[{hex(p+4)}] += PF_W") mm[p+4] = 7 break else: print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}") pattern_addr = mm.find(pattern) if pattern_addr != -1: unipatch_addr=pattern_addr-0x2A75 print (f"patching {fullfname} at offset={hex(unipatch_addr)}") mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch mm.close() except IOError as e: print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}") print ('#############_SERVER_KEY_INFO_#################', sep='', end='') print ('') a=0xBA print ('SERVER_KEY_PASSWORD:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('SERVER_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('SERVER_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+6 print ('SERVER_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x48 print ('SERVER_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') a=a+0x70 print ('SERVER_KEY_LicNum:', sep='', end=' ') for i in range(a,a+2): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') print ('#############_CLIENT_KEY_INFO_#################', sep='', end='') print ('') a=0x112E print ('CLIENT_KEY_PASSWORD:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('CLIENT_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+4 print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+6 print ('CLIENT_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x48 print ('CLIENT_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') a=a+0x70 print ('CLIENT_KEY_LicNum:', sep='', end=' ') for i in range(a,a+2): print (format(unipatch[i],'02X'), sep='', end=' ') print ('')
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
23 пользователя(ей) сказали cпасибо:
asam (02.11.2023), ask66 (08.11.2023), bonifacio_dot (08.10.2024), Den-1977 (26.07.2023), freeraider (20.07.2023), g0ga (17.07.2023), Hirvi (01.10.2023), ilya.sh (11.09.2023), ironsamael15 (15.10.2023), kelt44 (24.07.2023), Megakiller (21.07.2023), mvl000 (21.07.2023), navisal (23.07.2023), olegtelec (22.07.2023), redhat2020 (28.07.2023), Renzes (17.07.2023), root7 (20.01.2024), Sova24 (19.07.2023), tlv (24.11.2023), wlion (16.07.2023), youdjcommon (25.10.2023), yurykk (22.07.2023), _BigB_ (17.07.2023)
-
28.07.2023, 13:56 #45
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Объясняю как проверить "дамп ключа выдержит 2-х этапную проверку изделием?"
Берём публичный дамп (создан ТГ-ботом) с SN=HASPID=478404269=0x1C83DEAD и раздаем его каким-либо HASPLM
Включаем создание технологического журнала - создаем в папке conf файл logcfg.xml такого содержания:
Код:<?xml version="1.0" encoding="UTF-8"?> <config xmlns="http://v8.1c.ru/v8/tech-log"> <log location="/tmp/1C/tlogs" history="10"> <event> <eq property="name" value="hasp"/> </event> <property name="all"/> </log> </config>
Код:log location="/tmp/1C/tlogs"
Код://запуск 1cv8, главный поток (OSThread=2712) процесса 11:28.370,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORGL8,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,' 11:28.370,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LASTSTATUS(,prog=17,ser=ORGL8,,,,)->NStat=0,SysErr=0,stat=0,' // далее все вызовы NETHASP_LASTSTATUS() удалены т.к. не интересны // поздоровкаемся с HASPLM (т.е.NETHASP_LOGIN): 11:32.379,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LOGIN(,prog=17,ser=ORGL8,,,,)->,,,' // поиск локальных ключей клиентских серий: 11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORGL8,,,,)->found=0,port=0,stat=-100,' 11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORG8A,,,,)->found=0,port=0,stat=-100,' 11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=ORG8B,,,,)->found=0,port=0,stat=-100,' 11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='LOCALHASP_ISHASP(,,ser=Base,,,,)->found=0,port=0,stat=0,' 11:32.380,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORG8A,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,' 11:32.383,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_LOGIN(,prog=17,ser=ORG8A,,,,)->,,,' 11:32.384,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_SETIDLETIME(idle=8,prog=17,ser=ORG8A,,,,)->,,,' // читает первые (pos=0) 5 слов (size=5) из памяти ключа, результат=buf=01000000000000085E0C 11:32.386,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=5,,)->,,stat=0,buf=01000000000000085E0C' // HASPID=478404269=0x1C83DEAD 11:32.387,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,' 11:32.389,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORG8A,,,,)->CurUsr=1,UsrLim=300,type=65535,remain=65535' 11:32.390,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORG8A,,,,)->CurUsr=1,UsrLim=300,type=65535,remain=65535' 11:32.391,HASP,2,process=1cv8,OSThread=2712,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=58,size=5,,)->,,stat=0,buf=FFFFFFFFFFFFFFFFFFFF' 11:33.834,HASP,1,process=1cv8,OSThread=2712,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=39,,buf=7C7B00F5616677FEFA1254DBF286F008E62034A56A5047D517BDAE22FD7B0C79F70C6E5873E556)->,,stat=0,buf=9D3A65A2B9DD315EA7F6FD105D1D6745F6A13C3E6BB3B10F45ACD4646CC5CBEAF8585FDBFE13DC' // HASPID=478404269=0x1C83DEAD 11:33.857,HASP,1,process=1cv8,OSThread=2712,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,' // поток OSThread=2748 начинает чтение памяти ключа (102 байт=51 слов) по одному слову за раз (size=1), смещение (pos=33) рандомизировано, результат чтения: buf=CB56 11:34.386,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=33,size=1,,)->,,stat=0,buf=CB56' 11:34.649,HASP,1,process=1cv8,OSThread=2712,Usr=Администратор,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=5,,)->,,stat=0,buf=01000000000000085E0C' // HASPID=478404269=0x1C83DEAD 11:34.650,HASP,1,process=1cv8,OSThread=2712,Usr=Администратор,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,' // у меня вызовы NETHASP_READBLOCK идут каждую секунду т.к. сломано "курение бамбука по 60-90 сек", у вас будут интервалы по 60-90 сек (значение рандомизировано) 11:35.388,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=51,size=1,,)->,,stat=0,buf=7F19' 11:36.389,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=25,size=1,,)->,,stat=0,buf=5A37' 11:37.391,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=24,size=1,,)->,,stat=0,buf=62C3' 11:38.392,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=40,size=1,,)->,,stat=0,buf=8162' 11:39.394,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=12,size=1,,)->,,stat=0,buf=3D28' 11:40.395,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=35,size=1,,)->,,stat=0,buf=6CC3' 11:41.397,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=10,size=1,,)->,,stat=0,buf=97B9' 11:42.398,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=1,size=1,,)->,,stat=0,buf=0000' 11:43.400,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=14,size=1,,)->,,stat=0,buf=4C33' 11:44.401,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=5,size=1,,)->,,stat=0,buf=6D6F' 11:45.403,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_HASPID(,prog=17,ser=ORG8A,,,,)->id=478404269,,stat=0,' 11:46.404,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=55,size=1,,)->,,stat=0,buf=9E62' 11:47.406,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=32,size=1,,)->,,stat=0,buf=7D6C' 11:48.407,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=11,size=1,,)->,,stat=0,buf=2E4F' 11:49.409,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=18,size=1,,)->,,stat=0,buf=70B1' 11:50.410,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=54,size=1,,)->,,stat=0,buf=F88E' 11:51.411,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=31,size=1,,)->,,stat=0,buf=ED65' 11:52.413,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=52,size=1,,)->,,stat=0,buf=16DF' 11:53.414,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=27,size=1,,)->,,stat=0,buf=79E4' 11:54.416,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=47,size=1,,)->,,stat=0,buf=E2CE' 11:55.417,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=16,size=1,,)->,,stat=0,buf=8D75' 11:56.419,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=6,size=1,,)->,,stat=0,buf=44FB' 11:57.420,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=43,size=1,,)->,,stat=0,buf=03CC' 11:58.422,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=29,size=1,,)->,,stat=0,buf=1B6F' 11:59.423,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=19,size=1,,)->,,stat=0,buf=17C9' 12:00.425,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=22,size=1,,)->,,stat=0,buf=FAAC' 12:01.426,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=0,size=1,,)->,,stat=0,buf=0100' 12:02.428,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=30,size=1,,)->,,stat=0,buf=AE50' 12:03.429,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=36,size=1,,)->,,stat=0,buf=AED5' 12:04.431,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=37,size=1,,)->,,stat=0,buf=F515' 12:05.432,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=50,size=1,,)->,,stat=0,buf=8F01' 12:06.433,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=48,size=1,,)->,,stat=0,buf=1264' 12:07.435,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=3,size=1,,)->,,stat=0,buf=0008' 12:08.436,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=44,size=1,,)->,,stat=0,buf=5A30' 12:09.438,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=49,size=1,,)->,,stat=0,buf=3B5C' 12:10.439,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=8,size=1,,)->,,stat=0,buf=82CB' 12:11.441,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=26,size=1,,)->,,stat=0,buf=B16E' 12:12.442,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=23,size=1,,)->,,stat=0,buf=DABA' 12:13.444,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=2,size=1,,)->,,stat=0,buf=0000' 12:14.445,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=17,size=1,,)->,,stat=0,buf=8417' 12:15.447,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=9,size=1,,)->,,stat=0,buf=CD99' 12:16.448,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=21,size=1,,)->,,stat=0,buf=E434' 12:17.450,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=39,size=1,,)->,,stat=0,buf=D01A' 12:18.451,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=41,size=1,,)->,,stat=0,buf=4CC6' 12:19.453,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=34,size=1,,)->,,stat=0,buf=3CE7' 12:20.454,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=45,size=1,,)->,,stat=0,buf=690F' 12:21.456,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=28,size=1,,)->,,stat=0,buf=A97F' 12:22.457,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=13,size=1,,)->,,stat=0,buf=F937' 12:23.459,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=53,size=1,,)->,,stat=0,buf=03D0' 12:24.460,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=20,size=1,,)->,,stat=0,buf=B2D4' 12:25.462,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=38,size=1,,)->,,stat=0,buf=901C' 12:26.463,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=46,size=1,,)->,,stat=0,buf=F624' 12:27.465,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=42,size=1,,)->,,stat=0,buf=001B' 12:28.466,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=15,size=1,,)->,,stat=0,buf=3F45' 12:29.468,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=7,size=1,,)->,,stat=0,buf=0764' 12:30.469,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_READBLOCK(,prog=17,ser=ORG8A,pos=4,size=1,,)->,,stat=0,buf=5E0C' // поток OSThread=2748 начал второй этап проверки памяти ключа (признак - вызов NETHASP_DECODEDATA, входные данные в буфере size=102 байт - первые 10 байт уже проверены 1-м этапом проверки, который происходит сразу после запуска): 12:31.472,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=102,,buf=6D6F44FB076482CBCD9997B92E4F3D28F9374C333F458D75841770B117C9B2D4E434FAACDABA62C35A37B16E79E4A97F1B6FAE50ED657D6CCB563CE76CC3AED5F515901CD01A81624CC6001B03CC5A30690FF624E2CE12643B5C8F017F1916DF03D0F88E9E62)->,,stat=0,buf=62A7BFF000507269766574314321446F6E61742435306B3A4254433A626331716B776E6A6B34796D63387037383365356D3763773066756E61733636336A6A6E3978387974333A546F676461506572657374616E75536C6F766F4861636B657261214D694D6F' // а теперь забавное - копируем результат NETHASP_DECODEDATA в буфер обмена: // 62A7BFF000507269766574314321446F6E61742435306B3A4254433A626331716B776E6A6B34796D63387037383365356D3763773066756E61733636336A6A6E3978387974333A546F676461506572657374616E75536C6F766F4861636B657261214D694D6F // и вставляем в редакторе как HEX-text (в редакторе 010editor - меню "Edit"->"Paste From..."->"Paste from HEX Text"; в notepad++ вставить и преобразовать в текст командой меню "Plugins"->"Convert"->"HEX->ASCII") // получаем строку: // Privet1C!Donat$50k:BTC:bc1qkwnjk4ymc8p783e5m7cw0funas663jjn9x8yt3:TogdaPerestanuSlovoHackera!MiMo // // перефразирую слова Фрунзика Мкртчяна в к/ф "Мимино" - "так доната 50000$ хочется, што кущать не могу" // дальше идут вызовы DECODEDATA/ENCODEDATA, полагаю - для проверки "доступен ли HASP-ключ?", покажем несколько: 12:34.475,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=E3EDB7B7CAF90B0C0B4133764FC270FAFFBA596C)->,,stat=0,buf=566E830B8AED5C39F51C8A405EFDBA8966A1C569' 12:35.477,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=7BBCD17E8D0F28E1336359BEADCF4DDB7F737D4A)->,,stat=0,buf=8251BD6F798B90CDC6839711CB7C43C1CF0B5104' 12:36.480,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=81C7E5954FC544F7B034E8FC1C353BC44E070B32)->,,stat=0,buf=FB7F736B7140B5EE21943A312D030F4540A66F3E' 12:37.482,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=566E830B8AED5C39F51C8A405EFDBA8966A1C569)->,,stat=0,buf=E3EDB7B7CAF90B0C0B4133764FC270FAFFBA596C' 12:38.485,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=8251BD6F798B90CDC6839711CB7C43C1CF0B5104)->,,stat=0,buf=7BBCD17E8D0F28E1336359BEADCF4DDB7F737D4A' 12:39.487,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=8B453A18A98318B0D92816DC01E0ADBAA6E1ADA7)->,,stat=0,buf=D702DC2A980721D80CEC56512D3ADB257ACB951F' 12:40.489,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=D702DC2A980721D80CEC56512D3ADB257ACB951F)->,,stat=0,buf=8B453A18A98318B0D92816DC01E0ADBAA6E1ADA7' 12:41.491,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=979182FE85C65026A0249FBA13F9D193962A21CE)->,,stat=0,buf=5BFD94963C4F0D847E4D4F75B043D1E3A06094EC' 12:42.494,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=5BFD94963C4F0D847E4D4F75B043D1E3A06094EC)->,,stat=0,buf=979182FE85C65026A0249FBA13F9D193962A21CE' 12:43.497,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=B95CD2478CA5E63CE5B6A6F2BB77E04B90CA87BB)->,,stat=0,buf=913FC0EEC288534575D3398D0918F08F9CBA9FB9' 12:44.499,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FB7F736B7140B5EE21943A312D030F4540A66F3E)->,,stat=0,buf=81C7E5954FC544F7B034E8FC1C353BC44E070B32' 12:45.501,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=913FC0EEC288534575D3398D0918F08F9CBA9FB9)->,,stat=0,buf=B95CD2478CA5E63CE5B6A6F2BB77E04B90CA87BB' 12:46.504,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E)->,,stat=0,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F' 12:47.506,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F)->,,stat=0,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E' 12:48.508,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=FC98C1CBD94D6F68073E99BAECB9671050293A0E)->,,stat=0,buf=93CD69CB77AA59B4466E94C6165C72FB596BB48F' 12:49.511,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80)->,,stat=0,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3' 12:50.513,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80)->,,stat=0,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3' 12:51.515,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORG8A,,size=20,,buf=D1A4E623584471B0C4246C2258D1DD52CD8078A3)->,,stat=0,buf=4D950A92F3F094C4F30AE877C6D6E14C55ED0C80' // нормальный выход из программы заканчивается NETHASP_LOGOUT 12:52.248,HASP,0,process=1cv8,OSThread=2748,Txt='NETHASP_LOGOUT(,prog=17,ser=ORG8A,,,,)->,,,'
Код:DATA= 01 00 00 00 00 00 00 08 00 00 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70
Код:53:03.198,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_SET_CONFIG_FILENAME(,prog=17,ser=ORGL8,,size=41,,FName=~/.1cv8/1C/1cv8/conf/nethasp.ini)->,,,' 53:03.200,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_LOGIN(,prog=17,ser=ORGL8,,,,)->,,,' 53:03.201,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_SETIDLETIME(idle=8,prog=17,ser=ORGL8,,,,)->,,,' 53:03.203,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=5,,)->,,stat=0,buf=01000000000000080000' 53:03.204,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,' 53:03.205,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORGL8,,,,)->CurUsr=1,UsrLim=100,type=100,remain=65535' 53:03.207,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_HASPQUERYLICENSE(,prog=17,ser=ORGL8,,,,)->CurUsr=1,UsrLim=100,type=100,remain=65535' 53:03.208,HASP,2,process=1cv8,OSThread=5121,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=58,size=5,,)->,,stat=0,buf=FFFFFFFFFFFFFFFFFFFF' 53:04.615,HASP,1,process=1cv8,OSThread=5121,Txt='NETHASP_ENCODEDATA(,prog=17,ser=ORGL8,,size=39,,buf=7C7B00F5616677FEFA1254DBF286F008E62034A56A5047D517BDAE22FD7B0C79F70C6E5873E556)->,,stat=0,buf=EDDDD12019B9D025019894BBEB79452DF13FD141C5DCE779A5598710C3ACBDF1AF703CD9C1EF8E' 53:04.639,HASP,1,process=1cv8,OSThread=5121,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,' 53:05.203,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=41,size=1,,)->,,stat=0,buf=5354' 53:06.206,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=35,size=1,,)->,,stat=0,buf=4748' 53:07.207,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=32,size=1,,)->,,stat=0,buf=4142' 53:07.725,HASP,1,process=1cv8,OSThread=5121,Usr=Администратор,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=5,,)->,,stat=0,buf=01000000000000080000' 53:07.726,HASP,1,process=1cv8,OSThread=5121,Usr=Администратор,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,' 53:08.209,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=38,size=1,,)->,,stat=0,buf=4D4E' 53:09.211,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=49,size=1,,)->,,stat=0,buf=6364' 53:10.212,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=45,size=1,,)->,,stat=0,buf=5B5C' 53:11.213,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=5,size=1,,)->,,stat=0,buf=0B0C' 53:12.215,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=1,size=1,,)->,,stat=0,buf=0000' 53:13.217,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=28,size=1,,)->,,stat=0,buf=393A' 53:14.218,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=43,size=1,,)->,,stat=0,buf=5758' 53:15.220,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=47,size=1,,)->,,stat=0,buf=5F60' 53:16.221,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=11,size=1,,)->,,stat=0,buf=1718' 53:17.223,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=27,size=1,,)->,,stat=0,buf=3738' 53:18.224,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=8,size=1,,)->,,stat=0,buf=1112' 53:19.226,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_HASPID(,prog=17,ser=ORGL8,,,,)->id=1025225143,,stat=0,' 53:20.227,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=30,size=1,,)->,,stat=0,buf=3D3E' 53:21.229,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=19,size=1,,)->,,stat=0,buf=2728' 53:22.230,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=46,size=1,,)->,,stat=0,buf=5D5E' 53:23.232,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=15,size=1,,)->,,stat=0,buf=1F20' 53:24.233,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=26,size=1,,)->,,stat=0,buf=3536' 53:25.235,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=55,size=1,,)->,,stat=0,buf=6F70' 53:26.236,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=54,size=1,,)->,,stat=0,buf=6D6E' 53:27.238,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=36,size=1,,)->,,stat=0,buf=494A' 53:28.239,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=6,size=1,,)->,,stat=0,buf=0D0E' 53:29.241,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=23,size=1,,)->,,stat=0,buf=2F30' 53:30.243,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=44,size=1,,)->,,stat=0,buf=595A' 53:31.245,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=10,size=1,,)->,,stat=0,buf=1516' 53:32.246,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=21,size=1,,)->,,stat=0,buf=2B2C' 53:33.248,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=37,size=1,,)->,,stat=0,buf=4B4C' 53:34.249,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=16,size=1,,)->,,stat=0,buf=2122' 53:35.251,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=51,size=1,,)->,,stat=0,buf=6768' 53:36.252,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=18,size=1,,)->,,stat=0,buf=2526' 53:37.254,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=9,size=1,,)->,,stat=0,buf=1314' 53:38.255,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=22,size=1,,)->,,stat=0,buf=2D2E' 53:39.257,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=34,size=1,,)->,,stat=0,buf=4546' 53:40.258,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=52,size=1,,)->,,stat=0,buf=696A' 53:41.260,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=39,size=1,,)->,,stat=0,buf=4F50' 53:42.261,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=13,size=1,,)->,,stat=0,buf=1B1C' 53:43.263,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=4,size=1,,)->,,stat=0,buf=0000' 53:44.264,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=31,size=1,,)->,,stat=0,buf=3F40' 53:45.265,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=17,size=1,,)->,,stat=0,buf=2324' 53:46.267,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=48,size=1,,)->,,stat=0,buf=6162' 53:47.268,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=53,size=1,,)->,,stat=0,buf=6B6C' 53:48.270,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=42,size=1,,)->,,stat=0,buf=5556' 53:49.271,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=3,size=1,,)->,,stat=0,buf=0008' 53:50.273,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=20,size=1,,)->,,stat=0,buf=292A' 53:51.275,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=33,size=1,,)->,,stat=0,buf=4344' 53:52.276,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=29,size=1,,)->,,stat=0,buf=3B3C' 53:53.278,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=7,size=1,,)->,,stat=0,buf=0F10' 53:54.279,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=12,size=1,,)->,,stat=0,buf=191A' 53:55.281,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=0,size=1,,)->,,stat=0,buf=0100' 53:56.282,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=25,size=1,,)->,,stat=0,buf=3334' 53:57.284,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=40,size=1,,)->,,stat=0,buf=5152' 53:58.286,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=2,size=1,,)->,,stat=0,buf=0000' 53:59.287,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=14,size=1,,)->,,stat=0,buf=1D1E' 54:00.289,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=50,size=1,,)->,,stat=0,buf=6566' 54:01.291,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_READBLOCK(,prog=17,ser=ORGL8,pos=24,size=1,,)->,,stat=0,buf=3132' 54:02.294,HASP,0,process=1cv8,OSThread=5157,Txt='NETHASP_DECODEDATA(,prog=17,ser=ORGL8,,size=102,,buf=0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70)->,,stat=0,buf=0452E9A796AE919ACDC37C760464FB464E802195CF3D009C134F8631B62949BD30B667E98ED60CF5354FD6A6B8198DD20E024B5B5541AD51F0945576D5752E61468681AEAEE4719BC1DCD36128BAD937204A1C6F40AB1B297609F880B903B68C58CA41A70139' // работа приложения молча завершилась. в окне терминала, где запускался 1cv8, надпись: terminate called after throwing an instance of 'backbas::HaspLostException' Aborted (core dumped)
Последний раз редактировалось HPDX2300; 28.07.2023 в 23:44.
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
-
28.07.2023, 15:59 #46
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Преамбула для "чайников":
этот код вычисляет 9 и 10 байт в дампе HASP-ключа исходя из значения SN, он же HASPID.
Код ниже сохранить в файл DATA9-10.py
Запускать так:
Код:python DATA9-10.py
Код:chmod +x DATA9-10.py
Код:./DATA9-10.py
Код:#!/usr/bin/env python SN=0x281DCE71 DATA=( (SN+0xC2E44E49) + ((SN+0xC2E44E49)>>16) ) & 0x0000FFFF print 'SN = 0x%08X , DATA[9-10] = %02X %02X' % (SN, (DATA & 0xFF), DATA>>8)
Код:#!/usr/bin/env python3 SN=0x281DCE71 DATA=( (SN+0xC2E44E49) + ((SN+0xC2E44E49)>>16) ) & 0x0000FFFF print (f"SN=0x{SN:08X} , DATA[9-10]={(DATA & 0xFF):02X} {(DATA>>8):02X}")
Последний раз редактировалось HPDX2300; 28.07.2023 в 19:46.
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
19 пользователя(ей) сказали cпасибо:
andydaw (28.07.2023), blademaster (14.08.2023), deltaone (03.08.2023), g0ga (30.07.2023), garik-kg (04.08.2023), ilya.sh (11.09.2023), kelt44 (28.07.2023), Megakiller (28.07.2023), mvl000 (22.08.2023), Nekii (23.08.2023), olegtelec (29.07.2023), redhat2020 (28.07.2023), root7 (20.01.2024), SLK01 (02.11.2023), Sova24 (29.07.2023), tlv (24.11.2023), Vedyn28 (08.04.2024), yurykk (29.07.2023), _BigB_ (28.07.2023)
-
07.11.2023, 21:21 #47
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Унипатч доработан так, чтобы можно было легко изменять в текстовом редакторе используемые им дампы.
В первых строках скрипта меняете SERVER_KEY_HASPID и CLIENT_KEY_HASPID, SERVER_KEY_Data и CLIENT_KEY_Data будут поправлены автомагичесчки так, чтобы получились дампы, выдерживающие 2-х этапную проверку изделием памяти ключа. "Четыре палёных дампа для мультика воскресли из пепла!"
Выхлоп скрипта в stdout будет содержать инфу о дампах SERVER_KEY и CLIENT_KEY.
Унипатч теперь правильно эмулирует сетевой HASP-API, в диалоге "About" отображается число спартанцев сетевого ключа.
Это на практике проявляется так: сперва вы запускали изделие с помощью парочки эмулятор+HASPLM, изделие запомнило в файле 1cv8conn.pfl последний успешный путь получения лицензии на запуск (от сетевого HASPLM), при следующем запуске читается файл 1cv8conn.pfl и выполняется попытка получить лицензию также как прошлый раз. Если теперь либа патчена унипатчем, то унипатч честно выполнит эмуляцию сетевого HASPLM, и в диалоге "О программе" --> "Лицензия:" будет написано "Текущая: Сетевой HASP4 ORGL8 100" (Сетевой, а не Локальный!)
Порядок байтов в hex-дампах как в исполняемых модулях для процессора Intel - младший байт идет первым
SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.
Повторю для "чайников":
это патчер изделия для линукса-x64
код ниже сохранить в файл unipatch.py
запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
python3 unipatch.py
если предварительно выполнить:
chmod +x unipatch.py
, то запускать можно будеть так:
./unipatch.py
Код:#!/usr/bin/env python3 import sys, os, mmap SERVER_KEY_PASSWORD = bytearray.fromhex('7A 23 25 41') # SERVER_KEY_SN=0x281DCF71=bytearray.fromhex('71 CF 1D 28') - it's been blocked, so modify it a bit (exactly 9-th bit): 0x281DCE71 => Data[9-10]: BC 07 SERVER_KEY_HASPID=0x281DCE71 # here ^^^ ^^ you can modify #SERVER_KEY_SN=bytearray.fromhex('71 CE 1D 28') SERVER_KEY_SN=SERVER_KEY_HASPID.to_bytes(4, byteorder='little', signed=False) SERVER_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00') SERVER_KEY_MEMORYSIZE=bytearray.fromhex('01 00 00 00') SERVER_KEY_SecTable =bytearray.fromhex('15 EA 8F EA 73 EA EB EA') SERVER_KEY_Data=bytearray.fromhex('\ 01 00 00 00 00 00 00 D0 BC 07 3F 28 30 02 E5 6F\ 3E 39 D4 76 9F 6F D4 76 21 57 02 41 C3 CC D5 A7\ 4B 4C C2 81 64 84 55 76 41 E1 5E 2C 18 A7 6F F2\ 08 E1 40 A0 4E 94 A7 4A B5 41 53 6D 48 C3 6D E4\ A4 EC C8 9C 27 7D E0 79 51 B1 25 C6 A1 69 14 FB\ 03 7B C5 1B E3 EF A3 1E 04 B5 A5 E1 4E C8 5D 28\ 99 30 10 39 2F 8D B3 E0 95 F0 36 91 56 46 C4 75') SERVER_KEY_LicNum = bytearray.fromhex('01 00') DATA=( (SERVER_KEY_HASPID+0xC2E44E49) + ((SERVER_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF DATA9=(DATA & 0xFF) DATA10=(DATA>>8) SERVER_KEY_Data[8]=DATA9.to_bytes(1, byteorder='little', signed=False)[0] SERVER_KEY_Data[9]=DATA10.to_bytes(1, byteorder='little', signed=False)[0] CLIENT_KEY_PASSWORD = bytearray.fromhex('CB 70 6D 3B') # CLIENT_KEY_SN=0x1B93C5D6=bytearray.fromhex('D6 C5 93 1B') - it's been blocked, so modify it a bit (exactly 9-th bit): 0x1B93C4D6 => Data[9-10]: 97 F1 CLIENT_KEY_HASPID=0x1B93C4D6 # here ^^^ ^^ you can modify #CLIENT_KEY_SN=bytearray.fromhex('D6 C4 93 1B') CLIENT_KEY_SN=CLIENT_KEY_HASPID.to_bytes(4, byteorder='little', signed=False) CLIENT_KEY_HASPTYPE = bytearray.fromhex('0A 00 00 00') CLIENT_KEY_MEMORYSIZE=bytearray.fromhex('04 00 00 00') CLIENT_KEY_SecTable =bytearray.fromhex('9A 21 2C 25 DE 65 6C 65') CLIENT_KEY_Data=bytearray.fromhex('\ 01 00 00 00 00 00 00 08 97 F1 84 CF DC 4E 1E BB\ 55 6E 19 91 2D 4A 74 A3 33 7D 33 69 30 E3 5C 64\ E5 D7 5B 51 C3 C4 9D 0F F7 D5 F6 A4 34 0E E5 E5\ 4B 63 44 2E 80 73 06 F8 6A D1 37 BA 0F 9A FD 74\ 7B 5C 89 AE 3B AC 18 BB 71 8A 9B 85 7C 13 1D 9F\ BF 55 82 70 6D 87 DA 18 0A BD C4 22 05 A5 28 D4\ 54 B2 BC 38 F1 F2 E6 F4 54 09 42 4C B2 E1 1D AB') CLIENT_KEY_LicNum = bytearray.fromhex('64 00') DATA=( (CLIENT_KEY_HASPID+0xC2E44E49) + ((CLIENT_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF DATA9=(DATA & 0xFF) DATA10=(DATA>>8) CLIENT_KEY_Data[8]=DATA9.to_bytes(1, byteorder='little', signed=False)[0] CLIENT_KEY_Data[9]=DATA10.to_bytes(1, byteorder='little', signed=False)[0] pattern = bytearray.fromhex('41 81 78 08 6C 68 73 68') unipatch = bytearray.fromhex('51 53 52 57 56 E8 88 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 A0 00 00 00 00 00 00 00 A4 00 00 00 00 00 00 00 A8 00 00 00 00 00 00 00 AC 00 00 00 00 00 00 00 B0 00 00 00 00 00 00 00 B1 00 00 00 00 00 00 00 B2 00 00 00 00 00 00 00 FA 00 00 00 00 00 00 00 FA 10 00 00 00 00 00 00 06 11 00 00 00 00 00 00 C4 10 00 00 00 00 00 00 C8 10 00 00 00 00 00 00 CC 10 00 00 00 00 00 00 D0 10 00 00 00 00 00 00 D4 10 00 00 00 00 00 00 D5 10 00 00 00 00 00 00 D6 10 00 00 00 00 00 00 1E 11 00 00 00 00 00 00 0E 13 00 00 00 00 00 00 1A 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FB 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 57 42 50 54 01 00 00 00 70 00 00 00 00 00 21 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 01 02 4A 1F 01 18 02 08 01 14 2C 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 DB 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 64 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 00 00 00 00 64 00 00 00 FE FF 00 01 02 4A 1F 01 04 07 08 01 10 34 07 00 5E 48 89 C9 48 31 C0 48 31 D2 8A 41 16 89 06 48 89 F3 48 83 C6 10 48 83 F8 01 75 0D C6 41 28 01 C6 41 30 00 E9 32 02 00 00 66 8B 51 20 C1 E2 10 66 8B 51 24 48 8B 3E 3B 14 3E 75 02 74 10 48 83 C6 50 48 8B 3E 3B 14 3E 0F 85 0D 02 00 00 89 53 04 48 89 73 08 48 83 F8 03 74 06 48 83 F8 2C 75 21 48 03 76 38 48 31 C0 8B 41 28 48 D1 E0 48 0F B7 04 06 89 41 2C C7 41 30 00 00 00 00 E9 D9 01 00 00 48 83 F8 68 75 27 48 03 76 38 B8 70 00 00 00 48 0F B7 04 06 C7 41 28 01 00 00 00 89 41 2C 89 41 30 C7 41 34 FF FF 00 00 E9 AC 01 00 00 48 83 F8 05 75 2A 48 31 C0 48 8B 56 18 8B 04 16 89 41 28 48 8B 56 10 8B 04 16 89 41 2C C7 41 30 DE 00 00 00 C7 41 34 3C 23 00 00 E9 7C 01 00 00 48 83 F8 06 74 05 83 F8 2E 75 22 48 03 76 08 48 31 C0 8B 06 48 0F B7 F8 C1 E8 10 89 79 28 89 41 2C C7 41 30 00 00 00 00 E9 4F 01 00 00 48 83 F8 28 75 1A C7 41 28 00 00 00 00 C7 41 2C 00 00 00 00 C7 41 30 00 00 00 00 E9 2F 01 00 00 48 83 F8 2A 75 0C C7 41 30 00 00 00 00 E9 1D 01 00 00 48 83 F8 2B 75 0C C7 41 30 00 00 00 00 E9 0B 01 00 00 48 83 F8 30 75 05 E9 00 01 00 00 48 83 F8 32 74 06 48 83 F8 34 75 32 48 03 76 38 48 31 C0 48 8B 79 40 8B 41 28 48 D1 E0 48 01 C6 48 89 C8 48 31 C9 8B 48 2C 9C FC F3 66 A5 9D 48 89 C1 C7 41 30 00 00 00 00 E9 C2 00 00 00 83 F8 33 74 06 48 83 F8 33 75 35 48 03 76 38 48 31 C0 48 8B 79 40 8B 41 28 48 D1 E0 48 01 C6 48 89 C8 48 31 C9 8B 48 2C 48 87 F7 9C FC F3 66 A5 9D 48 89 C1 C7 41 30 00 00 00 00 E9 82 00 00 00 83 F8 3C 74 05 83 F8 58 75 31 83 79 2C 08 72 72 51 48 81 EC 00 01 00 00 49 89 E0 48 31 D2 8B 51 2C 48 8B 49 40 E8 85 0B 00 00 48 81 C4 00 01 00 00 59 C7 41 30 00 00 00 00 EB 47 83 F8 3D 74 05 83 F8 59 75 31 83 79 2C 08 72 37 51 48 31 D2 8B 51 2C 48 8B 49 40 48 81 EC 00 01 00 00 49 89 E0 E8 34 10 00 00 48 81 C4 00 01 00 00 59 C7 41 30 00 00 00 00 EB 0C 83 F8 55 75 02 EB 05 B8 78 56 34 12 5E 5F 5A 5B 59 C3 56 57 48 89 D6 48 89 CF 31 C9 44 89 C1 F3 A4 5F 5E C3 48 89 54 24 10 89 4C 24 08 48 83 EC 18 8B 44 24 20 83 E0 1F 89 44 24 20 8B 44 24 20 C1 E8 02 25 FE 00 00 00 48 8B 4C 24 28 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 20 83 E1 07 D3 F8 83 E0 01 88 44 24 04 0F B6 44 24 04 83 F0 01 8B 4C 24 20 C1 E9 03 21 C8 8B 4C 24 20 31 C1 89 C8 8B 4C 24 20 C1 E9 04 31 C8 89 04 24 48 8B 44 24 28 8B 40 0F C1 E8 0A 8B 0C 24 31 C1 89 C8 89 04 24 48 8B 44 24 28 8B 40 0F C1 E8 07 8B 0C 24 31 C1 89 C8 89 04 24 8B 44 24 20 83 E0 02 85 C0 74 15 48 8B 44 24 28 8B 40 0F C1 E8 05 8B 0C 24 31 C1 89 C8 89 04 24 8B 44 24 20 83 E0 04 85 C0 74 15 48 8B 44 24 28 8B 40 0F C1 E8 08 8B 0C 24 31 C1 89 C8 89 04 24 8B 04 24 83 E0 01 89 04 24 8B 44 24 20 83 E0 01 C1 E0 02 48 8B 4C 24 28 8B 49 0F 31 C1 89 C8 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 40 0F D1 E0 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 0C 24 8B 40 0F 09 C8 48 8B 4C 24 28 89 41 0F 48 8B 44 24 28 8B 40 0F C1 E8 0B 0F B6 4C 24 04 31 C8 83 E0 01 48 83 C4 18 C3 48 89 54 24 10 48 89 4C 24 08 48 83 EC 48 C7 44 24 30 1F 00 00 00 48 8B 44 24 58 8B 40 14 89 44 24 20 8B 44 24 20 35 89 19 08 01 89 44 24 20 8B 44 24 20 C1 E8 0C 89 44 24 20 C7 44 24 24 0A 00 00 00 EB 0A 8B 44 24 24 FF C8 89 44 24 24 83 7C 24 24 05 76 69 0F B6 44 24 20 83 E0 0F 89 44 24 2C 83 7C 24 2C 00 74 0A C7 44 24 38 01 00 00 00 EB 08 C7 44 24 38 00 00 00 00 83 7C 24 2C 0B 73 0A C7 44 24 3C 01 00 00 00 EB 08 C7 44 24 3C 00 00 00 00 8B 44 24 3C 8B 4C 24 38 21 C1 89 C8 8B 4C 24 24 D3 E0 8B 4C 24 30 09 C1 89 C8 89 44 24 30 8B 44 24 20 C1 E8 04 89 44 24 20 EB 86 8B 44 24 30 C1 E8 06 48 8B 4C 24 58 88 41 13 48 8B 44 24 58 0F B6 40 13 C1 E0 06 83 C8 1F 48 8B 4C 24 58 89 41 0F C7 44 24 24 01 00 00 00 C7 44 24 28 00 00 00 00 EB 0A 8B 44 24 24 FF C0 89 44 24 24 83 7C 24 24 27 77 6A 8B 44 24 28 48 8B 4C 24 50 0F B6 04 01 48 8B 54 24 58 89 C1 E8 A6 FD FF FF 89 44 24 34 48 8B 44 24 50 8B 00 83 E0 01 D1 E0 0B 44 24 34 89 44 24 28 48 8B 44 24 50 8B 00 83 E0 01 3B 44 24 34 75 12 48 8B 44 24 50 8B 00 D1 E8 48 8B 4C 24 50 89 01 EB 15 48 8B 44 24 50 8B 00 D1 E8 35 62 00 50 80 48 8B 4C 24 50 89 01 EB 85 48 83 C4 48 C3 48 89 4C 24 08 48 83 EC 48 48 8B 44 24 50 0F B6 40 01 C1 F8 05 83 E0 01 48 8B 4C 24 50 88 41 0A 48 8B 44 24 50 0F B6 40 02 C1 F8 07 83 E0 01 83 F0 01 88 44 24 24 0F B6 44 24 24 85 C0 74 0E 48 8B 44 24 50 0F B6 00 89 44 24 3C EB 0E 48 8B 44 24 50 0F B6 00 F7 D0 89 44 24 3C 0F B6 44 24 3C 88 44 24 26 C7 44 24 28 00 00 00 00 48 8B 44 24 50 0F B6 40 01 83 E0 1F 88 44 24 25 C7 44 24 2C 00 00 00 00 EB 0A 8B 44 24 2C FF C0 89 44 24 2C 83 7C 24 2C 04 7D 3D 0F B6 44 24 28 C0 E0 02 88 44 24 28 0F B6 44 24 25 83 E0 01 0F B6 4C 24 25 83 F1 01 83 E1 01 D1 E1 09 C8 0F B6 4C 24 28 09 C1 89 C8 88 44 24 28 0F B6 44 24 25 D0 E8 88 44 24 25 EB B2 0F B6 44 24 28 35 FF 00 00 00 88 44 24 2A 0F B6 44 24 28 88 44 24 29 0F B6 44 24 2A 88 44 24 2B C7 44 24 2C 00 00 00 00 EB 0A 8B 44 24 2C FF C0 89 44 24 2C 83 7C 24 2C 08 0F 8D 9F 00 00 00 8B 44 24 2C 83 C0 08 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 8B 4C 24 2C 83 C1 08 BA 1F 00 00 00 29 CA 89 D1 83 E1 07 D3 F8 83 E0 01 0F B6 4C 24 25 31 C8 8B 4C 24 2C D3 E0 0F B6 4C 24 29 31 C1 89 C8 88 44 24 29 8B 44 24 2C 83 C0 18 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 8B 4C 24 2C 83 C1 18 BA 1F 00 00 00 29 CA 89 D1 83 E1 07 D3 F8 83 E0 01 0F B6 4C 24 25 31 C8 8B 4C 24 2C D3 E0 0F B6 4C 24 2B 31 C1 89 C8 88 44 24 2B E9 4C FF FF FF 48 8B 44 24 50 C7 40 0B 00 00 00 00 C7 44 24 20 00 00 00 00 C7 44 24 30 1F 00 00 00 EB 0A 8B 44 24 30 FF C8 89 44 24 30 83 7C 24 30 00 0F 8C A4 00 00 00 0F B6 44 24 26 C1 E0 03 48 8B 4C 24 50 89 41 0F C7 44 24 38 00 00 00 00 EB 0A 8B 44 24 38 FF C0 89 44 24 38 83 7C 24 38 0C 7D 14 48 8B 54 24 50 8B 4C 24 30 E8 A6 00 00 00 88 44 24 34 EB DB 8B 44 24 20 D1 E0 89 44 24 20 8B 44 24 30 C1 F8 02 25 FE 00 00 00 48 98 48 8B 4C 24 50 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 30 83 E1 07 D3 F8 83 E0 01 8B 4C 24 30 83 E1 01 31 C8 8B 4C 24 30 8B 54 24 28 D3 EA 89 D1 83 E1 01 31 C8 0F B6 4C 24 34 31 C8 8B 4C 24 20 09 C1 89 C8 89 44 24 20 E9 47 FF FF FF 48 8B 44 24 50 8B 4C 24 20 89 48 0B 0F B6 44 24 26 C1 E0 03 0F B6 4C 24 24 C1 E1 02 09 C8 0F B6 4C 24 24 D1 E1 09 C8 0F B6 4C 24 24 09 C8 48 8B 4C 24 50 89 41 0F 48 83 C4 48 C3 48 89 54 24 10 89 4C 24 08 48 83 EC 28 8B 44 24 30 83 E0 1F 89 44 24 30 8B 44 24 30 D1 E8 83 E0 03 E8 10 00 00 00 80 04 00 00 A0 04 00 00 80 05 00 00 A0 05 00 00 59 8B 04 81 89 44 24 04 C7 44 24 08 00 00 00 00 C7 44 24 0C 00 00 00 00 EB 0A 8B 44 24 0C FF C0 89 44 24 0C 83 7C 24 0C 0C 7D 3D 8B 44 24 0C 0F B6 C8 8B 44 24 04 D3 E8 83 E0 01 85 C0 74 27 8B 44 24 0C 48 8B 4C 24 38 48 89 4C 24 10 0F B6 C8 48 8B 44 24 10 8B 40 0F D3 E8 8B 4C 24 08 31 C1 89 C8 89 44 24 08 EB B2 8B 44 24 30 83 E0 01 C1 E0 02 48 8B 4C 24 38 8B 49 0F 31 C1 89 C8 48 8B 4C 24 38 89 41 0F 8B 44 24 30 C1 E8 02 25 FE 00 00 00 48 8B 4C 24 38 0F B6 44 01 02 B9 1F 00 00 00 2B 4C 24 30 83 E1 07 D3 F8 83 E0 01 48 8B 4C 24 38 0F B6 49 0A 31 C8 88 04 24 48 8B 44 24 38 8B 40 0F D1 E0 0F B6 0C 24 8B 54 24 08 31 CA 89 D1 83 E1 01 09 C8 48 8B 4C 24 38 89 41 0F 8B 44 24 30 48 8B 4C 24 38 48 89 4C 24 18 0F B6 C8 48 8B 44 24 18 8B 40 0B D3 E8 83 E0 01 48 8B 4C 24 38 8B 49 0F 31 C1 89 C8 48 8B 4C 24 38 89 41 0F 48 8B 44 24 38 8B 40 0F C1 E8 0B 0F B6 0C 24 31 C8 83 E0 01 48 83 C4 28 C3 48 89 54 24 10 48 89 4C 24 08 48 83 EC 38 48 8B 44 24 48 83 78 14 00 74 14 48 8B 54 24 48 48 8B 4C 24 40 E8 3F FA FF FF E9 97 00 00 00 48 8B 4C 24 48 E8 A6 FB FF FF C7 44 24 20 01 00 00 00 C7 44 24 24 00 00 00 00 EB 0A 8B 44 24 20 FF C0 89 44 24 20 83 7C 24 20 27 77 6A 8B 44 24 24 48 8B 4C 24 40 0F B6 04 01 48 8B 54 24 48 89 C1 E8 2E FE FF FF 89 44 24 28 48 8B 44 24 40 8B 00 83 E0 01 D1 E0 0B 44 24 28 89 44 24 24 48 8B 44 24 40 8B 00 83 E0 01 3B 44 24 28 75 12 48 8B 44 24 40 8B 00 D1 E8 48 8B 4C 24 40 89 01 EB 15 48 8B 44 24 40 8B 00 D1 E8 35 62 00 50 80 48 8B 4C 24 40 89 01 EB 85 48 83 C4 38 C3 49 89 E3 48 83 EC 68 45 85 C0 49 89 5B F8 49 89 6B F0 49 89 73 E8 49 89 7B E0 4D 89 63 D8 44 8B 61 04 44 89 C5 48 89 D6 48 89 CB 45 89 E1 45 89 63 C8 74 26 49 8D 4B C8 49 89 4B B8 E8 00 00 00 00 5A 48 81 EA D0 1D 00 00 48 8B 12 48 03 52 20 E8 E2 FE FF FF 44 8B 4C 24 30 8B 03 44 31 C8 89 C1 44 31 E0 35 C3 25 34 80 89 0B 89 C1 35 C3 25 34 80 C1 C0 02 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 04 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 06 33 03 89 0B 89 C1 35 C3 25 34 80 C1 C0 08 33 03 89 C2 35 C3 25 34 80 C1 C0 0A 89 13 31 C8 85 ED 48 8B 6C 24 58 89 43 04 41 89 C4 89 C2 89 44 24 34 74 27 48 8D 4C 24 34 E8 00 00 00 00 5A 48 81 EA 5D 1E 00 00 48 8B 12 48 03 52 20 E8 55 FE FF FF 8B 54 24 34 44 8B 4C 24 30 8B 03 48 8B 7C 24 48 31 D0 89 C1 44 31 E0 4C 8B 64 24 40 35 4A 00 2C 5B 89 0B 89 C1 35 4A 00 2C 5B C1 C0 05 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 0A 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 0F 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 14 33 03 89 0B 89 C1 35 4A 00 2C 5B C1 C0 19 33 03 48 85 F6 89 0B 89 43 04 48 8B 5C 24 60 74 06 44 89 0E 89 56 04 48 8B 74 24 50 48 83 C4 68 C3 48 83 EC 08 4C 8D 0C 24 41 B8 01 00 00 00 49 89 09 8B 41 5C 48 C1 E0 20 8B 49 12 48 09 C1 48 89 CA 48 83 C2 08 E8 6E FE FF FF 48 83 C4 08 C3 49 89 E3 48 83 EC 68 49 89 5B F8 48 89 CB 49 89 6B F0 49 89 73 E8 49 89 7B E0 4C 89 CF 44 8B 09 4D 89 63 D8 45 89 C4 44 89 C8 48 89 D6 35 4A 00 2C 5B C1 C0 19 33 41 04 44 89 49 04 89 01 89 C1 35 4A 00 2C 5B C1 C0 14 89 4B 04 44 31 C8 89 C1 35 4A 00 2C 5B C1 C0 0F 33 43 04 89 4B 04 89 C1 35 4A 00 2C 5B C1 C0 0A 33 43 04 89 4B 04 89 C1 35 4A 00 2C 5B C1 C0 05 33 43 04 89 4B 04 89 C1 8B 43 04 31 C8 89 4B 04 35 4A 00 2C 5B 45 85 E4 89 03 89 C5 41 89 C0 89 44 24 34 74 37 48 8B 07 49 8D 4B CC 44 0F B7 48 1E 44 0F B7 40 0C 0F B7 50 08 49 89 4B B8 E8 00 00 00 00 5A 48 81 EA E1 1F 00 00 48 8B 12 48 03 52 20 E8 D1 FC FF FF 44 8B 44 24 34 8B 43 04 44 31 C0 89 C1 35 C3 25 34 80 C1 C0 0A 89 4B 04 31 E8 89 C1 35 C3 25 34 80 C1 C0 08 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 06 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 04 33 43 04 89 4B 04 89 C1 35 C3 25 34 80 C1 C0 02 33 43 04 89 C2 89 C8 31 D0 89 53 04 35 C3 25 34 80 45 85 E4 4C 8B 64 24 40 89 03 89 C5 89 C1 89 44 24 30 74 3D 48 8B 07 48 8D 4C 24 30 44 0F B7 48 1E 44 0F B7 40 0C 0F B7 50 08 48 89 4C 24 20 E8 00 00 00 00 5A 48 81 EA 8E 20 00 00 48 8B 12 48 03 52 20 E8 24 FC FF FF 44 8B 44 24 34 8B 4C 24 30 8B 43 04 48 8B 7C 24 48 89 6B 04 48 8B 6C 24 58 31 C8 48 85 F6 89 03 48 8B 5C 24 60 74 06 89 0E 44 89 46 04 48 8B 74 24 50 48 83 C4 68 C3 48 83 EC 08 4C 8D 0C 24 41 B8 01 00 00 00 49 89 09 8B 41 5C 48 C1 E0 20 8B 49 12 48 09 C1 48 89 CA 48 83 C2 08 E8 23 FE FF FF 48 83 C4 08 C3 48 89 E0 48 81 EC E8 00 00 00 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 4C 89 60 F8 4C 89 68 F0 4C 89 70 E8 4C 89 78 E0 B8 08 00 00 00 44 8D 72 07 41 89 D7 4C 89 C5 41 C1 EE 03 41 83 E7 07 48 89 CB 44 0F 44 F8 45 31 C9 41 8D 46 FF 85 C0 44 89 7C 24 28 44 89 4C 24 24 45 89 C8 44 89 4C 24 20 45 89 CD 45 8D 51 02 0F 84 7A 02 00 00 48 8B 7C 24 30 44 8B 64 24 54 4D 89 D7 44 31 03 44 31 4B 04 45 85 ED 8B 0B 8B 53 04 0F 85 16 01 00 00 45 39 FE 0F 86 DB 00 00 00 66 44 89 6D 10 48 8B 03 48 89 E9 48 89 44 24 38 48 8D 44 24 38 48 89 7C 24 40 89 45 12 48 8D 44 24 38 66 44 89 7D 16 48 C1 E8 20 66 44 89 6D 3E 89 45 5C E8 1C FD FF FF 48 8B 7C 24 40 48 8B 44 24 38 48 89 7C 24 30 8B 74 24 34 48 89 03 89 7C 24 50 48 8D 54 24 54 66 44 89 6D 16 45 8D 45 05 8B 4A FC 48 83 C2 14 8D 04 31 83 E1 1F 89 42 EC 89 F8 D3 C8 31 44 24 54 8B 4A EC 8D 04 31 83 E1 1F 89 42 F0 89 F8 D3 C8 31 44 24 54 8B 4A F0 8D 04 31 83 E1 1F 89 42 F4 89 F8 D3 C8 31 44 24 54 8B 4A F4 8D 04 31 83 E1 1F 89 42 F8 89 F8 D3 C8 31 44 24 54 8B 4A F8 8D 04 31 83 E1 1F 89 42 FC 44 8B 64 24 54 89 F8 D3 C8 41 31 C4 49 FF C8 44 89 64 24 54 75 8A E9 42 01 00 00 48 89 D8 48 89 E9 66 C7 45 10 00 00 48 C1 E8 20 66 C7 45 16 01 00 66 C7 45 3E 00 00 89 45 5C 89 5D 12 E8 52 FC FF FF 66 C7 45 16 00 00 E9 10 01 00 00 8B 44 24 50 46 8D 04 21 4C 8D 4C 24 5C 8D 34 02 44 89 03 4D 89 FA 89 73 04 44 89 C1 44 89 C2 49 83 C1 30 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 CC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 D0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 D4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 D8 44 89 C1 44 89 C2 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 DC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 E0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 E4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 E8 44 89 C1 44 89 C2 C1 E9 04 31 F2 83 E1 1F D3 C2 41 2B 51 EC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 F0 44 89 C1 44 89 C6 C1 E9 04 31 D6 83 E1 1F D3 C6 41 2B 71 F4 41 31 F0 89 F1 C1 E9 07 83 E1 1F 41 D3 C0 45 03 41 F8 49 FF CA 0F 85 0F FF FF FF 44 89 03 89 73 04 44 8B 03 44 8B 4B 04 41 8D 46 FF 41 FF C5 48 83 C3 08 44 89 44 24 20 41 39 C5 44 89 4C 24 24 0F 82 A0 FD FF FF 44 8B 7C 24 28 41 BA 02 00 00 00 EB 05 44 8B 64 24 54 45 85 FF 4C 8B AC 24 D8 00 00 00 74 2C 48 8D 44 24 20 48 89 DF 48 8D 4C 24 20 48 29 C7 44 89 FA 0F B6 04 0F 48 FF C1 30 41 FF 48 FF CA 75 F1 44 8B 4C 24 24 44 8B 44 24 20 41 83 FE 02 0F 86 FF 00 00 00 44 03 4C 24 50 48 8D 74 24 5C 45 01 E0 44 89 C1 44 89 C2 48 83 C6 30 C1 E9 04 44 31 CA 83 E1 1F D3 C2 2B 56 CC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 D0 44 89 C1 44 89 C7 C1 E9 04 31 D7 83 E1 1F D3 C7 2B 7E D4 41 31 F8 89 F9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 D8 44 89 C1 44 89 C2 C1 E9 04 31 FA 83 E1 1F D3 C2 2B 56 DC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 E0 44 89 C1 44 89 C7 C1 E9 04 31 D7 83 E1 1F D3 C7 2B 7E E4 41 31 F8 89 F9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 E8 44 89 C1 44 89 C2 C1 E9 04 31 FA 83 E1 1F D3 C2 2B 56 EC 41 31 D0 89 D1 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 F0 44 89 C1 45 89 C1 C1 E9 04 41 31 D1 83 E1 1F 41 D3 C1 44 2B 4E F4 45 31 C8 44 89 C9 C1 E9 07 83 E1 1F 41 D3 C0 44 03 46 F8 49 FF CA 0F 85 10 FF FF FF EB 51 41 83 FE 01 75 0D 8B 03 89 44 24 20 8B 43 04 89 44 24 24 48 8D 44 24 20 48 89 E9 66 C7 45 10 00 00 89 45 12 48 8D 44 24 20 66 C7 45 16 01 00 48 C1 E8 20 66 C7 45 3E 00 00 89 45 5C E8 7D F9 FF FF 44 8B 4C 24 24 44 8B 44 24 20 66 C7 45 16 00 00 4C 8B A4 24 E0 00 00 00 48 8B AC 24 F8 00 00 00 41 83 FE 01 4C 8B B4 24 D0 00 00 00 76 1B 45 85 FF 74 0C 48 8D 73 F8 44 89 F9 48 89 DF F3 A4 44 89 43 F8 44 89 4B FC EB 07 44 89 03 44 89 4B 04 4C 8B BC 24 C8 00 00 00 48 8B BC 24 08 01 00 00 48 8B B4 24 00 01 00 00 48 8B 9C 24 F0 00 00 00 48 81 C4 E8 00 00 00 C3 48 89 E0 48 81 EC F8 00 00 00 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 4C 89 60 F8 4C 89 68 F0 4C 89 70 E8 4C 89 78 E0 48 89 CB 8D 4A 07 89 D0 BA 08 00 00 00 C1 E9 03 83 E0 07 4C 89 C7 0F 44 C2 45 31 FF 83 F9 01 89 4C 24 30 44 8D 62 04 44 89 7C 24 2C 44 89 7C 24 34 44 89 7C 24 28 45 89 FE 89 44 24 38 0F 86 9F 01 00 00 83 C1 FE 44 89 FE 89 4C 24 20 0F 84 8F 01 00 00 48 8B 44 24 40 44 8B 6C 24 64 8B 6C 24 60 85 F6 44 8B 03 44 8B 73 04 45 89 C7 44 89 44 24 28 0F 85 EE 00 00 00 48 89 44 24 50 48 8D 44 24 48 66 89 77 10 48 8B 0B 89 47 12 48 8D 44 24 48 48 C1 E8 20 48 89 4C 24 48 48 89 F9 66 C7 47 16 02 00 66 89 77 3E 89 47 5C E8 0E FA FF FF 48 8B 44 24 48 4C 8D 44 24 64 48 89 03 48 8B 44 24 50 44 8D 56 05 48 89 44 24 40 44 8B 4C 24 44 66 89 77 16 89 44 24 60 41 8B 48 FC 49 83 C0 14 42 8D 14 09 83 E1 1F 41 89 50 EC 89 C2 D3 CA 31 54 24 64 41 8B 48 EC 42 8D 14 09 83 E1 1F 41 89 50 F0 89 C2 D3 CA 31 54 24 64 41 8B 48 F0 42 8D 14 09 83 E1 1F 41 89 50 F4 89 C2 D3 CA 31 54 24 64 41 8B 48 F4 42 8D 14 09 83 E1 1F 41 89 50 F8 89 C2 D3 CA 31 54 24 64 41 8B 48 F8 42 8D 14 09 83 E1 1F 41 89 50 FC 44 8B 6C 24 64 89 C2 D3 CA 41 31 D5 49 FF CA 44 89 6C 24 64 0F 85 77 FF FF FF 8B 6C 24 60 EB 4B 45 89 E3 45 89 F1 4C 8D 94 24 C0 00 00 00 45 2B 42 04 44 89 C9 49 83 EA 08 C1 E9 07 83 E1 1F 41 D3 C8 45 31 C8 45 03 4A 08 44 89 C1 C1 E9 04 83 E1 1F 41 D3 C9 45 31 C1 41 83 C3 FF 75 D0 45 29 E8 41 29 E9 44 89 4B 04 44 89 03 8B 4C 24 34 FF C6 48 83 C3 08 31 4B F8 8B 4C 24 2C 44 89 7C 24 34 31 4B FC 3B 74 24 20 44 89 74 24 2C 0F 82 88 FE FF FF 8B 44 24 38 45 31 FF EB 09 44 8B 6C 24 64 8B 6C 24 60 85 C0 44 89 7C 24 20 44 89 FE 44 89 7C 24 24 74 1A 48 8D 53 08 48 8D 4C 24 20 41 89 C0 E8 B8 ED FF FF 8B 74 24 24 44 8B 7C 24 20 44 8B 5C 24 30 41 83 FB 01 75 32 48 89 D8 48 89 F9 66 C7 47 10 00 00 48 C1 E8 20 66 C7 47 16 01 00 66 C7 47 3E 00 00 89 47 5C 89 5F 12 E8 75 F8 FF FF 66 C7 47 16 00 00 E9 29 01 00 00 41 83 FB 02 75 34 48 89 D8 48 89 F9 66 C7 47 10 00 00 48 C1 E8 20 66 C7 47 16 01 00 66 C7 47 3E 00 00 89 47 5C 89 5F 12 E8 3D F8 FF FF 44 8B 5C 24 30 66 C7 47 16 00 00 EB 55 8B 13 44 8B 43 04 45 89 E2 4C 8D 8C 24 C0 00 00 00 41 2B 51 04 44 89 C1 49 83 E9 08 C1 E9 07 83 E1 1F D3 CA 44 31 C2 45 03 41 08 89 D1 C1 E9 04 83 E1 1F 41 D3 C8 41 31 D0 41 83 C2 FF 75 D2 44 29 EA 41 29 E8 41 83 FB 01 89 13 44 89 43 04 0F 86 9A 00 00 00 44 33 3B 33 73 04 8B 44 24 38 85 C0 44 89 7C 24 20 89 74 24 24 74 31 4C 8D 44 24 20 49 89 D9 48 8D 4B 08 4D 29 C1 49 89 C0 48 8D 54 24 20 0F B6 01 48 FF C1 48 FF C2 49 FF C8 41 88 44 11 FF 0F B6 42 FF 88 41 FF 75 E6 41 83 FB 02 0F 84 ED FE FF FF 8B 13 44 8B 43 04 4C 8D 8C 24 C0 00 00 00 41 2B 51 04 44 89 C1 49 83 E9 08 C1 E9 07 83 E1 1F D3 CA 44 31 C2 45 03 41 08 89 D1 C1 E9 04 83 E1 1F 41 D3 C8 41 31 D0 41 83 C4 FF 75 D2 44 29 EA 41 29 E8 44 89 43 04 89 13 8B 44 24 28 4C 8B BC 24 D8 00 00 00 4C 8B AC 24 E8 00 00 00 31 03 44 31 73 04 4C 8B A4 24 F0 00 00 00 4C 8B B4 24 E0 00 00 00 48 8B 9C 24 00 01 00 00 48 8B BC 24 18 01 00 00 48 8B B4 24 10 01 00 00 48 8B AC 24 08 01 00 00 48 81 C4 F8 00 00 00 C3 CC CC CC CC 57 59 E9 F9 D5 FF FF') fullfname=os.getcwd()+'/backbas.so' a=0xBA unipatch[a:a+4]=SERVER_KEY_PASSWORD a=a+4 unipatch[a:a+4]=SERVER_KEY_SN a=a+4 unipatch[a:a+4]=SERVER_KEY_HASPTYPE a=a+4 unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE a=a+6 unipatch[a:a+8]=SERVER_KEY_SecTable a=a+0x48 unipatch[a:a+0x70]=SERVER_KEY_Data a=a+0x70 unipatch[a:a+2]=SERVER_KEY_LicNum a=0x112E unipatch[a:a+4]=CLIENT_KEY_PASSWORD a=a+4 unipatch[a:a+4]=CLIENT_KEY_SN a=a+4 unipatch[a:a+4]=CLIENT_KEY_HASPTYPE a=a+4 unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE a=a+6 unipatch[a:a+8]=CLIENT_KEY_SecTable a=a+0x48 unipatch[a:a+0x70]=CLIENT_KEY_Data a=a+0x70 unipatch[a:a+2]=CLIENT_KEY_LicNum try: fp = open(fullfname, 'r+') if os.stat(fp.name).st_size > 0: mm = mmap.mmap(fp.fileno(), 0) # WTF? "to smoke": man 5 elf if mm[0]!=0x7f or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=2 or mm[5]!=1 or mm[6]!=1 or mm[16]!=3 or mm[17]!=0 or mm[18]!=0x3E or mm[19]!=0: print ("what a fuck are you giving me?") sys.exit() e_phoff = mm[0x20]+(mm[0x21]+(mm[0x22]+(mm[0x23]<<8)<<8)<<8) # print (f"e_phoff = {hex(e_phoff)}") e_phentsize = mm[0x36]+(mm[0x37]<<8) # print (f"e_phentsize = {hex(e_phentsize)}") e_phnum = mm[0x38]+(mm[0x39]<<8) # print (f"e_phnum = {hex(e_phnum)}") for i in range(e_phnum): p = e_phoff + i * e_phentsize p_type = mm[p]+(mm[p+1]+(mm[p+2]+(mm[p+3]<<8)<<8)<<8) p_flags = mm[p+4]+(mm[p+5]+(mm[p+6]+(mm[p+7]<<8)<<8)<<8) if (p_type==1 and p_flags==5): # print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}") # print(f"mm[{hex(p+4)}] += PF_W") mm[p+4] = 7 break # else: # print(f"p_type={hex(p_type)}, p_flags={hex(p_flags)}") pattern_addr = mm.find(pattern) if pattern_addr != -1: unipatch_addr=pattern_addr-0x2A75 print (f"patching {fullfname} at offset={hex(unipatch_addr)}") mm[unipatch_addr:unipatch_addr+0x2A07] = unipatch mm.close() except IOError as e: print (f"I/O error({e.errno}): {e.strerror}, filename={fullfname}") print ('#############_SERVER_KEY_INFO_#################', sep='', end='') print ('') a=0xBA print ('SERVER_KEY_PASSWORD:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('SERVER_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('SERVER_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+6 print ('SERVER_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x48 print ('SERVER_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') a=a+0x70 print ('SERVER_KEY_LicNum:', sep='', end=' ') for i in range(a,a+2): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}") print ('#############_CLIENT_KEY_INFO_#################', sep='', end='') print ('') a=0x112E print ('CLIENT_KEY_PASSWORD:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+6 print ('CLIENT_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x48 print ('CLIENT_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') a=a+0x70 print ('CLIENT_KEY_LicNum:', sep='', end=' ') for i in range(a,a+2): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}")
Последний раз редактировалось HPDX2300; 07.11.2023 в 21:31.
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
15 пользователя(ей) сказали cпасибо:
Andxs72 (10.11.2023), andydaw (08.11.2023), bonifacio_dot (08.10.2024), Den-1977 (08.11.2023), Evld (14.11.2023), g0ga (14.11.2023), ilya.sh (19.11.2023), kelt44 (08.11.2023), Megakiller (08.11.2023), olegtelec (27.11.2023), Renzes (10.11.2023), root7 (20.01.2024), Sova24 (24.11.2023), yurykk (16.11.2023), _BigB_ (08.11.2023)
-
14.11.2023, 16:11 #48
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Указанный в посте выше unipatch.py можно использовать как генератор рабочих дампов-мутантов.
SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.
Запускаем unipatch.py на выполнение (либа backbas.so в этом случае не нужна), выхлоп будет содержать пары HASPID-DATA, которые надо прописать в дамп-мутант.
пример выхлопа:
Код:$ ./unipatch.py #############_SERVER_KEY_INFO_################# SERVER_KEY_PASSWORD: 7A 23 25 41 =0x4125237A SERVER_KEY_SN: 71 CE 1D 28 =0x281DCE71 SERVER_KEY_HASPTYPE: 01 00 00 00 =0x00000001 SERVER_KEY_MEMORYSIZE: 01 00 00 00 =0x00000001 SERVER_KEY_SecTable: 15 EA 8F EA 73 EA EB EA SERVER_KEY_Data: 01 00 00 00 00 00 00 D0 BC 07 3F 28 30 02 E5 6F 3E 39 D4 76 9F 6F D4 76 21 57 02 41 C3 CC D5 A7 4B 4C C2 81 64 84 55 76 41 E1 5E 2C 18 A7 6F F2 08 E1 40 A0 4E 94 A7 4A B5 41 53 6D 48 C3 6D E4 A4 EC C8 9C 27 7D E0 79 51 B1 25 C6 A1 69 14 FB 03 7B C5 1B E3 EF A3 1E 04 B5 A5 E1 4E C8 5D 28 99 30 10 39 2F 8D B3 E0 95 F0 36 91 56 46 C4 75 SERVER_KEY_LicNum: 01 00 =0x0001 #############_CLIENT_KEY_INFO_################# CLIENT_KEY_PASSWORD: CB 70 6D 3B =0x3B6D70CB CLIENT_KEY_SN: D6 C4 93 1B =0x1B93C4D6 CLIENT_KEY_HASPTYPE: 0A 00 00 00 =0x0000000A CLIENT_KEY_MEMORYSIZE: 04 00 00 00 =0x00000004 CLIENT_KEY_SecTable: 9A 21 2C 25 DE 65 6C 65 CLIENT_KEY_Data: 01 00 00 00 00 00 00 08 97 F1 84 CF DC 4E 1E BB 55 6E 19 91 2D 4A 74 A3 33 7D 33 69 30 E3 5C 64 E5 D7 5B 51 C3 C4 9D 0F F7 D5 F6 A4 34 0E E5 E5 4B 63 44 2E 80 73 06 F8 6A D1 37 BA 0F 9A FD 74 7B 5C 89 AE 3B AC 18 BB 71 8A 9B 85 7C 13 1D 9F BF 55 82 70 6D 87 DA 18 0A BD C4 22 05 A5 28 D4 54 B2 BC 38 F1 F2 E6 F4 54 09 42 4C B2 E1 1D AB CLIENT_KEY_LicNum: 64 00 =0x0064
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
20 пользователя(ей) сказали cпасибо:
asam (26.11.2023), blademaster (23.11.2023), Den-1977 (14.11.2023), Ersain (21.01.2024), Evld (14.11.2023), g0ga (14.11.2023), ilya.sh (19.11.2023), kelt44 (14.11.2023), Megakiller (16.11.2023), olegtelec (27.11.2023), Renzes (05.12.2023), root7 (20.01.2024), Serrrgio (10.09.2024), Sova24 (24.11.2023), tlv (24.11.2023), user1212 (06.12.2023), Vedyn28 (08.04.2024), Vertex70 (25.11.2023), yurykk (16.11.2023), _BigB_ (14.11.2023)
-
18.10.2024, 15:23 #49
-
-
24.11.2024, 23:02 #50
- Регистрация
- 18.04.2018
- Адрес
- HP-Compaq DX2300 microtower PC
- Сообщений
- 270
- Сказал(а) спасибо
- 69
- Поблагодарили 1820 раз(а) в 398 сообщениях
Re: уни-патч для линукса и для макоси
Продолжаем популяризировать изделие известной секты.
В процессе изучения "relocation processing" родился унипатч для 32-битных изделий для линукса.
Ничо особенного, всё точно также как и в случае унипатча для linux-x86_64 - код взят из 1С8_UP.exe, обработан напильником (изменены HASP_ID, они же SN), записан в либу в правильное место, и исправлена таблица релоков чтобы унипатч не портился.
Испытывал на 23-1782-linux-i386 25-1445-linux-i386, первое из них воюет с дампами для "мультика", второе не воюет.
unipatch-x86.py можно использовать как генератор рабочих дампов-мутантов.
SERVER_KEY_HASPID и CLIENT_KEY_HASPID редактируются в тех местах, где подсказано подчёркиванием.
Повторю для "чайников":
это патчер изделия для линукса-x86 (32-х разрядного)
код ниже сохранить в файл unipatch-x86.py
запускать так (либа бэкбейс должна быть рядом - в том же каталоге):
python3 unipatch-x86.py
если предварительно выполнить:
chmod +x unipatch-x86.py
, то запускать можно будеть так:
./unipatch-x86.py
Код:#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys, os, mmap SERVER_KEY_PASSWORD=bytearray.fromhex('E4 10 31 4E'); # SERVER_KEY_SN=0x08ED1E32 - it's been blocked, so modify it a bit (exactly 9-th bit): 0x08ED1F32 SERVER_KEY_HASPID=0x08ED1F32; # here ^^^ ^^ you can modify SERVER_KEY_SN=SERVER_KEY_HASPID.to_bytes(4,byteorder='little',signed=False); SERVER_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00'); SERVER_KEY_MEMORYSIZE=bytearray.fromhex('01 00 00 00'); SERVER_KEY_SecTable =bytearray.fromhex('09 42 45 46 A1 E2 E5 E6'); SERVER_KEY_Data=bytearray.fromhex('\ 01 00 00 00 00 00 00 30 4C 38 68 E9 A2 AD B3 2A\ 8F D6 2A F9 01 42 FB 22 3F C9 45 75 BA 93 56 5B\ DA 0A 77 F8 0B 0F 51 B7 81 0E 41 59 1D B1 76 4A\ D7 45 36 13 07 44 73 DD 29 02 59 D9 6F D5 2D 42\ 25 23 C3 43 E7 61 E9 A1 ED 97 A5 15 18 FD 54 C9\ E8 98 63 C3 2C 3C 6A 0F FF B5 7B 3F 79 EF 15 49\ 56 72 E2 C8 E5 3F 0D 61 17 9A C1 11 E2 66 C1 B1'); DATA=( (SERVER_KEY_HASPID+0xC2E44E49) + ((SERVER_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF; DATA9=(DATA & 0xFF); DATA10=(DATA>>8); SERVER_KEY_Data[8]=DATA9.to_bytes(1,byteorder='little',signed=False)[0]; SERVER_KEY_Data[9]=DATA10.to_bytes(1,byteorder='little',signed=False)[0]; CLIENT_KEY_PASSWORD=bytearray.fromhex('CB 70 6D 3B'); # CLIENT_KEY_SN=0x5CEE77A1 - it's been blocked, so modify it a bit (exactly 9-th bit): 0x5CEE78A1 CLIENT_KEY_HASPID=0x5CEE78A1; # here ^^^ ^^ you can modify CLIENT_KEY_SN=CLIENT_KEY_HASPID.to_bytes(4,byteorder='little',signed=False); CLIENT_KEY_HASPTYPE = bytearray.fromhex('01 00 00 00'); CLIENT_KEY_MEMORYSIZE=bytearray.fromhex('04 00 00 00'); CLIENT_KEY_SecTable =bytearray.fromhex('9A 21 2C 25 DE 65 6C 65'); CLIENT_KEY_Data=bytearray.fromhex('\ 01 00 00 00 00 00 00 70 BC E5 08 7C E2 0A 4A 48\ 02 75 16 D1 CC 45 B1 8B 08 4A B3 8C 62 5C 30 2C\ 93 5A BD 6C 97 F6 58 03 FE D8 6A 11 41 87 E8 46\ C8 F2 49 B5 08 3A 95 30 33 C5 4C D4 15 4F 95 1E\ F4 24 ED 2E 8F C5 7A EE 17 20 3B 41 35 E9 A9 AF\ F5 22 63 57 06 5A F4 A4 E7 FC 3A 34 68 4E 8C 5D\ 87 86 CD 38 8E 6E 82 B3 D2 4A 6B FD 6E D5 4E FF'); CLIENT_KEY_LicNum = bytearray.fromhex('64 00'); DATA=( (CLIENT_KEY_HASPID+0xC2E44E49) + ((CLIENT_KEY_HASPID+0xC2E44E49)>>16) ) & 0x0000FFFF; DATA9=(DATA & 0xFF); DATA10=(DATA>>8); CLIENT_KEY_Data[8]=DATA9.to_bytes(1,byteorder='little',signed=False)[0]; CLIENT_KEY_Data[9]=DATA10.to_bytes(1,byteorder='little',signed=False)[0]; pattern = bytearray.fromhex("8178086C687368"); unipatch = bytearray.fromhex("558B6C24088D4534508D4530508D452C508D4528508B4524508B4520508B451C508B4518500FB6451650E80500000083C4245DC3558BEC60E9D404000000000000CB706D3BA177EE5C0100000004000000000000009A212C25DE656C65AD2A4E7AA1219CE62687410CA370A40988E33130430403D6B5C25AAD7E1EC12486B65B0A639980D03F320E002184DA10ACA90BA8E621A17CA1489EB1097018C4C12838992AB03024847823B9439048573C8C51A4305604CFDB8802184A3181922C44334DD60520773D0E1AACE6404C6B12D8E6D00C43034048785438111D0D02908AAE420A5295F5734C2972D60B02355088D6041804088104E4493CA05B24F0E804C34381CDD2D30A542C24205D24A05336122150421960880705E68EB20380D35AE4D971C1E15B5A3826AE0556184E32014D82C341A1A6E28214F400DD35C058EA781523C6330178D80928029A4A1D390480F50D2C82DAB481F26B010101010100000000000070BCE5087CE20A4A48027516D1CC45B18B084AB38C625C302C935ABD6C97F65803FED86A114187E846C8F249B5083A953033C54CD4154F951EF424ED2E8FC57AEE17203B4135E9A9AFF5226357065AF4A4E7FC3A34684E8C5D8786CD388E6E82B3D24A6BFD6ED54EFF0A00FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0300F00104FF0A00FFFFFEFF0101024A1F0000000000000000C9E410314E321EED0801000000010000000000000009424546A1E2E5E6E04904F2B00910F2062AC29E83B840340F6011BC67088951A46276296982E27035EB5BC0AC1104E1453843B1B114021604E853702733AE71C11DF69B0D71381E9461209509D261A0974145198635005391ED7421205C0D08F94C6A02401086F730100BE0CDA330812482A3A442E020109EDFB070986AD84148CCD472B52C8A175068EF5689E120651F9C28F44793D001070A54119C465EA491E5EBDC825B2558581045738C1B00611A5A3422208C51C0293A86A0E032393ACEE7CD8F97210BEE82C2C4E422452D13233128E0891601AE032A454A8118BA28C7A1518D48E53DC67FAA79D902E412C1FD7CA12D00F16AD09106829095CCEA801091854A0101010101000000000000304C3868E9A2ADB32A8FD62AF90142FB223FC94575BA93565BDA0A77F80B0F51B7810E41591DB1764AD7453613074473DD290259D96FD52D422523C343E761E9A1ED97A51518FD54C9E89863C32C3C6A0FFFB57B3F79EF15495672E2C8E53F0D61179AC111E266C1B10300700002FF0000FFFFFFFF0101024A1F0000000000000000C900000000E8000000005E81EED50400008B45088946FC83F80175178B451C8B4D24C70001000000C70100000000E9DA06000083F80375788B45148B4D183D6D3B0000753081F9CB7000000F85BC06000081C61C0100008B451C8B55208B5D248B08D1E10FB704318902C70300000000E9980600003D314E00000F858D06000081F9E41000000F858106000081C6420400008B451C8B55208B5D248B08D1E10FB704318902C70300000000E95D06000083F804757A8B45148B4D183D6D3B0000753181F9CB7000000F853F06000081C61C0100008B451C8B55208B5D248B08D1E1668B0266890431C70300000000E91A0600003D314E00000F850F06000081F9E41000000F850306000081C6420400008B451C8B55208B5D248B08D1E1668B0266890431C70300000000E9DE05000083F8050F85840000008B45148B4D183D6D3B0000753381F9CB7000000F85BC0500008B451C8B4D208B55248B5D288B7E0C8B760889388931C70266000000C7038C230000E9950500003D314E00000F858A05000081F9E41000000F857E0500008B451C8B4D208B55248B5D2881C6260300008B7E0C8B760889388931C70266000000C7038C230000E95105000083F80675798B45148B4D183D6D3B0000752F81F9CB7000000F853305000083C6048B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9100500003D314E00000F850505000081F9E41000000F85F904000081C62A0300008B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9D304000083F828751F8B451C8B5D208B4D248B56FC8910C70300000000C70100000000E9AF04000083F82A750E8B4524C70000000000E99C04000083F82B750E8B4524C70000000000E98904000083F82C75748B45148B4D183D6D3B0000752E81F9CB7000000F856B04000081C61C0100008B4D1C8B55208B5D24D1E10FB704318902C70300000000E9490400003D314E00000F853E04000081F9E41000000F853204000081C6420400008B4D1C8B55208B5D24D1E10FB704318902C70300000000E91004000083F82E75798B45148B4D183D6D3B0000752F81F9CB7000000F85F203000083C6048B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E9CF0300003D314E00000F85C403000081F9E41000000F85B803000081C62A0300008B068B5D1C8B4D208B55240FB7F8893BC1E8108901C70200000000E99203000083F8307505E98803000083F8320F85840000008B45148B4D183D6D3B0000753681F9CB7000000F856603000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E93C0300003D314E00000F853103000081F9E41000000F852503000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E9FB02000083F8330F85880000008B45148B4D183D6D3B0000753881F9CB7000000F85D902000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3F87F7F366A5C70300000000E9AD0200003D314E00000F85A202000081F9E41000000F859602000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3F87F7F366A5C70300000000E96A02000083F8340F85840000008B45148B4D183D6D3B0000753681F9CB7000000F854802000081C61C0100008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E91E0200003D314E00000F851302000081F9E41000000F850702000081C6420400008B451C8B4D208B5D248B7D288B00D1E003F08B098B3FF366A5C70300000000E9DD01000083F83C757481C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F85B9010000C706CB706D3BEB1D3D314E00000F85A601000081F9E41000000F859A010000C706E410314E8B45208B0083F8080F82860100008B4D288B0968DEC0AD0B5051E89B0A000083C40C8B4524C70000000000E96401000083F83D757481C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F8540010000C706CB706D3BEB1D3D314E00000F852D01000081F9E41000000F8521010000C706E410314E8B45208B0083F8080F820D0100008B4D288B0968DEC0AD0B5051E81008000083C40C8B4524C70000000000E9EB00000083F8557505E9E100000083F858757181C6CC0400008B45148B4D183D6D3B0000751481F9CB7000000F85BD000000C706CB706D3BEB1D3D314E00000F85AA00000081F9E41000000F859E000000C706E410314E8B45208B0083F8080F828A0000008B4D288B0968DEC0AD0B5051E89F09000083C40C8B4524C70000000000EB6B83F859756181C6CC0400008B45148B4D183D6D3B0000751081F9CB700000754BC706CB706D3BEB153D314E0000753C81F9E41000007534C706E410314E8B45208B0083F80872248B4D288B0968DEC0AD0B5051E82707000083C40C8B4524C70000000000EB05B878563412615DC3BA1000000083EC108B4C24148B018904248B4104894424048BCCE800000000582DFA0B000050E8450100008B55EC83FA0276158B4C241885C9740D8B44240889018B44240C8941048B4C24148B042489018B4424048941048B44240483C410C3BA1000000083EC108B4C24148B018904248B4104894424048BCCE800000000582D5A0C000050E8350000008B55EC83FA0276158B4C241885C9740D8B44240889018B44240C8941048B4C24148B042489018B4424048941048B44240483C410C3558BEC515183EA10538B5D08F7DA1BD2568BF1F7D28D460823D08B46048955F883C31C578BD38D4DFC8945FC8BF8E83D0100008B45F885C08B4DFC740289088B0633C1894604893E897D0833C98BD035C3253480D3C0334508414183F90C8945FC89550872E789168BD38D4DFC8946048BF8E8F90000008B45F885C08B4DFC74038948048B0633C1894604893E33C98BD0354A002C5BD3C083C10533C783F91E8BFA72EB5F89460489165E5BC9C20400558BEC83EC0C83EA105356F7DA8BF11BD2578B7E048D4608F7D223D08B066A198955F8598BD0354A002C5BD3C033C783E9058945FC8BFA79EB8B5D0889560483C31C8BD38D4DFC89068BF8E8700000008B4E048B45FC33C8890E8B4DF885C9897E0474038941048B068B7E04C745080A000000EB038B7DF48B4D088BD035C3253480D3C08955F433C7836D08028945FC79E38956048BD38D4DFC89068BF8E81D0000008B4E048B45FC33C8897E04890E8B4DF885C95F5E5B74028901C9C20400558BEC83E4F881EC08010000535556578BE98BF2B9400000008D7C241832D2F3A5885424148B4424140FB6CA8A0C29508D54241CE8370000008A55008B4D00D0E28BD90AD083E30180E203D1E938C3740681F1620050808A442414FEC03C27894D008844241472BD5F5E5D5B8BE55DC383EC2C538A5C24345580E11F568BF28AC1B2F5F6EA8BAEFC00000080C306885C243C8AD80FB6C18944242C6BC03880F30580E31F89442414059100000057884C24148944241CBF040000008B54241C8BCDE8DF0200008AD0C1E8038A043080E207B1072ACA8B54241CD2E88BCF2401D2E032D8424F83FFFF8954241C7FCD8B54241881C2900000008BCDE8A60200008AD0C1E8038A043080E207B1072ACAD2E8240180FB1F884424137471025C24408B4424180FB6FB8D9407900000008BCDE8710200008B4C243003F981E7070000808BD879054F83CFF8478B5424188D9417C00000008BCDE84A0200008AD380E207C1EB03B1072ACA8A14338AD8D2EAC1E8038A043080E307B1072ACBD2E832D08A44241380E20132C2884424130FB6442440B9300000002BC833FF85C9897C242C89442434894C24380F8E7F0100008A4C241480E1010590000000884C244089442424C74424208F00000032DB84C974548BC799B926000000F7F98BAEFC000000B8DF0700008BCD2BC28BD0E8B50100008B5424208BCD8BD8E8A80100008AD380E207C1EB038A1C33B1072ACA8AD0D2EBC1E8038A043080E207B1072ACAD2E832D880E3018A44241384C074608BC799B926000000F7F98BAEFC0000008BCD83C240E85F0100008D97900700008BCD89442428E84E0100008B5424288944241C8B6C241C8AC22407C1EA038A1432B1072AC88A44241CD2EA2407B1072AC8C1ED038A042ED2E832D080E20132DA84DB747A8B4C2424894C241CC7442428200000008B54241C8B8EFC000000E8F60000008AD080E207B1072ACA8BD0C1EA038A1432D2EA8BC883E107C1E8038D2C3080E201BF070000002BF98BCF32D3B001D2E080E201D2E28A4D00F6D022C18B4C241C0AD08B44242883C13848885500894C241C89442428759A8B7C242C8B5424208B4C24248B442438474A413BF8897C242C89542420894C24247C738B4424348BBEFC0000008B6C24188D9428900000008BCFE8600000008B4C24308B54243403D181E2070000808BD879054A83CAF8428D942AC00000008BCFE8390000008AD080E207C1E8038A0430B1072ACAD2E88AD380E207C1EB03B1072ACA8A1433D2EA5F5E5D32C224015B83C42CC204008A4C2440E925FEFFFF560FB7F18D041633D257BFE0070000F7F7BF12000000C1E9108BC299F7FF8BF88BC26BC07003C103C733D2BFE0070000F7F78BC203C633D2F7F7BF120000008BC299F7FF8BF88BC26BC07003C103C733D2BFE0070000F7F78BC203C633D28BF7F7F6BE120000008BC299F7FE8BF08BC26BC07003C103C68BCF33D2F7F15F5E8BC2C3558BEC8B55108B45088BCA4A85C974138B4D0C562BC88D72018A14088810404E75F75E5DC3558BEC518B450C5356578D098B7D0883C060894508C745FC0C0000008B4D088B178B5F048B7104B9200000002BD68BF3C1EE0783E61F8BC22BCED3E08BCED3EA0BC28B550833C389078B0A8BD0C1EA048D340B83E21FB9200000008BDE2BCAD3E38BCAD3EE836D08080BDE33D88B45FC48895F048945FC75A38B450C8B378BCB8B50042BF289378B002BC8894F045F5E5B8BE55DC3558BEC81EC900000008B4D0C538B5D08568D410757C1E80383E1078945EC894D0C7507C7450C080000003BC933D283F8018955FC8955F88955F08955F40F86CA0000008D78FE33F63BFA8975E8897DE40F86B70000008B038B4B043BF28945F0894DF40F85940100008B45108D4DD850525153E877F8FFFF8B75D883C41089B570FFFFFF8D8570FFFFFFC74508190000008B108B7DDC03D7B9200000008950048B1083E21F8BFE2BCA83C004D3E78BCA8B9574FFFFFF897DE08BFED3EF8B4DE00BCF33D18B4D0849899574FFFFFF894D0875BE8B7DE48B75E88B45F88B0B33C88B4304890B8B4DFC8B55F033C18943048B45F483C308463BF78955F88945FC8975E80F82EE0000008B45EC33D28B4D0C8955F83BCA8955FC76168BD18D73088D7DF8C1E902F3A58BCA83E10333D2F3A483F80175148B451050525253E8AEF7FFFF83C410E99200000083F80275638B4D1051525253E895F7FFFF83C4108B038B75F88B4B048B55FC8B7D0C33F033D133C085FF8975F88955FC741D8BCB8D55F82BCA8A5418088D7428F84088140E8A16885418073BC772EA837DEC02752D8B4510506A006A0053E843F7FFFF83C410EB2A8D9570FFFFFF5253E8ADFDFFFF8B45EC83C40883F801761277928D8D70FFFFFF5153E893FDFFFF83C4088B55F08B338B45F48B4B0433F233C889335F894B045E5B8BE55DC333D2E959FEFFFF8D9570FFFFFF5253E861FDFFFF83C408E9C7FEFFFF558BEC81EC840000008B450C53568B75088D5807C1EB0383E007895DF089450C7507C7450C08000000578D53FF33C933C033FF894DFC85D28945F8897DF4770A8B450C33FFE9D20000008B1633D089168B560433D185FF8956040F858A00000083FB0276728B45108D4DE450575156E8C9F6FFFF8B7DE483C410770089BD7CFFFFFF8D857CFFFFFFC74508190000008B108B5DE803D3B9200000008950048B1083E21F8BDF2BCA83C004D3E38BCA77008B5580895DEC8BDFD3EB8B4DEC0BCB3BED33D18B4D0849895580894D0875C08B5DF08B7DF4EB238B5510526A006A0056E858F6FFFF83C410EB108D857CFFFFFF5056E8C100000083C4088B068B4E0483C608478D53FF8945F83BFA894DFC897DF40F8233FFFFFF8B450C33FF85C0761A8BCE8D55F823F62BCA8D442FF88A140830108B450C473BF872EF83FB025F771E83FB01750B8B168B46048955F88945FC8B4D108D55F8516A006A0052EB158D857CFFFFFF8D4DF85051E84A00000083C408EB08E8C5F5FFFF83C41083FB0176278B4D0C33C085C9760C8A5406F8881406403BC172F48B45F88B4DFC8946F8894EFC5E5B8BE55DC38B55F88B45FC89168946045E5B8BE55DC3558BEC8B450C5356578B7D088B08C7450C0C0000008B570403D18B0F8957048B500403CA83C008890F8945088B1F8B4F048BF38BD3C1EE0433D183E61FB9200000008BC22BCED3E88BCE8B7508D3E2B92000000083C6088975080BC28B56F82BC28BD0894704C1EA0723C983E21F33C32BCA8BD8D3EB8BCA8B56FCD3E00BD88B450C03DA48891F710089450C759E5F5E5B5DC3E971E8FFFF90"); fullfname=os.getcwd()+'/backbas.so'; a=0x367;unipatch[a:a+4]=SERVER_KEY_PASSWORD; a=a+4;unipatch[a:a+4]=SERVER_KEY_SN; a=a+4;unipatch[a:a+4]=SERVER_KEY_HASPTYPE; a=a+4;unipatch[a:a+4]=SERVER_KEY_MEMORYSIZE; a=a+8;unipatch[a:a+8]=SERVER_KEY_SecTable; a=a+0x108;unipatch[a:a+0x70]=SERVER_KEY_Data; a=0x41;unipatch[a:a+4]=CLIENT_KEY_PASSWORD; a=a+4;unipatch[a:a+4]=CLIENT_KEY_SN; a=a+4;unipatch[a:a+4]=CLIENT_KEY_HASPTYPE; a=a+4;unipatch[a:a+4]=CLIENT_KEY_MEMORYSIZE; a=a+8;unipatch[a:a+8]=CLIENT_KEY_SecTable; a=a+0x108;unipatch[a:a+0x70]=CLIENT_KEY_Data; a=a+0x70;unipatch[a:a+2]=CLIENT_KEY_LicNum; try: fp = open(fullfname, 'r+') if os.stat(fp.name).st_size > 0: mm = mmap.mmap(fp.fileno(), 0); # WTF? "to smoke": man 5 elf if mm[0]!=0x7F or mm[1]!=0x45 or mm[2]!=0x4C or mm[3]!=0x46 or mm[4]!=1 or mm[5]!=1 or mm[6]!=1 or mm[0x10]!=3 or mm[0x11]!=0 or mm[0x12]!=3 or mm[0x13]!=0: print ("what a fuck are you giving me?"); sys.exit(); b=int.from_bytes(mm[0x1C:0x20],byteorder='little',signed=False); c=int.from_bytes(mm[0x20:0x24],byteorder='little',signed=False); d=int.from_bytes(mm[0x2A:0x2C],byteorder='little',signed=False); e=int.from_bytes(mm[0x2C:0x2E],byteorder='little',signed=False); f=int.from_bytes(mm[0x2E:0x30],byteorder='little',signed=False); g=int.from_bytes(mm[0x30:0x32],byteorder='little',signed=False); for i in range(e): p=b+i*d; h=int.from_bytes(mm[p:p+4],byteorder='little',signed=False); k=int.from_bytes(mm[p+0x18:p+0x1C],byteorder='little',signed=False); if (h==1 and k==5): mm[p+0x18] = 7; break; for i in range(g): s=c+i*f; n=mm[s+4]+(mm[s+5]<<8); o=int.from_bytes(mm[s+8:s+0xC],byteorder='little',signed=False); p=int.from_bytes(mm[s+0x20:s+0x24],byteorder='little',signed=False); if (n==1 and o==6 and p==0x1000): t=int.from_bytes(mm[s+0x0C:s+0x10],byteorder='little',signed=False)-int.from_bytes(mm[s+0x10:s+0x14],byteorder='little',signed=False); if (n==9 and o==2): u=int.from_bytes(mm[s+0x10:s+0x14],byteorder='little',signed=False); v=int.from_bytes(mm[s+0x14:s+0x18],byteorder='little',signed=False); w=int.from_bytes(mm[s+0x24:s+0x28],byteorder='little',signed=False); x=int(v/w); l=mm.find(pattern); if (l == -1): print (f"pattern has not been found"); sys.exit(); u1=l-0x17E1; u2=u1+0x1790; j=l+t; z=int(j).to_bytes(4,byteorder='little',signed=False); print (f"patching {fullfname} from offset={hex(u1)} up to offset={hex(u2)}"); mm[u1:u2] = unipatch; for i in range(x): a=u+i*w; y=int.from_bytes(mm[a:a+4],byteorder='little',signed=False)-t; if (u1 <= y and y <= u2): mm[a:a+4]=z; mm.close(); except IOError as exc: print (f"I/O error({exc.errno}): {exc.strerror}, filename={fullfname}"); print ('#############_SERVER_KEY_INFO_#################', sep='', end=''); print (''); a=0x367; print ('SERVER_KEY_PASSWORD:', sep='', end=' '); for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' '); print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}"); a=a+4 print ('SERVER_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('SERVER_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('SERVER_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+8 print ('SERVER_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x108 print ('SERVER_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') print ('#############_CLIENT_KEY_INFO_#################', sep='', end='') print ('') a=0x41 print ('CLIENT_KEY_PASSWORD:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_SN:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_HASPTYPE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+4 print ('CLIENT_KEY_MEMORYSIZE:', sep='', end=' ') for i in range(a,a+4): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+4], byteorder='little', signed=False),'08X')}") a=a+8 print ('CLIENT_KEY_SecTable:', sep='', end=' ') for i in range(a,a+8): print (format(unipatch[i],'02X'), sep='', end=' ') print ('') a=a+0x108 print ('CLIENT_KEY_Data:', sep='', end='\n') for i in range(a,a+0x70,16): for k in range(0,16): print (format(unipatch[i+k],'02X'), sep='', end=' ') print ('') a=a+0x70 print ('CLIENT_KEY_LicNum:', sep='', end=' ') for i in range(a,a+2): print (format(unipatch[i],'02X'), sep='', end=' ') print (f"=0x{format(int.from_bytes(unipatch[a:a+2], byteorder='little', signed=False),'04X')}")
"кинжал хорош для того, у кого он есть, и плохо тому у кого он не окажется в нужное время"
-
2 пользователя(ей) сказали cпасибо:
Timothy6551 (26.11.2024), _BigB_ (25.11.2024)
Похожие темы
-
как скачать файл с линукса на виртуальную машину
от dafniya в разделе LINUXОтветов: 1Последнее сообщение: 07.02.2012, 23:43 -
Патч для Warcraft III 1.26 rus
от GHoSt444 в разделе Игры (games)Ответов: 0Последнее сообщение: 30.06.2011, 18:18 -
Патч к AMS Enterprise 2.9
от kryak_er в разделе ПолезностиОтветов: 2Последнее сообщение: 09.06.2009, 23:06 -
Установка Линукса.
от Большой Брат в разделе LINUXОтветов: 18Последнее сообщение: 09.11.2007, 05:26
Социальные закладки