дизасемблировать бинарник

Модератор: Fastman

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

дизасемблировать бинарник

Непрочитанное сообщение paix » 2009-10-26 2:03:40

у юзера сперли пароль на фтп, и стали загружать всякие вредоносные бинарные проги.
Посредством php (system, etc) эту гадость запускают. Это все происходит быстро, скрипт загружает, запускает и сразуже удаляет.

при помощи нехитрых телодвижений аля chflags -R sappnd я эту гадость выловил ;)
но не знаю как ее толком разобрать по кусочкам. Интересно таки ;)

может кто подскажет механизм,
ссылки также приветствуются.

пример такого малваере ниже:
http://paix.org.ua/tmp/malware.pl_

ps. пробовал посмотреть портовым libdisasm
но скилов по теме не хватило чтобы с наскоку -)
With best wishes, Sergej Kandyla

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: дизасемблировать бинарник

Непрочитанное сообщение paradox » 2009-10-26 2:21:43

ну там не на С++ и даже не на С

там два варианта
1) та меил варя писана на ассемблере и както упакована
2) писана на perl'e и скомпилирована перл компилеров в ELF выполняемый файл

вовсяком случае она из себя запускает /usr/bin/perl

и чтото декриптует или распаковывает толи через пайпы толи через /tmp/

сказать сложно

если это для фрибсд то запусти ее через truss

а /usr/bin/perl можно как то подставить туда чтото другое вместо перла
и оно думаю будет пробовать тому выдуманому перлу подставить декрипченый или распакованый поток уже нормальной перл программы

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 8:24:54

ну вот я нашел модуль
http://search.cpan.org/~rurban/B-C-1.04 ... sembler.pm

там есть еще какой-то B::C::Disassembler

установить этот модуль
написать
perld.pl

Код: Выделить всё

        use Disassembler qw(print_insn);
        my $fh = new FileHandle "<$ARGV[0]";
        disassemble_fh($fh, \&print_insn);
выполнить:

Код: Выделить всё

./perld.pl malware.pl_
и посмотреть что будет...
(у меня этот модуль не стоит, я не пробовал, чтобу дет не знаю)

тут вот еще http://search.cpan.org/search?m=all&q=disassemble&s=1

вот это по-моиму оно http://search.cpan.org/~bobmath/Disasse ... .13/X86.pm
но оно должно тебе выдать в asm/Си, а не в перле
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение paix » 2009-10-26 11:45:13

paradox писал(а):ну там не на С++ и даже не на С

там два варианта
1) та меил варя писана на ассемблере и както упакована
2) писана на perl'e и скомпилирована перл компилеров в ELF выполняемый файл

вовсяком случае она из себя запускает /usr/bin/perl
и чтото декриптует или распаковывает толи через пайпы толи через /tmp/
сказать сложно

если это для фрибсд то запусти ее через truss
а /usr/bin/perl можно как то подставить туда чтото другое вместо перла
и оно думаю будет пробовать тому выдуманому перлу подставить декрипченый или распакованый поток уже нормальной перл программы
фряха фряха...
я к работающим процессам этой гадости цеплялся через truss, оно там ниче толкового не делало, и постоянно сыпало
select
gettimeofday..

прога кстати открывала сокеты по udp, а также пыталась на 80ый забиндится, tcp.
на счет идеи подставить что-то вместо перлятины - забавный вариант, спасибо )

ProFTP, спасибо.

выкрою время попробую....
With best wishes, Sergej Kandyla

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 11:52:56

в примере я не посмотрел, B::Disassembler это для байт кода, оно не подойдет...

а ELF формат это только машинный-код?

perl, python код можно скомпилировать как обычную Си программу (есть скрипт для этого стандартный, не большой perlcc)

т.е. это как обычная Си программа, наверное...
Последний раз редактировалось ProFTP 2009-10-26 11:54:48, всего редактировалось 1 раз.
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: дизасемблировать бинарник

Непрочитанное сообщение paradox » 2009-10-26 11:54:47

проверь
без наличия перла эта гадость работать поидеи не должна

и кстати если это программа скомпилирована на перле
то я думаю должна какая то быть приблуда котрая ее же и декомпилирует обратно в перл

а ELF это только машинный-код?
да
perl, python код можно скомпилировать как обычную Си программу (есть скрипт для этого стандартный)
угу
а как обратно? должны быть готовые утилиты

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 11:56:35

paradox писал(а): а как обратно? должны быть готовые утилиты
у тебя perl стот?

набери в консоле:

Код: Выделить всё

ee /usr/local/bin/perlcc

Код: Выделить всё

/usr/local/bin/perlcc
там кстати, про байт написано что-то...
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: дизасемблировать бинарник

Непрочитанное сообщение paradox » 2009-10-26 11:59:41

perlcc это скомпилить из pl в elf
а я говорил что должно быть обратно
из elf в pl
если этот elf перловский

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 12:00:50

