/** * Reads image meta data. * * @param oimage * @return */ public static Map<String, String> readImageData(IIOImage oimage) { Map<String, String> dict = new HashMap<String, String>(); IIOMetadata imageMetadata = oimage.getMetadata(); if (imageMetadata != null) { IIOMetadataNode dimNode = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0"); NodeList nodes = dimNode.getElementsByTagName("HorizontalPixelSize"); int dpiX; if (nodes.getLength() > 0) { float dpcWidth = Float.parseFloat(nodes.item(0).getAttributes().item(0).getNodeValue()); dpiX = (int) Math.round(25.4f / dpcWidth); } else { dpiX = Toolkit.getDefaultToolkit().getScreenResolution(); } dict.put("dpiX", String.valueOf(dpiX)); nodes = dimNode.getElementsByTagName("VerticalPixelSize"); int dpiY; if (nodes.getLength() > 0) { float dpcHeight = Float.parseFloat(nodes.item(0).getAttributes().item(0).getNodeValue()); dpiY = (int) Math.round(25.4f / dpcHeight); } else { dpiY = Toolkit.getDefaultToolkit().getScreenResolution(); } dict.put("dpiY", String.valueOf(dpiY)); } return dict; }
/** highlight a route (maybe to show it's in use...) */ public void highlightRoute(String src, String dst) { Iterator i = rows.iterator(); while (i.hasNext()) { Map temp = (Map) i.next(); if (temp.get("Address").equals(dst) && temp.get("Pivot").equals(src)) { temp.put("Active", Boolean.TRUE); } } }
/** show the meterpreter routes . :) */ public void setRoutes(Route[] routes) { Iterator i = rows.iterator(); while (i.hasNext()) { Map temp = (Map) i.next(); for (int x = 0; x < routes.length; x++) { Route r = routes[x]; if (r.shouldRoute(temp.get("Address") + "")) temp.put("Pivot", r.getGateway()); } } }
V get(final K key) { if (refs == null) refs = new HashMap<>(); final V cachedValue = refs.get(key); if (cachedValue != null) return cachedValue; final V value = getInstance(key); refs.put(key, value); return value; }
public void decode() throws IOException { readTagDescriptors(); final MessageDigest md; try { md = MessageDigest.getInstance("SHA-512"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return; } final ComponentColorModel colorModel = new ComponentColorModel( ColorSpace.getInstance(ColorSpace.CS_sRGB), true, false, Transparency.TRANSLUCENT, DataBuffer.TYPE_BYTE); final int[] bandOffsets = {2, 1, 0, 3}; final Map<String, String> duplicateGuard = new HashMap<String, String>(); final byte[] bytes = data.array(); final int[] tags = new int[8]; final List<String> symLinkCommand = new ArrayList<String>(4); symLinkCommand.add("ln"); symLinkCommand.add("-s"); symLinkCommand.add(null); symLinkCommand.add(null); for (int fileIndex = 0; fileIndex < fileCount; fileIndex++) { data.position(fileDescriptorsOffset + ((4 + 8) * fileIndex)); final int fileDataOffset = data.getInt(); int numOfTags = 8; for (int i = 0; i < 8; i++) { int tag = data.get() & 0xff; if (tag == 0) { numOfTags = i; break; } tags[i] = tag; } data.position(fileDataSectionOffset + fileDataOffset); final int artRows = data.getShort(); final int artColumns = data.getShort(); // skip unknown data.position(data.position() + 28); final int[] subimageOffsets = readNumericArray(9, false); final int[] subimageWidths = readNumericArray(9, true); final int[] subimageHeights = readNumericArray(9, true); assert numOfTags >= 2; final File dir; final int tagStartIndexForFilename; if (numOfTags == 2) { tagStartIndexForFilename = 1; dir = new File(outputDir, names[tags[0]].toString()); } else { tagStartIndexForFilename = 2; dir = new File(outputDir, names[tags[0]] + "/" + names[tags[1]]); } boolean dirCreated = false; final int imageCount = artRows * artColumns; for (int subImageIndex = 0; subImageIndex < imageCount; subImageIndex++) { final int w = subimageWidths[subImageIndex]; final int h = subimageHeights[subImageIndex]; if (w <= 0 || h <= 0) { continue; } final int srcPos = fileDataSectionOffset + fileDataOffset + subimageOffsets[subImageIndex]; final int srcLength = w * h * 4; md.update(bytes, srcPos, srcLength); md.update((byte) w); md.update((byte) h); final String digest = convertToHex(md.digest()); md.reset(); if (!dirCreated) { //noinspection ResultOfMethodCallIgnored dir.mkdirs(); dirCreated = true; } final byte[] bgra = new byte[srcLength]; // cannot pass bytes directly, offset in DataBufferByte is not working System.arraycopy(bytes, srcPos, bgra, 0, bgra.length); BufferedImage image = new BufferedImage( colorModel, (WritableRaster) Raster.createRaster( new PixelInterleavedSampleModel( DataBuffer.TYPE_BYTE, w, h, 4, w * 4, bandOffsets), new DataBufferByte(bgra, bgra.length), null), false, null); final StringBuilder outFilename = createOutpuFile( numOfTags, tags, tagStartIndexForFilename, imageCount > 0, subImageIndex); final String oldOutFilename = duplicateGuard.get(digest); if (oldOutFilename == null) { File file = new File(dir, outFilename.toString()); duplicateGuard.put(digest, file.getPath()); ImageIO.write(image, "png", file); } else { symLinkCommand.set(2, oldOutFilename); symLinkCommand.set(3, dir + "/" + outFilename); Process process = new ProcessBuilder(symLinkCommand).start(); try { if (process.waitFor() != 0) { throw new IOException( "Can't create symlink " + symLinkCommand.get(2) + " " + symLinkCommand.get(3)); } } catch (InterruptedException e) { throw new IOException(e); } } } } }