欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android反编译 打包 签名

程序员文章站 2024-03-24 14:03:28
...

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文件的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反编译 打包 签名

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

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

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

Android反编译 打包 签名

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