2014-01-24 4 views
1

은 내가 APK 파일을 디 컴파일 도구를 dex2jar 사용 모든 코드는왜이 방법을 android apk에서 컴파일 할 수 없습니까?

// ERROR // 
    public void sendPacket(byte[] paramArrayOfByte) 
    { 
    // Byte code: 
    // 0: new 82 android/net/LocalSocket 
    // 3: dup 
    // 4: invokespecial 83 android/net/LocalSocket:<init> ()V 
    // 7: astore_2 
    // 8: aload_2 
    // 9: new 85 android/net/LocalSocketAddress 
    // 12: dup 
    // 13: ldc 87 
    // 15: getstatic 93 android/net/LocalSocketAddress$Namespace:FILESYSTEM Landroid/net/LocalSocketAddress$Namespace; 
    // 18: invokespecial 96 android/net/LocalSocketAddress:<init> (Ljava/lang/String;Landroid/net/LocalSocketAddress$Namespace;)V 
    // 21: invokevirtual 100 android/net/LocalSocket:connect (Landroid/net/LocalSocketAddress;)V 
    // 24: aload_2 
    // 25: invokevirtual 104 android/net/LocalSocket:getOutputStream()Ljava/io/OutputStream; 
    // 28: astore 7 
    // 30: aload_2 
    // 31: invokevirtual 108 android/net/LocalSocket:getInputStream ()Ljava/io/InputStream; 
    // 34: astore 8 
    // 36: aload 7 
    // 38: aload_1 
    // 39: invokevirtual 113 java/io/OutputStream:write ([B)V 
    // 42: aload 7 
    // 44: invokevirtual 116 java/io/OutputStream:flush ()V 
    // 47: sipush 128 
    // 50: newarray byte 
    // 52: astore 9 
    // 54: aload 8 
    // 56: aload 9 
    // 58: invokevirtual 122 java/io/InputStream:read ([B)I 
    // 61: pop 
    // 62: new 124 com/qualcomm/logkit/settings/ConfigPacket 
    // 65: dup 
    // 66: aload 9 
    // 68: invokespecial 126 com/qualcomm/logkit/settings/ConfigPacket:<init> ([B)V 
    // 71: astore 11 
    // 73: aload 11 
    // 75: getfield 130 com/qualcomm/logkit/settings/ConfigPacket:msg_type B 
    // 78: tableswitch default:+26 -> 104, -127:+50->128, -126:+26->104, -125:+95->173 
    // 105: iconst_4 
    // 106: invokevirtual 133 java/io/OutputStream:close ()V 
    // 109: aload 8 
    // 111: invokevirtual 134 java/io/InputStream:close ()V 
    // 114: aload_2 
    // 115: ifnull +7 -> 122 
    // 118: aload_2 
    // 119: invokevirtual 135 android/net/LocalSocket:close ()V 
    // 122: aload_0 
    // 123: iconst_0 
    // 124: putfield 18 com/qualcomm/logkit/settings/UnixSocketSendThread:isRunning Z 
    // 127: return 
    // 128: aload 11 
    // 130: getfield 139 com/qualcomm/logkit/settings/ConfigPacket:logConfig Lcom/qualcomm/logkit/settings/ConfigPacket$qlog_conf; 
    // 133: getfield 144 com/qualcomm/logkit/settings/ConfigPacket$qlog_conf:filter_str [B 
    // 136: invokestatic 150 com/qualcomm/logkit/utils/UtilsStringOperation:byteToString ([B)Ljava/lang/String; 
    // 139: invokestatic 152 com/qualcomm/logkit/settings/UnixSocketSendThread:logd (Ljava/lang/Object;)V 
    // 142: goto -38 -> 104 
    // 145: astore 5 
    // 147: aload 5 
    // 149: invokestatic 154 com/qualcomm/logkit/settings/UnixSocketSendThread:loge (Ljava/lang/Object;)V 
    // 152: aload_2 
    // 153: ifnull -31 -> 122 
    // 156: aload_2 
    // 157: invokevirtual 135 android/net/LocalSocket:close ()V 
    // 160: goto -38 -> 122 
    // 163: astore 6 
    // 165: aload 6 
    // 167: invokestatic 154 com/qualcomm/logkit/settings/UnixSocketSendThread:loge (Ljava/lang/Object;)V 
    // 170: goto -48 -> 122 
    // 173: aload 11 
    // 175: getfield 158 com/qualcomm/logkit/settings/ConfigPacket:logGlobalConfig Lcom/qualcomm/logkit/settings/ConfigPacket$qlog_global_conf; 
    // 178: getfield 163 com/qualcomm/logkit/settings/ConfigPacket$qlog_global_conf:log_path [B 
    // 181: invokestatic 152 com/qualcomm/logkit/settings/UnixSocketSendThread:logd (Ljava/lang/Object;)V 
    // 184: goto -80 -> 104 
    // 187: astore_3 
    // 188: aload_2 
    // 189: ifnull +7 -> 196 
    // 192: aload_2 
    // 193: invokevirtual 135 android/net/LocalSocket:close ()V 
    // 196: aload_3 
    // 197: athrow 
    // 198: astore 12 
    // 200: aload 12 
    // 202: invokestatic 154 com/qualcomm/logkit/settings/UnixSocketSendThread:loge (Ljava/lang/Object;)V 
    // 205: goto -83 -> 122 
    // 208: astore 4 
    // 210: aload 4 
    // 212: invokestatic 154 com/qualcomm/logkit/settings/UnixSocketSendThread:loge (Ljava/lang/Object;)V 
    // 215: goto -19 -> 196 
    // 
    // Exception table: 
    // from to target type 
    // 8 114 145 java/io/IOException 
    // 128 142 145 java/io/IOException 
    // 173 184 145 java/io/IOException 
    // 156 160 163 java/io/IOException 
    // 8 114 187 finally 
    // 128 142 187 finally 
    // 147 152 187 finally 
    // 173 184 187 finally 
    // 118 122 198 java/io/IOException 
    // 192 196 208 java/io/IOException 
    } 

