From 37a42d14183092d7b75157f6171121669f00f744 Mon Sep 17 00:00:00 2001 From: Jan S Date: Wed, 24 Apr 2024 20:29:52 +0200 Subject: [PATCH] fix(gui): show correct content of binary resources in hex view (#2160) (PR #2166) --- .../main/java/jadx/gui/ui/codearea/HexArea.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jadx-gui/src/main/java/jadx/gui/ui/codearea/HexArea.java b/jadx-gui/src/main/java/jadx/gui/ui/codearea/HexArea.java index b74de56f7..4478c275a 100644 --- a/jadx-gui/src/main/java/jadx/gui/ui/codearea/HexArea.java +++ b/jadx-gui/src/main/java/jadx/gui/ui/codearea/HexArea.java @@ -15,7 +15,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import jadx.api.ICodeInfo; +import jadx.api.ResourcesLoader; +import jadx.core.utils.exceptions.JadxException; import jadx.gui.treemodel.JNode; +import jadx.gui.treemodel.JResource; import jadx.gui.ui.panel.ContentPanel; import jadx.gui.utils.UiUtils; @@ -48,7 +51,18 @@ public class HexArea extends AbstractCodeArea { @Override public void load() { - byte[] bytes = binaryNode.getCodeInfo().getCodeStr().getBytes(StandardCharsets.UTF_8); + byte[] bytes = null; + if (binaryNode instanceof JResource) { + JResource jResource = ((JResource) binaryNode); + try { + bytes = ResourcesLoader.decodeStream(jResource.getResFile(), (size, is) -> is.readAllBytes()); + } catch (JadxException e) { + LOG.error("Failed to directly load resource binary data {}: {}", jResource.getName(), e.getMessage()); + } + } + if (bytes == null) { + bytes = binaryNode.getCodeInfo().getCodeStr().getBytes(StandardCharsets.UTF_8); + } setBytes(bytes); if (getBytes().length > 0) { // We set the caret after the first byte to prevent it from being highlighted