Посл.ответ |
Сообщение |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 02 июня 2007 00:55 · Личное сообщение · #1
Вот вчем вопрос: пишу лечилку от вира. Но эта сволота убила нужные доки. Поэтому столкнулся с проблемою: 1) как вычислить size of image?
2) исходник какой нить проги на дельфе, которая работает с секциями?
3) как деасемблировать, тоесть E9E23CFBFF -> JMP 0040FCEE?
Или пример проги на Дельфе, которая умеет все выше перечисленоё
| Сообщение посчитали полезным: |
|
Ранг: 228.7 (наставник), 2thx Активность: 0.12↘0 Статус: Участник malware research
|
Создано: 02 июня 2007 01:16 · Личное сообщение · #2
AnXIouS пишет:
1) как вычислить size of image?
Поищи исходники SDTrestore, там был код, рассчитывающий GetTotalImageSize по секциям; он на С, но я не вижу причины, по которым тебе нужен имено дельфи-код.
AnXIouS пишет:
2) исходник какой нить проги на дельфе, которая работает с секциями
Если с С не cможешь перевести в Дельфи, то врядли стоит браться за работу с файлами РЕ-формата...
AnXIouS пишет:
3) как деасемблировать, тоесть E9E23CFBFF -> JMP 0040FCEE?
Например:
00400000 JMP 00500000 (E9FBFF0F00)
E9 - JMP
FBFF0F00 это число 0x000FFFFB (задом наперед) 0x000FFFFB = 0x00500000 - 0x00400000 - 0x5
(5 - длина команды, 5 байт)
----- Research is my purpose | Сообщение посчитали полезным: |
Ранг: 34.1 (посетитель) Активность: 0.02↘0 Статус: Участник
|
Создано: 02 июня 2007 01:23 · Поправил: Shad0vv · Личное сообщение · #3
Сдаётся мне цель как раз противоположная.
Но всё же.. Найди прогу от "PE optimizer" от Dr.Golova, вместе с ней идут сорсы, там как раз всё описано.
На счет дизассемблирования, в сети есть описание систематизации команд, я например это всё отрыл в книге Юрова "Assembler 2-е издание".
| Сообщение посчитали полезным: |
Ранг: 103.1 (ветеран), 3thx Активность: 0.07↘0.01 Статус: Участник
|
Создано: 02 июня 2007 08:49 · Личное сообщение · #4
AnXIouS
На wasm есть дизассемблерный движок на асме
----- Crack your mind, save the planet | Сообщение посчитали полезным: |
 Ранг: 282.8 (наставник), 24thx Активность: 0.26↘0 Статус: Участник win32.org.ru
|
Создано: 02 июня 2007 09:00 · Личное сообщение · #5
Styx пишет:
На wasm есть дизассемблерный движок на асме
Читай выше - нужно на дельфи... Есть дизасм движек, мб он на васме, от рема, написан на дельфи.
----- may all your PUSHes be POPed! | Сообщение посчитали полезным: |
Ранг: 191.8 (ветеран), 46thx Активность: 0.17↘0 Статус: Участник
|
Создано: 02 июня 2007 14:19 · Личное сообщение · #6
дельфи тоже люблю, но для разнообразия
http_//bigspider.altervista.org/CodingTutes/spider10.zip
http_//bigspider.altervista.org/ToolsAndProgs/spider20.zip
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 02 июня 2007 18:22 · Личное сообщение · #7
Во первых сенкс. Во вторых: с++ знаю недостаточно (опирался на инфу, вирусом снесённую) это 1; вирус неравнодушен к с++, а дельфи не трогает это 2;
люблю я дельфю...
С-шные исходняки всеравно пригодятся, так как для дельфи добра такой тематики мало.
| Сообщение посчитали полезным: |
Ранг: 22.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 03 июня 2007 01:07 · Личное сообщение · #8
>вирус неравнодушен к с++, а дельфи не трогает это 2
кинь семпл виря что-ли, а то что-то интересно, как это он такой избирательный...
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 03 июня 2007 07:20 · Личное сообщение · #9
Скинь мне на е-мейл свой е-мейл, и я те пришлю его.
| Сообщение посчитали полезным: |
Ранг: 22.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 03 июня 2007 08:58 · Личное сообщение · #10
забавно, а мыло я откуда узнаю? =)
check PM.
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 03 июня 2007 19:11 · Личное сообщение · #11
Ноччу будет. Бо инет через мабилу.
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2007 00:14 · Личное сообщение · #12
WolfHunter, уже отправил.
Я сегодня с ним немного разобрался: зовут его win32.expiro.c, выловил Нодом, но с лечением проблема.
По личной статистике добавлю: не трогает некоторые протекторы и пакеры, а также продукты Борландов. И файлы убил скорей всего не он.
| Сообщение посчитали полезным: |
 Ранг: 631.1 (!), 62thx Активность: 0.37↘0.01 Статус: Участник Автор VB Decompiler