paradox писал(а): угу
а как обратно? должны быть готовые утилиты
там есть команды упаковщики http://perldoc.perl.org/functions/unpack.html , но не упаковщики которые делают бинарный файл

а gdb не получиться этот файл посмотреть?

или objdump?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 12:02:00

в Си можно заинклудит же perl как библиотеку и использовать его в Си :)

ты уверен что elf перловский?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: дизасемблировать бинарник

Непрочитанное сообщение paradox » 2009-10-26 12:04:55

ты уверен что elf перловский?
не уверен

но то что там в том elf делаеться
1) открываються пайпы
2) открываеться /usr/bin/perl
3) декриптуеться/депакуеться поток символов с того elf файла и пишеться в пайп для /usr/bin/perl

наводит на мысль что этот elf скомпилирован perlcc

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 12:08:44

http://www.google.com.ua/#hl=uk&q=perlc ... 4bacaee8e0

http://sunsite.ualberta.ca/Documentatio ... mpile.html

ну вот тут вот написано...

B::Disassembler если я понял для perlcc?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: дизасемблировать бинарник

Непрочитанное сообщение paradox » 2009-10-26 12:12:30

незнаю
может это просто декомпилятор байт кода в asm

возьми проверь)

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 12:29:43

этого модуля в портах нету - ставить геморой, он в perl не переведет, только в asm

и байт код довольно сложный чем машинный, например

это обычный бот, наверное, ходил по ftp и ставил эти програмки, что там в нем смотреть
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение paix » 2009-10-26 14:10:56

ProFTP писал(а):этого модуля в портах нету - ставить геморой, он в perl не переведет, только в asm
это обычный бот, наверное, ходил по ftp и ставил эти програмки, что там в нем смотреть
ну так ясно что бот ;)
не суть. Сегодня мелкая пакость, завтра большая... надо быть готовым.
With best wishes, Sergej Kandyla

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 14:29:40

ну это вирус пароль на фтп украл на винде и зашел на сервак?

т.е. кто угодно может туда залить все что угодно...?

может нужно как-то system выключить?
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение paix » 2009-10-26 15:20:09

ProFTP писал(а):ну это вирус пароль на фтп украл на винде и зашел на сервак?
т.е. кто угодно может туда залить все что угодно...?
может нужно как-то system выключить?
да system уже давно выключен ;) на этом серваке про него забыли както...не суть.

одни трояны воруют у юзеров пароли,
эти пароли подпихуются ботам которые и пытаются залить и выполнить на серваке какуюнибудь фигню.
этот механизм прозрачен.
With best wishes, Sergej Kandyla

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 16:13:33

paradox писал(а):незнаю
может это просто декомпилятор байт кода в asm

возьми проверь)
там модуль не дописан, и им никто не пользовался, гугл не пишет чтобы им кто-то пользовался http://www.google.com.ua/#hl=uk&q=use+D ... 4bacaee8e0
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: дизасемблировать бинарник

Непрочитанное сообщение ProFTP » 2009-10-26 16:20:02

и он выводит:

Код: Выделить всё

sub print_insn {
    my ($insn, $arg, $comment) = @_;
    undef $comment unless $comment;
    if (defined($arg)) {
    if ($insn eq 'newopx' or $insn eq 'ldop') { # threaded or unthreaded
      my $type = $arg >> 7;
      my $size = $arg - ($type << 7);
      $arg .= sprintf(" \t# size:%d, type:%d %s", $size, $type) if $comment;
      printf "\n# [%s %d]\n", $opname[$type], $opix++ if $comment;
    } elsif (!$comment) {
      ;
    } elsif ($insn eq 'newsvx') {
      # TODO which type? SV, AV or GV. check arg
      $arg .= "\t# ".$comment if $comment ne '1';
      printf "\n# [%s]\n", 'SV';
    } elsif ($insn eq 'gv_stashpvx') {
      $arg .= "\t# ".$comment if $comment ne '1';
      printf "\n# [%s]\n", "STASH";
    } elsif ($insn eq 'ldsv') {
      # TODO which type? SV, AV or GV. check arg
      $arg .= "\t# ".$comment if $comment ne '1';
      printf "\n# -%s-\n", 'SV';
    } elsif ($insn eq 'gv_fetchpvx') {
      $arg .= "\t# ".$comment if $comment ne '1';
      printf "\n# [%s]\n", 'prototype';
    } else {
       $arg .= "\t# ".$comment if $comment ne '1';
    }
    printf "%s %s\n", $insn, $arg;
    } else {
    $insn .= "\t# ".$comment if $comment ne '1';
    print $insn, "\n";
    }
}
 
Последний раз редактировалось paradox 2009-10-26 19:37:41, всего редактировалось 1 раз.
Причина: юзайте нормальные теги!
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение