Bzz... |
[Aug. 12th, 2011|01:36 pm] |
[ | Current Mood |
| | bored | ] | Только-только вернулся из отпуска. Тем не менее, как-то я не очень... из-за всяких IRL неурядиц. Пока меня не было успел выйти журнал Valhalla, я собирался туда кое-что написать, но не успел, так что в другой раз. В Virus Bulletin вышла статья Ферри "Frankie Say Relax", о RELx, в EOF #3 (выход которого был отложен на месяц) будет тот же RELx, но с одним занятным обновлением и соответствующей статьей. |
|
|
Linux.RELx |
[Jul. 14th, 2011|11:30 am] |
Питер по моей просьбе прислал черновик статьи о сабжевом вирусе (сам вирус написан так давно, что я уже успел забыть, что для того, чтобы запустить первую копию нужно подгрузить libc через LD_PRELOAD - лазил, как дурак с отладчиком, чтобы сгенерить пару семплов :-) Годная получилась статья. Обменяемся ошибками и зарелизим - он свою в VB, а я обновленный вариант в EOF. Такой вот союз щита и меча. :-) |
|
|
Угадайка |
[Jul. 10th, 2009|02:22 pm] |
Написал небольшое продолжение этого проекта. "Linker" таскает за собой таблицу релоков, "Linker G" (guess what is G for?) их "угадывает". Идея в следующем: процесс живет в четырёх-гигабайтном адресном пространстве, из которого только крохотная часть - это код и данные вируса. В данном случае 4 килобайта. Неплохое соотношение. А поэтому, выдаём вирусу дизассемблер (1 шт.) и вперёд - парсить свой код на наличие констант похожих на адреса. Дальше просто - копируем тушку в жертву и из каждой найденной константы вычитаем базовый адрес вируса в текущем процессе и добавляем базовый адрес вируса же в файле-жертве. Константами со значением близким к 0x08049000 по понятным причинам лучше не пользоваться. libc вызывается довольно извращённым способом, но это можно и переделать, нельзя использовать .bss, но это от лени. :-) всё.
( вот так выглядит relocate() в версии G )
В принципе, можно применить этот вариант и к жертве, но стрёмно, двух простых правил маловато, чтобы отличить константу от адреса, хотя вероятность напороться не очень высока. Я считал.
Скачать исходники, бинари. Тестировано на RHEL 5.3. (оно немного глючит. но это же альфа, просто, чтобы показать идею.
Осталось добавить ещё третий вариант, когда вирус добавляет свои релоки в .rel.dyn, тогда всю работу выполнит RTLD. И никакого, блядь, ассемблера, дельт злоебучих, массивов заполняемых push и mov и прочей ахинеи. :-) |
|
|
Linked |
[Apr. 8th, 2009|01:12 pm] |
[ | Current Mood |
| | blank | ] | Пофиксил баг в "линкере", не везде учел addends, конструкции вроде:
uint32_t s = ((uint32_t)&__code_start + 4095) & 0xfffff000;
С включенной оптимизацией порождают, что-то вроде:
190: c7 45 cc ff 0f 00 00 movl $0xfff,0xffffffcc(%ebp)
193: R_386_32 __code_start
19a: 81 65 cc 00 f0 ff ff andl $0xfffff000,0xffffffcc(%ebp)
Вирус не добавлял 4095 и всё шло к чертям собачьим. Ж-)
А так вроде ничего, вчера выложил на форум второй черновичок. |
|
|