В скриншотах игры WoW обнаружены цифровые водяные знаки (userID, time, realm)

в 21:21, , рубрики: blizzard, world of warcraft, водяные знаки, криптография, обработка изображений, Стеганография, шифр, метки: , , , ,

В скриншотах игры WoW обнаружены цифровые водяные знаки (userID, time, realm)

Пользователи игрового форума OwnedCore обнаружили скрытые водяные знаки, которые автоматически внедряются в JPG-файлы, если вы делаете скриншот в игре World of Warcraft. Если сделать скриншот чистой области, открыть файл в IrfanView или каком-нибудь редакторе, выкрутить контраст на максимум, повторить процедуру несколько раз, то заметен явный паттерн, который многократно повторяется.

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

Таким образом, если к вам попал оригинальный скриншот из игры WoW, то вы можете восстановить имя пользователя, который его сделал, время снятия скриншота и координаты (реалм). Очевидно, это нужно компании Blizzard для расследования всяких инцидентов, связанных с нелегальной торговлей цифровыми товарами и другими нарушениями правил.

Программа для декодирования графических файлов: ImageToBinary.exe

Ещё одна программа на C# (требует .NET 4.5): WatermarkTool.rar

В скриншотах игры WoW обнаружены цифровые водяные знаки (userID, time, realm)

Программа на Java для извлечения цифровой метки

import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.*;

public class ReadWatermark 
{
    static final int pWidth=352; // Pattern width
    static final int pHeight=240; // Pattern height
    
    static final int pxWidth=4; // Bit width
    static final int pxHeight=5; // Bit height    

    static final int bWidth=88; // Bits table width
    static final int bHeight=48; // Bits table height

    static final int Black=0xFF000000; // Black = 0
    static final int White=0xFFFFFFFF; // White = 1
    
    static final String filenameSrc = "pattern.bmp"; // Stores the filename
    
    
    public static byte[][] getPatternBits(BufferedImage image)
    {
            byte barcode[][] = new byte[bWidth][bHeight]; // Stores the bits

                for (int y=0, i=0; y<pWidth; y+=pxWidth, i++)
                    for (int x=0, j=0; x<pHeight; x+=pxHeight, j++)
                        if (image.getRGB(y+1,x)==Black)
                        // we check y+1 to target correctly (see pattern)
                                barcode[i][j]=0; // got black
                        else
                                barcode[i][j]=1; // got white
            return barcode;		
    }
    
    
    public static BufferedImage readImage(File file)
    {
            try
            {
                return (ImageIO.read(file));
            }
            catch (IOException e) 
            {
                return (null);
            }   		
    }
    
    
    public static void main(String[] args)
    {
        byte barcode[][]; // Stores the bits

        File fileSrc = new File(filenameSrc); // Create file reference

        BufferedImage imageSrc=readImage(fileSrc); // Read file

        if (imageSrc==null)
            System.exit(1); // no file found
        
        barcode=getPatternBits(imageSrc); // Get bits

        for (int i=bWidth-1; i>=0; i--)
        { // Print the pattern (1 row here is 1 column there, right to left)
            for (int j=bHeight-1; j>=0; j--)
                System.out.print(barcode[i][j]);
            System.out.println();
        }
    }
}

Как видим, среди игроков WoW есть много грамотных ребят. Они исследовали свои архивы и обнаружили, что скрытый код внедряется в скриншоты как минимум с 2008 года (Patch 3+), когда компания Blizzard была куплена Activision.

Посмотреть на код в своих скриншотах вы можете, сделав скриншот с качеством меньше 1-9, и запустив одну из вышеуказанных программ.

/console SET screenshotQuality "9"

Пока что не удалось сделать инструмент, который извлекает водяные знаки из скриншотов с качеством 10, а также из скриншотов в формате сжатия без потерь TGA. Возможно, водяные знаки там отсутствуют.

Автор: alizar

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js