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 ...
随机推荐
- RGB565的理解
一个彩色图像由R G B三个分量组成,一个RGB565的每一个像素点数据为2Byte,即16位,那么从名字上就可看出来这16位中,高5位为R分量,中间6位为G分量,低5位为B分量. 下面做了一个实验, ...
- 你会python不?当你听到这个问题要谨慎回答!!!
问:你会python不? 答:python啊,略微有点小研究,虽然不精通,但是写写网络小爬虫,搜集搜集网络资源,学习视频什么的,还是手到擒来的...(for循环一小时中) 旁白:然而你没有明白人家的真 ...
- Centos7下安装部署MXNET
Centos下安装MXNET,参考官方文档http://mxnet.io/get_started/setup.html#prerequisites, 一.安装python的mxnet步骤如下: #!/ ...
- JSP/Servlet Web 学习笔记 DayTwo
JSP指令 a)page指令 定义JSP文件中的全局属性.一个JSP页面可以包含多个page指令.除了Import以外,其他page指令定义的属性/值只能出现一次. 其详细语法为: <%page ...
- RabbitMQ系列教程之一:我们从最简单的事情开始!Hello World
一.简介 RabbitMQ是一个消息的代理器,用于接收和发送消息,你可以这样想,他就是一个邮局,当您把需要寄送的邮件投递到邮筒之时,你可以确定的是邮递员先生肯定会把邮件发送到需要接收邮件的人 ...
- php curl 的几个实例
使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并把 ...
- MPP 二、Greenplum数据加载
Loading external data into greenplum database table using different ways... Greenplum 有常规的COPY加载方法,有 ...
- 用C写一个web服务器(四) CGI协议
* { margin: 0; padding: 0 } body { font: 13.34px helvetica, arial, freesans, clean, sans-serif; colo ...
- 【数据库】Mean web开发 02-Windows下Mongodb安装配置及常用客户端管理工具
简介 Mean是JavaScript的全栈开发框架.更多介绍 用MongoDB实现持久数据的存储是Mean Web全栈开发中的一部分. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- mysql之 MySQL 主从复制概述
1 .主从复制简介MySQL 主从复制就是将一个 MySQL 实例(Master)中的数据实时复制到另一个 MySQL 实例(slave)中,而且这个复制是一个异步复制的过程.实现整个复制操作主要由三 ...