Snippets

YellowAfterlife Extract PNG files from an executable/binary file

Created by VadimD
import haxe.io.Bytes;
import sys.io.File;
import sys.io.FileSeek;
class DumpPNGs {
	static function main() {
		var path = Sys.stdin().readLine();
		var q = File.read(path);
		while (!q.eof()) {
			if (q.readByte() != 0x89) continue;
			if (q.readByte() != "P".code) continue;
			if (q.readByte() != "N".code) continue;
			if (q.readByte() != "G".code) continue;
			if (q.readByte() != 0x0D) continue;
			if (q.readByte() != 0x0A) continue;
			if (q.readByte() != 0x1A) continue;
			if (q.readByte() != 0x0A) continue;
			var start = q.tell() - 8;
			while (!q.eof()) {
				var len = q.readByte() << 24;
				len |= q.readByte() << 16;
				len |= q.readByte() << 8;
				len |= q.readByte();
				var type = q.readString(4);
				q.seek(len + 4, FileSeek.SeekCur);
				if (type == "IEND") break;
			}
			var end = q.tell();
			q.seek(start, FileSeek.SeekBegin);
			var size = end - start;
			var bytes = Bytes.alloc(size);
			q.readBytes(bytes, 0, size);
			var next = path + "@" + start + ".png";
			File.saveBytes(next, bytes);
			Sys.println('Saved $size bytes to $next.');
		}
	}
}

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.