|
Создано: 04 июня 2007 01:25 · Личное сообщение · #13
AnXIouS
ImageSize = ImageBase + LastSectionRVA + LastSectionSize
----- Никогда не делай то, что возможно. Стремись сделать то что невозможно впринципе! | Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2007 01:34 · Личное сообщение · #14
GPсH, вот это конкретно, сенкс.
Осталось только научится удалять секции, и УнВир будет готов. :-D
| Сообщение посчитали полезным: |
Ранг: 14.1 (новичок) Активность: 0=0 Статус: Участник
|
Создано: 04 июня 2007 07:35 · Личное сообщение · #15
GPcH пишет:
ImageSize = ImageBase + LastSectionRVA + LastSectionSize
ImageBase то, зачем?
| Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 04 июня 2007 10:48 · Поправил: Hellspawn · Личное сообщение · #16
ganjman пишет:
ImageBase то, зачем?
кстати да, база не нужна, да и размер (если считать таким образом) может получиться не точный...
лучше всего пройтись по секциям и суммировать их размер, делая поправку на выравнивание!
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник
|
Создано: 04 июня 2007 11:03 · Личное сообщение · #17
Hellspawn
Это зачем? Не могу представить себе такую ситуацию. Или ты про то, что последня секция в списке может оказаться не последней по размещению в памяти?
| Сообщение посчитали полезным: |
Ранг: 228.7 (наставник), 2thx Активность: 0.12↘0 Статус: Участник malware research
|
Создано: 04 июня 2007 11:04 · Личное сообщение · #18
#define ibaseDD *(PULONG)&ibase
BOOL GetHeaders(PCHAR ibase, PIMAGE_FILE_HEADER *pfh, PIMAGE_OPTIONAL_HEADER *poh, PIMAGE_SECTION_HEADER *psh)
{
PIMAGE_DOS_HEADER mzhead=(PIMAGE_DOS_HEADER)ibase;
if((mzhead->e_magic!=IMAGE_DOS_SIGNATURE) || (ibaseDD[mzhead->e_lfanew]!=IMAGE_NT_SIGNATURE))
return FALSE;
*pfh=(PIMAGE_FILE_HEADER)&ibase[mzhead->e_lfanew];
if (((PIMAGE_NT_HEADERS)*pfh)->Signature!=IMAGE_NT_SIGNATURE)
return FALSE;
*pfh=(PIMAGE_FILE_HEADER)((PCHAR)*pfh+sizeof(IMAGE_NT_SIGNATURE));
*poh=(PIMAGE_OPTIONAL_HEADER)((PCHAR)*pfh+sizeof(IMAGE_FILE_HEADER));
if ((*poh)->Magic!=IMAGE_NT_OPTIONAL_HDR32_MAGIC)
return FALSE;
*psh=(PIMAGE_SECTION_HEADER)((PCHAR)*poh+sizeof(IMAGE_OPTIONAL_HEADER) );
return TRUE;
}
int GetTotalImageSize(PIMAGE_DOS_HEADER pdh, PIMAGE_FILE_HEADER pfh, PIMAGE_OPTIONAL_HEADER poh, PIMAGE_SECTION_HEADER psh)
{
int Size=0;
int Alignment = poh->SectionAlignment;
if(poh->SizeOfHeaders % Alignment == 0)
{
Size += poh->SizeOfHeaders;
} else
{
int Mul = poh->SizeOfHeaders / Alignment;
Mul++;
Size += (Mul*Alignment);
}
unsigned int i;
for(i=0; i < pfh->NumberOfSections; i++)
{
if(psh[i].Misc.VirtualSize)
{
if(psh[i].Misc.VirtualSize % Alignment == 0)
{
Size+= psh[i].Misc.VirtualSize;
} else
{
int Mul = psh[i].Misc.VirtualSize / Alignment;
Mul++;
Size += (Mul*Alignment);
}
}
}
return Size;
}
Похожий код используется в SDTrestore.
----- Research is my purpose | Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 04 июня 2007 11:09 · Поправил: Hellspawn · Личное сообщение · #19
asd пишет:
Это зачем? Не могу представить себе такую ситуацию. Или ты про то, что последня секция в списке может оказаться не последней по размещению в памяти?
много чего может быть, поверь мне на слово...
Error_Log - вот корректный код, могу на дельфи для кучи кинуть
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник
|
Создано: 04 июня 2007 11:41 · Личное сообщение · #20
Hellspawn
Неа, не поверю. За 2 года ниразу не натыкался на файл, для которого это не работало бы.
| Сообщение посчитали полезным: |
Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник
|
Создано: 04 июня 2007 12:19 · Личное сообщение · #21
Error_Log
*psh=(PIMAGE_SECTION_HEADER)((PCHAR)*poh+sizeof(IMAGE_OPTIONAL_HEADER) );
Так делать не стоит. Заголовки секций не обязательно идут следом за OptionalHeader.(пример - файлы пакованые винупаком 0.39, и ещё где-то видел.)
начало таблица секций = адрес начала OptionalHeader + поле SizeOfOptionalHeader которое лежит в FileHeader
if(psh[i].Misc.VirtualSize % Alignment == 0)
{
Size+= psh[i].Misc.VirtualSize;
} else
{
int Mul = psh[i].Misc.VirtualSize / Alignment;
Mul++;
Size += (Mul*Alignment);
}
тут другая проблема - если поле VirtualSize = 0, то следует брать поле SizeOfRawData и ровнять его по SectionAlignment. Могу выложить такой файлик.
И ещё я сам не пробовал, но такое вроде возможно сделать, хотя и изврат. Если между секциями дырки будут - то твой алгоритм тоже не сработает.
| Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 04 июня 2007 14:09 · Поправил: Hellspawn · Личное сообщение · #22
asd
у меня есть парочка, только щас найти не могу (какие-то скремблеры были, это типо защита от
дампа была)  так как пока не занимаюсь анализатором...
з.ы. так что с сабжем? написал ТС антивиря?
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 22.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2007 15:30 · Личное сообщение · #23
>И ещё я сам не пробовал, но такое вроде возможно сделать, хотя и изврат.
>Если между секциями дырки будут - то твой алгоритм тоже не сработает.
а я вот попробовал. масм32 + ручки. результат в аттаче.
01.exe - дыра между хидером и 1-й секцией.
02.exe - 01.exe, только SizeOfHeaders изменен так чтоб после выравнивания не было дыры.
03.exe - дыра между 1-й и 2-й секциями.
на Вин2k запускается только 02.exe.
>з.ы. так что с сабжем? написал ТС антивиря?
what is "ТС"? 0cb6_04.06.2007_CRACKLAB.rU.tgz - 1.rar
| Сообщение посчитали полезным: |
Ранг: 22.2 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2007 15:36 · Личное сообщение · #24
ЗЫ лечилка для сабжа пишется за пол часа, или час максимум(это если с ПЕ умно работать).
| Сообщение посчитали полезным: |
Ранг: 50.2 (постоянный) Активность: 0.01↘0 Статус: Участник
|
Создано: 04 июня 2007 16:37 · Личное сообщение · #25
WolfHunter пишет:
what is "ТС"?
AFAIK, Topic Starter
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 05 июня 2007 00:52 · Личное сообщение · #26
Написал, но только на половину: никак с секциями не могу разобратся, чото не прёт удаление.
| Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор Author of DiE
|
Создано: 05 июня 2007 14:33 · Личное сообщение · #27
AnXIouS пишет:
Написал, но только на половину: никак с секциями не могу разобратся, чото не прёт удаление.
уменьшаешь кол-во секицй в заголовке на 1, трёшь заголовок секции (40 байт), пересчитываешь
sizeofimage, и сохраняешь всё это дело в новый файл, но без посл, секции...  наверное как-то так...
----- [nice coder and reverser] | Сообщение посчитали полезным: |
Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник
|
Создано: 05 июня 2007 15:13 · Личное сообщение · #28
или лучьше просто OEP найди и поставь в заголовок, если конечно вир что-нибудь наподобии UEP не использует - тогда ищи переход на вирус и анализируй, как он старые байты востанавливает.
| Сообщение посчитали полезным: |
Ранг: 22.6 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 06 июня 2007 00:16 · Личное сообщение · #29
С удалением секций более-менее разобрался, завтра должен дописать. Но ещо несколько вопросов: чо за фрукт - боундимпорт; и какой использовать вид доступа к файлу, какой лучше - паскалевский, маппинга или файлстрин.
| Сообщение посчитали полезным: |
Ранг: 162.2 (ветеран) Активность: 0.09↘0 Статус: Участник
|
Создано: 06 июня 2007 05:15 · Личное сообщение · #30
AnXIouS пишет:
боундимпорт
Это один из видов импорта. Почитать можно, к примеру в одной из статей(2 вроде) из цикла "От зелёного к красному" - есть на васме. Лучше не мучайчся, а просто сотри указатель на него.
| Сообщение посчитали полезным: |