Android逆向
1.工具
- apktool.jar
- jd-gui.jar
- dex2jar.zip
2.查看java源码
假设现在有一个test.apk,如果我们想要查看一个apk里的java源码,首先
- 我们通过解压apk文件得到classes.dex文件,然后将classes.dex文件放置到dex2jar目录下
-
通过命令行
.\d2j-dex2jar.bat classes.dex
-
然后就会在当前文件夹中生成classes-dex2jar.jar
- 然后用jd-gui打开,即可查看源码
2.修改java源码
使用dex-2jar和jd-gui只能常看源码,但不能修改,那么如何修改源码呢
如果想要修改,需要反编译出smali文件,然后对smali文件进行修改操作,使用下边命令反编译apk:
apktool.jar d test.apk
然后会在当前目录生成test目录,目录内容大体如下:
然后就可以通过修改smali目录下相应的文件了
当然,还需要学习一下smali的相关语法
更多的smali的语法可以参考这篇文章
3.重新打包
利用apktool的打包功能重新打包
.\apktool.bat b demo -o new.apk
# b表示打包 demo指的是用于打包的文件夹 -o xxx\xxx.apk 表示输出apk的路径以及文件名
4.重新签名
打包过后的apk无法安装,因为它还没有签名
如何签名apk
-
拷贝xxx.jks到要签名的apk目录下,没有的话可以用AS生成一个
-
用jarsigner签名apk
#可以先看看apk是否被签名 jarsigner -verify new.apk #签名 jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore fhh.jks -storepass xxxxxxxxx -signedjar signed.apk new.apk fenghaha #参数含义 #jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore [签名证书文件名] -storepass [签名证书密码] -signedjar [签名后生成apk的文件] [被签名的apk文件] [签名证书的别名]
-
签名之后就会在当前目录下生成signed.apk文件,就算签名成功了
本人水平有限,如果有什么错误,欢迎评论指正。
参考: