Joiner (я че-та запорол)
Модератор: Модераторы разделов
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Joiner
Вобщем решил я написать joiner под Linux и че-та запорол. Joiner склеивает бинарники нормально (проверено Hex редактором), но расклеивает с глюками. Помогите решить проблему.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
GMar
- Сообщения: 237
- Статус: Будущий математик
- ОС: Kubuntu,Ubuntu(UNR) 10.04
Re: Joiner
мдя... а баш скриптом то проще...
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Код: Выделить всё
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();Здесь почему-то первый файл имеет нулевой размер, а второй - содержит то, что должен был содержать первый + то, что должен был содержать второй.
Согласен, но:
1) joiner на баше может работать только в unix-подобных системах (на windows только при наличии cygwin), а мне нужен кроссплатформенный (мой код таким станет, если туда добавить несколько блоков #ifdef WIN32 ... #else)
2) joiner на баше заметит любой даже самый начинающий админ, а бинарник разберет только тот, кто знаком с моим joiner-ом или тот, кому под силу читать ассемблерный код, который выведет дизассемблер.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Нашел и исправил одну ошибку - пропустил в двух местах &. Выкладываю новую версию.
Теперь другая проблема - всеравно pos1 и pos2 считываются неправильно. В результате оба файла получаются пустыми.
Теперь другая проблема - всеравно pos1 и pos2 считываются неправильно. В результате оба файла получаются пустыми.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
Re: Joiner
ещё не разбирался, но думаю ваш кусок программы, которая загружает все файлы, записанные в ее тело, не правильно работает.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
кодировщик писал(а): ↑04.07.2009 14:46ещё не разбирался, но думаю ваш кусок программы, которая загружает все файлы, записанные в ее тело, не правильно работает.
Ну это понятно, иначе я бы не создавал темы.
А все-таки заработало. Но я так и не понял почему. Я просто поменял кругом unsigned long long на long long и позицию для seekg вбил числом, а не через sizeof. Выкладываю рабочую версию.
Теперь другая проблема. Как подождать завершения процессов, порожденных fork()? Нужно ведь удалить "подозрительные файлы со странными именами и правами на выполнение" после завершения всех процессов, которые с них запустились.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
pcodr
- Сообщения: 283
- ОС: Debian
Re: Joiner
Как подождать завершения процессов, порожденных fork()?
Ловить SIGCHLD.
remote system type is unix
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Сделал. Выкладываю. А как в Windows дождаться завершения порожденных процессов?
Кстати, программа уже работает как на Linux, так и на Windows.
Кстати, программа уже работает как на Linux, так и на Windows.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
pcodr
- Сообщения: 283
- ОС: Debian
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Joiner
Windows - WaitForSingleObject, WaitForMultipleObjects.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Сделал waitpid и WaitForMultipleObjects. Вроде все работает. Но в винде не воспринимает при склеивании имен файлов с пробелами (проблема парсера коммандной строки).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Joiner
// оффтопик - деструктивные у Вас наклонности, однако. То форк-бомбы, то joiner. Уже жду вируса. Кроссплатформенного :-D
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Насчет деструктивных наклонностей - нет. Просто обстоятельства обязывают.
Кстати, написать вирус кроссплатформенный намного проще, чем традиционные вирусы под винду, модифицируем мой joiner так, чтобы он содержал в своем теле функцию, отвечающую за действия вируса и приклеивал к себе один файл (заражаемый бинарник).
Ну а вредные действия приделать проще простого (разве не для этого создавалось ядро
Но такой вирус в Linux будет очень ограничен - очень тяжело заставить не-вендузятника запустить бинарник неизвестного происхождения из-под рута (ну разве что на старых ядрах, для которых есть эксплойты, хорошо, что исходники эксплойтов не сложные обычно и их можно включить прямо в тело вируса).
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Joiner
Не-не-не. В вирусе главное - совсем не деструктивные действия, а спрятаться, выжить и размножаться.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Вот со спрятать, выжить в linux и проблемы. А как размножатся я написал.
-
DaemonTux
- Сообщения: 1480
- Статус: Юный падаван
- ОС: Gentoo
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Joiner
Вы писали про использование известных дыр - это никуда не годится, их заделали. Надо искать новые! В последних версиях ядра, системных служб. Так что - жду полиморфного кроссплатформенного вируса.
Мы не злые, просто у frp "обстоятельства обязывают", nobilis oblige так сказать
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Joiner
Я написал, что у вируса будут проблемы с тем, чтобы получить права рута (соответсвенно, он сможет мало кого заразить), и что для того, чтобы стать рутом, можно использовать дыры в ядре, но я не "ядерный физик" и не хакер и не супер-крутой админ, поэтому дыры в ядре найти не могу (могу только использовать уже найденные, я пол-инета перерыл в поиске дыр, позволяющих повысить права до рута, для ядер более новых чем 2.6.24, и ничего не нашел).
-
fbi
- Сообщения: 34
Re: Joiner
Хм... ну можно накрыть файл обычного пользователя, и надеяться что когда нить он запустится от имени рута =)
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux
-
NickLion
- Сообщения: 3408
- Статус: аватар-невидимка
- ОС: openSUSE Tumbleweed x86_64
Re: Joiner
frp писал(а): ↑06.07.2009 08:44
Я написал, что у вируса будут проблемы с тем, чтобы получить права рута (соответсвенно, он сможет мало кого заразить), и что для того, чтобы стать рутом, можно использовать дыры в ядре, но я не "ядерный физик" и не хакер и не супер-крутой админ, поэтому дыры в ядре найти не могу (могу только использовать уже найденные, я пол-инета перерыл в поиске дыр, позволяющих повысить права до рута, для ядер более новых чем 2.6.24, и ничего не нашел).
Ну, так все впереди! Форк-бомба есть, джойнер есть... Ждем-с
-
кодировщик
- Сообщения: 974
- Статус: зарёган в пятницу 13
- ОС: Linux