Что такое код imagepalettecopy

imagepalettecopy

(PHP 4 >= 4.0.1, PHP 5)

imagepalettecopy — Copy the palette from one image to another

Описание

imagepalettecopy() copies the palette from the source image to the destination image.

Список параметров

The destination image resource.

The source image resource.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Пример #1 imagepalettecopy() example

// Create two palette images
$palette1 = imagecreate ( 100 , 100 );
$palette2 = imagecreate ( 100 , 100 );

// Allocate the background to be
// green in the first palette image
$green = imagecolorallocate ( $palette1 , 0 , 255 , 0 );

// Copy the palette from image 1 to image 2
imagepalettecopy ( $palette2 , $palette1 );

// Since the palette is now copied we can use the
// green color allocated to image 1 without using
// imagecolorallocate() twice
imagefilledrectangle ( $palette2 , 0 , 0 , 99 , 99 , $green );

// Output image to the browser
header ( ‘Content-type: image/png’ );

imagepng ( $palette2 );
imagedestroy ( $palette1 );
imagedestroy ( $palette2 );
?>

Что такое код imagepalettecopy

Краткое описание:
Преобразование файлов изображений из одного формата в другой.

Вы хотите открывать файлы Photoshop PSD, TIFF, PCX, PBM или файлы изображений других редких форматов на своём Android-устройстве? Теперь, благодаря Image Converter, это возможно. И, самое главное, вы сможете сохранить их в JPEG, PNG и других, привычных для себя форматах файлов.

Image Converter — лучшее приложение для преобразования форматов файлов изображений прямо на вашем устройстве.

Функции:
— Изменение размеров изображений
— Обработка нескольких файлов
— Сохранение в нескольких разных форматах
— Обрезка изображений
— Поворот изображений

Все операции выполняются оффлайн и на вашем устройстве. Ни одно из ваших изображений не будет передано на какой-либо сервер.

Image Converter умеет «читать» файлы изображений следующих форматов:
AAI, ART, ARW, AVI, AVS, BPG, BMP, BMP2, BMP3, CALS, CGM, CIN, CMYK, CMYKA, CRW, CUR, CUT, DCM, DCR, DCX, DDS, DIB, DJVU, DNG, DOT, DPX, EMF, EPDF, EPI, FAX, FIG, FITS, FPX, GIF, GIF87, GPLT, GRAY, HDR, HPGL, HRZ, HTML, ICO, INLINE, JBIG, JNG, JP2, JPT, J2C, J2K, JPEG, JPG, JXR, MAN, MAT, MIFF, MONO, MNG, M2V, MPEG, MPC, MPR, MRW, MSL, MTV, MVG, ORF, OTB, P7, PALM, CLIPBOARD, PBM, PCD, PCDS, PCX, PDB, PEF, PFA, PFB, PFM, PGM, PICON, PICT, PIX, PNG, PNG8, PNG00, PNG24, PNG32, PNG48, PNG64, PNM, PPM, PS, PS2, PS3, PSB, PSD, PTIF, PWP, RAD, RAF, RGB, RGBA, RFG, RLA, RLE, SCT, SFW, SGI, SUN, TGA, TIFF, TIF, TIM, TTF, TXT, UYVY, VICAR, VIFF, WBMP, WDP, WEBP, WMF, WPG, X, XBM, XCF, XPM, X3F, YCBCR, YCBCRA, YUV. Вы также можете попробовать загрузить файлы и других форматов.

Image Converter умеет преобразовать файлы в следующие форматы:
JPG, JPEG, PNG, BMP, GIF, JP2, PDF, TIF, TIFF, WEBP, PSD, TGA, AI, HTML, TXT, JPC, AVS, CMYK, DCX, DIB, GIF87, GRAY, MNG, MTV, NETSCAPE, PBM, PCX, PGM, PICT, PNM, PPM, RGB, RGBA, SGI, SUN, UIL, UYVY, VIFF, XPM, YUV, PAM, RAS, HDR, FITS, DDS, PAL, H, SVG, EPS, AAI, ART, CIN, CIP, DPX, FAX, HRZ, INFO, MAT, MONO, MPC, OTB, PALM, PCD, PCL, PDB, PS, PS2, PS3, VICAR, WBMP, XBM, YCBCR, BMP2, BMP3, CMYKA, EPS2, EPS3, J2C, PCDS, PFM, PICON, PNG8, PNG24, PNG32, PSB, PTIF, YCBCRA, SHTML.

Image Converter НЕ умеет «читать» следующие форматы:
cr2, raw, pdf, eps, exr, ras, iff, pgf, svg, nef.

Удобный файловый браузер и понятный интерфейс Image Converter дают доступ ко всем вашим файлам/изображениям, позволяют открывать изображения из вашей библиотеки фотографий и получать файлы из других приложений, например, вложения электронной почты.
Все преобразованные изображения доступны внутри приложения и могут быть автоматически сохранены в вашей библиотеке фотографий, если имеют один из следующих форматов:
jpg, jpeg, png, bmp, gif, (webp Android 4.0+).
Внутри этого приложения вы можете передавать любые из преобразованных изображений через другие приложения, такие как электронная почта и социальные сети. Ваши исходные файлы изображений останутся в целости и сохранности и изменениям не подвергнутся.

ОБРАТИТЕ ВНИМАНИЕ: преобразование будет работать, только если у Вас достаточно оперативной памяти.

Требуется Android: 4.4+ (4.0+ до v.5.60)
Русский интерфейс: Да

Репаки от elchupacabra

CoolUtils Total Image Converter 8.2.0.206 (repack & Portable)

