ocehb: (Default)
[personal profile] ocehb


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 ищет таланты.

(deleted comment)
(deleted comment)
(deleted comment)
(deleted comment)

Сам дошёл до Perl'а в .zip

Date: 2008-02-15 04:41 am (UTC)
From: [identity profile] poige.livejournal.com
Потом надо было chroot/vbox искать/делать (paranoid mode on), так что решил просто прочитать что там у тебя получилось. Эх, надо было искать vbox... :-)

Date: 2008-10-17 06:03 am (UTC)
From: [identity profile] filibertoharra.livejournal.com
При этом никаких книг читать не надо, в гугле искать не надо.

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 6th, 2026 12:11 am
Powered by Dreamwidth Studios