Android反编译
在工作中需要用到将apk反编译替换smail文件重新打包apk,所以整理一下自己通常的两种反编译方式:
1.使用ApkTool工具直接解包:
地址:http://ibotpeaches.github.io/Apktool/
一般解包时候需要的文件有以下几个:
然后在cmd下进入对应的路径,进行解包:
此时成功之后,就可以去对应的文件夹下面查看资源以及smail文件了:
(补充:
但是有时候可能有时候会解包失败,之前一直以为是ApkTool版本问题,因为确实比如用2.0.0版本解包失败,但是换成2.0.1版本就可以了,一直不知道是什么原因,后来为了方便,下载了不同版本的ApkTool,然后在解包的时候,python脚本遍历使用不同版本的ApkTool工具,后来看了一下郭霖的博客,是因为之前使用过ApkTool的老版本进行了解包,然后ApkTool会在C:\Users\Administrator\apktool\framework下面生成一个1.apk缓存文件,将这个缓存文件删除,就可以了!)
如果要替换资源的话,可以直接替换,比如换icon或者某一个资源图都可以,如果是换smail文件比较困难,但是由于之前是提供三方jar包给别人用,所以别人如果调用都比较清楚,自己将要替换的smail路径也知道在哪里,所以很方便,比如要替换smail文件,将新的Library的src路径改成跟被解压包的smail路径一致,然后使用工具将java文件编译为smail文件,直接替换,再用ApkTool压缩包就可以了,当然,扯远了。
使用ApkTool压缩包也很简单:
但是这个apk不能安装,必须签名才行:
首先创建一个keystore文件:(注意在cmd下面一定要以管理员身份运行)
1 keytool -genkey -v -keystore demo.keystore -alias androiddebugkey -keyalg RSA -validity 100002 3 -keystore demo.keystore 证书库名称(可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个) 6 -alias androiddebugkey 证书的名称
然后进行添加签名:
1 jarsigner -verbose -keystore debug.keystore -storepass 123456 -keypass 123456 -signedjar new_2_signed.apk new_2.apk androiddebugkey -sigalg SHA1withRSA
-digestalg SHA1
再使用Zipalign进行对齐:
1 zipalign 4 New_Demo.apk New_Demo_aligned.apk
注意:4是固定值,zipalign位于SDK/build-tools/version下面
(2).使用dex2jar,将apk文件解压,拿到classes.dex文件
dex2jar地址:https://sourceforge.net/projects/dex2jar/files/
关于如何使用ApkTool查看更新有关apk包的信息:
http://blog.163.com/xiexueyong1987@126/blog/static/126267342201101123940388/
1、查看 keystore
![](https://images2015.cnblogs.com/blog/576966/201601/576966-20160112233046007-131473418.png)
![](https://images2015.cnblogs.com/blog/576966/201601/576966-20160112233143678-425415301.png)