CoolUtils Total Image Converter (repack & Portable) — программа для преобразования изображений в наиболее популярные графические форматы (TIFF, JPEG, BMP, ICO, PSD, RAW, PNG, GIF и др.). Кроме того с ее помощью можно поворачивать картинки, а также менять их размер, что будет удобно для последующего добавления изображения на блоги, форумы и т.д.

Основные возможности:
• Поддержка графических форматов TIFF, JPEG, BMP, ICO, PSD, RAW, PNG, GIF, JPG, ICO, WMF, EMF, WMZ, EMZи др.;
• Конвертация CMYK tiff в RGB tiff;
• Пакетная обработка файлов;
• Встроенный вьювер изображений;
• Изменение размера картинок, а также их обрезание, поворот и отражение;
• Преобразование изображений в черно-белые;
• Добавление собственных надписей и логотипов;
• Поддержка командной строки.

Технология PRINT Image Matching в действии

Введение

Установка затемненных областей
Установка областей интенсивного освещения
Установка контраста
Установка яркости
Установка цветового баланса
Установка насыщенности
Установка резкости
Установка памятных цветов
Другие установки, в зависимости от конкретной цифровой камеры (производители цифровых камер могут добавлять собственные оригинальные настройки)

CASIO — QV-3500EX, QV-2900UX, QV-2400UZ
EPSON — PC-3100Z
KYOCERA — FineCam S3
MINOLTA — Dimage 7, Dimage 5, Dimage 304
NIKON — COOLPIX 995
PENTAX — Optio 330
RICOH — RDC-i500
TOSHIBA- Allegretto M81
SANYO — DSC-MZ1
SONY — Cyber-shot DSC P30, DSC P50, DSC S75, DSC S85, Mavica MVC-CD200, MVC-CD300

Тестирование

Комплект поставки PC3100Z

Адаптер для дополнительного объектива диаметром 49 мм

Как внедряется система безопасной печати на ближайшее к пользователю устройство (follow-me printing)

Предположим, вы банк, нефтяная компания или просто параноик. Вам хочется, чтобы:

  • Уборщицы, враги и рептилоиды не забирали документы из принтеров.
  • Память принтера надёжно очищалась после печати.
  • Нецелевая печать отсутствовала.
  • Большие задания автоматически перенаправлялись на устройства с дешёвым отпечатком.
  • При отправке на печать задания 50 раз (как часто делает паникующий пользователь) выползало только одно.
  • Чтобы тексты фильтровались по стоп-словам, а картинки — распознавались и тоже не печатались, если содержат конфиденциальные данные (есть не у всех решений).
  • В редких случаях — ну и ещё чтобы в документах на лету слово «направо» заменялось на «налево» для введения потенциального противника в заблуждение.

Это дорого, но уже давно используется в финансовых учреждениях. Там печать выглядит так: вы отправляете задание на принт-сервер, он обрабатывает файл (если надо — посылает безопаснику на ручное согласование, но такая фича также есть не у всех решений), а потом отдаёт на определённый принтер только тогда, когда вы введёте пин и покажете свой отпечаток пальца непосредственно на устройстве, чтобы документ выпал вам лично в руки. Или не приложите свою смарт-карту вроде личного пропуска в здание.

Занимательная статистика

По данным разных опросов и отчётов, за один рабочий день меньше 10 листов печатает около 20% сотрудников. 11–50 листов — 61% сотрудников, 51–100 листов — 12% сотрудников, больше 100 листов — 7% сотрудников. 70% опрошенных использует одну сторону листа, ≈50% участников опроса не беспокоит число печатаемых страниц (по данным ВЦИОМ). 40% распечаток могли бы быть напечатаны в дуплексе и ч/б (данные Nuance Communications).

Как работает система безопасной печати

Безопасная печать позволяет идентифицировать каждого пользователя и отдавать его распечатки только ему. При этом вам не важно, откуда пришло задание — вы можете отправить документ на печать из Петербурга, затем приехать на встречу в свой офис в Москве, ввести код на принтере (или авторизоваться по карте или биометрически) и получить его именно там, куда приехали. В идеале (если таймаут достаточен и политики безопасности позволяют так делать) получается примерно так:

В отличие от обычной печати происходит следующее:

  • Закупаются современные принтеры со встроенным софтом управления или МФУ (либо модули к имеющимся у вас железкам), которые обеспечивают идентификацию пользователей.
  • Все они объединяются в сеть под управлением принт-сервера, на который ставится одна из систем безопасной печати.
  • При отправке задания на печать оно попадает в систему безопасной печати. Потом DLP проверяет файлы (об этом чуть позже), а затем ждёт вашей аутентификации на одном из принтеров. Как правило, вы должны либо ввести пин, либо, в более серьёзных случаях, приложить свою RFID-метку (пропуск в здание) или палец к биометрическому считывателю.
  • После этого система печати убирает все следы документа из памяти принтера (в особенности если там используется HDD, где образы документа могут остаться и после неожиданного отключения питания).
Илон Маск рекомендует:  Что такое код ncurses_deleteln

Где и почему используется

Учитывая цену внедрения идентификаторов на принтерах, как правило, главная причина — безопасность, порой излишняя, превращающаяся в паранойю. Цена кусается: от 400 евро за комплект аутентификации на 1 устройство до 1000 евро в зависимости от типа считывателя. Плюс нужны контроллеры для старых принтеров и МФУ (новые в большинстве имеют поддержку прямо в операционке).

Вторая причина внедрения, как это ни странно, — экономия. В пятилетней перспективе так получается дешевле. Дело в том, что вместо того чтобы ставить отдельные принтеры в каждый кабинет, можно обойтись этажными МФУ и выводить весь поток на них, но зная, что каждый документ забирает лично сотрудник. К примеру, у нас на некоторых этажах реализовано именно так, и привязка идёт либо к пину задания, либо к RFID-метке пропуска в здание.

Если пользователь решил не приходить и не вводить пин, оно не будет выведено на печать.

Если пользователь запаниковал и отправил 30 одинаковых документов на печать, будет выведен один (ну или 30, если специально так настроить).

Как правило, безопасная печать исключает нецелевую печать. Учитывая тотальную идентификацию, у каждой «левой» распечатки есть ФИО.

Итоговый эффект — пропажа документов, которые пользователи отправляют на печать и забывают забрать (обычно таких до 20% в потоке), отсутствие повторной печати документов, резкое снижение печати личных документов, удешевление за счёт применения правил и условий перенаправления заданий на более производительные устройства, контроль цветной печати и принудительная конвертация в ч/б или на двустороннюю печать для определённых групп пользователей (типов документов, времени и т. д.), отчётность.

Большой Брат следит за тобой

Радость отдела ИБ в тотальном контроле:

  • Есть опция ручного подтверждения каждого документа (не у всех решений).
  • Есть полностью автоматический режим контроля утечек.
  • У отдельных решений есть режим подтверждения только вызывающих вопросы у робота документов.
  • Пользователь идентифицирует себя перед печатью.
  • Есть информация, кто, что, где, когда печатал.

Как правило, операции следующие:

  • На «крутых» интеграциях в самом начале составляется список стоп-слов (либо импортируется список фильтров из системы предотвращения утечек — всё это функции DLP). Всё то, что не должно быть выведено на печать в офисе, не будет выведено ещё на уровне принт-сервера, а для ИБ будет создано уведомление. Некоторые системы также могут обучаться методом указания документов, за которыми нужен контроль, — там либо простейшие нейросети по словам, либо не очень сложные эвристики.
  • Каждый документ сканируется на предмет соответствия фильтрам, причём информация собирается не только из текстовой части: всё то, что можно преобразовать к тексту, преобразуется. В особенности распознаются изображения, благо у ABBYY есть очень быстрый OCR-модуль, который своим качеством вызывает ряд вопросов о том, где ещё Большой Брат его использует уже за пределами корпоративного рынка.
  • При подозрительном документе или настроенном правиле контроля (по группам сотрудников, по длине документа и т. п.) производится ручной контроль. Принцип эскалации зависит от конкретного используемого ПО для сервера, настроек обычно много.
  • С документом могут выполняться автоматические преобразования: например, удаляться все фамилии, занижаться разрешение чертежей до 12 dpi, выдаваться случайные числа вместо финансовых показателей и т. п. Замена «право» на «лево» и «севера» на «юг» — не анекдот, у нас похожие ситуации были на практике. Эти решения очень редки и, как правило, очень специализированы.
  • Применяются политики печати: например, принудительный перевод в ч/б для этого пользователя, у которого нет прав на цветную печать. Самая частая политика — отправка документов свыше 100 страниц на принтер с самой низкой стоимостью отпечатка в офисе и отправка по почте уведомления пользователю об этом.
  • И, наконец, только после этого документ встаёт в очередь ждать прихода пользователя к принтеру и двухфакторной аутентификации. Из коробки поддерживаются AD Username/Password, PIN-коды, бесконтактные карты: HID (I, II), EM- Marine, Mifare, iClass, Hitag, Cotag, Legic, Indala, ISO, Deister, Paxton, обычные магнитные карты, штрих-коды и биометрические сканеры (отпечатки пальцев).

Опыт внедрения

В одной крупной нефтяной компании разрабатывалась система безопасной печати для удалённых офисов. Основной офис — в арендованном бизнес-центре. Здание большое, несколько этажей, система строилась централизованно сразу на все офисы. Интеграция такая, что где бы ни отправил — можно получить в другом городе в течение суток.

МФУ и принтеры размещались в принтерных комнатах, защищённых СКУД, но для большей безопасности ещё и использовались контроллеры доступа к МФУ с аутентификацией по бесконтактной карте.

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

Была настроена мобильная политика печати — когда сотрудник печатал с планшета или телефона, по Wi-Fi-роутеру находился этаж, и уже там задача отдавалась в очередь на ближайший принтер.

«Свои» устройства, включая мобильные, отличали по сертификатам на Wi-Fi (802.1x).

Парк апгрейдился от трёх разных наборов оборудования, закупленных слоями с разницей в несколько лет, причём от разных вендоров. Самый свежий слой поддерживал технологии аутентификации на уровне ОС устройств печати и МФУ, остальные потребовали специальных контроллеров.

Идею безопасной печати принесла ИБ, но больше всех радовались, кажется, финансисты — они смогли привязать все расходы на печать к конкретным подразделениям. Потом они ещё настроили подробные отчёты об отпечатанных и копированных заданиях и поставили лимиты для различных групп пользователей: запретили цветную печать части подразделений, ограничили для ряда пользователей печать документов больше 20 страниц и только по рабочим часам. Для одного из отделов настроили принудительную конвертацию в ч/б и принудительную двустороннюю печать.

Сисадмины тоже начали улыбаться, когда поняли, что теперь выход из строя принтера означал просто поход пользователя до другого без особых эксцессов. И истерик со срочной заменой уже не стало.

Ограничения (на примере FollowMe)

Из коробки работает с ОС:

  • Windows (начиная с Win95).
  • Apple Macintosh.
  • AS/400 iSeries.
  • LINUX/UNIX.
  • Другие ОС с поддержкой протокола LPR.

