mirror of
https://github.com/skylot/jadx.git
synced 2024-10-07 10:03:27 +00:00
This commit is contained in:
parent
47dadf0a43
commit
315c07d4f6
@ -12,6 +12,7 @@ import org.slf4j.LoggerFactory;
|
||||
|
||||
import jadx.api.ICodeInfo;
|
||||
import jadx.core.codegen.CodeWriter;
|
||||
import jadx.core.deobf.NameMapper;
|
||||
import jadx.core.dex.attributes.AFlag;
|
||||
import jadx.core.dex.nodes.FieldNode;
|
||||
import jadx.core.dex.nodes.RootNode;
|
||||
@ -152,6 +153,7 @@ public class ResTableParser extends CommonBinaryParser {
|
||||
if (keyStringsOffset != 0) {
|
||||
is.skipToPos(keyStringsOffset, "Expected keyStrings string pool");
|
||||
keyStrings = parseStringPool();
|
||||
deobfKeyStrings(keyStrings);
|
||||
}
|
||||
|
||||
PackageChunk pkg = new PackageChunk(id, name, typeStrings, keyStrings);
|
||||
@ -172,6 +174,32 @@ public class ResTableParser extends CommonBinaryParser {
|
||||
return pkg;
|
||||
}
|
||||
|
||||
private void deobfKeyStrings(String[] keyStrings) {
|
||||
int keysCount = keyStrings.length;
|
||||
if (root.getArgs().isRenamePrintable()) {
|
||||
for (int i = 0; i < keysCount; i++) {
|
||||
String keyString = keyStrings[i];
|
||||
if (!NameMapper.isAllCharsPrintable(keyString)) {
|
||||
keyStrings[i] = makeNewKeyName(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (root.getArgs().isRenameValid()) {
|
||||
Set<String> keySet = new HashSet<>(keysCount);
|
||||
for (int i = 0; i < keysCount; i++) {
|
||||
String keyString = keyStrings[i];
|
||||
boolean isNew = keySet.add(keyString);
|
||||
if (!isNew) {
|
||||
keyStrings[i] = makeNewKeyName(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private String makeNewKeyName(int idx) {
|
||||
return "JADX_DEOBF_" + idx;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
private void parseTypeSpecChunk() throws IOException {
|
||||
is.checkInt16(0x0010, "Unexpected type spec header size");
|
||||
|
Loading…
Reference in New Issue
Block a user