能够对jar包或者apk进行反编译,查看到代码。
工具:jd-jui.exe;dex2jar。
拖动jar包到jd-jui.exe就能看到这个页面
修改apk的后缀为.zip。解压。
其中res和manifest.xml都是乱码。
拖动classes.dex到dex2jar的d2j-dex2jar.bat进行反编译,获得jar包。
得到jar包后,使用jd-jui.exe查看源码。
可以对apk进行解包,替换资源后重新打包。
解包/打包工具:apktool.jar
apk辅助工具:aapt.exe
cmd运行apktool.jar dmyapp.apk会解包出一个myapp的文件夹
java–jar apktool.jar d myapp.apk 如果存在myapp文件夹 失败
java –jarapktool.jar d myapp.apk –f 存在myapp文件夹会覆盖
解包出来后能看到这样的目录结构:
资源文件和manifest.xml都被完整的解析出来了。如果想替换图片、xml、manifest等可以用这种方式去解包-替换-打包。
除了代码被解压成了.smali文件。可以去替换相同类名、方法名的代码
apktool.yml则是apk的一些信息
当然,如果只是为了查看apk信息,解包查看比较麻烦。
可以使用aapt.exe直接查看更为方便全面。后文会介绍aapt
替换资源后进行打包,比如替换掉图标
Cmd运行打包java -jarapktool.jar b myapp
会在myapp文件夹中生成dist文件夹,放置着生成的apk文件
当然这个包还未进行签名。
签名后就可以安装了。
jarsigner -verbose –keystore xxx.keystore -storepass 签名密码-signedjar 签名后.apk -digestalg SHA1 -sigalg MD5withRSA 签名前.apk 签名别名
cmd执行aapt.exe d badgingmyapp.apk
获取:包名,versionCode,versionName,最小版本,targetSdkVersion,权限等。
R文件存在解包后包名下。主要是资源和属性的索引值。
当解包后,改变了资源文件名称或新加了资源文件。需要添加新的索引值。否则无法打包。
我们可以重新生成资源文件索引。使用命令:
cmd.exe e: && cd E:\test aapt p -f-m -J 生成R文件位置
-S res位置 -ID:\developtools\Android_SDK\sdk\platforms\android-19\android.jar -M AndroidManifest.xml位置
----------------------------------------------------------------------------------------------------------------------
cmd.exe e: && cd E:\test aapt p -f-m -J TestCaceFeiZhu\smali -S TestCaceFeiZhu\res -ID:\developtools\Android_SDK\sdk\platforms\android-19\android.jar -MTestCaceFeiZhu\AndroidManifest.xml
会在指定位置下生成R.java文件。
根据R.java内部类的类名新建smali文件,替换原有的smali文件。
smali内部除了包名是活的,内容是类似的。
如R$dimen.smali
Drawable的smali文件
手动生成完成后,就可以重新打包。签名后就可以使用了。
工具下载(apktool、aapt、jd-jui、dex2jar)