Есть интеграция с каталогами Windows Active Directory, Novell eDirectory, OpenLDAP.

Для решений, например, вендора Nuance нужен сервер со следующими параметрами: Windows 2003 Server SP2 (32/64 бит), Windows 2008 Server с пакетом обновления 1 (32/64 бит) или Windows Server 2008 R2 сервер (32/64 бит). Аналог Intel Xeon 64 по производительности, минимум 1 ГБ свободной оперативной памяти (рекомендуется минимум 4 Гб), 5 ГБ на HDD для буферизации печати работы и обработки данных (рекомендуется 10 ГБ). Если пользователи работают с OpenOffice и MS Office — нужны будут ещё инсталляции на сервере (в случае с MS это означает ещё одну лицензию).

На печать можно отправлять файл как обычным способом или через электронную почту, так и давать URL через корпоративный портал на страницу, которую нужно напечатать (этим часто пользуются для мобильной печати).

LCD Image Converter

Создание изображений и шрифтов для встраиваемых приложений.

LCD Image Converter — небольшая C++ / JavaScript / QT графическая утилита для создания изображений и шрифтов в формате исходников «C» для встраиваемых приложений.

2005-ом году, впервые столкнувшись с графическим дисплеем BG160160B и необходимостью выводить на нём текст, на скорую руку набросал утилитку для создания шрифтов под этот дисплей. Удобств в ней особо никаких не было, просто таблица символов и редактор изображения каждого из них. Результатом был «С» файл с массивами битов для монохромного представления. Некоторое время пользовался ей, да и забыл (хотя нашёлся кто-то, выложивший её на одном из форумов в Сети).

— Через несколько лет появилась схожая задача, но уже с другим дисплеем — TIC154 на PCF8535. Дополнительно понадобилось переводить в формат «С» и изображения, а не только шрифты. Было решено написать новую программу с нужными возможностями, в том числе с изменяемым форматом выходного «С» файла и данными под разные контроллеры. Так родилась LCD Bitmap Converter, использовавшаяся, однако, в одном лишь только проекте, но речь не о ней.

— Спустя некоторое время, когда я пересел с Windows на Ubuntu Linux и уже там писал софт под микроконтроллеры, на горизонте замаячил проект с новым дисплеем BP320240E на RA8835, а также несколько изменилось понимание этой задачи, появились новые идеи, требования, которые и привели в итоге к появлению на свет программы LCD Image Converter.

Перед началом работы следует определить тип дисплея (монохромный, оттенки серого, цветной), количество бит на пиксель и ориентацию байт в памяти дисплея.

Илон Маск рекомендует:  $IfNDef - Директива компилятора Delphi

Если нужно изображение, можно создать новое (введя название структуры данных), либо импортировать из существующего графического файла (bmp, gif, jpg, jpeg, png, pbm, pgm, ppm, tiff, xbm, xpm), изменить размер на нужный, внести необходимые изменения и сохранить файл форматов bmp, jpg, png, ppm, tiff, xbm и xpm.

LCD Image Converter предлагает изменение состояния пикселей с помощью мыши (левая кнопка для цвета 1, правая для цвета 2), поворот (на 90, 180, 270 градусов), сдвиг, инверсия цветов, просмотр в редакторе в увеличении от 1 до 50 раз и редактирование с помощью внешнего редактора (например Gimp).

LCD Image Converter позволяет создать шрифт на основе имеющегося в системе и редактировать его. Доступно изменение размера и инверсия всех символов (либо выбранных), поддержка Юникода, шрифт может отрисовываться как моношириный, либо пропорциональный, сглаживание шрифтов может отключаться и пр. Выбранные символы могут быть объединены в одно изображение, для выбранных символов применимы все функции редактора изображения, имеется предварительный просмотр шрифта, сохраняется шрифт в xml файле и может быть открыт позже для продолжения редактирования.

Преобразование из массива байтов в исходник «C» осуществляется с помощью подстановки данных в файл шаблона. Этот файл является простым текстовым файлом с выделенными ключевыми словами. Можно использовать встроенные шаблоны, либо выбрать собственный файл шаблона в настройках (заданные настройки шаблона сохраняются при перезапуске). Преобразование нового документа так же можно выполнить в режиме командной строки (без использования GUI), используя заранее подготовленные настройки.

Лицензия: GNU General Public License version 3.0 (GPLv3)

imagepalettecopy

Руководство по PHP
Пред. След.

imagepalettecopy

(PHP 4 >= 4.0.1, PHP 5)

imagepalettecopy — Copy the palette from one image to another

Description

imagepalettecopy() copies the palette from the source image to the destination image.

Imagepalettecopy

Php функции


Php скрипты


imagepalettecopy

(PHP 4 >= 4.0.1, PHP 5)

imagepalettecopy — Copy the palette from one image to another

Description

void imagepalettecopy ( resource destination, resource source )

imagepalettecopy() copies the palette from the source image to the destination image.

User Contributed Notes

buzz at nospam dot oska dot com
21-Oct-2005 03:51

actually it doesn’t «copy» the palette exactly. It copys the colors from the source palette to the destination image. the palette you end up with in the destination image will be «same colors different order». If you want an EXACT palette copy (at the expense of messing up your image if you aren’t careful), then use this code:

// this is a drop-in replacement for imagepalettecopy, except that it make NO attempt to modifiy any of the
// colors in the dest image, just the palette. The result? if you’re palette’s aren’t very similar, the image will look completely different, and likely terrible!
function imagepalettecopy_exact ( $dst_img , $src_img ) <
for ( $c = 0 ; $c $src_img ); $c ++) <
$c ol = imagecolorsforindex ( $src_img , $c ); //get color at index ‘c’ in the color table
imagecolorset ( $dst_img , $c , $c ol [ red ] , $c ol [ green ] , $c ol [ blue ] ); //set color at index ‘c’ to $c ol in the $dst_image
>
>

