PHP 版
- <?php
- /**
- * wd_decode
- * Author: phper@tkxxd.net
- *
- */
- function wd_decode($filename) {
- $data = unpack('C*', substr(file_get_contents($filename), 9));
- $key = array(0xB8, 0x35, 0x6, 0x2, 0x88, 0x1, 0x5B, 0x7, 0x44, 0x0);
- $j = count($data);
- foreach($data as $k => &$v) {
- $v = $key [ 2 * ($j % 5) ] ^ ~$v;
- // $v = sprintf('%u', $v);
- $v &= 0xFF;
- $v = pack('C*', $v);
- -- $j;
- }
- return gzuncompress(join('', $data));
- }
- var_dump(wd_decode('index.php'));
复制代码
参考 http://www.wooyun.org/bugs/wooyun-2010-071652 中的 perl 代码
Perl 版
- sub wd_decode {
- my @data = unpack 'C*', substr (read_file ($_[0]), 9);
- my @key = (0xB8, 0x35, 0x6, 0x2, 0x88, 0x1, 0x5B, 0x7, 0x44, 0x0);
- my ($i, $j) = (0, scalar @data);
- for (@data) {
- $_ = $key [ 2 * ($j % 5) ] ^ ~$_;
- $_ &= 0xFF;
- -- $j;
- }
- return encode ('utf8', decode ('gbk', uncompress (pack 'C*', @data)));
- }
复制代码 |