은 어떤 문제가 제대로 컴파일이 끊긴 부하하지만이 방법 할 수 있습니까?

+0

dex2jar는 일부 메소드를 올바르게 구문 분석 할 수 없으므로 이와 같은 결과가 발생합니다. –

+0

@PankajKumar dex2jar보다 나은 도구가 있습니까? –

답변

3

무엇이 잘못 되었습니까?

아무런 문제가 없습니다. 디 컴파일러는 너무 복잡하거나 잘 모호한 코드에 종종 문제가 있습니다 (고의적으로은 디 컴파일이 어렵습니다 ...)

어떻게 할 수 있습니까? 별로 ... 직접 코드를 디 컴파일하는 것 말고는 스스로 손으로. (그러나 쉬운 일은 아닙니다. 처음에는 예외 처리 범위를 알아 내고 try/catch/finally 블록을 다시 만들어야합니다.)

+0

이 메서드 만 올바르게 컴파일 할 수 없으며 다른 메서드는 모두 제대로 컴파일되지 않습니다. –

+0

@VictorS - 코드가 난독 화되지 않았 음을 나타내지 만 근본적으로 대답을 변경하지는 않습니다. –

+0

dex2jar 및 유사한 도구는 문제가있는 예외 핸들러 테이블 (겹치는 범위, 홀수 불연속 등)을 방출하는 것으로 유명합니다. 그게 아마도 원인이지만, 다른 디 컴파일러를 시도하는 것 외에 다른 해결책은 없습니다. –

1

단순한 디 컴파일러의 제한 , 또는 아마이 방법은 난독 화되었다. 일반적으로 전체 .apk는 단순한 방법이 아니라 난독 화됩니다. 어쩌면 이것이 .apk인지 말하면 더 많은 대답을 제시 할 것입니다.

+0

개발 도구로만 사용되는 내부 apk입니다. –