testwhat / SmaliEx

A wrapper to get de-optimized dex from odex/oat/vdex.
529 stars 142 forks source link

Trying to oat2dex on a Nougat oat #61

Open newobj opened 6 years ago

newobj commented 6 years ago

I have boot-framework.oat from a 7.1.0 image which I'm trying to convert to dex via:

java -jar oat2dex.jar -a 24 -o out-7 boot boot-framework.oat

And get this:

Method: Landroid/accessibilityservice/AccessibilityService$1;-><init>(Landroid/accessibilityservice/AccessibilityService;ZLandroid/accessibilityservice/AccessibilityService$GestureResultCallbackInfo;)V
Near line: -1 (address 2)
Instructions:
 [0] iput-object-quick regA=1 regB=0
 [1] iput-boolean-quick regA=2 regB=0 <-----
 [2] iput-object-quick regA=3 regB=0
 [3] invoke-direct regC=0

07-05 12:19:49:180 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the field in class (UninitThis,Landroid/accessibilityservice/AccessibilityService$1;) at offset 16 in <init>
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeIputIgetQuick(MethodAnalyzer.java:2422)
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:1269)
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:259)
  at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:190)
  at org.rh.smaliex.deopt.OdexRewriter$OdexRewriterModule$1$1.getInstructions(OdexRewriter.java:233)
  ...(Skip 24 traces)
  at org.rh.smaliex.OatUtil.convertToDex(OatUtil.java:271)
  at org.rh.smaliex.OatUtil.convertDexFromBootOat(OatUtil.java:192)
  at org.rh.smaliex.OatUtil.bootOat2Dex(OatUtil.java:75)
  at org.rh.smaliex.Main.mainImpl(Main.java:108)
  at org.rh.smaliex.Main.main(Main.java:45)

07-05 12:19:49:180 Failed to re-construct dex java.lang.ClassCastException: org.jf.dexlib2.analysis.UnresolvedOdexInstruction cannot be cast to org.jf.dexlib2.iface.instruction.formats.Instruction22cs
07-05 12:19:49:180 convertToDex: skip /system/framework/framework.jar
07-05 12:19:49:180 De-optimizing /system/framework/framework.jar:classes2.dex
07-05 12:19:49:367 Analysis error in class=Landroid/telephony/TelephonyHistogram; method=<init>
Method: Landroid/telephony/TelephonyHistogram;-><init>(III)V
Near line: 86 (address 23)
Instructions:
 [9] iput-quick regA=4 regB=2
 [10] const regA=0
 [11] iput-quick regA=0 regB=2 <-----
 [12] iput-quick regA=1 regB=2
 [13] iput-quick regA=1 regB=2

07-05 12:19:49:367 org.jf.dexlib2.analysis.AnalysisException: Could not resolve the field in class (Reference,Landroid/telephony/TelephonyHistogram;) at offset 40 in <init>
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeIputIgetQuick(MethodAnalyzer.java:2422)
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyzeInstruction(MethodAnalyzer.java:1269)
  at org.jf.dexlib2.analysis.MethodAnalyzer.analyze(MethodAnalyzer.java:259)
  at org.jf.dexlib2.analysis.MethodAnalyzer.<init>(MethodAnalyzer.java:190)
  at org.rh.smaliex.deopt.OdexRewriter$OdexRewriterModule$1$1.getInstructions(OdexRewriter.java:233)
  ...(Skip 24 traces)
  at org.rh.smaliex.OatUtil.convertToDex(OatUtil.java:271)
  at org.rh.smaliex.OatUtil.convertDexFromBootOat(OatUtil.java:192)
  at org.rh.smaliex.OatUtil.bootOat2Dex(OatUtil.java:75)
  at org.rh.smaliex.Main.mainImpl(Main.java:108)
  at org.rh.smaliex.Main.main(Main.java:45)

07-05 12:19:49:368 Failed to re-construct dex java.lang.ClassCastException: org.jf.dexlib2.analysis.UnresolvedOdexInstruction cannot be cast to org.jf.dexlib2.iface.instruction.formats.Instruction22cs
07-05 12:19:49:368 convertToDex: skip /system/framework/framework.jar:classes2.dex

I'm sure I'm just doing something wrong, but I don't understand the right commands I need, or if supplemental files from the device are needed, to make this work. Can anyone help?

testwhat commented 6 years ago

Please provide the boot-framework.oat.