返回

让重签名使你的应用脱颖而出

IOS

前言

本篇文章继续逆向准备的另一个基础知识点 👉 应用重签名。首先介绍相关的概念,然后利用工具和脚本自动化2种方式,结合示例执行一次重签名的过程。

一、重签名

上篇文章09-应用签名详细介绍了签名的整个过程和概念,签名后的应用程序才可以被安装到设备中。签名主要用于2个方面:校验应用程序的完整性,防止应用程序被篡改;管理应用程序的权限,规定应用程序可以访问哪些资源。

重签名(Resign)可以理解为:使用新的签名证书重新对应用程序进行签名。重签名有以下几个作用:

  • 可以修改应用程序的签名证书,从而绕过应用程序的签名校验,实现对应用程序的破解或修改。
  • 可以将应用程序重新签名到另一个证书上,从而改变应用程序的权限。
  • 可以将应用程序重新签名到一个新的证书上,从而使应用程序可以在另一个平台上运行。

二、重签名工具

有许多工具可以用于对应用程序进行重签名,常见的工具有:

  • apksigner:Android官方提供的签名工具,可以对应用程序进行签名、验签和重签名。
  • jarsigner:Java提供的签名工具,可以对Jar包进行签名、验签和重签名。
  • signapk:Android SDK提供的签名工具,可以对应用程序进行签名、验签和重签名。
  • ApkEasyTool:一款功能强大的APK签名工具,可以对应用程序进行签名、验签、重签名、提取签名证书等操作。

三、重签名脚本

除了使用工具进行重签名之外,还可以使用脚本来自动执行重签名的过程。脚本可以是shell脚本、Python脚本、Java脚本等。

以下是一个使用Python脚本进行重签名的示例:

import zipfile
import subprocess

def resign_apk(apk_file, keystore_file, keystore_password, alias_name, alias_password):
    # 将APK文件解压到临时目录
    with zipfile.ZipFile(apk_file, 'r') as zip_file:
        zip_file.extractall('temp')

    # 使用apksigner工具对APK文件进行重签名
    subprocess.call(['apksigner', 'sign', '--ks', keystore_file, '--ks-pass', keystore_password, '--key', alias_name, '--key-pass', alias_password, 'temp/AndroidManifest.xml'])

    # 将临时目录中的APK文件重新打包
    with zipfile.ZipFile(apk_file, 'w') as zip_file:
        for root, dirs, files in os.walk('temp'):
            for file in files:
                zip_file.write(os.path.join(root, file), os.path.join(root, file))

    # 删除临时目录
    shutil.rmtree('temp')

if __name__ == '__main__':
    # 指定APK文件、密钥库文件、密钥库密码、别名和别名密码
    apk_file = 'app.apk'
    keystore_file = 'my.keystore'
    keystore_password = 'password'
    alias_name = 'myalias'
    alias_password = 'password'

    # 执行重签名操作
    resign_apk(apk_file, keystore_file, keystore_password, alias_name, alias_password)

四、重签名过程

以下是一个使用工具进行重签名的示例:

  1. 使用apksigner工具对APK文件进行重签名:
apksigner sign --ks my.keystore --ks-pass pass:password --key myalias --key-pass pass:password app.apk
  1. 使用jarsigner工具对Jar包进行重签名:
jarsigner -verbose -keystore my.keystore -storepass password -keypass password -digestalg SHA1 -sigalg MD5withRSA myapp.jar myalias
  1. 使用signapk工具对APK文件进行重签名:
signapk -v -key my.keystore -keypass password -cert my.certapp.apk newapp.apk

五、总结

重签名是一种常用的应用程序破解技术,可以绕过应用程序的签名校验,实现对应用程序的破解或修改。重签名也可以用于将应用程序重新签名到另一个证书上,从而改变应用程序的权限。或者将应用程序重新签名到一个新的证书上,从而使应用程序可以在另一个平台上运行。