herm1t LIVE!ng room [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Bzz... [Aug. 12th, 2011|01:36 pm]
[Tags|, , , , ]
[Current Mood | bored]

Только-только вернулся из отпуска. Тем не менее, как-то я не очень... из-за всяких IRL неурядиц. Пока меня не было успел выйти журнал Valhalla, я собирался туда кое-что написать, но не успел, так что в другой раз. В Virus Bulletin вышла статья Ферри "Frankie Say Relax", о RELx, в EOF #3 (выход которого был отложен на месяц) будет тот же RELx, но с одним занятным обновлением и соответствующей статьей.
LinkLeave a comment

Linux.RELx [Jul. 14th, 2011|11:30 am]
[Tags|, , , , , ]
[Current Mood |awake]

Питер по моей просьбе прислал черновик статьи о сабжевом вирусе (сам вирус написан так давно, что я уже успел забыть, что для того, чтобы запустить первую копию нужно подгрузить libc через LD_PRELOAD - лазил, как дурак с отладчиком, чтобы сгенерить пару семплов :-) Годная получилась статья. Обменяемся ошибками и зарелизим - он свою в VB, а я обновленный вариант в EOF. Такой вот союз щита и меча. :-)
Link3 comments|Leave a comment

Угадайка [Jul. 10th, 2009|02:22 pm]
[Tags|, , ]

Написал небольшое продолжение этого проекта. "Linker" таскает за собой таблицу релоков, "Linker G" (guess what is G for?) их "угадывает". Идея в следующем: процесс живет в четырёх-гигабайтном адресном пространстве, из которого только крохотная часть - это код и данные вируса. В данном случае 4 килобайта. Неплохое соотношение. А поэтому, выдаём вирусу дизассемблер (1 шт.) и вперёд - парсить свой код на наличие констант похожих на адреса. Дальше просто - копируем тушку в жертву и из каждой найденной константы вычитаем базовый адрес вируса в текущем процессе и добавляем базовый адрес вируса же в файле-жертве. Константами со значением близким к 0x08049000 по понятным причинам лучше не пользоваться. libc вызывается довольно извращённым способом, но это можно и переделать, нельзя использовать .bss, но это от лени. :-) всё. вот так выглядит relocate() в версии G ) В принципе, можно применить этот вариант и к жертве, но стрёмно, двух простых правил маловато, чтобы отличить константу от адреса, хотя вероятность напороться не очень высока. Я считал.

Скачать исходники, бинари. Тестировано на RHEL 5.3. (оно немного глючит. но это же альфа, просто, чтобы показать идею.

Осталось добавить ещё третий вариант, когда вирус добавляет свои релоки в .rel.dyn, тогда всю работу выполнит RTLD. И никакого, блядь, ассемблера, дельт злоебучих, массивов заполняемых push и mov и прочей ахинеи. :-)

LinkLeave a comment

Linked [Apr. 8th, 2009|01:12 pm]
[Tags|, , ]
[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 и всё шло к чертям собачьим. Ж-) А так вроде ничего, вчера выложил на форум второй черновичок.
LinkLeave a comment

navigation
[ viewing | most recent entries ]