private JCertificate getCertificate(List<ResourceFile> resources) { if (resources.isEmpty()) { return null; } for (ResourceFile rf : resources) { if (rf.getZipRef() != null) { String rfName = rf.getName().toUpperCase(); if (rfName.endsWith(".DSA") || rfName.endsWith(".RSA")) { return new JCertificate(rf); } } } return null; }
@Override public String getContent() { try { ResourceFile.ZipRef zipRef = rf.getZipRef(); if (zipRef == null) { File file = new File(rf.getName()); try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { return CertificateManager.decode(inputStream); } } else { try (ZipFile zipFile = new ZipFile(zipRef.getZipFile())) { ZipEntry entry = zipFile.getEntry(zipRef.getEntryName()); if (entry == null) { throw new IOException("Zip entry not found: " + zipRef); } if (!ZipSecurity.isValidZipEntry(entry)) { return null; } try (InputStream inputStream = new BufferedInputStream(zipFile.getInputStream(entry))) { return CertificateManager.decode(inputStream); } } } } catch (Exception e) { LOG.error("Certificate decode error: {}", rf.getName(), e); return "Decode error: " + e.getMessage(); } } }
public static <T> T decodeStream(ResourceFile rf, ResourceDecoder<T> decoder) throws JadxException { try { ZipRef zipRef = rf.getZipRef(); if (zipRef == null) { File file = new File(rf.getName()); try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { return decoder.decode(file.length(), inputStream); } } else { try (ZipFile zipFile = new ZipFile(zipRef.getZipFile())) { ZipEntry entry = zipFile.getEntry(zipRef.getEntryName()); if (entry == null) { throw new IOException("Zip entry not found: " + zipRef); } if (!ZipSecurity.isValidZipEntry(entry)) { return null; } try (InputStream inputStream = new BufferedInputStream(zipFile.getInputStream(entry))) { return decoder.decode(entry.getSize(), inputStream); } } } } catch (Exception e) { throw new JadxException("Error decode: " + rf.getName(), e); } }
for (ResourceFile rf : resources) { String rfName; if (rf.getZipRef() != null) { rfName = rf.getName(); } else {