Joiner (я че-та запорол)

Модератор: Модераторы разделов

frp
Сообщения: 1445
ОС: Debian Squeeze

Joiner

Сообщение frp »

Вобщем решил я написать joiner под Linux и че-та запорол. Joiner склеивает бинарники нормально (проверено Hex редактором), но расклеивает с глюками. Помогите решить проблему.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
GMar
Сообщения: 237
Статус: Будущий математик
ОС: Kubuntu,Ubuntu(UNR) 10.04

Re: Joiner

Сообщение GMar »

мдя... а баш скриптом то проще...
Спасибо сказали:
Аватара пользователя
fbi
Сообщения: 34

Re: Joiner

Сообщение fbi »

Опишите суть глюка!
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

fbi писал(а):
03.07.2009 11:29
Опишите суть глюка!

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

        f.seekg(-1-sizeof(unsigned long long),ios::end);
        unsigned long long pos2,pos1;
        f.read((char*)pos2,sizeof(unsigned long long));
        f.seekg(-1-sizeof(unsigned long long)*2,ios::end);
        f.read((char*)pos1,sizeof(unsigned long long));
        char* f1_name=generate_name(),* f2_name=generate_name();
        ofstream o1(f1_name,ios::out|ios::trunc|ios::binary);
        f.seekg(pos1);
        char* f1_cont=new char[pos2-pos1];
        f.read(f1_cont,pos2-pos1);
        o1.write(f1_cont,pos2-pos1);
        o1.close();
        delete [] f1_cont;
        o1.open(f2_name, ios::out|ios::trunc|ios::binary);
        f.seekg(pos2);
        while(1)
        {
            unsigned char c;
            f.get((char&)c);
            if((f.fail())||(f.eof()))break;
            o1.put(c);
        }
        o1.close();
        f.close();

Здесь почему-то первый файл имеет нулевой размер, а второй - содержит то, что должен был содержать первый + то, что должен был содержать второй.

GMar писал(а):
03.07.2009 01:35
мдя... а баш скриптом то проще...

Согласен, но:
1) joiner на баше может работать только в unix-подобных системах (на windows только при наличии cygwin), а мне нужен кроссплатформенный (мой код таким станет, если туда добавить несколько блоков #ifdef WIN32 ... #else)
2) joiner на баше заметит любой даже самый начинающий админ, а бинарник разберет только тот, кто знаком с моим joiner-ом или тот, кому под силу читать ассемблерный код, который выведет дизассемблер.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

Нашел и исправил одну ошибку - пропустил в двух местах &. Выкладываю новую версию.
Теперь другая проблема - всеравно pos1 и pos2 считываются неправильно. В результате оба файла получаются пустыми.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Joiner

Сообщение кодировщик »

frp писал(а):
03.07.2009 23:45
Нашел и исправил одну ошибку - пропустил в двух местах &. Выкладываю новую версию.
Теперь другая проблема - всеравно pos1 и pos2 считываются неправильно. В результате оба файла получаются пустыми.

ещё не разбирался, но думаю ваш кусок программы, которая загружает все файлы, записанные в ее тело, не правильно работает.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

кодировщик писал(а):
04.07.2009 14:46
ещё не разбирался, но думаю ваш кусок программы, которая загружает все файлы, записанные в ее тело, не правильно работает.

Ну это понятно, иначе я бы не создавал темы.

А все-таки заработало. Но я так и не понял почему. Я просто поменял кругом unsigned long long на long long и позицию для seekg вбил числом, а не через sizeof. Выкладываю рабочую версию.

Теперь другая проблема. Как подождать завершения процессов, порожденных fork()? Нужно ведь удалить "подозрительные файлы со странными именами и правами на выполнение" после завершения всех процессов, которые с них запустились.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Joiner

Сообщение pcodr »

Как подождать завершения процессов, порожденных fork()?

Ловить SIGCHLD.
remote system type is unix
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

Сделал. Выкладываю. А как в Windows дождаться завершения порожденных процессов?
Кстати, программа уже работает как на Linux, так и на Windows.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: Joiner

Сообщение pcodr »

А зомби не боитесь?
man 2 waitpid
remote system type is unix
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Joiner

Сообщение NickLion »

Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

Сделал waitpid и WaitForMultipleObjects. Вроде все работает. Но в винде не воспринимает при склеивании имен файлов с пробелами (проблема парсера коммандной строки).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Joiner

Сообщение NickLion »

// оффтопик - деструктивные у Вас наклонности, однако. То форк-бомбы, то joiner. Уже жду вируса. Кроссплатформенного :-D
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

NickLion писал(а):
05.07.2009 10:48
// оффтопик - деструктивные у Вас наклонности, однако. То форк-бомбы, то joiner. Уже жду вируса. Кроссплатформенного :-D

Насчет деструктивных наклонностей - нет. Просто обстоятельства обязывают.
Кстати, написать вирус кроссплатформенный намного проще, чем традиционные вирусы под винду, модифицируем мой joiner так, чтобы он содержал в своем теле функцию, отвечающую за действия вируса и приклеивал к себе один файл (заражаемый бинарник).
Ну а вредные действия приделать проще простого (разве не для этого создавалось ядро :D? Разве не для этого создавался QT:D?). И главное - никакого асма, только C или C++ или Pascal или любой другой язык, который компилируется в нормальный бинарник.
Но такой вирус в Linux будет очень ограничен - очень тяжело заставить не-вендузятника запустить бинарник неизвестного происхождения из-под рута (ну разве что на старых ядрах, для которых есть эксплойты, хорошо, что исходники эксплойтов не сложные обычно и их можно включить прямо в тело вируса).
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Joiner

Сообщение NickLion »

Не-не-не. В вирусе главное - совсем не деструктивные действия, а спрятаться, выжить и размножаться.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

Вот со спрятать, выжить в linux и проблемы. А как размножатся я написал.
Спасибо сказали:
Аватара пользователя
DaemonTux
Сообщения: 1480
Статус: Юный падаван
ОС: Gentoo

Re: Joiner

Сообщение DaemonTux »

Кружок злых гениев))))
Vladivostok Linux User Group
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Joiner

Сообщение NickLion »

frp писал(а):
05.07.2009 19:44
Вот со спрятать, выжить в linux и проблемы. А как размножатся я написал.

Вы писали про использование известных дыр - это никуда не годится, их заделали. Надо искать новые! В последних версиях ядра, системных служб. Так что - жду полиморфного кроссплатформенного вируса.

DaemonTux писал(а):
06.07.2009 05:58
Кружок злых гениев))))

Мы не злые, просто у frp "обстоятельства обязывают", nobilis oblige так сказать :laugh:
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Joiner

Сообщение frp »

NickLion писал(а):
06.07.2009 07:04
Вы писали про использование известных дыр - это никуда не годится, их заделали. Надо искать новые! В последних версиях ядра, системных служб. Так что - жду полиморфного кроссплатформенного вируса.

Я написал, что у вируса будут проблемы с тем, чтобы получить права рута (соответсвенно, он сможет мало кого заразить), и что для того, чтобы стать рутом, можно использовать дыры в ядре, но я не "ядерный физик" и не хакер и не супер-крутой админ, поэтому дыры в ядре найти не могу (могу только использовать уже найденные, я пол-инета перерыл в поиске дыр, позволяющих повысить права до рута, для ядер более новых чем 2.6.24, и ничего не нашел).
Спасибо сказали:
Аватара пользователя
fbi
Сообщения: 34

Re: Joiner

Сообщение fbi »

Хм... ну можно накрыть файл обычного пользователя, и надеяться что когда нить он запустится от имени рута =)
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Joiner

Сообщение кодировщик »

frp писал(а):
06.07.2009 08:44
могу только использовать уже найденные, я пол-инета перерыл в поиске дыр, позволяющих повысить права до рута, для ядер более новых чем 2.6.24, и ничего не нашел.

"Те дыры что в инете" - к счастью\сожалению сразу же заделываются.
А искать свои\новые дело не из лёгких.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Joiner

Сообщение NickLion »

frp писал(а):
06.07.2009 08:44
NickLion писал(а):
06.07.2009 07:04
Вы писали про использование известных дыр - это никуда не годится, их заделали. Надо искать новые! В последних версиях ядра, системных служб. Так что - жду полиморфного кроссплатформенного вируса.

Я написал, что у вируса будут проблемы с тем, чтобы получить права рута (соответсвенно, он сможет мало кого заразить), и что для того, чтобы стать рутом, можно использовать дыры в ядре, но я не "ядерный физик" и не хакер и не супер-крутой админ, поэтому дыры в ядре найти не могу (могу только использовать уже найденные, я пол-инета перерыл в поиске дыр, позволяющих повысить права до рута, для ядер более новых чем 2.6.24, и ничего не нашел).

Ну, так все впереди! Форк-бомба есть, джойнер есть... Ждем-с :)
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Joiner

Сообщение кодировщик »

frp писал(а):
05.07.2009 19:44
Вот со спрятать, выжить в linux и проблемы. А как размножатся я написал.

Кстати насчёт спрятать, есть где-то небольшие нароботки.
Нужно будет покапаться в backup-ах.
Спасибо сказали: