初次反向编译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,⾛向⼈⽣巅峰,没有说像我这样的,⼀步坑,步步坑,没办法,换教程不⾏,还是解决问题吧,毕竟好不容易才解决了第⼀个坑,也不想就这么放弃了,就在那搜啊搜,试啊试,也不知道花了多久,最终还是让我搞定了:修改l
附上启蒙帖⼦:
1.5、修改l
到这⼀步,就要⽤到第三个⼯具了,HexEditorI,l是⼀个⼆进制⽂件,我们平常⽤的编辑器根本⽆法修改,于是到了HexEditorI这个⼯具
1.5.1、提取l
修改apk后缀名为zip,打开⽂件,拖出⾥⾯的l⽂件
1.5.2、使⽤HexEditorI修改l
解压后在这个⽬录下会有个exe执⾏⽂件,运⾏然后到要修改的⽂件即可
⽂件打开后就看到这⾥,⼀看就和错误:Expected: 0x00080003 or 0x00080001, got: 0x00080000很像啊,然后就根据错误提⽰,把00改为了03
然后保存退出就可以了
1.5.3、替换l
这步就不截图了,把压缩包⾥⾯的l删除,然后把修改过了放进去就好了
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就可以看到源码了
xml文件怎么打开
2.2、打开smali⽂件夹进⾏修改
我这⾥是先根据按钮关键字在smali到了对应的标签