android 反编译和打包签名
apktool
作用:主要查看res文件下xml文件、AndroidManifest.xml和图片。(注意:如果直接解压.apk文件,xml文件打开全部是乱码)
dex2jar
作用:将apk反编译成Java源码(classes.dex转化成jar文件)
jd-gui
作用:查看APK中classes.dex转化成出的jar文件,即源码文件
然后我们把下到的工具放到同一个目录:如我放在D:\APKTools目录,重命名apktool_2.1.1.jar为apktool.jar;解压其他两个文件压缩文件
把APKTools和dex2jar-2.0的路径配置到系统环境变量中
准备一个测试apk如Test_android.apk,放进新建的test文件夹中,复制一个副本重命名为Test_android.zip,然后解压,你就可以看到一些东西了,不过这种方式看到的大部分文件内容都是乱码,基本不可读。不过不用担心,通过apktool我们就可以得到除代码文件外的大部分刻可读文件了
之后就得到反编译的文件夹,里面的资源文件基本和原文件一样,还原率超高
不过对于java文件就看不了,因为这种方式得到的是.smali文件,必须通过另一种方式
经过这一步之后就生成了一个jar文件,在
之后用jd-gui.exe打开Test_android-dex2jar.jar,就得到了源代码,
Smali2JavaUI(不能用???)
对于博主说得,先dex2jar把classes.dex转为jar,再jd-gui把jar转为源码*.java文件。
现在可以用Smali2JavaUI这个软件,一部到位。可以把这两个步骤化为一个步骤。
所以,如果只想反编译看*.java文件的话,只用Smali2JavaUI软件就可以了。
这个软件可以直接打开***.apk文件,然后就直接看到*.java文件了。
Smali2JavaUI最新版本下载链接http://www.hensence.com/cn/smali2java/#Download
http://blog.****.net/ysc123shift/article/details/52985435
https://www.cnblogs.com/chen110xi/p/6612437.html
https://blog.****.net/wh_19910525/article/details/7915738/
1) 汉化apk应用程序,省略
2)修改图标标签
每一个apk文件都有一个“图标标签”。将apk程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。在\res\values下找到strings.xml,修改其中的一行:
<string name="app_name">图标标签</string>
例如:<string name="app_name">静音启动</string>
同理,如果是窗口小插件,要修改widget_name。
3) 去掉apk中的广告
有很多apk应用都带有广告。为了去掉程序中的广告,要修改main.xml文件与广告有关的内容。在/res目录下找到文件main.xml。通常在/layout目录下,有时也被放在其它目录下。甚至,有时不存在main.xml文件,广告行被放在其它xml文件内。只能细心逐个文件进行查找。无论哪一种情况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。
<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_parent” android:layout_height=”wrap_content” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
将其改为:
<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip” android:layout_height=”0.0dip” admobsdk:backgroundColor=”#ff000000″ admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它内容保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。
https://ibotpeaches.github.io/Apktool/documentation/
Decoding
The decode option on Apktool can be invoked either from d or decode like shown below.
$ apktool d foo.jar// decodes foo.jar to foo.jar.out folder
$ apktool decode foo.jar// decodes foo.jar to foo.jar.out folder
$ apktool d bar.apk// decodes bar.apk to bar folder
$ apktool decode bar.apk// decodes bar.apk to bar folder
$ apktool d bar.apk -o baz// decodes bar.apk to baz folder
Building
The build option can be invoked either from b or build like shown below
$ apktool b foo.jar.out// builds foo.jar.out folder into foo.jar.out/dist/foo.jar file
$ apktool build foo.jar.out// builds foo.jar.out folder into foo.jar.out/dist/foo.jar file
$ apktool b bar// builds bar folder into bar/dist/bar.apk file
$ apktool b .// builds current directory into ./dist
$ apktool b bar -o new_bar.apk// builds bar folder into new_bar.apk
$ apktool b bar.apk// WRONG: brut.androlib.AndrolibException: brut.directory.PathNotExist: apktool.yml
// Must use folder, not apk/jar file
Info
In order to run a rebuilt application. You must resign the application. Android documentation can help with this.
修改完xml后,编译apktool b bar
选择 bar/dist/bar.apk file 去签名
cd到dist目录中
jarsigner [ options ] jar-file alias
jarsigner -verify [ options ] jar-file
-verify
如果它出现在命令行中,则指定的 JAR 文件将被校验,而不是签名。如果校验成功,将显示“jar verified”。如果试图校验未签名的 JAR 文件,或校验被不支持的算法(例如未安装 RSA 提供者时使用的 RSA)签名的 JAR 文件,则将有如下显示: "jar is unsigned. (signatures missing or not parsable)"
可以校验使用 jarsigner 或 JDK 1.1 javakey 工具或共用二者签名的 JAR 文件。
有关校验的详细信息,参见 JAR 文件校验。
-verbose
如果它出现在命令行中,则代表“verbose”模式,它使 jarsigner 在 JAR 签名或校验过程中输出额外信息。
-keystore url
指定**仓库的 URL。缺省值是用户的宿主目录中的 .keystore 文件,它由系统属性“user.home”决定。
签名时需要**仓库,因此如果没有缺省的(或要使用非缺省的)**仓库,就必须明确指定一个。
校验时不需要**仓库,但如果指定了一个,或存在缺省的,且 -verbose 选项也被指定了,则将输出该**仓库中是否包含了用于校验 JAR 文件的证书的附加信息。
注意: -keystore 参数实际上可以是指定的文件名(及路径)而不是 URL,这种情况下它将当作“file:” URL. 也就是说,
-keystore filePathAndName
被当作等价于
-keystore file:filePathAndName
jarsigner -verbose -keystore F:\code_android\generatesignedapk.jks app-debug.apk williamshen
jarsigner -verify app-debug.apk,忽略警告