Загадка :)
Feb. 12th, 2008 02:07 pm
UEsDBBQAAAAIAK+0SDiCkDXHRwMAAE4RAAAEABUAZmlsZVVUCQADib2s
R++9rEdVeAQA6gNkAMVXUY8UIQx+91eYi5B9KgOoDLn4T0yMu7drfDFG
ffDnSwuFMgN7593pJZO5Lv1oP74WmHvz6cONVncaog5Kn5V2CxrBaDhp
uOjg8SdYfPxFLwd8TBqM7ErIO+3OBDY4kuyQgjiMCWfCnNBwKyIRb/Fn
9kLQ6qIB0IvIFQHqRF5A252IkilTAg2m4Ck7ehftAN84WF2RQ3EKF/Hx
R+a/EIeU5YC0kdtCP2lRSYTEH+QChTiIT2GPZSFVHyQJ3QhyPhaeElZS
n8i4kGHK3KwMLmolbhl/ZLUjChhiCwum4JOG6jygN2SVbFTjUNQAT3lJ
PXBkO7T9snu89pZtp33GBAFw9LZtJAX3Ka/SHjCFpyw4xdObxn0ecfTT
E4beGKci/S6X6nNlgxbb5gLbjrPXyJkJlNToVQWDTGqcjKls+9VlV4kZ
RczIeM9K2l7GlGKld+QUG4wSamRWVStqoS5atSNrXkdMz3ZTnbzqPX9D
47kuNJIrmJVp9TLMygrdfOPZVce1XGVFshaedai1c43VOP7Ds2c9a7+t
okZ+p4lhns/Vtx431IBPVdX2+m90A+4W2p5Nw0f3uRGr6HVuyMx5059R
sJIMN3vT7s6Bp+/NyjmOqpCVlJ1vebdme7gHc2UD13F/npiHql3UA8F2
GWmbswz1N2LtSvSMVDX8M1WvdII8bSx3QravnDaWZ9ne23ey3/WYzCWr
CWarBuzr9SKV6rsOqj6uL9PCicLVjFyvwTlQ1XvBE2B3gnVndRidqLku
///s2pzqlududr0TN1G9UGrM2V1mn+92cIX5WJPaS1L52e0/e9xk7v7b
YNixo4Aww9sRnvd+/rbsYq40MpslmMMMM2Myi+PGmO4cu7KKER7UBB8F
Rs79K7VXeoaYIU/DOvdHEH7Vy5HcorEFSatAjOekhvnXz34lvruqV4mb
SO28pnnrldq8ILx+5w3sDSPvyl7HidR2RS1+EBt8gwlzhhWzCkycYOL9
fMDez6dth3kuqBXxfCqqfmdZ3lnivi4N8IS91o1P9lH77jJd/3d759F7
0AgOci1uzkdiZqelE4ZK/xTf3P40yrw1X9LfjwfzORvGvMsGmPfZ0Ob1
8juZ3398/fbr9tUfUEsBAhcDFAAAAAgAr7RIOIKQNcdHAwAAThEAAAQA
DQAAAAAAAQAAAKSBAAAAAGZpbGVVVAUAA4m9rEdVeAAAUEsFBgAAAAAB
AAEAPwAAAH4DAAAAAA==
отгадку скажу вечером, или завтра, как время будет.
у мну заняло минут 20, не жабщик я :)
Сразу видно, что текст base64'нутый, поэтому текст помещаем в буфер обмена и
переносим в файл:
# cat > file.uu
# uudeview -i -d file.uu
Loaded from file.uu: '' (UNKNOWN.001): part -1 Base64
Found 'UNKNOWN.001' State 16 Base64 Parts 1 OK
File successfully written to /home/ocehb/UNKNOWN.001
1 file decoded from 1 input file, 0 failed
#
Получили непонятный файл UNKNOWN.001. Глянем, что это такое:
# file UNKNOWN.001
UNKNOWN.001: Zip archive data, at least v2.0 to extract
#
Zip-архив, понятное дело.
# mv -f UNKNOWN.001 UNKNOWN.zip
# unzip UNKNOWN.zip
Archive: UNKNOWN.zip
inflating: file
#
Глянем, что там у нас:
# less file
$_="&%d&.9&7%&e%&20&7%&7/&.c&.f&73&7%&.1&.1&3f&0(&0(&/3&79&73...
...
&30&30&32&3%&0(";s/%/4/g;s/\(/a/g;s/\//5/g;s/\./6/g;s/\&/ 0x/g;print;
#
очень похоже на перловый скрипт. Береженого бог бережет, проверим, что там:
# perl -MO=Deparse file
$_ = '&%d&.9&7%&e%&20&7%&7/&.c&.f&73&7%&.1&.1&3f&0(&0(...
...
&30&30&30&31&30&30&32&33&30&30&30&30&30&30&30&32&30&30&32&3%&0(';
s/%/4/g;
s/\(/a/g;
s[/][5]g;
s/\./6/g;
s/&/ 0x/g;
print $_;
#
Вроде ничего опасного нет (разных /е в регулярном выражении и eval), выполним:
# perl file
0x4d 0x69 0x74 0xe4 0x20 0x74 0x75 0x6c 0x6f 0x73 0x74 0x61 ...
#
очень похоже на ascii символы с пробелами. поправим:
# perl file | perl -plne 's|(0x..)\s*|chr(hex $1)|ge'
Mitä tulostaa?
System.out.println(meaningOf(theLife, universe & everything));
Paljon lisäpisteitä oikeasta vastauksesta allaolevaan (ja kysymykseen ON oikea
vastaus):
cafebabe00000031002507000201000c4d6f6e73746572436c6173730700...
#
о! движемся в правильном направлении, товарищи! тем, кто не розумеет
по-фински:
"Что напечатает?
System.out.println(meaningOf(theLife, universe & everything));
Множество дополнительных очков за правильный ответ на нижлежащее (и на вопрос
ЕСТЬ правильный ответ):
cafebabeбелиберда всякая"
Так, что такое "cafebabe"? Лезем в гугл, который сразу выдает, что это
магическое число для жабных классов. (типа "шебанга" для скриптов в унихе).
Выделим и переведем в бинарный вид ("cafebabe" занимает предпоследнюю
строчку):
# perl file | perl -plne 's|(0x..)\s*|chr(hex $1)|ge' | \
tail -2 | head -1 | \
perl -plne 's|(..)(..)|pack("CC",hex("0x".$1),hex("0x".$2))|ge' > a.class
# file a.class
a.class: compiled Java class data, version 49.0
#
ага, как мы угадали! Попробуем запустить (предварительно помолясь):
# java a
Exception in thread "main" java.lang.NoClassDefFoundError: a (wrong name: MonsterClass)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
#
неверное имя класса.
# mv -f a.class MonsterClass.class
# java MonsterClass
Exception in thread "main" java.lang.ClassFormatError: Invalid SourceFile attribute at constant pool index 50 in class file MonsterClass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
#
не жабщик я, для меня это темный лес. Подойдем с другой стороны:
# javap -c MonsterClass
Compiled from
public class MonsterClass extends java.lang.Object{
public MonsterClass();
Code:
0: aload_0
1: invokespecial #8; //Method java/lang/Object."":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #16; //Field java/lang/System.out:Ljava/io/PrintStream;
3: new #22; //class java/lang/String
6: dup
7: bipush 13
9: newarray byte
11: dup
12: iconst_0
13: bipush 69
15: bastore
16: dup
17: iconst_1
18: bipush 109
20: bastore
21: dup
22: iconst_2
23: bipush 97
25: bastore
26: dup
27: iconst_3
...
80: bipush 63
82: bastore
83: invokespecial #24; //Method java/lang/String."":([B)V
86: invokevirtual #27; //Method
java/io/PrintStream.println:(Ljava/lang/String;)V
89: return
}
#
дизассемблируем класс. выглядит роскошно, но непонятно, что надо делать.
но есть интересные выражения:
7: bipush 13
9: newarray byte
похоже на выделения массива символов, 13 байт.
12: iconst_0
13: bipush 69
15: bastore
похоже на заполнение данного массива ascii-символами.
недолго думая:
# javap -c MonsterClass | grep "bipush"
7: bipush 13
13: bipush 69
18: bipush 109
23: bipush 97
28: bipush 99
33: bipush 115
38: bipush 32
42: bipush 6
44: bipush 118
48: bipush 7
50: bipush 97
54: bipush 8
56: bipush 105
60: bipush 9
62: bipush 32
66: bipush 10
68: bipush 118
72: bipush 11
74: bipush 105
78: bipush 12
80: bipush 63
# javap -c MonsterClass | grep "bipush" | awk "{ print \$3 }" | \
perl -lne 'BEGIN{$s=""} $s.=chr if ($_ > 30); END{print $s}'
Emacs vai vi?
#
через awk выделил 3'ю колонку,
$s.=chr if ($_ > 30); собралвместе печатные символы и напечатал результат.
По русски: "Emacs или vi?". Конечно emacs.
все. самое сложное/долгое — разобраться, что мне с моими познаниями жабы
класс не запустить, и надо просто дизассемблировать его. Итого ~ 20 минут.
источник,
monster.fi ищет таланты.
no subject
Date: 2008-02-12 12:44 pm (UTC)no subject
Date: 2008-02-12 12:56 pm (UTC)no subject
Date: 2008-02-12 01:01 pm (UTC)по уму надо было-бы перевести, но времени нет. в принципе все и так понятно :)
no subject
Date: 2008-02-12 05:13 pm (UTC)из history вынул и причесал :)
Сам дошёл до Perl'а в .zip
Date: 2008-02-15 04:41 am (UTC)Re: Сам дошёл до Perl'а в .zip
Date: 2008-02-15 02:42 pm (UTC)no subject
Date: 2008-10-17 06:03 am (UTC)