实例介绍
【实例简介】
本文介绍dex2jar项目,其中包括将.dex文件转化为.class文件的d2j-dex2jar工具以及其他相关工具的用法。同时还有一个轻量级API,可与ASM相似,可读/写Dalvik Executable (.dex)文件,并且还有disassemble dex到smali文件和从smali文件组装dex的工具。使用时只需在根目录下运行./gradlew distZip命令即可,详细的使用说明可参考文中给出的示例代码。
【实例截图】
【核心代码】
文件清单
└── dex2jar-b5bda4fb4935ae8b3869b422454ae3b3896c7bc1
├── build.gradle
├── d2j-base-cmd
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── com
│ └── googlecode
│ └── dex2jar
│ └── tools
│ └── BaseCmd.java
├── d2j-jasmin
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── antlr3
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ └── jasmin
│ │ │ └── Jasmin.g
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── jasmin
│ │ ├── Jar2JasminCmd.java
│ │ ├── Jasmin2JarCmd.java
│ │ ├── JasminDumper.java
│ │ └── Jasmins.java
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── tools
│ │ └── jar
│ │ └── test
│ │ └── Jasmin2jTest.java
│ └── resources
│ └── jasmins
│ └── type.j
├── d2j-smali
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── antlr4
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ └── smali
│ │ │ └── antlr4
│ │ │ └── Smali.g4
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── smali
│ │ ├── AntlrSmaliUtil.java
│ │ ├── BaksmaliCmd.java
│ │ ├── BaksmaliCodeDumper.java
│ │ ├── BaksmaliDexFileVisitor.java
│ │ ├── BaksmaliDumper.java
│ │ ├── BaksmaliDumpOut.java
│ │ ├── Baksmali.java
│ │ ├── SmaliCmd.java
│ │ ├── SmaliCodeVisitor.java
│ │ ├── Smali.java
│ │ └── Utils.java
│ └── test
│ ├── java
│ │ └── a
│ │ ├── BaksmaliTest.java
│ │ └── SmaliTest.java
│ └── resources
│ └── a.smali
├── dex-ir
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── dex2jar
│ │ └── ir
│ │ ├── ET.java
│ │ ├── expr
│ │ │ ├── AbstractInvokeExpr.java
│ │ │ ├── ArrayExpr.java
│ │ │ ├── BinopExpr.java
│ │ │ ├── CastExpr.java
│ │ │ ├── Constant.java
│ │ │ ├── Exprs.java
│ │ │ ├── FieldExpr.java
│ │ │ ├── FilledArrayExpr.java
│ │ │ ├── InvokeCustomExpr.java
│ │ │ ├── InvokeExpr.java
│ │ │ ├── InvokePolymorphicExpr.java
│ │ │ ├── Local.java
│ │ │ ├── NewExpr.java
│ │ │ ├── NewMutiArrayExpr.java
│ │ │ ├── PhiExpr.java
│ │ │ ├── RefExpr.java
│ │ │ ├── StaticFieldExpr.java
│ │ │ ├── TypeExpr.java
│ │ │ ├── UnopExpr.java
│ │ │ └── Value.java
│ │ ├── IrMethod.java
│ │ ├── LabelAndLocalMapper.java
│ │ ├── LocalVar.java
│ │ ├── stmt
│ │ │ ├── AssignStmt.java
│ │ │ ├── BaseSwitchStmt.java
│ │ │ ├── GotoStmt.java
│ │ │ ├── IfStmt.java
│ │ │ ├── JumpStmt.java
│ │ │ ├── LabelStmt.java
│ │ │ ├── LookupSwitchStmt.java
│ │ │ ├── NopStmt.java
│ │ │ ├── ReturnVoidStmt.java
│ │ │ ├── Stmt.java
│ │ │ ├── StmtList.java
│ │ │ ├── Stmts.java
│ │ │ ├── TableSwitchStmt.java
│ │ │ ├── UnopStmt.java
│ │ │ └── VoidInvokeStmt.java
│ │ ├── StmtSearcher.java
│ │ ├── StmtTraveler.java
│ │ ├── TransformerException.java
│ │ ├── Trap.java
│ │ ├── ts
│ │ │ ├── AggTransformer.java
│ │ │ ├── an
│ │ │ │ ├── AnalyzeValue.java
│ │ │ │ ├── BaseAnalyze.java
│ │ │ │ ├── SimpleLiveAnalyze.java
│ │ │ │ └── SimpleLiveValue.java
│ │ │ ├── array
│ │ │ │ ├── ArrayElementTransformer.java
│ │ │ │ ├── ArrayNullPointerTransformer.java
│ │ │ │ └── FillArrayTransformer.java
│ │ │ ├── Cfg.java
│ │ │ ├── CleanLabel.java
│ │ │ ├── ConstTransformer.java
│ │ │ ├── DeadCodeTransformer.java
│ │ │ ├── EndRemover.java
│ │ │ ├── ExceptionHandlerTrim.java
│ │ │ ├── FixVar.java
│ │ │ ├── Ir2JRegAssignTransformer.java
│ │ │ ├── JimpleTransformer.java
│ │ │ ├── MultiArrayTransformer.java
│ │ │ ├── NewTransformer.java
│ │ │ ├── NpeTransformer.java
│ │ │ ├── RemoveConstantFromSSA.java
│ │ │ ├── RemoveLocalFromSSA.java
│ │ │ ├── SSATransformer.java
│ │ │ ├── StatedTransformer.java
│ │ │ ├── Transformer.java
│ │ │ ├── TypeTransformer.java
│ │ │ ├── UniqueQueue.java
│ │ │ ├── UnSSATransformer.java
│ │ │ ├── VoidInvokeTransformer.java
│ │ │ └── ZeroTransformer.java
│ │ ├── TypeClass.java
│ │ └── Util.java
│ └── test
│ └── java
│ └── com
│ └── googlecode
│ └── dex2jar
│ └── ir
│ └── test
│ ├── AggTransformerTest.java
│ ├── BaseTransformerTest.java
│ ├── ConstantStringTest.java
│ ├── ConstTransformerTest.java
│ ├── DeadCodeTrnasformerTest.java
│ ├── JimpleTransformerTest.java
│ ├── RemoveConstantFromSSATest.java
│ ├── RemoveLocalFromSSATest.java
│ ├── SSATransformerTest.java
│ ├── StmtListTest.java
│ ├── TypeTransformerTest.java
│ ├── UnSSATransformerTransformerTest.java
│ └── ZeroTransformerTest.java
├── dex-reader
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ ├── reader
│ │ │ ├── BaseDexFileReader.java
│ │ │ ├── DexFileReader.java
│ │ │ ├── MultiDexFileReader.java
│ │ │ └── zip
│ │ │ └── ZipUtil.java
│ │ └── util
│ │ ├── ArrayOut.java
│ │ ├── ASMifierAnnotationV.java
│ │ ├── ASMifierClassV.java
│ │ ├── ASMifierCodeV.java
│ │ ├── ASMifierFileV.java
│ │ ├── Escape.java
│ │ ├── Mutf8.java
│ │ ├── Out.java
│ │ ├── Utf8Utils.java
│ │ └── zip
│ │ ├── AccessBufByteArrayOutputStream.java
│ │ ├── AutoSTOREDZipOutputStream.java
│ │ ├── ZipConstants.java
│ │ ├── ZipEntry.java
│ │ └── ZipFile.java
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── reader
│ │ └── test
│ │ ├── AsmfierTest.java
│ │ ├── BadZipEntryFlagTest.java
│ │ └── SkipDupMethod.java
│ └── resources
│ ├── bad.zip
│ └── i200.dex
├── dex-reader-api
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── com
│ └── googlecode
│ └── d2j
│ ├── CallSite.java
│ ├── DexConstants.java
│ ├── DexException.java
│ ├── DexLabel.java
│ ├── DexType.java
│ ├── Field.java
│ ├── MethodHandle.java
│ ├── Method.java
│ ├── node
│ │ ├── analysis
│ │ │ ├── DvmFrame.java
│ │ │ └── DvmInterpreter.java
│ │ ├── DexAnnotationNode.java
│ │ ├── DexClassNode.java
│ │ ├── DexCodeNode.java
│ │ ├── DexDebugNode.java
│ │ ├── DexFieldNode.java
│ │ ├── DexFileNode.java
│ │ ├── DexMethodNode.java
│ │ ├── insn
│ │ │ ├── AbstractMethodStmtNode.java
│ │ │ ├── BaseSwitchStmtNode.java
│ │ │ ├── ConstStmtNode.java
│ │ │ ├── DexLabelStmtNode.java
│ │ │ ├── DexStmtNode.java
│ │ │ ├── FieldStmtNode.java
│ │ │ ├── FillArrayDataStmtNode.java
│ │ │ ├── FilledNewArrayStmtNode.java
│ │ │ ├── JumpStmtNode.java
│ │ │ ├── MethodCustomStmtNode.java
│ │ │ ├── MethodPolymorphicStmtNode.java
│ │ │ ├── MethodStmtNode.java
│ │ │ ├── PackedSwitchStmtNode.java
│ │ │ ├── SparseSwitchStmtNode.java
│ │ │ ├── Stmt0RNode.java
│ │ │ ├── Stmt1RNode.java
│ │ │ ├── Stmt2R1NNode.java
│ │ │ ├── Stmt2RNode.java
│ │ │ ├── Stmt3RNode.java
│ │ │ └── TypeStmtNode.java
│ │ └── TryCatchNode.java
│ ├── Proto.java
│ ├── reader
│ │ ├── CFG.java
│ │ ├── InstructionFormat.java
│ │ ├── InstructionIndexType.java
│ │ └── Op.java
│ ├── Visibility.java
│ └── visitors
│ ├── DexAnnotationAble.java
│ ├── DexAnnotationVisitor.java
│ ├── DexClassVisitor.java
│ ├── DexCodeVisitor.java
│ ├── DexDebugVisitor.java
│ ├── DexFieldVisitor.java
│ ├── DexFileVisitor.java
│ └── DexMethodVisitor.java
├── dex-tools
│ ├── build.gradle
│ ├── open-source-license.txt
│ └── src
│ ├── main
│ │ ├── assemble
│ │ │ └── package.xml
│ │ ├── bin_gen
│ │ │ ├── bat_template
│ │ │ ├── class.cfg
│ │ │ ├── d2j_invoke.bat
│ │ │ ├── d2j_invoke.sh
│ │ │ └── sh_template
│ │ ├── java
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ ├── d2j
│ │ │ │ ├── signapk
│ │ │ │ │ ├── AbstractJarSign.java
│ │ │ │ │ ├── Base64.java
│ │ │ │ │ ├── SunJarSignImpl.java
│ │ │ │ │ └── TinySignImpl.java
│ │ │ │ ├── tools
│ │ │ │ │ └── jar
│ │ │ │ │ ├── BaseWeaver.java
│ │ │ │ │ ├── ClassInfo.java
│ │ │ │ │ ├── DexWeaver.java
│ │ │ │ │ ├── InitOut.java
│ │ │ │ │ ├── InvocationWeaver.java
│ │ │ │ │ ├── ScanBridgeAdapter.java
│ │ │ │ │ └── WebApp.java
│ │ │ │ └── util
│ │ │ │ └── AccUtils.java
│ │ │ └── dex2jar
│ │ │ ├── bin_gen
│ │ │ │ └── BinGen.java
│ │ │ └── tools
│ │ │ ├── ApkSign.java
│ │ │ ├── AsmVerify.java
│ │ │ ├── BaksmaliBaseDexExceptionHandler.java
│ │ │ ├── ClassVersionSwitch.java
│ │ │ ├── DecryptStringCmd.java
│ │ │ ├── DeObfInitCmd.java
│ │ │ ├── Dex2jarCmd.java
│ │ │ ├── Dex2jarMultiThreadCmd.java
│ │ │ ├── DexRecomputeChecksum.java
│ │ │ ├── DexWeaverCmd.java
│ │ │ ├── ExtractOdexFromCoredumpCmd.java
│ │ │ ├── GenerateCompileStubFromOdex.java
│ │ │ ├── Jar2Dex.java
│ │ │ ├── JarAccessCmd.java
│ │ │ ├── JarWeaverCmd.java
│ │ │ ├── StdApkCmd.java
│ │ │ └── to
│ │ │ └── Do.java
│ │ └── resources
│ │ └── com
│ │ └── googlecode
│ │ └── dex2jar
│ │ └── tools
│ │ ├── ApkSign.cer
│ │ └── ApkSign.private
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── tools
│ │ └── jar
│ │ ├── MethodInvocation.java
│ │ └── test
│ │ ├── DexWaveTest.java
│ │ └── WaveTest.java
│ └── resources
│ └── weave
│ ├── a-after.j
│ ├── a-before.j
│ ├── a-gen.j
│ ├── b-after.j
│ ├── b-before.j
│ ├── b-gen.j
│ ├── c-after.j
│ ├── c-before.j
│ ├── c-gen.j
│ └── smali
│ ├── a-after.smali
│ ├── a-before.smali
│ ├── a-gen.smali
│ ├── b-after.smali
│ ├── b-before.smali
│ └── b-gen.smali
├── dex-translator
│ ├── build.gradle
│ ├── libs
│ │ └── dx-30.0.2.jar
│ └── src
│ ├── main
│ │ └── java
│ │ ├── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ ├── asm
│ │ │ │ └── LdcOptimizeAdapter.java
│ │ │ ├── converter
│ │ │ │ ├── Dex2IRConverter.java
│ │ │ │ ├── IR2JConverter.java
│ │ │ │ └── J2IRConverter.java
│ │ │ ├── dex
│ │ │ │ ├── Asm2Dex.java
│ │ │ │ ├── BaseDexExceptionHandler.java
│ │ │ │ ├── ClassVisitorFactory.java
│ │ │ │ ├── Dex2Asm.java
│ │ │ │ ├── Dex2IrAdapter.java
│ │ │ │ ├── Dex2jar.java
│ │ │ │ ├── DexExceptionHandler.java
│ │ │ │ ├── DexFix.java
│ │ │ │ ├── ExDex2Asm.java
│ │ │ │ ├── LambadaNameSafeClassAdapter.java
│ │ │ │ └── V3.java
│ │ │ └── util
│ │ │ └── Types.java
│ │ ├── org
│ │ │ └── objectweb
│ │ │ └── asm
│ │ │ └── AsmBridge.java
│ │ └── res
│ │ └── Hex.java
│ └── test
│ ├── java
│ │ ├── com
│ │ │ └── googlecode
│ │ │ └── dex2jar
│ │ │ └── test
│ │ │ ├── ArrayTypeTest.java
│ │ │ ├── ASMifierTest.java
│ │ │ ├── AutoCastTest.java
│ │ │ ├── D2jErrorZipsTest.java
│ │ │ ├── D2jTest.java
│ │ │ ├── DexTranslatorRunner.java
│ │ │ ├── EmptyTrapTest.java
│ │ │ ├── I101Test.java
│ │ │ ├── I121Test.java
│ │ │ ├── I168Test.java
│ │ │ ├── I63Test.java
│ │ │ ├── Issue71Test.java
│ │ │ ├── OptSyncTest.java
│ │ │ ├── ResTest.java
│ │ │ ├── Smali2jTest.java
│ │ │ ├── TestDexClassV.java
│ │ │ ├── TestUtils.java
│ │ │ └── ZeroTest.java
│ │ ├── dex2jar
│ │ │ └── gen
│ │ │ └── FTPClient__parsePassiveModeReply.java
│ │ └── res
│ │ ├── ArrayRes.java
│ │ ├── ChineseRes.java
│ │ ├── ConstValues.java
│ │ ├── ExceptionRes.java
│ │ ├── Gh28Type.java
│ │ ├── I142_annotation_default.java
│ │ ├── i55
│ │ │ ├── AAbstractClass.java
│ │ │ ├── AClass.java
│ │ │ └── AInterface.java
│ │ ├── I56_AccessFlag.java
│ │ ├── I71.java
│ │ ├── I73.java
│ │ ├── I88.java
│ │ ├── LongDoubleRes.java
│ │ ├── NoEndRes.java
│ │ ├── NullZero.java
│ │ ├── OptimizeSynchronized.java
│ │ ├── PopRes.java
│ │ ├── ResChild.java
│ │ ├── ResParent.java
│ │ ├── SwitchRes.java
│ │ ├── U0000String.java
│ │ └── WideRes.java
│ └── resources
│ ├── d2j-error-zips
│ │ ├── gh477-1.zip
│ │ └── gh495.zip
│ ├── dexes
│ │ ├── dex038.dex
│ │ ├── dex039.dex
│ │ ├── dex040.dex
│ │ └── i_jetty.dex
│ └── smalis
│ ├── 0zs.smali
│ ├── bb-1-can-not-merge-z-and-i.smali
│ ├── bb-5-ArrayIndexOutOfBoundsOnType.smali
│ ├── empty-try-catch-with-goto-head.smali
│ ├── gh501-r4k.smali
│ ├── gh-issue-186.smali
│ ├── gh-issue-4.smali
│ ├── goto-first-label.smali
│ ├── i230.smali
│ ├── int-or-boolean.smali
│ ├── issue-220-219-uninit-reg.smali
│ ├── loop-enclosing-class.smali
│ ├── method-code-too-large.smali
│ ├── ML.smali
│ ├── negative-array-size.smali
│ ├── npe-cause-trap-fail.smali
│ ├── opt-lock.smali
│ ├── useless-new.smali
│ └── writeString.smali
├── dex-writer
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── dex
│ │ └── writer
│ │ ├── ann
│ │ │ ├── Alignment.java
│ │ │ ├── Idx.java
│ │ │ └── Off.java
│ │ ├── AnnotationWriter.java
│ │ ├── CantNotFixContentException.java
│ │ ├── ClassWriter.java
│ │ ├── CodeWriter.java
│ │ ├── DexFileWriter.java
│ │ ├── DexWriteException.java
│ │ ├── ev
│ │ │ ├── EncodedAnnotation.java
│ │ │ ├── EncodedArray.java
│ │ │ └── EncodedValue.java
│ │ ├── FieldWriter.java
│ │ ├── insn
│ │ │ ├── Insn.java
│ │ │ ├── JumpOp.java
│ │ │ ├── Label.java
│ │ │ ├── OpInsn.java
│ │ │ └── PreBuildInsn.java
│ │ ├── io
│ │ │ ├── ByteBufferOut.java
│ │ │ └── DataOut.java
│ │ ├── item
│ │ │ ├── AnnotationItem.java
│ │ │ ├── AnnotationsDirectoryItem.java
│ │ │ ├── AnnotationSetItem.java
│ │ │ ├── AnnotationSetRefListItem.java
│ │ │ ├── BaseItem.java
│ │ │ ├── CallSiteIdItem.java
│ │ │ ├── ClassDataItem.java
│ │ │ ├── ClassDefItem.java
│ │ │ ├── CodeItem.java
│ │ │ ├── ConstPool.java
│ │ │ ├── DebugInfoItem.java
│ │ │ ├── FieldIdItem.java
│ │ │ ├── HeadItem.java
│ │ │ ├── MapListItem.java
│ │ │ ├── MethodHandleItem.java
│ │ │ ├── MethodIdItem.java
│ │ │ ├── ProtoIdItem.java
│ │ │ ├── SectionItem.java
│ │ │ ├── StringDataItem.java
│ │ │ ├── StringIdItem.java
│ │ │ ├── TypeIdItem.java
│ │ │ └── TypeListItem.java
│ │ └── MethodWriter.java
│ └── test
│ └── java
│ └── a
│ ├── AppWriterTest.java
│ └── CpStringTest.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── LICENSE.txt
├── NOTICE.txt
├── README.md
└── settings.gradle
183 directories, 392 files
本文介绍dex2jar项目,其中包括将.dex文件转化为.class文件的d2j-dex2jar工具以及其他相关工具的用法。同时还有一个轻量级API,可与ASM相似,可读/写Dalvik Executable (.dex)文件,并且还有disassemble dex到smali文件和从smali文件组装dex的工具。使用时只需在根目录下运行./gradlew distZip命令即可,详细的使用说明可参考文中给出的示例代码。
【实例截图】
【核心代码】
文件清单
└── dex2jar-b5bda4fb4935ae8b3869b422454ae3b3896c7bc1
├── build.gradle
├── d2j-base-cmd
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── com
│ └── googlecode
│ └── dex2jar
│ └── tools
│ └── BaseCmd.java
├── d2j-jasmin
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── antlr3
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ └── jasmin
│ │ │ └── Jasmin.g
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── jasmin
│ │ ├── Jar2JasminCmd.java
│ │ ├── Jasmin2JarCmd.java
│ │ ├── JasminDumper.java
│ │ └── Jasmins.java
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── tools
│ │ └── jar
│ │ └── test
│ │ └── Jasmin2jTest.java
│ └── resources
│ └── jasmins
│ └── type.j
├── d2j-smali
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── antlr4
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ └── smali
│ │ │ └── antlr4
│ │ │ └── Smali.g4
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── smali
│ │ ├── AntlrSmaliUtil.java
│ │ ├── BaksmaliCmd.java
│ │ ├── BaksmaliCodeDumper.java
│ │ ├── BaksmaliDexFileVisitor.java
│ │ ├── BaksmaliDumper.java
│ │ ├── BaksmaliDumpOut.java
│ │ ├── Baksmali.java
│ │ ├── SmaliCmd.java
│ │ ├── SmaliCodeVisitor.java
│ │ ├── Smali.java
│ │ └── Utils.java
│ └── test
│ ├── java
│ │ └── a
│ │ ├── BaksmaliTest.java
│ │ └── SmaliTest.java
│ └── resources
│ └── a.smali
├── dex-ir
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── dex2jar
│ │ └── ir
│ │ ├── ET.java
│ │ ├── expr
│ │ │ ├── AbstractInvokeExpr.java
│ │ │ ├── ArrayExpr.java
│ │ │ ├── BinopExpr.java
│ │ │ ├── CastExpr.java
│ │ │ ├── Constant.java
│ │ │ ├── Exprs.java
│ │ │ ├── FieldExpr.java
│ │ │ ├── FilledArrayExpr.java
│ │ │ ├── InvokeCustomExpr.java
│ │ │ ├── InvokeExpr.java
│ │ │ ├── InvokePolymorphicExpr.java
│ │ │ ├── Local.java
│ │ │ ├── NewExpr.java
│ │ │ ├── NewMutiArrayExpr.java
│ │ │ ├── PhiExpr.java
│ │ │ ├── RefExpr.java
│ │ │ ├── StaticFieldExpr.java
│ │ │ ├── TypeExpr.java
│ │ │ ├── UnopExpr.java
│ │ │ └── Value.java
│ │ ├── IrMethod.java
│ │ ├── LabelAndLocalMapper.java
│ │ ├── LocalVar.java
│ │ ├── stmt
│ │ │ ├── AssignStmt.java
│ │ │ ├── BaseSwitchStmt.java
│ │ │ ├── GotoStmt.java
│ │ │ ├── IfStmt.java
│ │ │ ├── JumpStmt.java
│ │ │ ├── LabelStmt.java
│ │ │ ├── LookupSwitchStmt.java
│ │ │ ├── NopStmt.java
│ │ │ ├── ReturnVoidStmt.java
│ │ │ ├── Stmt.java
│ │ │ ├── StmtList.java
│ │ │ ├── Stmts.java
│ │ │ ├── TableSwitchStmt.java
│ │ │ ├── UnopStmt.java
│ │ │ └── VoidInvokeStmt.java
│ │ ├── StmtSearcher.java
│ │ ├── StmtTraveler.java
│ │ ├── TransformerException.java
│ │ ├── Trap.java
│ │ ├── ts
│ │ │ ├── AggTransformer.java
│ │ │ ├── an
│ │ │ │ ├── AnalyzeValue.java
│ │ │ │ ├── BaseAnalyze.java
│ │ │ │ ├── SimpleLiveAnalyze.java
│ │ │ │ └── SimpleLiveValue.java
│ │ │ ├── array
│ │ │ │ ├── ArrayElementTransformer.java
│ │ │ │ ├── ArrayNullPointerTransformer.java
│ │ │ │ └── FillArrayTransformer.java
│ │ │ ├── Cfg.java
│ │ │ ├── CleanLabel.java
│ │ │ ├── ConstTransformer.java
│ │ │ ├── DeadCodeTransformer.java
│ │ │ ├── EndRemover.java
│ │ │ ├── ExceptionHandlerTrim.java
│ │ │ ├── FixVar.java
│ │ │ ├── Ir2JRegAssignTransformer.java
│ │ │ ├── JimpleTransformer.java
│ │ │ ├── MultiArrayTransformer.java
│ │ │ ├── NewTransformer.java
│ │ │ ├── NpeTransformer.java
│ │ │ ├── RemoveConstantFromSSA.java
│ │ │ ├── RemoveLocalFromSSA.java
│ │ │ ├── SSATransformer.java
│ │ │ ├── StatedTransformer.java
│ │ │ ├── Transformer.java
│ │ │ ├── TypeTransformer.java
│ │ │ ├── UniqueQueue.java
│ │ │ ├── UnSSATransformer.java
│ │ │ ├── VoidInvokeTransformer.java
│ │ │ └── ZeroTransformer.java
│ │ ├── TypeClass.java
│ │ └── Util.java
│ └── test
│ └── java
│ └── com
│ └── googlecode
│ └── dex2jar
│ └── ir
│ └── test
│ ├── AggTransformerTest.java
│ ├── BaseTransformerTest.java
│ ├── ConstantStringTest.java
│ ├── ConstTransformerTest.java
│ ├── DeadCodeTrnasformerTest.java
│ ├── JimpleTransformerTest.java
│ ├── RemoveConstantFromSSATest.java
│ ├── RemoveLocalFromSSATest.java
│ ├── SSATransformerTest.java
│ ├── StmtListTest.java
│ ├── TypeTransformerTest.java
│ ├── UnSSATransformerTransformerTest.java
│ └── ZeroTransformerTest.java
├── dex-reader
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ ├── reader
│ │ │ ├── BaseDexFileReader.java
│ │ │ ├── DexFileReader.java
│ │ │ ├── MultiDexFileReader.java
│ │ │ └── zip
│ │ │ └── ZipUtil.java
│ │ └── util
│ │ ├── ArrayOut.java
│ │ ├── ASMifierAnnotationV.java
│ │ ├── ASMifierClassV.java
│ │ ├── ASMifierCodeV.java
│ │ ├── ASMifierFileV.java
│ │ ├── Escape.java
│ │ ├── Mutf8.java
│ │ ├── Out.java
│ │ ├── Utf8Utils.java
│ │ └── zip
│ │ ├── AccessBufByteArrayOutputStream.java
│ │ ├── AutoSTOREDZipOutputStream.java
│ │ ├── ZipConstants.java
│ │ ├── ZipEntry.java
│ │ └── ZipFile.java
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── reader
│ │ └── test
│ │ ├── AsmfierTest.java
│ │ ├── BadZipEntryFlagTest.java
│ │ └── SkipDupMethod.java
│ └── resources
│ ├── bad.zip
│ └── i200.dex
├── dex-reader-api
│ ├── build.gradle
│ └── src
│ └── main
│ └── java
│ └── com
│ └── googlecode
│ └── d2j
│ ├── CallSite.java
│ ├── DexConstants.java
│ ├── DexException.java
│ ├── DexLabel.java
│ ├── DexType.java
│ ├── Field.java
│ ├── MethodHandle.java
│ ├── Method.java
│ ├── node
│ │ ├── analysis
│ │ │ ├── DvmFrame.java
│ │ │ └── DvmInterpreter.java
│ │ ├── DexAnnotationNode.java
│ │ ├── DexClassNode.java
│ │ ├── DexCodeNode.java
│ │ ├── DexDebugNode.java
│ │ ├── DexFieldNode.java
│ │ ├── DexFileNode.java
│ │ ├── DexMethodNode.java
│ │ ├── insn
│ │ │ ├── AbstractMethodStmtNode.java
│ │ │ ├── BaseSwitchStmtNode.java
│ │ │ ├── ConstStmtNode.java
│ │ │ ├── DexLabelStmtNode.java
│ │ │ ├── DexStmtNode.java
│ │ │ ├── FieldStmtNode.java
│ │ │ ├── FillArrayDataStmtNode.java
│ │ │ ├── FilledNewArrayStmtNode.java
│ │ │ ├── JumpStmtNode.java
│ │ │ ├── MethodCustomStmtNode.java
│ │ │ ├── MethodPolymorphicStmtNode.java
│ │ │ ├── MethodStmtNode.java
│ │ │ ├── PackedSwitchStmtNode.java
│ │ │ ├── SparseSwitchStmtNode.java
│ │ │ ├── Stmt0RNode.java
│ │ │ ├── Stmt1RNode.java
│ │ │ ├── Stmt2R1NNode.java
│ │ │ ├── Stmt2RNode.java
│ │ │ ├── Stmt3RNode.java
│ │ │ └── TypeStmtNode.java
│ │ └── TryCatchNode.java
│ ├── Proto.java
│ ├── reader
│ │ ├── CFG.java
│ │ ├── InstructionFormat.java
│ │ ├── InstructionIndexType.java
│ │ └── Op.java
│ ├── Visibility.java
│ └── visitors
│ ├── DexAnnotationAble.java
│ ├── DexAnnotationVisitor.java
│ ├── DexClassVisitor.java
│ ├── DexCodeVisitor.java
│ ├── DexDebugVisitor.java
│ ├── DexFieldVisitor.java
│ ├── DexFileVisitor.java
│ └── DexMethodVisitor.java
├── dex-tools
│ ├── build.gradle
│ ├── open-source-license.txt
│ └── src
│ ├── main
│ │ ├── assemble
│ │ │ └── package.xml
│ │ ├── bin_gen
│ │ │ ├── bat_template
│ │ │ ├── class.cfg
│ │ │ ├── d2j_invoke.bat
│ │ │ ├── d2j_invoke.sh
│ │ │ └── sh_template
│ │ ├── java
│ │ │ └── com
│ │ │ └── googlecode
│ │ │ ├── d2j
│ │ │ │ ├── signapk
│ │ │ │ │ ├── AbstractJarSign.java
│ │ │ │ │ ├── Base64.java
│ │ │ │ │ ├── SunJarSignImpl.java
│ │ │ │ │ └── TinySignImpl.java
│ │ │ │ ├── tools
│ │ │ │ │ └── jar
│ │ │ │ │ ├── BaseWeaver.java
│ │ │ │ │ ├── ClassInfo.java
│ │ │ │ │ ├── DexWeaver.java
│ │ │ │ │ ├── InitOut.java
│ │ │ │ │ ├── InvocationWeaver.java
│ │ │ │ │ ├── ScanBridgeAdapter.java
│ │ │ │ │ └── WebApp.java
│ │ │ │ └── util
│ │ │ │ └── AccUtils.java
│ │ │ └── dex2jar
│ │ │ ├── bin_gen
│ │ │ │ └── BinGen.java
│ │ │ └── tools
│ │ │ ├── ApkSign.java
│ │ │ ├── AsmVerify.java
│ │ │ ├── BaksmaliBaseDexExceptionHandler.java
│ │ │ ├── ClassVersionSwitch.java
│ │ │ ├── DecryptStringCmd.java
│ │ │ ├── DeObfInitCmd.java
│ │ │ ├── Dex2jarCmd.java
│ │ │ ├── Dex2jarMultiThreadCmd.java
│ │ │ ├── DexRecomputeChecksum.java
│ │ │ ├── DexWeaverCmd.java
│ │ │ ├── ExtractOdexFromCoredumpCmd.java
│ │ │ ├── GenerateCompileStubFromOdex.java
│ │ │ ├── Jar2Dex.java
│ │ │ ├── JarAccessCmd.java
│ │ │ ├── JarWeaverCmd.java
│ │ │ ├── StdApkCmd.java
│ │ │ └── to
│ │ │ └── Do.java
│ │ └── resources
│ │ └── com
│ │ └── googlecode
│ │ └── dex2jar
│ │ └── tools
│ │ ├── ApkSign.cer
│ │ └── ApkSign.private
│ └── test
│ ├── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── tools
│ │ └── jar
│ │ ├── MethodInvocation.java
│ │ └── test
│ │ ├── DexWaveTest.java
│ │ └── WaveTest.java
│ └── resources
│ └── weave
│ ├── a-after.j
│ ├── a-before.j
│ ├── a-gen.j
│ ├── b-after.j
│ ├── b-before.j
│ ├── b-gen.j
│ ├── c-after.j
│ ├── c-before.j
│ ├── c-gen.j
│ └── smali
│ ├── a-after.smali
│ ├── a-before.smali
│ ├── a-gen.smali
│ ├── b-after.smali
│ ├── b-before.smali
│ └── b-gen.smali
├── dex-translator
│ ├── build.gradle
│ ├── libs
│ │ └── dx-30.0.2.jar
│ └── src
│ ├── main
│ │ └── java
│ │ ├── com
│ │ │ └── googlecode
│ │ │ └── d2j
│ │ │ ├── asm
│ │ │ │ └── LdcOptimizeAdapter.java
│ │ │ ├── converter
│ │ │ │ ├── Dex2IRConverter.java
│ │ │ │ ├── IR2JConverter.java
│ │ │ │ └── J2IRConverter.java
│ │ │ ├── dex
│ │ │ │ ├── Asm2Dex.java
│ │ │ │ ├── BaseDexExceptionHandler.java
│ │ │ │ ├── ClassVisitorFactory.java
│ │ │ │ ├── Dex2Asm.java
│ │ │ │ ├── Dex2IrAdapter.java
│ │ │ │ ├── Dex2jar.java
│ │ │ │ ├── DexExceptionHandler.java
│ │ │ │ ├── DexFix.java
│ │ │ │ ├── ExDex2Asm.java
│ │ │ │ ├── LambadaNameSafeClassAdapter.java
│ │ │ │ └── V3.java
│ │ │ └── util
│ │ │ └── Types.java
│ │ ├── org
│ │ │ └── objectweb
│ │ │ └── asm
│ │ │ └── AsmBridge.java
│ │ └── res
│ │ └── Hex.java
│ └── test
│ ├── java
│ │ ├── com
│ │ │ └── googlecode
│ │ │ └── dex2jar
│ │ │ └── test
│ │ │ ├── ArrayTypeTest.java
│ │ │ ├── ASMifierTest.java
│ │ │ ├── AutoCastTest.java
│ │ │ ├── D2jErrorZipsTest.java
│ │ │ ├── D2jTest.java
│ │ │ ├── DexTranslatorRunner.java
│ │ │ ├── EmptyTrapTest.java
│ │ │ ├── I101Test.java
│ │ │ ├── I121Test.java
│ │ │ ├── I168Test.java
│ │ │ ├── I63Test.java
│ │ │ ├── Issue71Test.java
│ │ │ ├── OptSyncTest.java
│ │ │ ├── ResTest.java
│ │ │ ├── Smali2jTest.java
│ │ │ ├── TestDexClassV.java
│ │ │ ├── TestUtils.java
│ │ │ └── ZeroTest.java
│ │ ├── dex2jar
│ │ │ └── gen
│ │ │ └── FTPClient__parsePassiveModeReply.java
│ │ └── res
│ │ ├── ArrayRes.java
│ │ ├── ChineseRes.java
│ │ ├── ConstValues.java
│ │ ├── ExceptionRes.java
│ │ ├── Gh28Type.java
│ │ ├── I142_annotation_default.java
│ │ ├── i55
│ │ │ ├── AAbstractClass.java
│ │ │ ├── AClass.java
│ │ │ └── AInterface.java
│ │ ├── I56_AccessFlag.java
│ │ ├── I71.java
│ │ ├── I73.java
│ │ ├── I88.java
│ │ ├── LongDoubleRes.java
│ │ ├── NoEndRes.java
│ │ ├── NullZero.java
│ │ ├── OptimizeSynchronized.java
│ │ ├── PopRes.java
│ │ ├── ResChild.java
│ │ ├── ResParent.java
│ │ ├── SwitchRes.java
│ │ ├── U0000String.java
│ │ └── WideRes.java
│ └── resources
│ ├── d2j-error-zips
│ │ ├── gh477-1.zip
│ │ └── gh495.zip
│ ├── dexes
│ │ ├── dex038.dex
│ │ ├── dex039.dex
│ │ ├── dex040.dex
│ │ └── i_jetty.dex
│ └── smalis
│ ├── 0zs.smali
│ ├── bb-1-can-not-merge-z-and-i.smali
│ ├── bb-5-ArrayIndexOutOfBoundsOnType.smali
│ ├── empty-try-catch-with-goto-head.smali
│ ├── gh501-r4k.smali
│ ├── gh-issue-186.smali
│ ├── gh-issue-4.smali
│ ├── goto-first-label.smali
│ ├── i230.smali
│ ├── int-or-boolean.smali
│ ├── issue-220-219-uninit-reg.smali
│ ├── loop-enclosing-class.smali
│ ├── method-code-too-large.smali
│ ├── ML.smali
│ ├── negative-array-size.smali
│ ├── npe-cause-trap-fail.smali
│ ├── opt-lock.smali
│ ├── useless-new.smali
│ └── writeString.smali
├── dex-writer
│ ├── build.gradle
│ └── src
│ ├── main
│ │ └── java
│ │ └── com
│ │ └── googlecode
│ │ └── d2j
│ │ └── dex
│ │ └── writer
│ │ ├── ann
│ │ │ ├── Alignment.java
│ │ │ ├── Idx.java
│ │ │ └── Off.java
│ │ ├── AnnotationWriter.java
│ │ ├── CantNotFixContentException.java
│ │ ├── ClassWriter.java
│ │ ├── CodeWriter.java
│ │ ├── DexFileWriter.java
│ │ ├── DexWriteException.java
│ │ ├── ev
│ │ │ ├── EncodedAnnotation.java
│ │ │ ├── EncodedArray.java
│ │ │ └── EncodedValue.java
│ │ ├── FieldWriter.java
│ │ ├── insn
│ │ │ ├── Insn.java
│ │ │ ├── JumpOp.java
│ │ │ ├── Label.java
│ │ │ ├── OpInsn.java
│ │ │ └── PreBuildInsn.java
│ │ ├── io
│ │ │ ├── ByteBufferOut.java
│ │ │ └── DataOut.java
│ │ ├── item
│ │ │ ├── AnnotationItem.java
│ │ │ ├── AnnotationsDirectoryItem.java
│ │ │ ├── AnnotationSetItem.java
│ │ │ ├── AnnotationSetRefListItem.java
│ │ │ ├── BaseItem.java
│ │ │ ├── CallSiteIdItem.java
│ │ │ ├── ClassDataItem.java
│ │ │ ├── ClassDefItem.java
│ │ │ ├── CodeItem.java
│ │ │ ├── ConstPool.java
│ │ │ ├── DebugInfoItem.java
│ │ │ ├── FieldIdItem.java
│ │ │ ├── HeadItem.java
│ │ │ ├── MapListItem.java
│ │ │ ├── MethodHandleItem.java
│ │ │ ├── MethodIdItem.java
│ │ │ ├── ProtoIdItem.java
│ │ │ ├── SectionItem.java
│ │ │ ├── StringDataItem.java
│ │ │ ├── StringIdItem.java
│ │ │ ├── TypeIdItem.java
│ │ │ └── TypeListItem.java
│ │ └── MethodWriter.java
│ └── test
│ └── java
│ └── a
│ ├── AppWriterTest.java
│ └── CpStringTest.java
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── LICENSE.txt
├── NOTICE.txt
├── README.md
└── settings.gradle
183 directories, 392 files
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论