安卓apk逆向之crc32检测打补丁包crc32_patcher.py

运行 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}")
相关推荐
小句3 小时前
Java Web 技术演进:Servlet → Spring → Spring Boot
java·前端·spring
ljt27249606613 小时前
Flutter笔记--popUntilWithResult
前端·笔记·flutter
kyle~3 小时前
JNI与JNA ---打通Java服务端与C++机器人系统的通信链路
java·c++·机器人
极光代码工作室3 小时前
基于深度学习的中文文本情感分析系统
人工智能·python·深度学习·神经网络·nlp
XiYang-DING3 小时前
【Java SE】缓存池和常量池的区别
java·spring·缓存
龙侠九重天3 小时前
使用 OpenClaw 进行数据分析和可视化
大数据·人工智能·python·ai·信息可视化·数据分析·openclaw
Code blocks3 小时前
Firms-Java:NASA火灾卫星数据Java客户端开源
java·spring boot·后端·开源软件
敏编程3 小时前
一天一个Python库:soupsieve - CSS 选择器在 Beautiful Soup 中的力量
开发语言·css·python
树獭非懒3 小时前
Google A2UI:让 AI 智能体「开口说界面」
前端·人工智能·后端