Android反编译odex然后重新打包
Android反编译odex然后重新打包
最近不知道怎么回事,突然把我那刷了氧OS的root了,然后就开始好奇起来氢OS所带有的那些本地化的东西,比如通话录音就是典型的一个之一。其中也做了很多的尝试,XDA上有人说把/system/build.prop里面的"persist.sys.oem.region"的值改成“CN”,我尝试了一下确实可以,但是有的APP出现了崩溃卡死的问题,我发现改了后设置里面系统版本变成了氢OS,然后三大金刚键都变成了又返回在右边了,短信默认的都出现了氢的卡片效果,电话设置里面也有了通话录音,一切都成了氢OS的样子,但是副作用是好多的第三方APP出新了不能运行崩溃等各种问题。
于是又把build.prop改成了原本的样子,然后开始了反编译的探索之旅,于是就有了这篇博客,好多中文的博客写的都过时了,真的是好几天各种挖坑填坑爬坑的结果。本文的反编译是在Android7.1.1环境下在mac操作系统下操作的
好了废话说完了,一些概念诸如为什么有odex,odex之于apk里面的dex,下面开始正文
修改这种系统预装的app然后再打包理论上需要经过以下步骤
odex -> smali files -> dex -> jar -> modify smali files -> dex -> apk(包括class.dex的apk)
一开始我就是按照这个步骤来的,因为odex依赖的系统版本比较高,好多中文博客介绍的都是过时的工具,导致中间遇到了太多太多的坑。因为我弄的这个apk是控制电话接通后的童话的那个逻辑的,所以每次弄好了还要把apk复制到手机里面,然后再复制到/system/priv-app里面,然后改权限,还要保存之前的备份等的东西然后再重启手机,再拨打电话尝试,所以操作步骤极其繁琐。应该有更好的方法,只不过目前还懒的去发现。
- odex -> smali files: 这一步是使用的smali工具,我用的是baksmali-2.2.1.jar,其基本的命令为
java -jar baksmali-2.2.1.jar deodex OPInCallUI.odex -b ./framework/arm64/boot.oat -o OPInCallUI
deodex参数,指定要操作的文件名为“OPInCallUI.odex”
-b参数,指定bootclasspath,也就是要把手机rom的/system/framework里面的文件直接拷贝到电脑上的当前工作目录
-o参数,指定输出的smali文件的目录
- smali files -> dex: 这一步用的还是smali工具,不过jar文件变了,为smali-2.2.1.jar,使用的基本命令为
java -jar smali-2.2.1.jar assemble OPInCallUI -o classes_o.dex
assemble参数,指定smali files的文件夹所在
-o参数,指定输出的文件名为“classes_o.dex”
- dex -> jar: 这一步用的是dex2jar工具,使用的基本命令为
./dex2jar-2.0/d2j-dex2jar.sh classes_o.dex -o classes_o.jar
意思是把“classes_o.dex”转成“classes_o.jar”
- modify smali files: 这一步使用的工具主要会有不同,但是JD-GUI是少不了的,它能直接查看jar里面的class文件所对应的源代码,有了源码,看一些逻辑就方便了太多了啊。
jclasslib是查看java字节码的一个工具。其实这个地方基本用不到看java的字节码,而主要看smali(即Dalvik opcodes)文件 。
smali文件用普通的文本编辑器查看修改就可以了,但是需要先了解一下基本的语句,这是对照表。其实第2和第3步的主要目的就是看java的源码,帮助更好的理解,如果你感觉看smali跟看java是一样的,那就可以省略2和3步了 - modify smali files -> dex: 这一步是使用的还是smali工具,不过要用smali-2.2.1.jar,其基本的命令为
java -jar smali-2.2.1.jar assemble OPInCallUI -o classes.dex
- dex -> apk(包括class.dex的apk): 把第五步生成的classes.dex用压缩工具放在在手机"/system/priv-app/OPIncallUI"提取的OPInCallUI.apk里。这里我比较推荐BetterZip,可以去编辑压缩文件,制作压缩文件的时候还可以排除.DS_Store的影响。
- 把修改后的apk放回到"/system/priv-app/"里面,重启手机测试一下吧
注意:
- boot.oat依赖的时候要拷贝全面,要不然就会报错
Error occurred while loading class path files. Aborting.
org.jf.dexlib2.analysis.ClassPathResolver$ResolveException: Error while loading oat file ./boot.oat
具体的有篇文章,介绍了boot.oat和boot.art等的关系。初探boot.art与boot.oat
- 减少中间环节,我查过各种资料后总结出来流程应该是这个样子的
odex -> smali files -> dex -> jar -> modify jar -> dex -> apk(包括class.dex的apk)
后来发现这个坑实在是太深了,有的时候用低版本的baksmali的时候就会报大量的错误
org.jf.dexlib2.analysis.AnalysisException: Could not resolve the method in class Ljava/lang/reflect/Method;
以此顺延下去,肯定打包的程序不能运行了。
然后步骤多了出错的地方就更多了,定位起问题来就更麻烦了。
- 安利一个Google的工具吧android-classyshark,用来查看apk的包资源,类方法名等的工具,简直利器。再加一个插件intellij-java2smali,很方便的把java转成smali查看
其实这次反编译的初衷来源于想让我的一加3T手机的氧OS能够像氢一样拥有通话录音的功能。然后经历的种种,还受oos-call-recording项目的影响,还问了厚脸皮的问了作者原理。现在我也自建了一个项目,会上传我微改的系统的APP,使氧OS的系统APP拥有氢OS的功能,而又不失去氧OS更新快的特点。项目的地址为https://github.com/ysk666666/OxygenOS-SystemAppModified
Android反编译odex然后重新打包的更多相关文章
- android反编译odex文件
关于android的反编译工具,相信大家并不陌生 如APK-TOOL,dex2jar APK-TOOL 用于反编译出布局文件 下载地址http://code.google.com/p/android- ...
- Android反编译apk并重新打包签名(Mac环境)
工具下载 apktool :https://ibotpeaches.github.io/Apktool/install dex2jar:https://github.com/pxb1988/dex2j ...
- Android反编译和二次打包
参考:APK反编译 一.工具介绍: 1.解压工具 2.JDK 3.apktool: aapt.exe,apktool.bat,apktool.jar;三个在同一目录结合使用,用来反编译apk,反编译生 ...
- android 反编译(dex 和 odex),非脑残转帖,绝对可靠
Android 反编译 反编译odex文件(比如framework.odex),若是反编译dex,直接第4步 1.因为反编译odex的工具在D:\Develop tools\android反编译工具\ ...
- Android反编译(三)之重签名
Android反编译(三) 之重签名 [目录] 1.原理 2.工具与准备工作 3.操作步骤 4.装X技巧 5.问题 1.原理 1).APK签名的要点 a.所有的应用程序都必须有数字证书 ,Androi ...
- Android反编译(二)之反编译XML资源文件
Android反编译(二) 之反编译XML资源文件 [目录] 1.工具 2.反编译步骤 3.重新编译APK 4.实例 5.装X技巧 6.学习总结 1.工具 1).反编译工具 apktool http ...
- Android反编译工具的使用-Android Killer
今天百度搜索“Android反编译”搜索出来的结果大多数都是比较传统的教程.刚接触反编译的时候,我也是从这些教程慢慢学起的.在后来的学习过程中,我接触到比较方便操作的Android反编译.在这,我将使 ...
- Android 反编译apk 详解
测试环境: win 7 使用工具: CSDN上下载地址: apktool (资源文件获取) 下载 dex2jar(源码文件获取) 下载 jd-gui (源码查看) ...
- Android反编译教程
本文摘自 http://blog.csdn.net/ithomer/article/details/6727581 本文Android反编译教程,测试环境: Win7 Ultimate x64 Ubu ...
随机推荐
- Vulkan Tutorial 05 物理设备与队列簇
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 Selecting a physical device 通过VkInstance初始 ...
- JavaSE教程-03Java中分支语句与四种进制转换
一.分支语句 计算机源于生活,程序模拟现实生活,从而服务生活 行为模式 1,起床,刷牙,洗脸,吃早餐,上课,回家,睡觉(顺序性) 2,如果时间不太够,打个滴滴快车,如果时间够,坐个地铁(选择性) 3, ...
- Java IO流之打印流与标准流
一.打印流 1.1打印流特点与构造方法 1)PrintStream和PrintWriter类都提供了一系列重载的print和println方法来输出各种类型的数据. 2)PrintStream和Pri ...
- linux升级openssh7.4sp1
1.准备相关的包 openssh下载地址:http://mirror.internode.on.net/pub/OpenBSD/OpenSSH/portable/ openssl相关包下载:http: ...
- Backbox Linux简介与配置内网IP
总体说起来,Backbox内置的工具什么的,并不是很多,但是它集成了一些用起来很棒的工具. 比如:Beef.Sqlmap.wpscan.zenmap.msf.w3af.dns嗅探等一系列工具,传说中的 ...
- DISCUZ积分及点评需求
1.点评设置(可增强用户互动,但又不会顶帖刷屏):目前很难限制用户通过点评刷积分,点评等同于回复但却不需要审核,目前只是简单地关闭了点评功能.需求:可以审核点评内容:可以限制点评不获得积分或每天点评获 ...
- 【iOS】UIDynamicAnimator动画
创建动画 UIDynamicAnimator *animator = [[UIDynamicAnimator alloc] initWithReferenceView:self.view]; 协议代理 ...
- scrapy架构初探
scrapy架构初探 引言 Python即时网络爬虫启动的目标是一起把互联网变成大数据库.单纯的开放源代码并不是开源的全部,开源的核心是"开放的思想",聚合最好的想法.技术.人员, ...
- DB2简介和安装部署
一.DB2相关概念 1.DB2体系结构: DB2体系结构中的最高一层是系统,一个系统表示DB2的一个安装.在由很多机器组成 的网络环境中,我们有时=也称系统为数据库分区,一个系统可以包含多个DB2实例 ...
- 安装nginx+lua开发环境
一.安装nginx及搭建本地测试环境 1.创建安装目录: /data/nginx2.安装make: yum-y install gcc automake autoconf libt ...