我和一群试图逆向工程并修改蓝光播放器的模组.我们陷入困境,因为固件代码似乎被压缩了,解压缩代码无处可寻.据推测,解压缩由硬件处理.
我的问题是,只有压缩输出,我们如何确定使用什么类型的压缩算法?我们设法找到一个重复的字符串,可能编码重复数据.
压缩的0x00字节以0x00 0x15开头,然后是重复序列(F8 06 FC 03 7E 01 BF 00 DF 80 6F C0 37 E0 1B F0 0D)并在结束时变化.
http://hej456.com/forum/viewtopic.php?t=832
我们的文档和工作都在上面的主题中.固件二进制文件位于上面的线程中.
如在Flash Player 11的发行说明中所述,开发人员添加了LZMA压缩支持.
问题是如何才能实现这种支持?也许有一个mxmlc选项?还是更多步骤?
简单地-swf-version=13在sdk中设置和切换playerglobal.swc并不适合我.
有google搜索,wikied和阅读ZIP的RFC,但找不到有关ZIP中使用的确切算法的任何信息.
我找到了有关ZIP == TAR + GZIP的信息
但是,我对此信息感到困惑.
因为我记得GZIP使用LZW算法,而TAR使用LZMA,我无法想象ZIP == TAR + GZIP(LZMA + LZW - ???)
那么你可以帮助找到ZIP的算法,我想实现它.
我正在使用Python 2.7.6中的lzma模块进行实验,以查看是否可以为将来的项目使用XZ格式创建压缩文件。我在实验期间使用的代码是:
import lzma as xz
in_file = open('/home/ki2ne/Desktop/song.wav', 'rb')
input_data = in_file.read()
compressed_data = xz.compress(input_data)
out_file = open('/home/ki2ne/Desktop/song.wav.xz', 'wb')
in_file.close()
out_file.close()
Run Code Online (Sandbox Code Playgroud)
与使用普通xz时相比,我注意到生成的文件中有两个不同的校验和(MD5和SHA256)(尽管我可以用两种方法解压缩-两个文件的解压缩版本的校验和都相同)。这会是个问题吗?
更新:我找到了一个修复程序,方法是通过peterjc的Git存储库(从此处链接)安装backport(来自Python 3.3 ),现在它显示的校验和相同。不确定是否有帮助,但是我确保未安装存储库中的LZMA Python模块,以避免可能的名称冲突。
这是我的测试代码以确认这一点:
# I have created two identical text files with some random phrases
from subprocess import call
from hashlib import sha256
from backports import lzma as xz
f2 = open("test2.txt" , 'rb')
f2_buf = buffer(f2.read())
call(["xz", "test1.txt"])
f2_xzbuf = buffer(xz.compress(f2_buf))
f1 = open("test1.txt.xz", 'rb')
f1_xzbuf = buffer(f1.read())
f1.close(); f2.close()
f1sum …Run Code Online (Sandbox Code Playgroud) 所以我正在构建一个网络应用程序来解压缩 LZMA 压缩的 CSV 文件,然后让用户编辑它,保存时它将被重新压缩。
我有使用 7-Zip LZMA SDK 在 C# 中压缩/解压缩的代码,但根据我的托管计划,我无法使用 exec() 来调用 exe。
有没有我可以使用的 LZMA 纯 php 实现?或者如果没有,有什么办法可以将 C# 代码转换为 php 代码吗?
我正在使用内置的 lzma python 来解码压缩的数据块。根据数据块,我得到以下异常:
Compressed data ended before the end-of-stream marker was reached
Run Code Online (Sandbox Code Playgroud)
数据未损坏。用其他工具可以正确解压,所以肯定是库的bug。还有其他人遇到同样的问题:
不幸的是,似乎还没有人找到解决方案。至少,它可以在 Python 3.5 上运行。
我怎么解决这个问题?有什么解决办法吗?
我需要打开一个.bi5文件并阅读内容以简短地讲述一个长篇故事.问题:我有成千上万的.bi5文件包含我需要解压缩和处理的时间序列数据(读取,转储到pandas中).
我最终专门为lzma库安装了Python 3(我通常使用2.7),因为我使用lzmaPython 2.7 的后端程序来编译恶梦,所以我承认并使用Python 3运行,但没有成功.问题太多,无法透露,没有人读长问题!
我已经包含了其中一个.bi5文件,如果有人能够将它变成Pandas Dataframe并告诉我他们是如何做到的,那将是理想的.
ps fie只有几kb,它会在一秒内下载.首先十分感谢.
我有一个很大的 .xz 文件(几 GB)。它充满了纯文本。我想处理文本以创建自定义数据集。我想一行一行地阅读它,因为它太大了。有人知道怎么做吗?
我已经尝试过 如何在内存中打开和读取 LZMA 文件,但它不起作用。
编辑:我收到此错误“ascii”编解码器无法解码位置 0 中的字节 0xfd:序号不在范围内(128)
for line in uncompressed:从链接就行
EDIT2:我的代码(使用 python 3.5)
with open(filename) as compressed:
with lzma.LZMAFile(compressed) as uncompressed:
for line in uncompressed:
print(line)
Run Code Online (Sandbox Code Playgroud) 我正在尝试基于 .yml 文件创建一个环境,文件名是env.yml. 我在终端上运行以下代码片段:
conda env create -f env.ymlRun Code Online (Sandbox Code Playgroud)
然后 anaconda 开始安装 .yml 文件中列出的所有包,直到它安装到使用 pip 安装的包。它引发以下错误:
Ran pip subprocess with arguments:
['/Users/danielribeiro/opt/anaconda3/envs/lz_env/bin/python', '-m', 'pip', 'install', '-U', '-r', '/Users/danielribeiro/opt/Python/condaenv.80zhk806.requirements.txt']
Pip subprocess output:
Collecting backports-lzma==0.0.13 (from -r /Users/danielribeiro/opt/Python/condaenv.80zhk806.requirements.txt (line 1))
Pip subprocess error:
Could not find a version that satisfies the requirement backports-lzma==0.0.13 (from -r /Users/danielribeiro/opt/Python/condaenv.80zhk806.requirements.txt (line 1)) (from versions: )
No matching distribution found for backports-lzma==0.0.13 (from -r /Users/danielribeiro/opt/Python/condaenv.80zhk806.requirements.txt (line 1))
CondaEnvException: Pip failedRun Code Online (Sandbox Code Playgroud)
我不确定为什么没有安装包 backport-lzma==0.0.13。我也尝试手动安装它
conda activate lz_env …Run Code Online (Sandbox Code Playgroud)我正在尝试使用解压缩 .7z(或 .xz 或 .lzma)文件
使用以下代码:
vector<T> readFromCompressedFile(string input_file_path, string output_file_path)
{
namespace io = boost::iostreams;
stringstream strstream;
ifstream file(input_file_path.c_str(), ios_base::in | ios_base::binary);
ofstream out(output_file_path, ios_base::out | ios_base::binary);
boost::iostreams::filtering_istream in;
in.push(io::lzma_decompressor());
in.push(file);
io::copy(in, out);
cout<<strstream.str()<<endl;
Run Code Online (Sandbox Code Playgroud)
代码可以编译,但我收到复制方法引发的运行时异常(lzma_error)
warning: GDB: Failed to set controlling terminal: Operation not permitted
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::iostreams::lzma_error> >'
what(): lzma error: iostream error
Run Code Online (Sandbox Code Playgroud)
我尝试使用filtering_streambuf过滤器,但没有成功,该过滤器的代码块与gzip示例的代码非常相似
https://www.boost.org/doc/libs/1_67_0/libs/iostreams/doc/classes/gzip.html#examples
不过,我可以使用 gzip 和上述代码来解压缩使用 gzip 压缩的文件。看来这个问题仅限于LZMA算法。
有人有同样的问题吗?有任何想法吗?
谢谢