深夜求助

求大佬帮忙,游戏是亮剑
【超级会员V3】通过百度网盘分享的文件:亮剑.zip
链接:百度网盘 请输入提取码
复制这段内容打开「百度网盘APP 即可获取」
里面文件开头如图



请大佬帮忙看下文件格式内容,帮忙处理解决一下。谢谢

帖子莫沉

感觉加密相同。。。。。

另外,不是很懂你们乱顶做什么,如果有人看到了或者感兴趣了会来回复

嗯嗯,好的,后面我会注意。谢谢大佬

失败了,文件删除文件头不行

看起来不同游戏之间还不一样,这个用了双缓冲区

import texture2ddecoder
import lz4.block
import struct
from PIL import Image


class LZ4StreamDecoder:
    def __init__(self):
        self.dictionary = b""
        self.buffer_size = 0x4000
        
    def decompress_continue(self, compressed_data, compressed_size):
        if compressed_size == 0:
            return b"", True
            
        decompressed = lz4.block.decompress(
            compressed_data,
            uncompressed_size=self.buffer_size,
            dict=self.dictionary
        )
        self.dictionary = decompressed
        return decompressed, True



def block_decompress(stream_decoder, data_ptr, compressed_size_ptr):

    if len(data_ptr) < 4:
        return b"", 4, False

    compressed_size = struct.unpack('<I', data_ptr[:4])[0]
    bytes_consumed = 4
    
    if compressed_size == 0:
        return b"", bytes_consumed, True
        
    if len(data_ptr) < 4 + compressed_size:
        return b"", bytes_consumed, False
        
    compressed_block = data_ptr[4:4 + compressed_size]
    bytes_consumed += compressed_size
    
    decompressed_data, success = stream_decoder.decompress_continue(
        compressed_block, compressed_size
    )
    
    return decompressed_data, bytes_consumed, success


def init_with_lz4_etc2_data(compressed_data):

    stream_decoder = LZ4StreamDecoder()
    
    total_uncompressed_size = struct.unpack('<I', compressed_data[4:8])[0]

    

    output_buffer = bytearray()
    
    current_pos = 8 
    buffer_index = 0 
    
    while current_pos < len(compressed_data):
        remaining_data = compressed_data[current_pos:]
        
        decompressed_chunk, bytes_consumed, success = block_decompress(
            stream_decoder, remaining_data, None
        )
        
        current_pos += bytes_consumed
        
        if len(decompressed_chunk) == 0:
            break
            
        output_buffer.extend(decompressed_chunk)

        buffer_index = (buffer_index + 1) % 2 

    if len(output_buffer) > total_uncompressed_size:
        output_buffer = output_buffer[:total_uncompressed_size]
    
    return bytes(output_buffer)


def get_pkm_width(pkm_data):
    if len(pkm_data) < 16:
        return 0
    return struct.unpack('>H', pkm_data[8:10])[0]


def get_pkm_height(pkm_data):
    if len(pkm_data) < 16:
        return 0
    return struct.unpack('>H', pkm_data[10:12])[0]


def get_pkm_format(pkm_data):
    if len(pkm_data) < 16:
        return 0
    return struct.unpack('>H', pkm_data[6:8])[0]


def init_with_etc2_data(pkm_data, data_size):

    width = get_pkm_width(pkm_data)
    height = get_pkm_height(pkm_data)
    etc_format = get_pkm_format(pkm_data)
    

    if etc_format in [2, 3, 4, 10, 11]:
        mode = "RGBA"
        decoder_func = texture2ddecoder.decode_etc2a8
    elif etc_format in [1, 9]:
        mode = "RGB" 
        decoder_func = texture2ddecoder.decode_etc2
    else:
        print(f"不支持的ETC格式: {etc_format}")
        return None
    

    decoded_pixels = decoder_func(pkm_data[16:], width, height)
    image = Image.frombytes(mode, (width, height), decoded_pixels)
    return image



def decrypt(input_file, output_file):

    with open(input_file, "rb") as f:
        compressed_data = f.read()
    
    pkm_data = init_with_lz4_etc2_data(compressed_data)

    image = init_with_etc2_data(pkm_data, len(pkm_data))

    image.save(output_file, 'PNG')

    return True


if __name__ == "__main__":
    decrypt("gn_tb_216.png", "dec.png")

Traceback (most recent call last):
File “F:\BaiduNetdiskDownload\亮剑\assets\res\1.py”, line 1, in
import texture2ddecoder
ModuleNotFoundError: No module named ‘texture2ddecoder’

佬,这是脚本反应的内容

非二次元的不是很感兴趣。

能跟我说说怎么成功的吗

ModuleNotFoundError: No module named ‘texture2ddecoder’
你但凡百度一下这个报错,或者:
https://www.deepseek.com/
都不会问出这样的问题

百度了,然后又用这个报错修复的脚本,还是不行

pip install texture2ddecoder
这不是脚本的错误啊,是你没有这个模块

嗯呐,安装了模块了,在想办法把脚本改成批量化的命名规律

通过网盘分享的文件:新建文件夹 (3).zip
链接: 百度网盘 请输入提取码 提取码: gzyn
–来自百度网盘超级会员v3的分享
成功了一部分 剩下的这些却怎么也不好弄了

属实不会了 请大佬们百忙之中帮忙看下

1.不需要这么多一块传上来,随便几个样本就行
2.在1的基础上不要用百度网盘,下到天荒地老吗?

试了下lz4那块可能还有点问题,能转换出来,但是不完全,so那些我已经删除了,解密转换逻辑在cocos2d::Image::initWithImageData里面的LZ4ETC2加载函数里面,自己修一修

好,下次我换个网盘吧,cocos2d::Image::initWithImageData里面的LZ4ETC2加载函数这个在哪里查看啊?用ida嘛?

我之前跟着论坛学过xxtea.那种,这种的真第一次遇见。知识盲区了属实







麻烦da大佬们百忙之中看看 LZ4ETC2的解密函数按照哪个打脚本啊,第一次学这类,太多了看不懂了…