Быстрый поиск
Введите фрагмент названия статьи для поиска
Исследование защиты программы SVG To PNG Converter
03.11.2020 | Категория: Темная сторона Силы | Автор: ManHunter
Скриншот программы SVG To PNG Converter
SVG To PNG Converter - весьма толковая программа для пакетного конвертирования файлов из векторного формата SVG в более привычный формат PNG. Сейчас на сайте разработчика 1533 программы, в числе которых различные конвертеры, надстройки над офисными пакетами и всякое подобное. Если циферками не зашло, продублирую буковками: у разработчика в списке релизов числятся более полутора тысяч программ. Часть из них используют бесплатные утилиты других авторов, другая часть, как мне кажется, какие-то бесплатные компоненты. Пора воплощать в жизнь марксистский термин "экспроприация экспроприаторов".
Читать статью целиком »
Просмотров: 1742 | Комментариев: 10
Вывод изображения на Ассемблере с помощью OLE
21.09.2019 | Категория: Образ мышления: Assembler | Автор: ManHunter
Ранее я уже разбирал загрузку и вывод изображения с помощью GDI+, но это далеко не единственный способ загрузки изображения из файла. В дополнение к этой теме предлагаю рассмотреть еще один способ, как можно загрузить изображение из файла средствами OLE. Сперва пропишем GUID объекта IID_IPicture и создадим структуру для методов интерфейса IPicture. В MSDN методы перечислены в алфавитном порядке, а не так, как они фактически идут в интерфейсе, имейте это в виду.Code (Assembler) : Убрать нумерацию
- ; GUID {7BF80980-BF32-101A-8BBB-00AA00300CAB}
- IID_IPicture dd 7BF80980h
- dw 0BF32h
- dw 0101Ah
- db 08Bh, 0BBh, 0h, 0AAh, 0h, 030h, 00Ch, 0ABh
- ; IPicture Interface
- struct IPicture
- ; IUnknown
- QueryInterface dd ?
- AddRef dd ?
- Release dd ?
- ; IPicture
- get_Handle dd ?
- get_hPal dd ?
- get_Type dd ?
- get_Width dd ?
- get_Height dd ?
- Render dd ?
- set_hPal dd ?
- get_CurDC dd ?
- SelectPicture dd ?
- get_KeepOriginalFormat dd ?
- set_KeepOriginalFormat dd ?
- PictureChanged dd ?
- SaveAsFile dd ?
- get_Attributes dd ?
- SetHdc dd ?
- ends
Code (Assembler) : Убрать нумерацию
- ; Прочитать файл в память
- invoke _lopen,fname,OF_READ
- cmp eax,-1
- je loc_free_1
- mov ebx,eax
- ; Получить размер файла
- invoke GetFileSize,ebx,NULL
- mov [file_size],eax
- ; Выделить память под файл
- invoke GetProcessHeap
- mov [hProcHeap],eax
- invoke HeapAlloc,[hProcHeap],0,[file_size]
- mov [hLock],eax
- ; Загрузить картинку в память
- invoke _lread,ebx,[hLock],[file_size]
- invoke _lclose,ebx
Читать статью целиком »
Просмотров: 3000 | Комментариев: 0
Градиентный фон на PHP
31.07.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Градиентный фон на PHP
Продолжаем работать с графикой на PHP. Сегодня будем рисовать градиентную заливку фона, когда один цвет плавно перетекает в другой.
Читать статью целиком »
Просмотров: 2050 | Комментариев: 1
Получение реального формата изображения
08.04.2019 | Категория: Web-мастеру и не только | Автор: ManHunter
Одно из основных правил при разработке web-приложений - не доверять никаким данным, полученным от пользователя. Они могут быть перепутаны случайно, но могут быть специально модифицированы в злонамеренных целях. Это касается в том числе и загружаемых изображений. Чтобы применять к ним функции типа ImageCreateFromXXX, просто ориентироваться на расширение файла недостаточно, оно запросто может не соответствовать содержимому. Для определения реального типа изображения я всегда проверяю внутренний формат файла, его служебные заголовки, и только на основании этого принимаю решение, как обрабатывать этот файл. Для этого у меня написана вот такая функция:Code (PHP) : Убрать нумерацию
- //-------------------------------------------------------------------
- // Функция получения реального формата изображения
- // (C) ManHunter / PCL
- // https://www.manhunter.ru
- //-------------------------------------------------------------------
- function get_real_image_type($file_path) {
- // По умолчанию файл имеет неизвестный формат
- $type=false;
- // Анализ по внутренней структуре файла
- if ($f=fopen($file_path,'r')) {
- $data=fread($f,20);
- fclose($f);
- // Заголовок файла GIF
- if (substr($data,0,3)=='GIF'
- && (substr($data,12,1)=="\x00"
- || substr($data,12,1)=="\x01")) {
- // Проверка на классические сплойты
- if (strpos(substr($data,6,4),'/*')!==false
- || strpos(substr($data,6,4),'//')!==false) {
- $type=false;
- }
- else {
- // Проверка на более хитрые сплойты
- $tmp=preg_replace('/[^\("\']/','',substr($data,6,4));
- if ($tmp=='("' || $tmp=='(\'') {
- $type=false;
- }
- else {
- $type='gif';
- }
- }
- }
- // Заголовок файла PNG
- elseif (substr($data,0,8)==chr(137).'PNG'.chr(13).chr(10).chr(26).chr(10)) {
- $type='png';
- }
- // Заголовок файла JPEG
- elseif (substr($data,0,3)==chr(255).chr(216).chr(255)) {
- $type='jpg';
- }
- // Заголовок файла BMP
- elseif (substr($data,0,2)=='BM') {
- $type='bmp';
- }
- // Заголовок файла WebP
- elseif (substr($data,0,4)=='RIFF' && substr($data,8,4)=='WEBP') {
- $type='webp';
- }
- }
- return $type;
- }
Кроме определения типа изображения функция также проверяет GIF-файлы на наличие в них вредоносного кода. Из всех эксплойтов, которые я встречал внедренными в гифки, не прошел ни один. Если вдруг найдете образец зловреда, который не обнаруживается этой функцией, то пришлите его мне, пожалуйста, я с удовольствием доработаю проверку.
Просмотров: 1355 | Комментариев: 6
Рамка для фото в виде смартфона
25.11.2018 | Категория: Web-мастеру и не только | Автор: ManHunter
Рамка для фото в виде смартфона
Для одной презентации понадобилось достаточно большое количество картинок, на которых представлены скриншоты мобильной версии продукта. С самими картинками проблем не возникло, нащелкали на смартфонах сколько надо скриншотов. Согласно поставленной задаче, для пущей убедительности картинки должны быть, так сказать, "в интерьере", то есть как будто отрисованные на экране смартфонов. Конечно, фотошоп никто не отменял, можно было заморочиться и наделать все ручками, но программистское мышление взяло вверх. Как верно подметил герой одного старого мультика, "лучше день потерять, зато потом за пять минут долететь".
Читать статью целиком »
Просмотров: 2682 | Комментариев: 4