Java tutorial
//package com.java2s; import java.io.File; import java.io.FileInputStream; import java.io.DataInputStream; import java.io.IOException; public class Main { static final byte[] signature = { (byte) 0x03, (byte) 0x48, (byte) 0x85, (byte) 0x46, (byte) 0x03, (byte) 0xf0, (byte) 0x34, (byte) 0xf8, (byte) 0x00, (byte) 0x48, (byte) 0x00, (byte) 0x47, (byte) 0xf5, (byte) 0x08, (byte) 0x00, (byte) 0x08, (byte) 0x40, (byte) 0x0c, (byte) 0x00, (byte) 0x20, (byte) 0x00, (byte) 0x23, (byte) 0x02, (byte) 0xe0, (byte) 0x01, (byte) 0x23, (byte) 0x00, (byte) 0x22, (byte) 0xc0, (byte) 0x46, (byte) 0xf0, (byte) 0xb5, (byte) 0xdb, (byte) 0x07, (byte) 0x27, (byte) 0x4e, (byte) 0x00, (byte) 0xf0, (byte) 0x3b, (byte) 0xf8, (byte) 0x00, (byte) 0x1b, (byte) 0x49, (byte) 0x1b, (byte) 0x25, (byte) 0x4e, (byte) 0x00, (byte) 0xf0, (byte) 0x35, (byte) 0xf8, (byte) 0x00, (byte) 0xf0, (byte) 0x34, (byte) 0xf8, (byte) 0x24, (byte) 0x4e, (byte) 0x00, (byte) 0xf0, (byte) 0x30, (byte) 0xf8, (byte) 0x00, (byte) 0x1b, (byte) 0x49, (byte) 0x1b }; static int readFirmwareFirmware(File fp) { try { FileInputStream fis = new FileInputStream(fp); DataInputStream dis = new DataInputStream(fis); if (dis.skipBytes(2048) != 2048) { // Log.v("DistoX", "failed skip"); return 0; // skip 8 bootloader blocks } byte[] buf = new byte[64]; if (dis.read(buf, 0, 64) != 64) { // Log.v("DistoX", "failed read"); return 0; } for (int k = 0; k < 64; ++k) { // Log.v("DistoX", "byte " + k + " " + buf[k] + " sign " + signature[k] ); if (k == 6 || k == 7 || k == 16 || k == 17) continue; if (buf[k] != signature[k]) return 0; } if (buf[7] == (byte) 0xf8) { if (buf[6] == (byte) 0x34) { return 21; } else if (buf[6] == (byte) 0x3a) { return 22; } } else if (buf[7] == (byte) 0xf9) { if (buf[6] == (byte) 0x90) { return 23; } } else if (buf[7] == (byte) 0xfa) { if (buf[6] == (byte) 0x0a) { return 24; } } } catch (IOException e) { } return 0; } }