Sygnatury graficzne plików

0

Cześć! :)
Miałem chwilę wolnego i napisałem prosty program do generowania "sygnatury graficznej" pliku. Złapałem kilka plików exe i dwa z nich były interesujące.

  1. steam.exe (platforma do gier)
  2. STS.exe (spring toolkit)

W obu przypadkach znalazłem ukryte loga firm (efekty w załącznikach). Mam pytanie czy to popularna praktyka i jak się robi takie rzeczy :)

Dla ciekawskich kod źródłowy:

package core;

import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;

import javax.imageio.ImageIO;

public class Signer {

	public static void main(String[] args) throws IOException {
		int size = 256*256 + 112; //65 648
		Signer s=  new Signer();
		String path="C:\\Program Files\\Blender Foundation\\Blender\\blender.exe"; // Ścieżka do pliku
		int[][] t = s.getDataFromFile(path);
		BufferedImage bi = s.generateSignature(t);
		s.saveImage("1.jpg", bi);

	}
	public void saveImage(String filename, BufferedImage buf) throws IOException {
		File f = new File(filename);
		ImageIO.write(buf, "jpg", f);
	}
	public BufferedImage generateSignature(int[][] data) {
		BufferedImage retn = new BufferedImage(data.length, data.length, BufferedImage.TYPE_INT_RGB);
		for (int i = 0; i < data.length; i++) {
			for (int j = 0; j < data[i].length; j++) {
				retn.setRGB(i, j, data[i][j]);
			}
		}
		return retn;
		
	}
	public int[][] getDataFromFile(String path) throws IOException {
		Path p = Paths.get(path);
		byte[] data = Files.readAllBytes(p);
		int[][] retn = this.byteTo2DInt(data);
		return retn;
	}
	public int[][] byteTo2DInt(byte[] d) {
		int dim = this.estimateDimesion(d.length);
		int[][] retn = new int[dim][dim];
		int x=0,y=0;
		List<Byte> tmp = new ArrayList<>();
		for (int i = 0; i < d.length; i++) {
			if (tmp.size() == 3) {
				Color c = new Color(tmp.get(0)&0xff,tmp.get(1)&0xff,tmp.get(2)&0xff);
				retn[x][y] = c.getRGB();
				tmp.clear();
				y++;
				if (y >= dim) {
					x++;
					y = 0;
				}
			}
			tmp.add(d[i]);
		}
		return retn;
	}
	public int estimateDimesion(int size) {
		int sizeInt = size/4;
		int dimCounted = 0;
		// x * y >= sizeInt
		byte powerLevel = 1;
		while (Math.pow(dimCounted,2) < sizeInt) {
			dimCounted = (int) Math.pow(2, powerLevel);
			powerLevel++;
		}
		return dimCounted;
	}

}

0

Co w tym dziwnego? W .exe jest spakowana ikonka programu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1