?>

Los Olvidados
10-Jan-2003 03:55

To be precise, this function replaces the palette in the destination.

Что такое код imagepalettecopy

Pixillion Image Converter — универсальный конвертер графических файлов в различные форматы. Поддерживается несколько десятков форматов, кроме того, изображения можно ресайзить, поворачивать, накладывать водяной знак, и все это в пакетом режиме. Безусловно, есть много бесплатных программ для подобных операций, но вдруг и эта программа найдет своих поклонников. Естественно, после курса интенсивной антишароварной терапии.

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

Хех, в самом окне регистрации нам дается подсказка, каким должен быть серийный номер. Отлично, хоть с такой мелочью возиться не придется. Очевидно, что серийник-подсказка ни к чему хорошему не приведет, поэтому попробуем слепить по шаблону какой-нибудь свой, например, «111111-abcdefgh». Пробуем зарегистрировать.

  1. . text : 0046BAB1 leaeax , [ esi — 1 ]
  2. ; Сравнить какую-то переменную с фиксированным значением 267D40h
  3. . text : 0046BAB4 cmpeax , 267D40h
  4. ; Если больше, то перепрыгнуть дальше
  5. . text : 0046BAB9 ja loc_46BBBA
  6. . text : 0046BABF cmpesi , 2818F0h
  7. . text : 0046BAC5 jge loc_46BBBA
  8. . text : 0046BACB pushoffset a4_06_0 ; «4.06»
  9. . text : 0046BAD0 call j__atol
  10. . text : 0046BAD5 deceax
  11. . text : 0046BAD6 popecx
  12. . text : 0046BAD7 jnsshort loc_46BADB
  13. . text : 0046BAD9 xoreax , eax
  14. . text : 0046BADB loc_46BADB :
  15. . text : 0046BADB pusheax
  16. . text : 0046BADC movesi , edi
  17. . text : 0046BADE pushoffset aTheCodeYouAreA
  18. ; «The code you are attempting to use is n».
  19. . text : 0046BAE3 leaedi , [ esp + 0CD0h + File ]
  20. . text : 0046BAEA call sub_46A2E9
  21. . text : 0046BAEF moveax , [ esp + 0CD0h + var_CB0 ]

