我正在处理一类广泛使用PCRE(与Perl兼容的正则表达式)的恶意软件。通常,我可以阅读它们,但似乎它们采用某种二进制格式(可能是编译的?)。它们都以ERCP开头(请查看下面的hexdump)。 FWIW,我强烈怀疑生成此代码的语言是C ++。

00000150  00 00 00 00 11 00 5e 00  00 00 01 00 00 00 45 52  |......^.......ER|
00000160  43 50 56 00 00 00 00 00  80 00 04 00 00 00 01 00  |CPV.............|
00000170  00 00 00 00 74 00 28 00  00 00 00 00 00 00 00 00  |....t.(.........|
00000180  00 00 00 00 00 00 5e 00  2a 5f 00 06 00 01 1a 54  |......^.*_.....T|
00000190  00 05 1c 2e 55 00 0b 1c  61 1c 61 1c 61 1c 61 1c  |....U...a.a.a.a.|
000001a0  61 1c 61 1c 61 1c 61 1c  2e 1c 6e 1c 65 1c 74 1b  |a.a.a.a...n.e.t.|
000001b0  55 00 2a 00 00 00 00 00  8d ff a5 95 0a 2d 2d 2d  |U.*..........---|


在此示例中,正则表达式似乎匹配与互联网域aaaaaaaa相关的某些字符串.net。

我的问题是:给定这样的二进制blob,是否有可能回到“人类可读”(反编译?)PCRE? (即^aaaaaa\.net$),如果是,该怎么办?

#1 楼

谷歌搜索0x50435245会带来一些成功,例如在这里: br />您可能需要阅读库源代码和/或尝试使用它编译一些正则表达式来解码其余部分。

#2 楼

看起来像real_pcre结构,在线上其他许多地方都定义了它的格式。