Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UTF8 string too large on v53 #25

Open
aeongdesu opened this issue Aug 31, 2022 · 4 comments
Open

UTF8 string too large on v53 #25

aeongdesu opened this issue Aug 31, 2022 · 4 comments
Labels
bug Something isn't working

Comments

@aeongdesu
Copy link

aeongdesu commented Aug 31, 2022

ubuntu@fv48:~$ sh dex-tools-2.2-SNAPSHOT/d2j-dex2jar.sh pico.apk
dex2jar pico.apk -> ./pico-dex2jar.jar
GLITCH: 0004 L_a/a/_a;.<init>()V | not enough space for reading instruction
GLITCH: 000c L_/1;.<init>()V | not enough space for reading instruction
Applying workaround to method L_a/a/_a;#___a with original signature null by changing its types to java.lang.Object.
java.lang.IllegalArgumentException
        at org.objectweb.asm.ByteVector.putUTF8(ByteVector.java:213)
        at org.objectweb.asm.ClassWriter.newUTF8(ClassWriter.java:1092)
        at org.objectweb.asm.MethodWriter.<init>(MethodWriter.java:469)
        at org.objectweb.asm.ClassWriter.visitMethod(ClassWriter.java:793)
        at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:305)
        at org.objectweb.asm.commons.RemappingClassAdapter.visitMethod(RemappingClassAdapter.java:99)
        at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:305)
        at com.googlecode.d2j.dex.Dex2Asm.collectBasicMethodInfo(Dex2Asm.java:285)
        at com.googlecode.d2j.dex.Dex2Asm.convertMethod(Dex2Asm.java:611)
        at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:469)
        at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:380)
        at com.googlecode.d2j.dex.Dex2Asm.convertDex(Dex2Asm.java:508)
        at com.googlecode.d2j.dex.Dex2jar.doTranslate(Dex2jar.java:180)
        at com.googlecode.d2j.dex.Dex2jar.to(Dex2jar.java:280)
        at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:112)
        at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:290)
        at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:33)

ubuntu@fv48:~$ java --version
openjdk 11.0.16.1 2022-08-12
OpenJDK Runtime Environment Temurin-11.0.16.1+1 (build 11.0.16.1+1)
OpenJDK 64-Bit Server VM Temurin-11.0.16.1+1 (build 11.0.16.1+1, mixed mode)

apk file: https://cdn.discordapp.com/attachments/757985854588190731/1014526587410075708/vr-_01.20.00.apk

i tried to convert dex -> java but it showed these errors^
it didn't work on pxb1988's dex2jar too.

i dont know about this as well, but is it possible to fix?

@aeongdesu aeongdesu changed the title not enough space for reading instruction on v53 IllegalArgumentException on v53 Aug 31, 2022
@ThexXTURBOXx
Copy link
Owner

ThexXTURBOXx commented Aug 31, 2022

Error reproducible on my end. However, I have a slightly different stacktrace (are you really using v53?):

dex2jar vr-_01.20.00.apk -> .\vr-_01.20.00-dex2jar.jar
GLITCH: 0004 L_a/a/_a;-><init>()V | not enough space for reading instruction
GLITCH: 000c L_/1;-><init>()V | not enough space for reading instruction
java.lang.IllegalArgumentException: UTF8 string too large
        at org.objectweb.asm.ByteVector.putUTF8(ByteVector.java:255)
        at org.objectweb.asm.SymbolTable.addConstantUtf8(SymbolTable.java:774)
        at org.objectweb.asm.MethodWriter.<init>(MethodWriter.java:601)
        at org.objectweb.asm.ClassWriter.visitMethod(ClassWriter.java:468)
        at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:365)
        at org.objectweb.asm.commons.ClassRemapper.visitMethod(ClassRemapper.java:187)
        at org.objectweb.asm.ClassVisitor.visitMethod(ClassVisitor.java:365)
        at com.googlecode.d2j.dex.Dex2Asm.collectBasicMethodInfo(Dex2Asm.java:352)
        at com.googlecode.d2j.dex.Dex2Asm.convertMethod(Dex2Asm.java:746)
        at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:549)
        at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:450)
        at com.googlecode.d2j.dex.Dex2Asm.convertDex(Dex2Asm.java:615)
        at com.googlecode.d2j.dex.Dex2jar.doTranslate(Dex2jar.java:146)
        at com.googlecode.d2j.dex.Dex2jar.to(Dex2jar.java:246)
        at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:103)
        at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:297)
        at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:16)