Без отладчика тут не обойтись. Запускам программу под отладчиком, ставим точку останова на адрес 0046BAB1 и пробуем повторить процесс регистрации с тем же левым серийником. При срабатывании точки останова мы видим в регистре EAX, который сравнивается с константой, значение 1B207h. Преобразовав его в десятичный вид мы получаем первую половину серийника, то есть 111111. Таким образом, первая часть серийника должна быть десятичным числом больше 267D40h или 2522432. Не вопрос, прибавим пару единичек к стартовому значению и снова пробуем регистрацию с серийником «2522434-abcdefgh».

  1. ; Сюда мы попадаем после успешной первой поверки
  2. . text : 0046BBBA leaeax , [ esp + 0CC8h + var_CB8 ]
  3. . text : 0046BBBE pusheax
  4. . text : 0046BBBF pushesi
  5. . text : 0046BBC0 leaedi , [ esp + 0CD0h + Data ]
  6. . text : 0046BBC7 mov [ esp + 0CD0h + var_CB8 ] , ebx
  7. ; вызвать функцию следующей проверки
  8. . text : 0046BBCB call sub_46CFD3
  9. . text : 0046BBD0 cmp [ esp + 0CC8h + var_CB8 ] , ebx
  10. . text : 0046BBD4 movedi , [ esp + 0CC8h + var_CB0 ]
  11. ; Сохранить ее результат из регистра AL в ячейку памяти
  12. . text : 0046BBD8 mov [ esp + 0CC8h + var_CB1 ] , al
  13. . text : 0046BBDC jnzshort loc_46BBED
  14. . text : 0046BBDE pushesi
  15. . text : 0046BBDF pushedi
  16. . text : 0046BBDE pushesi
  17. . text : 0046BBDF pushedi
  18. ; Онлайн-проверка, но если программу не выпускать в интернет, то все нормально
  19. . text : 0046BBE0 call sub_46BF70
  20. . text : 0046BBE5 testal , al
  21. . text : 0046BBE7 jz loc_46BCA5
  22. . text : 0046BBED loc_46BBED :
  23. ; Сравнить сохраненное значение регистра с нулем
  24. . text : 0046BBED cmp [ esp + 0CC8h + var_CB1 ] , bl
  25. ; Если ноль, то серийниый номер неправильный
  26. . text : 0046BBF1 jz loc_46BC7E
  27. ; Сохранить введенный серийник и поблагодарить за регистрацию
  28. . text : 0046BBF7 pushesi ; Args
  29. . text : 0046BBF8 pushoffset a >; «ID»
  30. . text : 0046BBFD movesi , offset aRegistration
  31. ; «Registration»
  32. . text : 0046BC02 pushesi ; int
  33. . text : 0046BC03 mov dword_538CAC , ebx
  34. . text : 0046BC09 call sub_401E41
  35. . text : 0046BC0E leaeax , [ esp + 0CC8h + Data ]
  36. . text : 0046BC15 pusheax ; lpData
  37. . text : 0046BC16 pushoffset aKey ; «Key»
  1. . text : 0046CFD3 pushebp
  2. . text : 0046CFD4 movebp , esp
  3. . text : 0046CFD6 moveax , [ ebp + arg_0 ]
  4. . text : 0046CFD9 subesp , 208h
  5. . text : 0046CFDF pushebx
  6. . text : 0046CFE0 pushesi
  7. . text : 0046CFE1 push 64h
  8. . text : 0046CFE3 popecx
  9. . text : 0046CFE4 xoredx , edx
  10. . text : 0046CFE6 divecx
  11. . text : 0046CFE8 movebx , [ ebp + arg_4 ]
  12. . text : 0046CFEB leaesi , [ ebp + var_208 ]
  13. . text : 0046CFF1 pusheax
  14. ; Из первой половины серийника вычислить контрольную строку
  15. . text : 0046CFF2 call sub_46CE57
  16. ; Первый символ строки и первый символ второй половины серийника
  17. . text : 0046CFF7 movax , [ ebp + var_208 ]
  18. . text : 0046CFFE cmpax , [ edi ]
  19. . text : 0046D001 jnzshort loc_46D063
  20. ; Второй символ строки и второй символ второй половины серийника
  21. . text : 0046D003 movax , [ ebp + var_206 ]
  22. . text : 0046D00A cmpax , [ edi + 2 ]
  23. . text : 0046D00E jnzshort loc_46D063
  24. ; Третий символ строки и третий символ второй половины серийника
  25. . text : 0046D010 movax , [ ebp + var_204 ]
  26. . text : 0046D017 cmpax , [ edi + 4 ]
  27. . text : 0046D01B jnzshort loc_46D063
  28. ; Четвертый символ строки и четвертый символ второй половины серийника
  29. . text : 0046D01D movax , [ ebp + var_202 ]
  30. . text : 0046D024 cmpax , [ edi + 6 ]
  31. . text : 0046D028 jnzshort loc_46D063
  32. ; Пятый символ второй половины серийника должен быть «c»
  33. . text : 0046D02A cmpwordptr [ edi + 8 ] , 63h
  34. . text : 0046D02F jnzshort loc_46D063
  35. ; Шестой символ второй половины серийника должен быть «l»
  36. . text : 0046D031 cmpwordptr [ edi + 0Ah ] , 6Ch
  37. . text : 0046D036 jnzshort loc_46D063
  38. . text : 0046D038 moveax , edi
  39. . text : 0046D03A movdwordptr [ ebx ] , 1
  40. . text : 0046D040 leaedx , [ eax + 2 ]
  41. ; Проверить количество символов во второй половине серийника
  42. . text : 0046D043 loc_46D043 :
  43. . text : 0046D043 movcx , [ eax ]
  44. . text : 0046D046 inceax
  45. . text : 0046D047 inceax
  46. . text : 0046D048 testcx , cx
  47. . text : 0046D04B jnzshort loc_46D043
  48. . text : 0046D04D subeax , edx
  49. . text : 0046D04F sareax , 1
  50. ; Количество символов должно быть равно 8
  51. . text : 0046D051 cmpeax , 8
  52. . text : 0046D054 jnzshort loc_46D0C1
  53. ; Сравнить первую половину серийника со значением 100000000
  54. . text : 0046D056 cmp [ ebp + arg_0 ] , 5F5E100h
  55. . text : 0046D05D jbeshort loc_46D063
  56. . text : 0046D05F loc_46D05F :
  57. ; Если больше 100000000 и проверки второй половины пройдены, то серийник
  58. ; считается правильным, установить AL=1 и выйти из функции проверки
  59. . text : 0046D05F moval , 1
  60. . text : 0046D061 jmpshort loc_46D0C9

