|
Участник форума
Регистрация: 25.05.2007
Сообщений: 290
С нами:
9980798
Репутация:
435
|
|
Progeras - Вы шутник однако, Вы просите исходники со сменой точки входа, при
том что Вы ничего не сделали для людей сидящих здесь? Вы думаете такой исход
ник на дельфинчике стоит 50-100 рублей? Мне кажется это слишком самонадеянно.
Ну а если по теме то в PE-файлах описывается специальное поле в PE-заголовке,
в котором лежит RVA-(относительный виртуальный адрес) EP, с которого как бы и
начинается выполнение. но мы то знаем, что Entry Point) выполняется не первой,
а последней. До нее система загружает все статик библиотеки и выходят на испо
лнение через Dllmain. TLS-k’и также получают управление до выполнения EP, кот
орую Вы собираетесть сменить, только не понятно какой именно участок вашего ко
да потеряет управление и EP будет некому вызывать, так как она будет указывать
неизвестно на какой код. Вот только Вы не уточняете кто у Вас этот "Маша расте
ряша", толи Dllmain или может быть TLS-callback.
#*************************************************
#define PE_off 0x3C // PE magic word raw offset
#define EP_off 0x28 // relative Entry Point filed
offset
BYTE* GetEP()
{
static BYTE* base_x, *ep_adr;
static DWORD pe_off, ep_off;
char buf [_MAX_PATH];
// obtain exe base address
GetModuleFileName(0, buf, _MAX_PATH);
base_x = (BYTE*) GetModuleHandle(buf);
pe_off = *((DWORD*)(base_x + PE_off));
ep_off = *((DWORD*)(base_x + pe_off + EP_off));
ep_adr = base_x + ep_off; // RVA to VA
return ep_adr;
}
#*************************************************
Это простейший пример GetEP(), но только боевая функция чуть чуть посерьезнее,
так как осуществляет такую огромную кучу всяких проверок. Но концепция приведе
нная выше правильная. И конечно же в данном случае Вы спрячете много чего от
отладчика, но бряк на ntdll, несработает, нет, нет, и еще раз нет, он пойдет
лесом, так как адрес EP у нас совершенно другой. Да да, самый яркий пример, это
когда парень в воскресенье подрывается с кровати и говорит, что емуу надо сроч
но на работу, а потом не звонит. если быть подробнее, то ОС никак не информиру
ет отладчик о передаче управления на EP и отладчик должен париться над этим сам
остоятельно, а не просить об этом на форуме, но так как отладчик идет лесом, я
и пишу свой обоснованный ответ, почему он туда пошел. Дизасемблирование тут то
же мало поможет так как они(дизассемблеры) сразу начинают с ЕР. а вот тут-то
без определения реальной ЕР не куда! Некоторые вири используют довольно хитрый
трюк, они как акробаты в цирке прыгают jump из TLS-callback’а, то есть, на сам
ом то деле они выполняют TLS-callback но без возврата управления. И в итоге на
ша любимая, красивая, оригинальная(это я про себя) ЕР идет к бабушке с пирожка
ми лесом и могут эти пиражки содержать что угодно (это я про ЕР). НО!!! НО!!!!
Начиная с XP, системный загрузчик выполняет ряд проверок (дабы не дать мистеру
смиту заразить матрицу)- и файлы, с точкой останова которые вылетают за преде
лы страничного образа, он просто поылат и не грузит в память. Хотя тут все ут
рированно, даже если бы он их грузил,то любой более менее нормальный авер, за-
рычал бы на вашу безобидную антиотладочную систему, так как такая ЕР уж очень
косо на него смотрит. Ну и какой смысл безобидную программу выдавать за вирус?
Тогда конечно же лучше всего закинуть ЕР в безобидный код, а из TLS-callback’а
совершить переход на тело.
#*************************************************
EntryPoint:
XOR EAX, EAX
PUSH EAX
CALL d, ds:[ExitProcess]
…
PassowrdBody:
…
…
…
TLS_Callback1:
ADD d, ds:[ESP+magic_offset], offset VirusBody
— offset EntryPoint
RETN 0Ch
#*************************************************
А вот после такого в США выбирают в президенты наштх афроамериканских друзей.
Я не рассистка конечно же, но просто в первом случае мы бы имели позорный jump
из TLS-callback’а. который бы потом пришлось маскировать с помощью математичес
ких преобразований, но целевой адрес перехода декодируется однозначно и палит.
А во втором случае TLS-callback добавляет какое-то значение к некоторой ячейке
памяти, лежащей в области стека, и возвращает управление системе. Человек с от
ладчиком чисто теоретически может трассировать миллионы тонн машинных инструк
ций, ответственных за инициализацию файла. Он может даже дождаться момента пе
редачи управления на точку входа или хотя бы область памяти, не принадлежащую
системе, а находящуюся в границах PE-файла или одной из динамических библиотек.
И тогда товарищ с удивлением обнаружит, что точка входа каким-то магическим об
разом ушла в запой! Вот только трассировать придется долго. А Аверы ничего на
скажут вашей маленькой приблуде, так как они не могут трассировать на живой ОС.
Откуда им знать, что именно находится в данной конкретной ячейке памяти? А что,
собственно говоря, там находится и как оно туда попадает?
Только стоить это будет не 50 и не 100 рублей.
|