I will see if I can do anything about that

@aeongdesu
Copy link
Author

@ThexXTURBOXx oh well... i was confused with original snapshot version 😔 anyways thank you, I'll wait

@aeongdesu aeongdesu changed the title IllegalArgumentException on v53 UTF8 string too large on v53 Aug 31, 2022
@ThexXTURBOXx ThexXTURBOXx added the bug Something isn't working label Sep 26, 2022
@stefan123t
Copy link

stefan123t commented Sep 22, 2023

@ThexXTURBOXx thanks for maintaining this tool-chain !
I found your repo to have an issue already open on UTF8 string too large error, which is not the case upstream.

I used this APK com.hm.hemaiInstall1 v1.1.10:
https://apkpure.com/s-miles-installer/com.hm.hemaiInstall1/versions

As the application I want to decompile is built in China and contains quite some UTF8 unicode strings I guess that the handling of UTF8 unicode is not yet working. Also when further decompiling the resulting jar files with the jd-gui I do see quit a couple of chinese characters, but they can not be copied from the resulting source. Some non-space characters may be included in such strings.

$ sh d2j-dex2jar.sh -f s-miles.apk 
dex2jar s-miles.apk -> ./s-miles-dex2jar.jar
java.lang.IllegalArgumentException: UTF8 string too large
	at org.objectweb.asm.ByteVector.putUTF8(ByteVector.java:255)
	at org.objectweb.asm.SymbolTable.addConstantUtf8(SymbolTable.java:774)
	at org.objectweb.asm.SymbolTable.addConstantUtf8Reference(SymbolTable.java:1007)
	at org.objectweb.asm.SymbolTable.addConstantString(SymbolTable.java:604)
	at org.objectweb.asm.SymbolTable.addConstant(SymbolTable.java:474)
	at org.objectweb.asm.MethodWriter.visitLdcInsn(MethodWriter.java:1280)
	at org.objectweb.asm.MethodVisitor.visitLdcInsn(MethodVisitor.java:562)
	at org.objectweb.asm.commons.MethodRemapper.visitLdcInsn(MethodRemapper.java:196)
	at org.objectweb.asm.tree.LdcInsnNode.accept(LdcInsnNode.java:75)
	at org.objectweb.asm.tree.InsnList.accept(InsnList.java:144)
	at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:749)
	at com.googlecode.d2j.dex.ExDex2Asm.convertCode(ExDex2Asm.java:36)
	at com.googlecode.d2j.dex.Dex2jar$2.convertCode(Dex2jar.java:126)
	at com.googlecode.d2j.dex.Dex2Asm.convertMethod(Dex2Asm.java:821)
	at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:567)
	at com.googlecode.d2j.dex.Dex2Asm.convertClass(Dex2Asm.java:468)
	at com.googlecode.d2j.dex.Dex2Asm.convertDex(Dex2Asm.java:633)
	at com.googlecode.d2j.dex.Dex2jar.doTranslate(Dex2jar.java:181)
	at com.googlecode.d2j.dex.Dex2jar.doTranslate(Dex2jar.java:53)
	at com.googlecode.d2j.dex.Dex2jar.to(Dex2jar.java:281)
	at com.googlecode.dex2jar.tools.Dex2jarCmd.doCommandLine(Dex2jarCmd.java:104)
	at com.googlecode.dex2jar.tools.BaseCmd.doMain(BaseCmd.java:297)
	at com.googlecode.dex2jar.tools.Dex2jarCmd.main(Dex2jarCmd.java:16)

@ThexXTURBOXx
Copy link
Owner

I have taken a closer look at this issue and actually, string variables are limited to a size of 65535: https://gitlab.ow2.org/asm/asm/-/blob/master/asm/src/main/java/org/objectweb/asm/ByteVector.java?ref_type=heads#L254
This is also specified in the Java standard. I have pushed a workaround which still gives proper output for the rest of the files, but skips all files which have problems.

ThexXTURBOXx added a commit that referenced this issue Sep 28, 2023
ThexXTURBOXx added a commit that referenced this issue Oct 3, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants