Andriod反编译,重编译采坑
Andriod项目反编译操作
一,下载工具包,我这里用的是apktool(由于打太多已经记住了.jpg)
需要改工具的大佬可私聊我发
二,前提:需要jdk环境,是的话可以跳过,不是的话参考百度,教程很多,这里不做赘述
三,找到你需要反编译的Andriod项目,放在apktool工具的同名文件夹下(省去后面添加绝对路径的麻烦),如下图,文件夹是已经反编译的文件,可以忽略
四,在这个路径下打开cmd命令行,输入反编译的代码
java -jar .\apktool.jar d .\apk文件名.apk
然后就会出现前面的同名项目文件夹
五,打开该文件夹,修改你所需要的修改的内容,这里我只是尝试着修改项目图标,需要修改代码的话需要用到编译器,这里不做赘述,由于只是探索所以不做复杂的操作
六,修改完之后,便是重编程,也即是重新打包
不考虑其他bug,重新打包的代码为
java -jar .\apktool.jar b .\文件名\
然而实际没有这么简单,这里才是困难的开始!
首先,在重新编译的过程中,程序并不会报错,但实际进行安装的时候会出现安装包无效的提示
解决:百度大法后发现可能是签名没有更新的原因,这里我的猜测是对代码和资源进行修改后,apk原本记录信息/索引的文件匹配的时候发现和原来的不同,所以就会认不出现在的apk是什么,可能是一把锁配一把钥匙的操作吧,反正就是需要根据新的apk进行重新签名,换了锁,自然要换钥匙~
https://blog.youkuaiyun.com/kai_zone/article/details/90032475
在百度上找到的这个帖子,很简单的说明了原因,就是解决办法没有说清楚,因为他解决这个办法的方式是引用其他大神的方法,那个大神的方法是真的看不懂,不然这个帖子会很适合新手(说的就是我)
怎么换呢,这个网上的方法基本雷同,首先是找到“那把钥匙”
钥匙的位置网上给的参考不同,有的说是在反编译文件里的xxxx文件里(名字忘了),简单的说其实就是要找到后缀是RSA的文件,这里我是在下面的路径找到的,大佬们可以参考自己的项目找到这个文件就可以了
找到“钥匙”后,就是要用这个钥匙变出新的“钥匙”
这里网上的方法也很多,但都不能为我所用(明显就是技术不到位!)简单的说其实就是用java自带的签名程序,以“旧钥匙”为原料,打造“新钥匙”,那么java自带的签名程序是什么呢,百度后发现是可以直接通过命令行启动的,通过两步实现,第一步是生成密钥,第二步才是签名
生成密钥:
keytool -genkey -alias test11 -keyalg RSA -keysize 1024 -keystore d:/wymtest.keystore -validity 4000
https://blog.youkuaiyun.com/u013758456/article/details/78092541
这个帖子里有说明每个关键字对应的意思,我就不多说了,因为难点不在这里
正确的操作下, 你会获得这个后缀为keystore的文件
签名
jdk1.6及以前的,签名的命令行比较简单,如下
jarsigner -verbose -keystore feelyou.keystore -storepass feelyou.info -signedjar signed.apk unsigned.apk square.keystore
解释:
1、-keystore square.keystore:指定需要使用的签名文件,直接写文件名说明在当前目录下,否则请自行指定具体路径
2、-storepass square.info:自动输入密码,keystore的密码和alias的密码都是我用的都是square.info,这个功能我使用的时候会报错,所以不推荐,大佬们使用的时候直接删掉即可,亲测有效
3、-signedjar signed.apk:指定签名后的文件存储路径,这里是说以signed.apk的文件名存在当前路径下,如果不想在当前路径下,需要在signed.apk前面添加绝对路径
4、-digestalg SHA1 -sigalg SHA1withRSA:这就是必须加上的参数,如果你是jdk 1.6也不受影响,这里要注意,我在其他帖子看到使用的不是SHA1,而是MD5,不要用MD5,因为用他会提示你这个方法已经被禁用了,SHA1至少目前还能使用
5、unsigned.apk:未签名的apk路径,这里是当前路径下的unsigned.apk文件,如果不想在当前路径下,需要在unsigned.apk前面添加绝对路径
6、square:最后这个是alias,别名,直接写成密钥的全称就好,后缀也要,不然直接报错
如果jdk是1.6以上的,一定一定要在两个apk之间添加
-digestalg SHA1 -sigalg SHA1withRSA
这一串内容,否则会一直报
这个错误,很烦人,因为都最后一步了
签名这一步对我来说是最难的,因为过程出现了很多报错,如请指定一个别名(这里是因为在两个apk路径之间多了其他的内容,我是多了-storepass square.info,这个忘了删掉);再比如找不到xxx.apk,这个简单,就是因为没有给apk指定绝对路径;还有就是出现无法对jar签名的情况,这个需要先把原来的apk后缀改成zip,打开然后删掉里面的META-INF目录,把后缀改回去然后签名打包;还有其他的忘了,有大佬遇到其他的可以评论或私聊我,会的一定解答
其他都没有问题的话,会是这个界面
至此,重新安装签名后的apk就可以正常使用了!
花了一整天搞这个,然后发现没什么卵用,不愧是我…
为什么这么说,因为后面我发现大的公司还会使用一些手段防止反编译,这里我已经放弃了,已经不是我要探索的领域了~
因为工作原因一直不能填unity的坑,太难了,希望年后或者其他时间能重新搞完吧~
对内容有疑问的大佬请务必评论或私聊我,相互进步~
https://blog.youkuaiyun.com/wulei0605/article/details/42264125
https://blog.youkuaiyun.com/keep_my_mine/article/details/108978348
http://www.bubuko.com/infodetail-1956168.html