Comments 24
Да я, по сути, ничего и не ломал. Даже не пользовался дизассемблером. Лишь производил вычисления над результатами работы программы, и то с потерей точности.
Теперь автор сделает наложение водяных знаков случайным образом по изображению, и всё :)
Автору советую ещё и делать буквы в надписях из случайного шума.
А вот положение надписей если и менять случайным образом, то очень осторожно. Иначе я несколько раз прогоню одну и ту же картинку через программу и соберу результат из тех кусочков, на которых нет надписи.
Ещё рацпредложение: вычислять все "случайности" из хэша исходной картинки. Тогда бесполезно и прогонять картинку несколько раз, и белое поле вместо неё подсовывать.
Спасибо за предложения! Возможно, поменяю алгоритм наложения водяных знаков.
Собственно, защита как таковая у SmartDeblur'а без особых наворотов по принципу «кто не хочет купить, все равно не купит».
Если нужен ключик — пишите, чтобы не мучится каждый раз с удалением маски )
Собственно, защита как таковая у SmartDeblur'а без особых наворотов по принципу «кто не хочет купить, все равно не купит».
Если нужен ключик — пишите, чтобы не мучится каждый раз с удалением маски )
Спасибо. Ключик пока не нужен, выручает фотоштатив. А вот почему в маске пространство между надписями не совсем белое — интересно. Это результат деконволюции белого поля или просто маска такая?
Вот как я это делаю в своем приложении (Java):
Я использую в приложении библиотеку OpenCV, поэтому она же применена здесь при наложении текста.
На входе пустое изображение (Mat alpha) того же размера как исходное, только в градациях серого (однобайтное). На выходе на него наложен требуемый текст. И сейчас это изображение можно накладывать на исходное. Как — зависит от конкретной реализации, вот у меня здесь есть немного про наложение картинок.
Вот, кстати результат наложения:

private void putWaterMark(Mat alpha){
String logo = _applicationName;
String subLogo = "Free version";
double fontScale = 1;
double maxFontScale = 15;
int thickness = 7;
int [] baseline = {0};
// начало текста по горизонтали
double x = Math.random() * alpha.cols()/10+15;
// начало текста по вертикали
double y1 = alpha.rows() / 10.;
double y2 = alpha.rows() * 0.9;
double y = y1 + Math.random() * (y2 - y1);
Point beginLogo = new Point(x,y);
// максимальная ширина текста
int maxLength = alpha.cols() - (int) beginLogo.x;
// подбор размера фонта под ширину текста:
Size textsize = new Size(100,100);
for (double d=maxFontScale; d>0; d = d - 0.5){
textsize = Core.getTextSize(logo, Core.FONT_HERSHEY_COMPLEX, d, thickness, baseline);
if (textsize.width < maxLength) {
fontScale = d;
break;
}
}
Core.putText(alpha, logo, beginLogo, Core.FONT_HERSHEY_COMPLEX, fontScale, new Scalar(255), thickness);
beginLogo.y = beginLogo.y + textsize.height;
Core.putText(alpha, subLogo, beginLogo, Core.FONT_HERSHEY_COMPLEX, fontScale/2, new Scalar(255), thickness-3);
}
Я использую в приложении библиотеку OpenCV, поэтому она же применена здесь при наложении текста.
На входе пустое изображение (Mat alpha) того же размера как исходное, только в градациях серого (однобайтное). На выходе на него наложен требуемый текст. И сейчас это изображение можно накладывать на исходное. Как — зависит от конкретной реализации, вот у меня здесь есть немного про наложение картинок.
Вот, кстати результат наложения:

Тут тоже не всё очевидно, ведь при реализации вашего предложения «в лоб» изменение одной точки где-то в углу может сдвинуть все надписи. Тогда опять можно будет просто собрать картинку по кусочкам.
Практически из любого подхода с наложением водяных знаков можно собрать изображение по кусочкам. Поэтому обычно реализуют стандартное наложение даже в фотостоках.
Да. Даже если положение надписей постоянно, а меняется лишь шум в буквах, то можно попытаться собрать статистику и вычислить кое-какой результат. В общем, согласен с вами, что хэшировать надо с умом.
Не поможет. Многократно меняем 1 пикс в картинке (например верхний левый) — хэш меняется, и задача сводится к рецепту mporshnev.
Можно для демо-версии не всю картинку «шарпить», а например только верхнюю половинку. Предвосхищая «добавить снизу белое поле, потом обрезать» — думаю, не прокатит, т.к. это повлияет на поиск пути смазывания, так что результат не будет эквивалентен. Да, можно повернуть и повторить, потом склеить… ну еще можно кружочками.
Или, к примеру, лимит по разрешению ставить.
Можно для демо-версии не всю картинку «шарпить», а например только верхнюю половинку. Предвосхищая «добавить снизу белое поле, потом обрезать» — думаю, не прокатит, т.к. это повлияет на поиск пути смазывания, так что результат не будет эквивалентен. Да, можно повернуть и повторить, потом склеить… ну еще можно кружочками.
Или, к примеру, лимит по разрешению ставить.
Класс! Использование программы для её же эксплойтинга. Замечательно придумано!
Это как через IDA дизасмить её же (платную).
Это как через IDA дизасмить её же (платную).
Всегда хотел сделать что-то подобное с фотографиями фотостоков. Но дальше мыслей «хм, надо как-нибудь попробовать» никогда не делал. Вы молодец :)
SmartDeblur же открытая была? Теперь закрытая, да ещё и с водяными знаками?
Она и осталась такой.
В дополнение к открытой open-source версии теперь появились:
— бесплатная бета версия с авто-детектированием траектории смаза,
— а также коммерческая версия
В дополнение к открытой open-source версии теперь появились:
— бесплатная бета версия с авто-детектированием траектории смаза,
— а также коммерческая версия
Эх, сделал бы кто-то простую программу для Super Resolution. Или попросту чтобы после пары кликов мышкой можно было бы вычленить чуть более качественынй кусок из последовательности кадров
Да, это было бы хорошо для кадров с видео.
Это, пожалуй, самый частый вопрос по SmartDeblur'у — как восстановить нечитаемый номер с регистратора или уличной камеры
Это, пожалуй, самый частый вопрос по SmartDeblur'у — как восстановить нечитаемый номер с регистратора или уличной камеры
Тут задача простая, потому что можно применить водную метку к пустому изображению. Веселее подбирать шрифты, воссоздавать фотошоповские эффекты и их разворачивать (прозрачность, тень...). Вот развлекался (очень давно):

Было: i31.tinypic.com/2e0rayf.jpg
Стало: i27.tinypic.com/eaf9ue.jpg
Очень огорчает, когда замечательные фотографии и рисунки оскверняются конскими метками…

Было: i31.tinypic.com/2e0rayf.jpg
Стало: i27.tinypic.com/eaf9ue.jpg
Очень огорчает, когда замечательные фотографии и рисунки оскверняются конскими метками…
Sign up to leave a comment.
«Взлом» SmartDeblur 2.2