运行 crc32_patcher.py 脚本,并传入两个参数:
第一个参数:您已打补丁并构建的 APK 文件
第二个参数:原始 APK 文件
crc32_patcher.py
python
import zipfile
import binascii
import sys
def crc_patch(crc: int):
def inner_crc(*args):
return crc
return inner_crc
orig_crc_binascii = binascii.crc32
if __name__ == "__main__":
if len(sys.argv) != 3:
print(f"Usage {sys.argv[0]} patched.apk original.apk")
patched_file = ".".join(sys.argv[1].split("/")[-1].split(".")[:-1]) + "_Patched.apk"
with zipfile.ZipFile(sys.argv[2]) as orig:
with zipfile.ZipFile(sys.argv[1]) as patched:
with zipfile.ZipFile(
patched_file, "w"
) as patched_patched:
for i, file in enumerate(patched.filelist):
a = patched.read(file.filename)
try:
crc = list(filter(lambda x: x.filename == file.filename, orig.filelist))[0].CRC
setattr(zipfile, "crc32", crc_patch(crc))
except:
pass
patched_patched.writestr(file, a)
setattr(zipfile, "crc32", orig_crc_binascii)
print(f"Successfully generated crc32 patched file in {patched_file}")