Dalvik指令分析(二) 从java文件到dex

写这个系列文章是想了很久但是一直没有时间付诸行动,趁着这两天假期还没有结束,

赶紧动笔,怕上班了就没有时间再静下心来写这些文章,所以有点赶,表现在系列文章的

内容安排上就不是很合理,有些内容还需要丰富,但是聊胜于无吧,先写下再修改,如果

有一些反馈也可以根据反馈来修改。好了,开始第二篇文章。

这篇文章可以成为dx的HelloWorld,在这篇文章里我会介绍如果将一个java文件编译

成一个dex文件。ok,go!

step1: 准备java文件,文件名HelloWorld.java,内容如下

public class HelloWorld {
    public void sayHello() {
        System.out.println("Hello World!");
    }
}

多么熟悉的HelloWorld  :)

step2:编写脚本,内容如下:

mkdir classes
javac -d classes src/*.java

dx -JXmx500m --debug --dex --no-optimize --positions=none --no-locals     --dump-to=classes.lst --output=classes.dex classes
zip test.jar classes.dex

这里需要做一些解释,首先利用javac编译java源文件,生成class文件,然后利用dx将

class文件转换成dalvik指令,并打包生成classes.dex,最后将dex打包成jar包。虽然只是

短短的几句话,但是dx进程的内部逻辑其实非常复杂,后续我会单独写一篇文章介绍dx的

过程。简单总结一下上面的编译过程:

.java  ------------->    .class   ---------->   .dex

javac                             dx

对应的逆向过程如下:

.java  <-------------    .class   <------------   .dex

JD-GUI                         dex2jar

step3: 执行上述脚本就会生成classes.dex文件

这篇文章主要是通过脚本来介绍java to dex的过程,后续文章会详细介绍dx的过程,以及dex

文件的结构。

时间: 2024-12-06 22:20:58

Dalvik指令分析(二) 从java文件到dex的相关文章

Dalvik指令分析(一) 字节码转换为smali代码

有过android应用反编译或者再打包的朋友都有使用过apktool的经验,apktool能将dex文件的 字节码转换为smali代码,这个工具是怎么做到对dex进行解析并生成smali代码的呢?这就需要对 dex文件的格式很熟悉.需要掌握dalvik指令的字节码格式,并能翻译成对应的smali代码. 我准备写一系列的文章来分析dex文件的格式.dalvik字节码的格式.以及dex to smali的方法, 基于此可以做很多的应用,比如安全扫描.应用加固等等! Dalvik指令介绍请参考官方文档

apk自我保护的一种实现方式——运行时自篡改dalvik指令【转载】

玩过Android开发的人应该都知道,Android apk的保护是非常差的,辛辛苦苦写的代码,被别人翻个底朝天倒不说,被人改了代码移头换面再拿出来害人就不能忍了. 除自带的SDK外,Android的分析和修改工具还有很多,Android下的静态分析工具,最常见的是利用ApkTool(见http://code.google.com/p/android-apktool/)反编译apk,将dalvik字节码生成smali汇编,通过对smali汇编的阅读分析,结合实际软件运行时行为,搜索定位关键信息点

【二】命令行编译Java文件

①运行→cmd→ ②常用指令:进入E盘是“e:”回车 打开文件夹是“cd 文件夹名”比如“cd work” “dir”是看当前文件夹下面的文件 编译java文件的命令是“javac XXXO.java”,会生成一个class文件, 执行class文件命令式“java XXXO”(无需后缀名) ③Java对大小写敏感,java文件名需和里面的类名一致 ④hello word代码: public class hello{ public static void main(String args [])

Java线程池使用和分析(二) - execute()原理

相关文章目录: Java线程池使用和分析(一) Java线程池使用和分析(二) - execute()原理 execute()是 java.util.concurrent.Executor接口中唯一的方法,JDK注释中的描述是“在未来的某一时刻执行命令command”,即向线程池中提交任务,在未来某个时刻执行,提交的任务必须实现Runnable接口,该提交方式不能获取返回值.下面是对execute()方法内部原理的分析,分析前先简单介绍线程池有哪些状态,在一系列执行过程中涉及线程池状态相关的判断

JAVA Collection 源码分析(二)之SubList

昨天我们分析了ArrayList的源码,我们可以看到,在其中还有一个类,名为SubList,其继承了AbstractList. // AbstractList类型的引用,所有继承了AbstractList都可以传进来 private final AbstractList<E> parent; // 这个是其实就是parent的偏移量,从parent中的第几个元素开始的 private final int parentOffset; private final int offset; int s

Linux常用命令(十二)日志文件分析

? ? ? ? ? ? ? ? ? ? ? ? Linux常用命令(十二)日志文件分析 日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的"日记".不同的日志文件记载了不同类型的信息,如Linux内核消息.用户登录事件.程序错误等. 一.主要日志文件 ???? ? ? ? 在Linux系统中,日志数据主要包括以下三种类型. ■ 内核及系统日志: 这种日志数据由系统服务rslslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置决定将内核消

Android逆向之旅---运行时修改内存中的Dalvik指令来改变代码逻辑

一.前言 最近在弄脱壳的时候发现有些加固平台的加固方式是修改了dex文件结构,然后在加载dex到内存的时候,在进行dex格式修复,从而达到了apk保护的效果,那么在dex加载到内存的时候,如何进行dex格式的修复呢?其实原理就是基于运行时修改内存中的Dalvik数据,本文就来用一个简单的例子来介绍一下如何在内存中去修改Dalvik指令代码来改变代码本生的运行逻辑.在讲解本文之前,一定要先看这篇文章:Android中Dex文件格式详解 这篇文章主要介绍了关于Dex文件的格式介绍,这个对于后面修改内

android apk 防止反编译技术第二篇-运行时修改Dalvik指令

上一篇我们讲了apk防止反编译技术中的加壳技术,如果有不明白的可以查看我的上一篇博客http://my.oschina.net/u/2323218/blog/393372.接下来我们将介绍另一种防止apk反编译的技术-运行时修改字节码.这种方法是在工作中在实现app wrapping时,看到国外的一篇关于android 安全的介绍实现的并且独创.下面我们来介绍一下这种方法. 我们知道apk生成后所有的java生成的class文件都被dx命令整合成了一个classes.dex文件,当apk运行时d

baksmali和smali源码分析(二)

这一节,主要介绍一下 baksmali代码的框架. 我们经常在反编译android apk包的时候使用apktool这个工具,其实本身这个工具里面对于dex文件解析和重新生成就是使用的baksmali 和smali这两个jar包其中 baksmali是将 dex文件转换成便于阅读的smali文件的,具体使用命令如下:java -jar baksmali.jar classes.dex -o myout其中myout是输出的文件夹 而smali是将smali文件重新生成回 dex文件的具体使用的命