初次反向编译apk并进行修改

使用一个app时,某个按钮因为权限问题被置灰无法点击,很烦,于是想着能不能通过修改apk的方式来防止按钮变灰,因为按钮本身是可以点的,只是时间限制被置灰了,之前从没有相关经验,所以过程中踩了很多坑,花了三天时间完成任务,在这里记录分享一下,免得以后对某个apk起色心的时候忘了怎么操作。

所需要的工具(文章尾部附上下载链接)

  1. apktool
  2. dex2jar
  3. HexEditorI
  4. ZipCenOp
  5. jd-gui

有了工具就可以正式开始了,下面将记录这次操作的每一步以及解决坑的方法

一、使用ApkTool对apk进行反编译

1.1、下载并解压ApkTool

 解压后会有这两个文件,接下来就是把要反编译的apk放在同一个目录下,打开powershell执行反编译命令:./apktool.bat d test.apk,这里的java.apk是我的安装包。

 这里遇到了第一个问题,反编译过程中提示错误 java.util.zip.ZipException: invalid CEN header (encrypted entry),拿问题去搜了会也没搜到解决办法,后来看到别人说有些修改不反编译也行,于是就想着能不能直接zip解压后修改。

1.2、尝试修改文件后缀为zip后解压

想到了就去干,于是很幸运的遇到了第二个问题

1.2.1修改安装包后缀为.zip

 1.2.2 解压安装包并遇到了第二个问题

 wfk,加密了?然后想着反编译不成功是不是就是因为加密的原因,想着要解密靠我这废物电脑基本上应该不可能了,但还是尝试着去搜了下apk如何解密,然后搜到的是,apk不能被加密,不然手机安装的时候咋安装,说的很有道理的样子,但是我tm这里要我输入密码是我眼花吗?于是又开始各种度,度来度去,终于找到了一个可以解决的办法,咱们的第二个工具ZipCenOp登场

1.3、使用ZipCenOp进行apk伪加密的解密

 解压后就是这三个文件了,下面两个文件名已经告诉你他们是干嘛的了,但是在解密前需要打开bat修改下要解密的文件名称

 把标红 的替换为自己的apk名称就行了,记得apk文件要放在同一路径下后双击解密.bat,解密完成后会提示你按任意键退出,然后就可以了

 1.4、抱着必胜的信心再去反编译

解密不会生成新的安装包,就是我们放进去的apk,为了确认解密是否有效,我又修改为.zip,后缀,尝试解压了一波,真的成功了,内心独白:就这?啥也不是!然后抱着必胜的信心又去反编译了,再次幸运,我又遇到坑了

  Expected: 0x00080003 or 0x00080001, got: 0x00080000

这时候我开始怀疑是不是我找的教程不对,一番搜索,发现人家就这么一步一步的修改apk,走向人生巅峰,没有说像我这样的,一步坑,步步坑,没办法,换教程不行,还是解决问题吧,毕竟好不容易才解决了第一个坑,也不想就这么放弃了,就在那搜啊搜,试啊试,也不知道花了多久,最终还是让我搞定了:修改AndroidManifest.xml

附上启蒙帖子:https://www.cnblogs.com/annaivsu/p/5268837.html

1.5、修改AndroidManifest.xml

到这一步,就要用到第三个工具了,HexEditorI,AndroidManifest.xml是一个二进制文件,我们平常用的编辑器根本无法修改,于是找到了HexEditorI这个工具

1.5.1、提取AndroidManifest.xml

修改apk后缀名为zip,打开文件,拖出里面的AndroidManifest.xml文件

 1.5.2、使用HexEditorI修改AndroidManifest.xml

解压后在这个目录下会有个exe执行文件,运行然后找到要修改的文件即可

 

 文件打开后就看到这里,一看就和错误:Expected: 0x00080003 or 0x00080001, got: 0x00080000很像啊,然后就根据错误提示,把00改为了03

 然后保存退出就可以了

1.5.3、替换AndroidManifest.xml

这步就不截图了,把压缩包里面的AndroidManifest.xml删除,然后把修改过了放进去就好了

1.6、怀着忐忑的心再去反编译

依然是执行./apktool.bat d test.apk命令,然后看到了如下输出

 我就知道我会成功的,哈哈,反编译完成,后面就是开始我们的修改大计了

二、修改反编译后的文件

这里会用到dex2jar和jd-jui,并且还需要编辑器来编辑smali文件,因为程序真正运行读取的是smali文件,我这里是直接用的idea来对smali进行修改。

2.1、使用dex2jar反编译

将apk文件修改后缀为.zip后解压,将解压文件里面的classes.dex放到dex2jar的目录下

 执行命令:d2j-dex2jar classes.dex

 然后就可以看见文件夹里面多了一个\classes-dex2jar.jar文件,这个就是编译成class的文件,拖入gui就可以看到源码了

 2.2、打开smali文件夹进行修改

我这里是先根据按钮关键字在smali找到了对应的标签

 发现是一个TextView标签,就设想会不会是根据后台的权限来设置TextView的显示和隐藏,于是根据标签的id  mute_text在gui进行搜索

 发现在这里读取了mute_tet标签,并定义了muteText对象,然后继续搜索muteText

 全局只发现这里引用了muteText对象,并且确实找到了有修改标签可见状态的操作textView.setVisibility(b);接下来就是在smali根据类名和方法名找到对应的代码修改了

 找到后直接把修改可见状态的代码删除就可以了,因为这个textView默认是不可见的,所以就让他一直老老实实待在幕后吧

三、apktool回编译修改后的文件

完成了针对性的修改,接下来就是把我们修改后的代码还原成可安装的apk了,回编译就比较轻松了,过程中没有遇到什么坑,还是使用apktool,执行命令: ./apktool.bat b test,test是我们要回编译的文件夹

 这样我们就算回编译成功了,在test里面就能看到新生成了build、disk两个文件,在disk里面就有打包好的apk

 这个时候一种自豪感由内而起,迫不及待的就拿着apk跑去虚拟机上安装,果不其然,无法安装,说是编译失败

 原来是自己太不淡定了,教程说的清清楚楚,重新编译好的apk是需要加签的,不然安装时就会有问题,那接下来肯定就是跟着教程开始给apk签名了

四、给修改后的apk签名

签名过程还算顺利,因为是使用jdk自带的加签工具进行加签,电脑本身就有安装jdk8的环境,所以省了一个步骤,如果你没有的话,就去搜索下jdk的安装教程,弄完再继续后面的操作

4.1、生成用来加签的keystore

在test的同一目录下,进入cmd,然后执行:keytool --genkey -alias android.keystore -keyalg RSA -validity 36500 -keystore android.keystore

 执行命令后跟着提示一步一步输入就可以了,秘钥库口令是必须要记住的,后面要用,其他的随便输入就好了,最后那个输入按提示直接按回车就行

 这样就生成了我们需要的加签工具,然后执行命令:jarsigner -verbose -keystore android.keystore -signedjar final4_signed.apk test.apk android.keystore进行加签,final4_signed.apk是加签后的apk,可以按自己喜好来命名,test.apk就是要加签的apk

 输入上一步设置的密码就可以开始加签了

 加签完成,就可以看见文件夹中生成了我们指定名称的apk,

 大功告成,剩下的就是到模拟器中进行安装了

五、安装apk

这一步其实没什么好说的,就和安装其他apk是一样的,点击安装就好了,但是因为是自己构建的apk,成就感最足的一步,不拿来说说,感觉都白忙活了,好了,来吧,拖入apk,点击安装

 看到这个就成功了一大半了,果然后面没有在遇到什么坑,直接就安装成功了,不要问我修改有没有生效,没有生效我会有心情在这哔哔这么多?

最后加一句:记得把之前安装的先卸载再安装哦,不然安装到半路会提示安装失败,坑不大,但浪费我不少时间和脑细胞,差点让我倒在了黎明前

六、最后

最后干啥呢,没啥说的,当然是附上工具包的安装链接了

链接:https://pan.baidu.com/s/1utcNaA5lOuoEk-LZapyZUw 
提取码:ak47

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值