Android反编译 打包 签名
Android反编译 打包 签名
1、反编译
工具:apktool、jadx、java环境
apktool:主要用来反编译和打包
链接: https://pan.baidu.com/s/1Alk6C1PEG2hJyfrtXeXzbA
提取码: kai2
jadx:主要用来获取apk文件的java源代码
链接: https://pan.baidu.com/s/12UKaE9B0jkpOc5JOWgstbA
提取码: xryc
java环境可以自己百度,狗哥再次不再累述。
反编译apk文件
获取apk的资源文件,如果要修改apk文件,在这里面修改相关文件即可
以下是python语言编写,其他语言也类似。
def parser_apktool(apk_dir):
'''
对于apk包进行解析
apk_dir: apk文件的地址
root_apktool:apktool的绝对路径,eg:'D:\apktool\apktool-2.4'
:return:
'''
dirname, filename = os.path.split(apk_dir)
apk_file_dir = dirname + '/' + filename.replace('.apk', '') #反编译的文件地址
ResultFile = os.system(
'java -jar ' + root_apktool + "/apktool_bsf.jar" + ' d -f ' + apk_dir + " -o " + apk_file_dir)
if ResultFile == 0:
print('成功')
也可以直接在命令行执行:
java -jar root_apktool/apktool_bsf.jar<apktool_bsf.jar的路径> d -f apk_dir<apk文件路径> -o apk_file_dir<文件输出路径>
2、获取apk的java源代码
可以利用java文件查看apk文件的代码逻辑
下载上文中jadx的压缩包,解压,双击…jadx-1.1.0/bin/jadx-gui.bat即可调出ui界面
将apk文件拉入左侧边框即可;
便可获取apk文件的java源代码;
3、打包
apk修改好后,对文件进行修改编译也完成了,就需要进行对apk的文件夹数据进行打包回apk文件了;
获取apk的资源文件,如果要修改apk文件,在这里面修改相关文件即可
以下是python语言编写,其他语言也类似。
def form_pack(apk_file_dir):
'''
对于apk文件夹数据进行打包,重新打包为apk文件
apk_file_dir: apk数据文件夹的地址
root_apktool:apktool的绝对路径,eg:'D:\apktool\apktool-2.4'
target_file_dir:apk文件的输出地址
:return:
'''
target_file_dir = apk_file_dir + '.apk'
ResultFile = os.system(
'java -jar ' + root_apktool + "/apktool_bsf.jar" + ' b ' + apk_file_dir + " -o " + target_file_dir)
if ResultFile == 0:
print('成功')
也可以直接在命令行执行:
java -jar root_apktool/apktool_bsf.jar<apktool_bsf.jar的路径> b apk_file_dir<文件输出路径> -o target_file_dir<apk文件路径>
4、签名
apk文件打包好后必须得有签名的,不然无法正常安装使用
在cmd中执行命令keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000 并回车
输入密匙库口令【密匙口令 (自己设置) 即为密码,最好设成数字,记住就行】+回车建
后面都是自己输入后以回车键结束,最后 是否输入正确输入 y。
一直回车。。。。就可以生成签名证书,建议回车使用同一个密码
现在进入到目录bin就可以找到debug.keystore这个文件了。
好了,这个文件就是用来对Android的APP进行签名的签名证书。
个人觉得应该把这个文件上传到你自己的网盘中保存好,因为后面对APP进行签名时要用到同一个签名证书,签名证书不同会导致签名后的APP无法再手机上运行。
签名文件生成后,便需要对apk文件进行签名了。
def qianming_pack(password, keystore_path, apk_dir, apk_qianming_dir):
'''
:param password: 获取签名文件时的密码
:param keystore_path: 签名文件的绝对路径
:param apk_dir: 未签名的apk文件路径
:param apk_qianming_dir: 签名后的apk文件路径
keystore_alise: 别名 《直接写签名文件的名称就可以了,不要带后缀》
:return:
'''
dirname, keystore_alise = os.path.split(keystore_path)
ResultFile = os.system(
'jarsigner -verbose -storepass ' + password + " -keypass " + password + ' -keystore ' + keystore_path + " -signedjar "
+ apk_dir + ' ' + apk_qianming_dir + ' ' + keystore_alise)
if ResultFile == 0:
print('成功')
也可以直接在命令行执行:
'jarsigner -verbose -storepass password<签名的密码> -keypass password<签名的密码> -keystore keystore_path<签名文件路径> -signedjar apk_dir<未签名apk文件路径> apk_qianming_dir<签名后的apk文件输出路径> keystore_alise<别名,直接写签名文件名称就可,记得去掉后缀>
就此,我的android反编译流程的整个流程已经结束,提示下,最好使用git保持apk文件的版本更新,避免改到不该改的东西,不然会很难受,一起跟狗哥前进吧!
上一篇: IOS之KVC和KVO(未完待续)
下一篇: 阿里巴巴Java开发手册一周年最终版