安卓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}")
相关推荐
weixin_459753945 小时前
golang如何实现Trace上下文传播_golang Trace上下文传播实现思路
jvm·数据库·python
weixin_444012936 小时前
PHP 中逻辑或(--)运算符的正确使用与条件逻辑重构指南
jvm·数据库·python
counterxing6 小时前
我整理了一个免费开发资源目录,还做成了 CLI 和 MCP
前端·agent·ai编程
iAm_Ike12 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt12 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
Javatutouhouduan12 小时前
2026Java面试的正确打开方式!
java·高并发·java面试·java面试题·后端开发·java编程·java八股文
JAVA面经实录91712 小时前
Java初级最终完整版学习路线图
java·spring·eclipse·maven
旦莫12 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
子兮曰13 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
Cat_Rocky13 小时前
k8s-持久化存储,粗浅学习
java·学习·kubernetes