Android反编译
2016-01-12 23:36
453 查看
在工作中需要用到将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下面一定要以管理员身份运行)
然后进行添加签名:
再使用Zipalign进行对齐:
注意: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
$ keytool -list -v -keystore debug.keystore
2、查看apk中的keystore文件的md5值:
4、给一个空白包签名:
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]
说明:
jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件
keystorePath参数代表keyStore的绝对路径,如D:\keystore
apkOut参数代表签名后的apk路径,如D:\signed.apk
apkin参数代表在腾讯应用中心下载的未签名apk,默认名称为tap_unsign.apk
alias参数代表签名用的alias名称(创建keyStore时所填写),如timdong
示例:
$ jarsigner -verbose -keystore debug.keystore -signedjar test2.apk tap_unsign1.apk timdong
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下面一定要以管理员身份运行)
keytool -genkey -v -keystore demo.keystore -alias androiddebugkey -keyalg RSA -validity 10000 -keystore demo.keystore 证书库名称(可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个) -alias androiddebugkey 证书的名称
然后进行添加签名:
jarsigner -verbose -keystore debug.keystore -storepass 123456 -keypass 123456 -signedjar new_2_signed.apk new_2.apk androiddebugkey
再使用Zipalign进行对齐:
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
$ keytool -list -v -keystore debug.keystore
2、查看apk中的keystore文件的md5值:
4、给一个空白包签名:
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkIn] [alias]
说明:
jarsigner命令格式:-verbose输出详细信息 -keystore密钥库位置 -signedjar要生成的文件 要签名的文件 密钥库文件
keystorePath参数代表keyStore的绝对路径,如D:\keystore
apkOut参数代表签名后的apk路径,如D:\signed.apk
apkin参数代表在腾讯应用中心下载的未签名apk,默认名称为tap_unsign.apk
alias参数代表签名用的alias名称(创建keyStore时所填写),如timdong
示例:
$ jarsigner -verbose -keystore debug.keystore -signedjar test2.apk tap_unsign1.apk timdong
相关文章推荐
- Android之编译系统初始化过程
- Android快捷开关实现
- Android之Service Manager的Binder守护进程
- Android之Binder通信原理
- Android 一些小技巧
- android随笔23——框架浅见
- 【Android】Fresco图片加载框架(二)————Producer
- 【Android】Framework概述
- Android studio: 自 maven 增加一個函式庫
- ListView优化之道
- Android中书名号的显示,以及在String中改变部分字符的颜色
- 史上最详细的Android Studio系列教程四--Gradle基础
- Android环形颜色渐变进度条
- Android中书名号的显示以及在String中改变部分字符的颜色
- 如何在android studio中更新maven依赖
- android开发中出现的错误集(不断更新)
- 如果你现在学Android---学习使用Kotlin进行Android开发
- Android API 中文 (4) —— 布局
- Android 系统属性的点滴
- Android DialogFragment底部弹出菜单