android中dex及odex的反编译

反编译之系统级应用(apk和被拆分的odex合并) Android的存储中有很多odex文件,相对于APK中的dex文件而言这个odex有什么作用呢? 如果你仔细观察会发现apk和odex文件名是一一对应的,同时那些对应的apk文件解压后发现其中没有了dex文件。这样做可以使其厂商保证一定的反盗版,因为没有没有dex文件的apk是无法正常安装的,而厂商直接将odex和不完整的apk文件放到手机ROM固化到/system/bin中可以让一般用户无法正常导出使用。 odex 是经过优化的dex文件,且独立存在于apk文件。odex 多用于系统预制应用或服务。通过 阅读详情
一、odex破解步骤:
1、下载baksmali-1.4.2.jar、smali-1.4.2.jar并放到framework文件目录下,最好取出ROM中/system/framework及/system/app下所有文件;

2、执行java -jar .\baksmali-1.4.2.jar -x .\framework.odex(需要反编译的odex文件);

3、执行java -Xmx512M -jar .\smali-1.4.2.jar out -o framework.dex;

4、将生成的framework.dex拷到dex2jar工具目录,执行dex2jar.bat .\framework.dex;

5、通过java Decompiler及可解出java源码文件;

6、下载ddx1.26.jar, 执行java -jar .\ddx1.26.jar -d framework(目标目录)  .\framework.dex,及可得到smali格式的代码。

二、smali语法分析:


dalvik字节码有两种类型,原始类型和引用类型。对象和数组是引用类型,其它都是原始类型。
V void,只能用于返回值类型
Z boolean
B byte
S short
C char
I int
J long(64位)
F float
D double(64位)
对象以Lpackage/name/ObjectName;的形式表示。前面的L表示这是一个对象类型,package/name/是该对象所在的包,ObjectName是对象的名字,“;”表示对象名称的结束。相当于java中的package.name.ObjectName。例如:Ljava/lang/String;相当于java.lang.String

