Pull to refresh

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

Cryptography *Image processing *


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

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

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

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

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



Программа на 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. Возможно, водяные знаки там отсутствуют.
Tags:
Hubs:
Total votes 103: ↑97 and ↓6 +91
Views 101K
Comments Comments 67