安卓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}")
相关推荐
xywww1682 小时前
大模型 API 选型实战:GPT、Gemini、Claude 接入时该看哪些指标?
运维·服务器·人工智能·python·gpt·langchain
折哥的程序人生 · 物流技术专研6 小时前
第4篇:Lambda 简化策略模式(Java 8+)
java·设计模式·策略模式·函数式编程·lambda·代码简化·扩充系列
researcher-Jiang7 小时前
高性能计算之OpenMP——超算习堂学习1
android·java·学习
夜雪一千7 小时前
Python enumerate() 函数完整详解:遍历同时获取索引,告别手动计数
服务器·windows·python
能有时光7 小时前
PyTorch KernelAgent 源码解读 ---(4)--- ExtractorAgent
人工智能·pytorch·python
随风一样自由7 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
_Jimmy_7 小时前
Python 协程库如何使用以及有哪些使用场景
python
IMPYLH8 小时前
HTML 的 <data> 元素
前端·html
aqi008 小时前
15天学会AI应用开发(十七)使用LangGraph实现会话记忆功能
人工智能·python·大模型·ai编程·ai应用
西门吹-禅8 小时前
java springboot N+1问题
java·开发语言·spring boot