Такие участки кода в статике анализировать не очень удобно, лучше всего посмотреть процесс сравнений под отладчиком. Ставим точку останова на начало функции и повторяем процесс регистрации. Все обнаруженное я отобразил в комментариях к коду, продублирую словами. На основании первой половины серийника генерируется строка из 6 символов. Первые четыре из них должны равняться первым четырем символам второй части серийника, пятый и шестой символы второй части являются постоянными и должны равняться строчке «cl» («corporate license»?), последние два символа в проверке не используются, но должны быть, чтобы общая длина второй половины серийника была строго 8 символов. А самое интересное, что в случае выполнения этих условий снова проверяется первая часть серийника, и, если она больше 100000000, то серийный номер признается корректным. Дальше по коду есть еще одна проверка, похожая на эту, только контрольная строка другая. Похоже на проверку «single license». Но нам вполне достаточно найденных условий. В свете новой линии партии тестовый серийник превращается в «100000001-abcdclmh». Повторяем регистрацию. Остановившись на генерации контрольной строки, выясняем, что заветные четыре контрольных символа в этом случае должны быть «zuhh». И вот момент истины, искомый серийный номер получается «100000001-zuhhclmh». Закрываем отладчик, запускаем программу в обычном режиме и регистрируем ее свеженаколдованным серийным номером:

  1. ; Первая часть серийника
  2. . text : 0046CFD6 moveax , [ ebp + arg_0 ]
  3. . text : 0046CFD9 subesp , 208h
  4. . text : 0046CFDF pushebx
  5. . text : 0046CFE0 pushesi
  6. ; Делитель = 100
  7. . text : 0046CFE1 push 64h
  8. . text : 0046CFE3 popecx
  9. . text : 0046CFE4 xoredx , edx
  10. . text : 0046CFE8 movebx , [ ebp + arg_4 ]
  11. . text : 0046CFEB leaesi , [ ebp + var_208 ]
  12. . text : 0046CFF1 pusheax
  13. . text : 0046CFF2 call sub_46CE57
  14. ; Разделить первую часть серийника
  15. . text : 0046CFE6 divecx
  16. . text : 0046CFE8 movebx , [ ebp + arg_4 ]
  17. . text : 0046CFEB leaesi , [ ebp + var_208 ]
  18. ; Передать результат деления в генератор
  19. . text : 0046CFF1 pusheax
  20. . text : 0046CFF2 call sub_46CE57
  1. ; Инициализация строки начальным значением «abcdef»
  2. . text : 0046CE60 moveax , offset aAbcdef ; «abcdef»
  3. . text : 0046CE65 call sub_401039
  4. . . .
  5. . . .
  6. ; Заполнить первый массив указателями на шестисимвольные строки
  7. . text : 0046CE74 mov [ ebp + var_44 ] , offset aMnbvaq ; «mnbvaq»
  8. . text : 0046CE7B mov [ ebp + var_40 ] , offset aCxzlbr ; «cxzlbr»
  9. . text : 0046CE82 mov [ ebp + var_3C ] , offset aKjhgct ; «kjhgct»
  10. . text : 0046CE89 mov [ ebp + var_38 ] , offset aFdsady ; «fdsady»
  11. . text : 0046CE90 mov [ ebp + var_34 ] , offset aPoiueu ; «poiueu»
  12. . text : 0046CE97 mov [ ebp + var_30 ] , offset aYtrefo ; «ytrefo»
  13. . text : 0046CE9E mov [ ebp + var_2C ] , offset aWqalgx ; «wqalgx»
  14. . text : 0046CEA5 mov [ ebp + var_28 ] , offset aKsjdhv ; «ksjdhv»
  15. . text : 0046CEAC mov [ ebp + var_24 ] , offset aHfgbif ; «hfgbif»
  16. ; Заполнить второй массив указателями на шестисимвольные строки
  17. . text : 0046CEB3 movebx , offset aQazwja ; «qazwja»
  18. . text : 0046CEB8 movedi , offset aTgbymh ; «tgbymh»
  19. . text : 0046CEBD movecx , esi
  20. . text : 0046CEBF mov [ ebp + var_20 ] , ebx
  21. . text : 0046CEC2 mov [ ebp + var_1C ] , offset aSxedkf ; «sxedkf»
  22. . text : 0046CEC9 mov [ ebp + var_18 ] , offset aCrfvlg ; «crfvlg»
  23. . text : 0046CED0 mov [ ebp + var_14 ] , edi
  24. . text : 0046CED3 mov [ ebp + var_10 ] , offset aHnujni ; «hnujni»
  25. . text : 0046CEDA mov [ ebp + var_C ] , offset aMiklop ; «miklop»
  26. . text : 0046CEE1 mov [ ebp + var_8 ] , offset aPlokpc ; «plokpc»
  1. ; Поделить контрольное число на 9
  2. . text : 0046CE6A moveax , [ ebp + arg_0 ]
  3. . text : 0046CE6D push 9
  4. . text : 0046CE6F popecx
  5. . text : 0046CE70 xoredx , edx
  6. . text : 0046CE72 divecx
  7. . . .
  8. . . .
  9. ; Сохранить результат деления. В регистре EDX остаток от деления
  10. . text : 0046CEE8 mov [ ebp + var_4 ] , eax
  11. ; Указатель на элемент первого массива строк
  12. . text : 0046CEEB moveax , [ ebp + edx * 4 + var_44 ]
  13. ; Функция преобразования
  14. . text : 0046CEEF call sub_46CDB1

Небольшое отступление на функцию преобразования. Ее оригинальный текст вы можете посмотреть сами, тут я его приводить не буду. Если ее свернуть в псевдокод при помощи плагина Hex-Rays, а потом еще привести в человеческий вид, то все преобразование сведется к следующим действиям:

