一堆.ilg--页面上的媒体,这也是一个猜测
这些文件具有纯文本标题,剩下的是通过某种方式压缩或加密的数据:
upd:data_header实际上是数据的未压缩长度
我尝试运行binwalk和XorSearch,但没有成功。我想现在我必须调试它,但是我对此非常,非常不熟悉。我将x32dbg与xAnalyzer插件一起使用。我尝试在ReadFile上设置一个断点并从那里进行跟踪,但是它会产生非常大的日志。但是,我看到它使用了cruss32.dll-“旧的C / Win32压缩库”并运行了一些ors / xor和字节移位(shr),这在一定程度上加强了我对压缩/加密使用的看法。
所以我的问题是如何从这里开始?我至少如何使用相应的指令转储所有字符串,即达到该字节混乱成为可读字符串的地步?我绝对被困住了。提前谢谢!
#1 楼
我从互联网上抢了一些crush32.dll
,它有一些非常有趣的出口: /> 我将在所有它们上设置一个断点,让您的程序运行,等待bp命中,检查堆栈参数以查找输入/输出缓冲区,让函数运行,然后查找可读数据。
评论
谢谢!我在crunch32函数上放置了断点,发现它在程序启动时运行cxInit,然后在读取文件的数据块后运行cxBuf2BufInit和cxBuf2BufExpand。跟踪cxBuf2BufExpand的执行将导致记录324000条指令。我还搜索了这些说明,发现这是90年代初创建的“ Crusher!Data Compression Toolkit”。可以找到很多关于如何解压缩它的代码实现,但是到目前为止,当我尝试解压缩时,我只从美眉32.dll中得到内存分配错误。
–智能土豆
19年3月6日在22:50
好的,我已经成功解包.bbi和.bli。一旦我也解压缩.ilg,将提交详细的帖子。
–智能土豆
19 Mar 7 '19 at 2:18
#2 楼
这是我用于解压缩的代码。它使用来自https://github.com/cyberjunk/meridian59-dotnet/blob/c45a65552333509220b11b41ecc46d75023b5acd/Meridian59/Files/BGF/BgfBitmap.cs和Kaitai Struct(https://kaitai.io/)的Crush32.cs进行切片。 。它应该适用于book.bbi,也可能适用于其他格式,已经很长时间了,所以我不记得在解压缩和修改这些文件时遇到的所有困难。 .ksy文件如下:book_bbi.ksy
foreach (string dir in Directory.EnumerateDirectories(@"F:\database\komatsu")) {
foreach (string file in Directory.EnumerateFiles(dir, "book.bbi")) {
Console.WriteLine("Decompressing " + file);
Bbi03 page = Bbi03.FromFile(file);
byte[] decompressedData = new byte[(int)page.UncompressedLength1];
bool status = Crush32.Decompress(page.Data, 0, decompressedData, 0, (int)page.UncompressedLength1, (int)page.CompressedLength);
Console.WriteLine(status);
File.WriteAllBytes(@"saa6d1jc\" + Path.GetFileNameWithoutExtension(file) + ".bin", decompressedData);
}
}
bli_03.ksy
meta:
id: book_bbi
endian: le
encoding: ASCII
seq:
- id: file_header
type: str
size: 22
- id: date
type: str
size: 16
- id: magic
# bbi 03-04.030: [0xff, 0x7f, 0xff, 0x7f]
# bbi 04.100: [0x88, 0x03, 0xca, 0x03]
size: 4
- id: data_header_start
contents: [0x02, 0x00]
- id: compressed_length_with_header
type: u4
- id: uncompressed_length
type: u4
- id: uncompressed_length_2
type: u2
- id: compressed_length
type: u2
- id: data_header_end
contents: [0x00, 0x00]
- id: data
size: compressed_length
ilg_00.ksy
meta:
id: bli_03
endian: le
encoding: ASCII
seq:
- id: file_header
type: str
size: 22
- id: date
type: str
size: 16
- id: data_header_start
contents: [0x02, 0x00]
- id: compressed_length_with_header
type: u4
- id: uncompressed_length_1
type: u4
- id: uncompressed_length_2
type: u2
- id: compressed_length
type: u2
- id: data_header_end
contents: [0x00, 0x00]
- id: data
size: compressed_length
meta:
id: ilg_00
endian: le
encoding: ASCII
seq:
- id: header
type: str
size: 22
size: 16
- id: smth1
size: 4
- id: width
type: u2
- id: height
type: u2
- id: bits_per_pixel
type: u2
- id: dpi
type: u2
- id: smth2
size: 12
- id: data_length
type: u4
- id: smth3
size: 12
- id: data
size: data_length
评论
这不是一个真正的答案,但是您是否研究了加密功能的可执行文件? (crush32.dll外部)。我对rush32.dll不熟悉,但是您还可以在其导出函数上设置断点,并转储每个调用的输入/输出。@wisk,谢谢!我记得rush32有一些像cxOpen之类的功能,可能值得研究。以及我如何确定特定功能是加密的?寻找各种变化等吗?另外我的可执行文件不包含函数名,都只是子函数。*** :(
您是否对文件格式进行了反向工程?我正在寻找相同的:)希望有更多关于文件格式的信息。
@loluengo我中途放弃了。有一个C#库可以解压缩Crush32,您可以在这里找到它:github.com/cyberjunk/meridian59-dotnet/blob/master/Meridian59/………在我的情况下,经过解压缩后,我无法恢复其他专有文件格式,因此我采用了另一种方法。