数组的表示形式
 [I——表示一个整型一维数组,相当于java中的int[]。
 对于多维数组,只要增加[就行了。[[I相当于int[][],[[[I相当于int[][][]。注意每一维的最多255个。
 对象数组的表示:[Ljava/lang/String;表示一个String对象数组。
方法
表示形式:Lpackage/name/ObjectName;->MethodName(III)Z
 Lpackage/name/ObjectName;表示类型,MethodName是方法名。III为参数(在此是3个整型参数),Z是返回类型(bool型)。
 方法的参数是一个接一个的,中间没有隔开。
一个更复杂的例子:
method(I[[IILjava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
在java中则为:
String method(int, int[][], int, String, Object[])
字段
表示形式:
Lpackage/name/ObjectName;->FieldName:Ljava/lang/String;
即包名,字段名和各字段类型。
寄存器
在dalvik字节码中,寄存器都是32位的,能够支持任何类型。64位类型(Long和Double型)用2个寄存器表示。
有两种方式指定一个方法中有多少寄存器是可用的。.registers指令指定了方法中寄存器的总数。.locals指令表明了方法中非参寄存器的数量。
方法的传参
 当一个方法被调用的时候,方法的参数被置于最后N个寄存器中。如果一个方法有2个参数,5个寄存器(v0-v4),那么参数将置于最后2个寄存器——v3和v4。
 非静态方法中的第一个参数总是调用该方法的对象。
例如,非静态方法LMyObject;->callMe(II)V有2个整型参数,另外还有一个隐含的LMyObject;参数,所以总共有3个参数。假如在该方法中指定了5个寄存器(v0-v4),以.registers方式指定5个或以.locals方式指定2个(即2个local寄存器+3个参数寄存器)。当该方法被调用的时候,调用该方法的对象(即this引用)存放在v2中,第一个整型参数存放在v3中,第二个整型参数存放在v4中。
对于静态方法除了没有隐含的this参数外其它都一样。
寄存器的命名方式
有两种方式——V命名方式和P命名方式。P命名方式中的第一个寄存器就是方法中的第一个参数寄存器。在下表中我们用这两种命名方式来表示上一个例子中有5个寄存器和3个参数的方法。
v0 第一个local register
v1 第二个local register
v2 p0 第一个parameter register
v3 p1 第二个parameter register
v4 p2 第三个parameter register
你可以用任何一种方式来引用参数寄存器——他们没有任何差别。
注意:baksmali默认对参数寄存器使用P命名方式。如果想使用V命名方式,可以使用-pl—no-parameter-registers选项。
使用P命名方式是为了防止以后如果要在方法中增加寄存器,需要对参数寄存器重新进行编号的缺点。
Long/Double值
Long和double类型是64位的,需要2个寄存器(切记切记)。
例如,对于非静态方法LMyObject;->MyMethod(IJZ)V,参数分别是LMyObject;,int,long,bool。故该方法需要5个寄存器来存储参数。

p0 this
p1 I
p2,p3 J
p4 Z


补充:
# static fields             定义静态变量的标记
# instance fields        定义实例变量的标记
# direct methods       定义静态方法的标记
# virtual methods      定义非静态方法的标记
构造函数的返回类型为V,名字为<init>。
 
if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程:
    :cond_8
    invoke-direct {p0}, Lcom/paul/test/a;->d()V
调用com.paul.test.a的d()方法
if-ne p1, v0, :cond_b 表示不相等则执行cond_b的流程:
    :cond_b
    const/4 v0, 0x0
    invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V
    invoke-super {p0, p1, p2}, Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z
    move-result v0
 
大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法,最后 return v0 


举两个例子:

sget-object v5, Lcom/google/youngandroid/runtime;->Lit227:Lgnu/mapping/SimpleSymbol;
获取com.google.youngandroid.runtime中的Lit227字段存入v5寄存器,相当于
gnu.mapping.SimpleSymbol localVariable = com.google.youngandroid.runtime.Lit227;

sput-object v0, Lcom/google/youngandroid/runtime;->Lit78:Lkawa/lang/SyntaxTemplate;
Likewise, this is setting the value of a static field. i.e.
设置com.google.youngandroid.runtime.Lit78的值为v0寄存器中的kawa.lang.SyntaxTemplate类型变量的值。相当于com.google.youngandroid.runtime.Lit78 = kawa.lang.SyntaxTemplate localVariable;


参考文章:http://bbs.pediy.com/showthread.php?t=151769

http://bbs.pediy.com/showthread.php?p=1117963

smali文件语法参考:http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html


反编译android车机导航odex文件转dex pull车机导航apk后,解压apk,发现里边没有dex文件,在apk同级目录里边有oat/x86_64/.odex 和oat/x86_64/.vdex ; 将odex转dex步骤 1、工欲善其事必先利其器,配置好jar 环境后,到bitbucket.org上下载 smali-xxx.jar、baksmali-xxx.jar、baksmali、smali四个文件,并放到本地目录test。 2、将odex转smali 将对应的odex文件和 vdex文件也一同拷贝到test目录,/system/f... 阅读详情

相关推荐

odex转dex 工具 保证可用

odex转dex 工具 保证可用 使用了baksmali-1.4.0.jar和 smali-1.4.0.jar

android平台下,apk、jar、dex、odex、vdex、art文件相互转换,编译和反编译

apk、jar、dex、odex、vdex相互转换 1. ? to jar 1.1 odex to jar 1.2 dex to jar 1.3 apk to jar 输出结果可能有损 1)、用jadx工具将dex反编译出jar 2)、用dex2jar工具,反编译出jar,如果报错修改dex2jar工具源码 3)、odex to dex,然后执行1)2) 2. ? to dex 2.1 o/v...

QQ18334373taikongyi的专栏 6702

baksmali-1.4.2.jar

baksmali-1.4.2.jar 安卓开发 工具类

Android 反编译 vdex/odex/cdex转换dex

Android 反编译 vdex/odex转换dex。

拾荒 4709

SAP BSP网页开发入门:从SE80创建到MVC实战(附成品展示)

本文详细介绍了SAP BSP网页开发的入门与实战,从SE80环境搭建到MVC架构实现的全流程。通过具体案例和代码示例,帮助开发者掌握业务服务器页面(BSP)技术,提升SAP Web化转型中的开发效率,适用于需要扩展SAP功能的企业场景。

x1y2z的博客 1万+

SoIC、CoWoS、InFO一次讲透:从2D/2.5D/3D看懂先进封装

先进封装是后摩尔时代提升芯片性能的关键路径,但面对SoIC、CoWoS、InFO这些名词,很多人容易混淆。理解它们,需从最基本的2D、2.5D、3D封装概念入手:2D是传统平房,2.5D通过硅中介层实现高密度互连,3D则让芯片直接堆叠。CoWoS作为2.5D中介层封装,已成为AI芯片与HBM高带宽存储集成的行业标准;SoIC通过铜-铜混合键合实现真正的3D堆叠,为逻辑与缓存提供极致带宽;InFO以扇出型封装兼顾成本与集成度,广泛用于移动SoC。在系统级封装(SiP)和CPO共封装光学等前沿趋势中,这些技术往

weixin_42388898的博客 311

Android 反编译 .vdex、.odex、.dex 文件

Android 反编译 .vdex、.odex、.dex 文件准备环境反编译.odex文件反编译.dex文件反编译.vdex文件Tips 准备环境 1.下载baksmali-2.5.2.jar和smali-2.5.2.jar,baksmali用来反编译odex文件,smali用于将odex文件反编译生成的smali文件,重新打包成dex文件,下载链接: https://bitbucket.org/JesusFreke/smali/downloads/ 2.下载dex2jar-2.0,用于将dex文件编译成j

ldljheropt的博客 6673

本地部署静态网站托管平台 Netlify 并实现外部访问(Windows 版本)

Netlify 是一款基于云计算的网站部署和托管平台,专为开发者提供便捷的静态网站和 Jamstack 应用部署服务。它的能力在于将网站构建、部署、托管以及持续集成等流程高度集成,简化了开发和运维的复杂程度。用户无需关心服务器的配置、维护等工作。本文将详细介绍如何在本地安装 Netlify 以及结合路由侠内网穿透实现外网访问 Netlify。

lyxnwct的博客 524

如何反编译Android 的apk/dex/odex,获得源码

http://www.androiddev.net/%e5%8f%8d%e7%bc%96%e8%af%91android-%e7%9a%84apk/ 最近因为工作的需要,要查看一下某个应用的源代码。本来我就不是做Android开发的,对这个也不熟悉,只好用Google反复查来查去,终于算是搞定了,在这里特地记下来,供自己也供其他人参考。   关于APK,DEX的介绍 当我们编译

loongwong2011的博客 3195

ubuntu20.04运行VINS-Mono(跑EuRoC数据集)

在VINS-Mono主工程目录下的config子目录中找到euroc文件夹,并打开其中的euroc_config.yaml文件,将其中结果输出保存路径修改为本地的绝对路径或相对路径。应该是这个功能包路径没有成功得到,直接注释了这一行,改成你电脑中安装的vins_mono的pose_graph这个功能包路径,备注:直接下可能因为包太大下不下来,我是下载的zip,再解压,将VINS-Mono-master重命名为VINS-Mono。,当时参考了几篇不同的文章,感觉我的这个配置应该也可以编译,就先尝试了一下。

2301_80311277的博客 2981

pytest-bdd封装

简介 pytestbdd主要是用于代码封装 代码封装的好处: 1、提升代码复用率 2、提示测试效率 手工测试–使用框架0代码 流程+数据驱动 产品经理这样的不懂测试的人员–流程驱动 自动化测试–数据驱动 pytest-bdd:流程驱动封装 行为驱动–敏捷开发模式,消除开发/测试对需要了解的歧义 使用方式: 描述需求/用户场景 Feature(需求) Scenario(场景) Given(假设) When(操作步骤) Then(验证,清除) #新建feature 文件之前 需要提取安装支持featrue文.

liao_11的博客 2733

android 反编译 odex 转 dex

odex 转 dex ,生成Class,android 反编译

dy_Learning的专栏 1118

全国排污许可证数据

from tkinter import * # 导入窗口控件 import tkinter.filedialog import requests from lxml import etree from tkinter import ttk from bs4 import BeautifulSoup import webbrowser # 调用浏览器打开网页 from tkinter import messagebox # 弹出提示框 from openpyxl import Workbook imp.

Newnotes的博客 3387

android apk反编译和odex转dex

android apk反编译和odex转dex 大家好,这里介绍apk反编译操作。 1:apk反编译 2:odex转dex   操作环境:ubuntu   A:apk反编译 .到code.google上下载apktool.jar以及相关文件:http://code.google.com/p/android-apktool/downloads/list 点击下载ap

一介渔夫 4308

激光雷达与相机外参标定(附open3d python代码)

现在的激光雷达与相机的标定程序基本都是Ubuntu框架下面的,并且都是C++代码,需要安装的依赖也比较复杂,于是自己写了一个python版本的标定程序,依赖非常简单,Windows系统也可以运行。我这里用的大疆的雷达,点比较密集,更容易用我这种方法标定,旋转的16,32线的雷达也可以用这种方法标定,只是标定点会相对难选取一些。2 手动在点云上选取N个标定点(每个点都对应图像上的点,顺序也要一致)3 通过PNP方法计算出二者的旋转投影矩阵,也就是外参矩阵。1 手动在图像上面选取N个标定点。

三维点云技术探索 3412

Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”

基于之前的开发程序通过Jetson Xavier NX 硬编码的H265发出后,上位机断点播放发出来的H265码流,会报“PPS id out of range” 错误。

jzwjzw19900922的博客 3812

【免费下载】 Android 反编译与逆向工程利器:VDEX2DEX与ODEX2DEX工具推荐

在Android开发领域,反编译与逆向工程是开发者们经常需要面对的挑战。为了帮助开发者更高效地进行这些操作,我们推出了一个专门用于Android应用反编译与逆向工程的资源文件仓库。该仓库提供了一个强大的工具集,能够将VDEX和ODEX文件转换为DEX文件,从而让开发者能够轻松查看Android应用的源代码。 ## 项目技术分析 ### VDEX与ODEX文件 在Android系统中,VDEX

gitblog_09812的博客 477

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux apk 拆分 odex,android平台下,apk、jar、dex、odex、vdex、art文件相互转换,编译和反编译...

apk、jar、dex、odex、vdex相互转换java1. ? to jar1.1 odex to jar1.2 dex to jar1.3 apk to jar输出结果可能有损1)、用jadx工具将dex反编译出jar2)、用dex2jar工具,反编译出jar,若是报错修改dex2jar工具源码3)、odex to dex,而后执行1)2)linux2. ? to dex2.1 o/vdex...

weixin_39552286的博客 1359

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android odex反编译为dex

1. 准备工具: http://code.google.com/p/smali/ 下载 smali-1.4.2.jar baksmali-1.4.2.jar 准备dex2jar工具, http://code.google.com/p/dex2jar/ 2. deodex 将odex文件转换为smali 示例: # java -jar baksmali-1.4.2.jar -

Android系统攻城狮 2238

android 反编译(dex 和 odex),非脑残转帖,绝对可靠

Android 反编译 反编译odex文件(比如framework.odex),若是反编译dex,直接第4步 1.因为反编译odex的工具在D:\Develop tools\android反编译工具\odex中,因此为了运行命令方便一点在odex目录里面,将system的目录结构给新建一下,将反编译的odex中所引用的全部包都放到相应的目录下 system----- ...

weixin_30873847的博客 276

反编译android之 .odex .odex.xz .dex

1. 查看system.img内容: 工具:simg2img_files 操作:    a.  system.img改名为system.img.ext4    b.  simg2img system.img.ext4 system.img    c.1 使用ext2explore.exe,打开镜像,右键点击保存。    c.2 使用mount命令: sudo mount -t ex

Devil192的专栏 1580

【亲测免费】 Android 反编译与逆向工程利器:VDEX2DEX与ODEX2DEX工具推荐

在Android应用开发与安全研究领域,反编译与逆向工程是不可或缺的技术手段。为了帮助开发者更高效地进行Android应用的反编译与逆向分析,我们推出了一个专门用于处理VDEX和ODEX文件的资源文件。通过使用该资源文件,开发者可以轻松地将VDEX和ODEX文件转换为DEX文件,从而深入查看Android应用的源代码,为应用的安全评估、漏洞挖掘以及功能分析提供有力支持。 ## 项目技术分析 #

gitblog_09801的博客 639

odex 转 dex ,生成Class,android 反编译

http://hi.baidu.com/qqxxin/blog/item/d2350e497145b53208f7ef6a.html odex文件无法直接使用dex2jar进行直接反编译成jar,必须先转为dex,才能继续反编译。 用到的工具baksmali smali 下载地址:http://code.google.com/p/smali/downloads/list 步骤: ...

hyshucom 116
上一篇: android.graphics包中的一些类的使用
下一篇: Android触摸事件分发机制
风清扬
博客等级 码龄19年 45粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值