; cstr — контрольная строка
; mstr — строка из массива, выбранная по номеру (указателю)
cstr[0] = (cstr[0] + mstr[0] — 194) % 26 + 97
cstr[1] = (cstr[1] + mstr[1] — 194) % 26 + 97
cstr[2] = (cstr[2] + mstr[2] — 194) % 26 + 97
cstr[3] = (cstr[3] + mstr[3] — 194) % 26 + 97
cstr[4] = (cstr[4] + mstr[4] — 194) % 26 + 97
cstr[5] = (cstr[5] + mstr[5] — 194) % 26 + 97
Едем дальше. На втором шаге контрольная строка преобразуется с элементом из второго массива строк.

  1. ; Результат предыдущего деления контрольного числа
  2. . text : 0046CEF4 moveax , [ ebp + var_4 ]
  3. ; Делитель
  4. . text : 0046CEF7 push 7
  5. . text : 0046CEF9 popecx
  6. . text : 0046CEFA xoredx , edx
  7. . text : 0046CEFC divecx
  8. . text : 0046CEFE movecx , esi
  9. ; Указатель на строку второго массива
  10. . text : 0046CF00 moveax , [ ebp + edx * 4 + var_20 ]
  11. . text : 0046CF04 call sub_46CDB1
  1. ; Контрольное число делится на 63
  2. . text : 0046CF09 moveax , [ ebp + arg_0 ]
  3. . text : 0046CF0C push 3Fh
  4. . text : 0046CF0E xoredx , edx
  5. . text : 0046CF10 popecx
  6. . text : 0046CF11 divecx
  7. ; Результат деления делится еще на 9
  8. . text : 0046CF13 push 9
  9. . text : 0046CF15 popecx
  10. . text : 0046CF16 xoredx , edx
  11. ; Результат этого деления — новое контрольное число
  12. . text : 0046CF18 mov [ ebp + arg_0 ] , eax
  13. ; Делим новое контрольное число на 9
  14. . text : 0046CF1B divecx
  15. . text : 0046CF1D movecx , esi
  16. ; Сохранить результат деления
  17. . text : 0046CF1F mov [ ebp + var_4 ] , eax
  18. ; Указатель на строку из первого массива
  19. . text : 0046CF22 moveax , [ ebp + edx * 4 + var_44 ]
  20. ; Функция преобразования
  21. . text : 0046CF26 call sub_46CDB1
  1. ; Сохраненный результат деления
  2. . text : 0046CF2B moveax , [ ebp + var_4 ]
  3. . text : 0046CF2E push 7
  4. . text : 0046CF30 popecx
  5. . text : 0046CF31 xoredx , edx
  6. ; Поделить на 7
  7. . text : 0046CF33 divecx
  8. . text : 0046CF35 movecx , esi
  9. ; Остаток — номер элемента второго массива
  10. . text : 0046CF37 moveax , [ ebp + edx * 4 + var_20 ]
  11. ; Функция преобразования
  12. . text : 0046CF3B call sub_46CDB1
  1. ; Контрольное число
  2. . text : 0046CF40 moveax , [ ebp + arg_0 ]
  3. . text : 0046CF43 push 3Fh
  4. . text : 0046CF45 xoredx , edx
  5. . text : 0046CF47 popecx
  6. . text : 0046CF48 divecx
  7. . text : 0046CF4A push 9
  8. . text : 0046CF4C popecx
  9. . text : 0046CF4D xoredx , edx
  10. . text : 0046CF4F mov [ ebp + arg_0 ] , eax
  11. . text : 0046CF52 divecx
  12. . text : 0046CF54 movecx , esi
  13. . text : 0046CF56 mov [ ebp + var_4 ] , eax
  14. . text : 0046CF59 moveax , [ ebp + edx * 4 + var_44 ]
  15. . text : 0046CF5D call sub_46CDB1
  1. . text : 0046CF62 moveax , [ ebp + var_4 ]
  2. . text : 0046CF65 push 7
  3. . text : 0046CF67 xoredx , edx
  4. . text : 0046CF69 popecx
  5. . text : 0046CF6A divecx
  6. . text : 0046CF6C moveax , [ ebp + edx * 4 + var_20 ]
  7. . text : 0046CF70 movecx , esi
  8. . text : 0046CF72 call sub_46CDB1
  1. . text : 0046CF77 moveax , [ ebp + arg_0 ]
  2. . text : 0046CF7A push 3Fh
  3. . text : 0046CF7C xoredx , edx
  4. . text : 0046CF7E popecx
  5. . text : 0046CF7F divecx
  6. . text : 0046CF81 push 9
  7. . text : 0046CF83 popecx
  8. . text : 0046CF84 xoredx , edx
  9. . text : 0046CF86 divecx
  10. . text : 0046CF88 movecx , esi
  11. . text : 0046CF8A mov [ ebp + arg_0 ] , eax
  12. . text : 0046CF8D moveax , [ ebp + edx * 4 + var_44 ]
  13. . text : 0046CF91 call sub_46CDB1
  14. . text : 0046CF96 moveax , [ ebp + arg_0 ]
  15. . text : 0046CF99 push 7
  16. . text : 0046CF9B popecx
  17. . text : 0046CF9C xoredx , edx
  18. . text : 0046CF9E divecx
  19. . text : 0046CFA0 movecx , esi
  20. . text : 0046CFA2 moveax , [ ebp + edx * 4 + var_20 ]
  21. . text : 0046CFA6 call sub_46CDB1
  1. ; Если забыли, то регистры указывают на эти строки
  2. . text : 0046CEB3 movebx , offset aQazwja ; «qazwja»
  3. . text : 0046CEB8 movedi , offset aTgbymh ; «tgbymh»
  4. . . .
  5. . . .
  6. . . .
  7. . text : 0046CFAB moveax , offset aKjhgct ; «kjhgct»
  8. . text : 0046CFB0 call sub_46CDB1
  9. ; Смотри выше
  10. . text : 0046CFB5 moveax , edi
  11. . text : 0046CFB7 call sub_46CDB1
  12. . text : 0046CFBC moveax , offset aMnbvaq ; «mnbvaq»
  13. . text : 0046CFC1 call sub_46CDB1
  14. ; Смотри выше
  15. . text : 0046CFC6 moveax , ebx
  16. . text : 0046CFC8 call sub_46CDB1

И последний этап — четыре преобразования с фиксированными строками. Две вызываются по адресу, адреса двух других берутся из регистров, куда они были записаны при заполнении массивов. Это уже происки компилятора, оптимизация, понимаешь. После всех преобразований на выходе получается готовая контрольная строка. Писанины много, на самом деле алгоритм совсем не сложный.

Вот и все, теперь можно писать генератор ключей аж на корпоративную лицензию. Остальные продукты разработчика кейгенятся аналогичным образом, защита там похожая.

Total Image Converter 8.2.0.206 + Portable + Repack

Неплохая программа для конвертации изображений в разные другие графические форматы. Дополнительно вы сможете работать с вашими изображениями, например изменять их размер или поворачивать, скачать Total Image Converter предлагается в полной новости. С этой программой очень удобно конвертировать большие картинки типа TIFF в более мелкие JPG, можно легко подогнать изображение под размеры вашей веб-страницы, можно вести преобразование RAW фотографий.

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

Total Image Converter имеет простой интерфейс, Русская поддержка присутствует, в целом все очень просто, картинки добавлять можно просто перенеся их в главное окно мышью. После регистрации надо будет перезагрузить программу, можно изменять размер главного окна под свои потребности, позиции будут сохранены.

Илон Маск рекомендует:  Тег fieldset
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL