python反编译apk签名出包脚本

转载请标明原文地址:https://blog.csdn.net/zmjwf521/article/details/114885390
demo实现脚本下载

安装工具

需要python3,apktool.jar,apktool
说明需要把apktool.jar,apktool放到对应的路径下
windows:Move both files (apktool.jar & apktool.bat) to your Windows directory (Usually C://Windows)
macOS:Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)

1.用apktool进行反编译

cmd = 'apktool d -f '+apkPath+' -o '+outPath

2.修改需要配置的参数值

说明:如果是AndroidManifest.xml,注意在 parse 前 一定要设置namespace, 不然就会出现 ns0:name错误, 而不是预期的 android:name,设置namespace的方法 ET.register_namespace('android', "http://schemas.android.com/apk/res/android")
curPath = (apktoolPath+'/ihdrm202103161405apk/')
    tree = ET.parse(curPath + 'AndroidManifest.xml')      #打开xml
    root = tree.getroot()    #找到manifest的根文件
    print(root.tag)             #我们输出一下就知道root目录就是manifest目录
    print(root.attrib)         #输出一下root目录的成员
    #获取package
    versionName = root.get('package')
    #修改
    root.set('package', 'com.youxi.jiayou')
    #获取application目录
    application = root.find('application')
    #遍历所有meta-data
    for item in application.iter('meta-data'):
        name = item.attrib.get(SPACE +'name')
        value = item.attrib.get(SPACE +'value')

3.修改应用名字

def appnamechang():
    print('--------修改应用名字完成--------')
    tree = read_xml(in_path)
    text_nodes = get_node_by_keyvalue(find_nodes(tree, "string"), {"name": "app_name"})
    change_node_text(text_nodes, "霸道传奇")
#    write_xml(tree, "./strings的绝对路径.xml")
    write_xml(tree,apktoolPath+"/ihdrm202103161405apk/res/values/strings.xml")

4.修改icon图标

source_path = (apktoolPath+'/icon')
target_path = (apktoolPath+'/ihdrm202103161405apk/res')
def copy_search_file():
    print('--------修改icon成功--------')
    '''将一个目录下的全部文件和目录,完整地<拷贝并覆盖>到另一个目录'''
    # source_path 源目录
    # target_path 目标目录
    if not (os.path.isdir(source_path) and os.path.isdir(target_path)):
        return
    for a in os.walk(source_path):
#        #创建目录
        for d in a[1]:
            dir_path = os.path.join(a[0].replace(source_path,target_path),d)
            if not os.path.isdir(dir_path):
                os.makedirs(dir_path)
        #拷贝文件
        for p in a[2]:
            dep_path = os.path.join(a[0],p)
            arr_path = os.path.join(a[0].replace(source_path,target_path),p)
            shutil.copy(dep_path,arr_path)

5.删除签名回编译

cmd = 'apktool b -f '+outPath

6.创建证书

def createzu():
    cmd = 'keytool -genkey -alias jayoux.keystore -keyalg RSA -validity 20000 -keystore jayoux.keystore'
    print('-------- 创建证书--------')
    os.system(cmd)
1) APKtool软件包 及签名tool APKtool软件包有2个程序组成:apktool.jar 和 aapt.exe 另外提供一个批处理文件:apktool.bat,其内容为: java -jar "%~dp0\apktool.jar" %1 %2 %3 %4 %5 %6 %7 %8 %9 运行apktools.jar需要java环境(1.6.0版本以上)。 apktool.jar用于解包,apktool.jar和aapt.exe联合用于打包。 signapk.jar 用于签名。 2) APK文件的解包 下面以解开Contacts.apk为例。首先把Contacts.apk Copy到当前工作目录下(例:Test)。在DOS下打入命令 apktool d Contacts.apk ABC 这里“d”表示要解码。Contacts.apk是要解包的APK文件。ABC是子目录。所有解包的文件都会放在这个子目录内。 3) APK文件的打包 在DOS下打入命令 apktool b ABC New-Contacts.apk 这里“b”表示要打包 ABC是子目录,是解包时产生的子目录,用来存放所有解包后的和修改后的文件。 New-Contacts.apk是打包后产生的新的APK文件。 4) 签名,不签名安装时可能提示如下错误: Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] --- 没有签名,可以尝试test证书;签名方法见下面。 Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES] ---- 已存在签名,但使用证书不对,可以尝试使用其他证书签名签名方法:到目录android\build\target\product\security找到证书文件,这里可能会有几种证书,test/shared/platform/media,各种证书使用场景不同,可以自己google一下,因为签名很快而且可任意后续更改签名,可以自己尝试各种不同签名; 这个命令行是使用test证书的例子:java -jar signapk.jar testkey.x509.pem testkey.pk8 YOURAPK.apk YOURAPK_signed.apk YOURAPK_signed.apk就是签完apk,去测试一下您重新打包的apk吧。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值