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界面

android获取其他签名 安卓手机apk签名提取工具_android获取其他签名


将apk文件拉入左侧边框即可;

android获取其他签名 安卓手机apk签名提取工具_jar_02


便可获取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。

一直回车。。。。就可以生成签名证书,建议回车使用同一个密码


android获取其他签名 安卓手机apk签名提取工具_反编译_03

现在进入到目录bin就可以找到debug.keystore这个文件了。

好了,这个文件就是用来对Android的APP进行签名的签名证书。

个人觉得应该把这个文件上传到你自己的网盘中保存好,因为后面对APP进行签名时要用到同一个签名证书,签名证书不同会导致签名后的APP无法再手机上运行。


android获取其他签名 安卓手机apk签名提取工具_jar_04

签名文件生成后,便需要对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文件的版本更新,避免改到不该改的东西,不然会很难受,一起跟狗哥前进吧!