Не инжектирует DLL в процесс

Тема в разделе "WASM.BEGINNERS", создана пользователем YaMolekula, 17 мар 2011.

  1. YaMolekula

    YaMolekula New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2009
    Сообщения:
    20
    Всем Доброго Времени Суток! Написал небольой DLL, чтобы внедрить его в блокнот.
    Сама DLL выглядит так:
    Код (Text):
    1. format PE GUI 4.0 DLL
    2.  
    3. include 'win32ax.inc'
    4.  
    5.  
    6. lf1 LOGFONT \
    7. 12,7,\ ;lfHeight & lfWidth
    8. 0,0,\ ;lfEscapement(наклон отн. Х в 10х градуса) & lfOrientation
    9. FW_NORMAL,0,0,0,\ ;lfWeight & lfItalic & lfUnderline & lfStrikeOut
    10. RUSSIAN_CHARSET,\ ;lfCharSet
    11. OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,\ ;lfOutPrecision & lfClipPrecision & lfQuality
    12. FF_MODERN+FIXED_PITCH,\ ;lpPitchAndFamily ;FIXED_PITCH=моноширинный=красивосорцен Ж)
    13. "Tw Cen MT" ;lfFaceName
    14.  
    15. lf2 LOGFONT \
    16. 12,7,\ ;lfHeight & lfWidth
    17. 0,0,\ ;lfEscapement(наклон отн. Х в 10х градуса) & lfOrientation
    18. FW_NORMAL,0,TRUE,0,\ ;lfWeight & lfItalic & lfUnderline & lfStrikeOut
    19. RUSSIAN_CHARSET,\ ;lfCharSet
    20. OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,\ ;lfOutPrecision & lfClipPrecision & lfQuality
    21. FF_MODERN+FIXED_PITCH,\ ;lpPitchAndFamily ;FIXED_PITCH=моноширинный=красивосорцен Ж)
    22. "courier new"
    23. msg db 'fedcb9870',0
    24. hw rd 1
    25. retval dd 1 DUP(?)
    26. buff db 32  DUP(?)
    27.  
    28.  
    29. entry $
    30.  cmp      dword [esp+8], DLL_PROCESS_ATTACH
    31.   jnz      lb
    32. ;invoke ShellExecute,NULL,NULL,'notepad.exe',NULL,NULL,SW_SHOW
    33. ;--------помещаем текст--------------------------
    34. invoke MessageBox,HWND_DESKTOP," После нажатия ОК откроется шрифт по настройкам меню",invoke GetCommandLine,MB_OK
    35. ;invoke FindWindowExA,<invoke FindWindow,'notepad',0>,0,'edit',0
    36. add    [retval],eax
    37. mov    [hw],eax
    38. invoke SendMessageA,[hw],WM_SETTEXT,0,msg
    39. invoke MessageBox,0,"stop","stop",MB_OK
    40. ;---------проверяем-------------------------------
    41. add    [retval],eax                      ;|
    42. invoke wsprintfA,buff,"eax=%d",[retval]                  ;|
    43. invoke MessageBox,HWND_DESKTOP,buff,"Вывод ",0;|
    44. ;-------------------------------------------------
    45.  
    46. ;--------первый вариант шрифта---------------------
    47. invoke MessageBox,HWND_DESKTOP,"После нажатия ОК откроется изменённый шрифт(первый вариант)",invoke GetCommandLine,MB_OK
    48. invoke CreateFontIndirectA,lf1
    49. ;---------проверяем-------------------------------------------
    50. mov [retval],eax                                      ;|
    51. invoke wsprintfA,buff,"CreateFontIndirectA(lf1)=%d",[retval]     ;|
    52. invoke MessageBox,HWND_DESKTOP,buff,"Вывод ",0        ;|
    53. ;-------------------------------------------------------------
    54.  
    55. invoke SendMessageA,[hw],WM_SETFONT,eax,TRUE
    56. ;---------проверяем-------------------------------------
    57. mov [retval],eax                                     ;|
    58. invoke wsprintfA,buff," SendMessageA(lf1)=%d",[retval]  ;|
    59. invoke MessageBox,HWND_DESKTOP,buff,"Вывод ",0       ;|
    60. ;-------------------------------------------------------
    61. invoke DeleteObject,lf1
    62.  
    63.  
    64. ;-------второй вариант шрифта-----------------------------
    65. invoke MessageBox,HWND_DESKTOP,"После нажатия ОК откроется изменённый шрифт(второй вариант)",invoke GetCommandLine,MB_OK
    66. invoke CreateFontIndirectA,lf2
    67. ;---------проверяем-------------------------------------------
    68. mov [retval],eax                                       ;|
    69. invoke wsprintfA,buff,"CreateFontIndirectA(lf2)=%d",[retval]      ;|
    70. invoke MessageBox,HWND_DESKTOP,buff,"Вывод ",0         ;|
    71. ;-------------------------------------------------------------
    72. invoke SendMessageA,[hw],WM_SETFONT,eax,TRUE
    73. ;---------проверяем-------------------------------------
    74. mov [retval],eax                                    ;|
    75. invoke wsprintfA,buff," SendMessageA(lf1)=%d",[retval]  ;|
    76. invoke MessageBox,HWND_DESKTOP,buff,"Вывод ",0       ;|
    77. ;-------------------------------------------------------
    78. invoke DeleteObject,lf2
    79. ;--------завершаем работу---------
    80. lb:
    81.   mov      eax, 1
    82.   retn     0Ch
    83.  
    84.  
    85. section '.idata' import data readable
    86.  
    87.   library kernel,'KERNEL32.DLL',\
    88.       user,'USER32.DLL',\
    89.       shell,'SHELL32.DLL',\
    90.       gdi,'GDI32.DLL'
    91.  
    92.   import kernel,\
    93.      GetCommandLine,'GetCommandLineA',\
    94.      ExitProcess,'ExitProcess'
    95.  
    96.   import user,\
    97.      MessageBox,'MessageBoxA',\
    98.      FindWindowExA,'FindWindowExA',\
    99.      FindWindow,'FindWindowA',\
    100.      wsprintfA,'wsprintfA',\
    101.      SendMessageA,'SendMessageA'
    102.  
    103.   import shell,\
    104.      ShellExecute,'ShellExecuteA'
    105.  
    106.   import gdi,\
    107.      CreateFontIndirectA,'CreateFontIndirectA',\
    108.      DeleteObject,'DeleteObject'
    109.  
    110.  
    111. section '.edata' export data readable
    112.  
    113.  
    114. section '.reloc' fixups data discardable
    А программа, запускающая процесс и внедряющая в него код, выглядит так:

    Код (Text):
    1. format PE GUI 4.0
    2. include 'win32ax.inc'
    3.  
    4.  
    5. .data
    6. ProcessName db 'C:\Windows\notepad.exe', 0
    7. DllName     db 'progDLL.DLL', 0
    8. NameSize    = $-DllName
    9. hFile   rd 1       ;хендл файла
    10. mem rd 1       ;хранит адрес на свободную память
    11. size    rd 1       ;размер DLL-ки
    12. p_info  PROCESS_INFORMATION   ;информация о процессе
    13. s_info  STARTUPINFO       ;тоже
    14.  
    15. .code
    16. start:
    17. ;---заполняем s_info---------------------------------
    18. mov [s_info.cb],sizeof.STARTUPINFO                  ;|
    19. mov [s_info.hStdError],0                                   ;|
    20. mov [s_info.hStdOutput],0                       ;|
    21. mov [s_info.hStdInput],0                                   ;|
    22. mov [s_info.dwFlags],100h ; STARTF_USESTDHANDLES|
    23. ;----------------------------------------------------
    24. ; процесс для инжекта
    25. invoke CreateProcess,"C:\Windows\notepad.exe",NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,NULL, s_info, p_info
    26.  
    27. ;-------------алгоритм получения размера файла-----------------
    28. invoke CreateFile,DllName,GENERIC_READ,FILE_SHARE_READ,NULL,\ ;|
    29. OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL                    ;|
    30. mov    [hFile],eax  ;теперь у нас есть хендл файла                     ;|
    31. invoke GetFileSize,[hFile],NULL                                    ;|
    32. mov    [size],eax ;и размер                                                      ;|
    33. ;-----------------------------------------------------------------
    34.  
    35. ;--------------------инжект процесса notepad-------------------------------
    36. invoke VirtualAllocEx,[p_info.hProcess],0,[size],MEM_COMMIT+MEM_RESERVE,PAGE_EXECUTE_READWRITE
    37. mov  [mem], eax
    38. invoke   WriteProcessMemory,[p_info.hProcess],[mem], DllName, NameSize, 0
    39. invoke   CreateRemoteThread, [p_info.hProcess], 0, 0, [LoadLibrary],[mem], 0, 0
    40. invoke   CloseHandle,[p_info.hProcess]
    41. @@:
    42. ret
    43. .end start
    Но вылетает системное сообщение с заголовком "Ошибочный образ", и в нём говорится, что моя DLL не предназначена для Windows или содержит ошибку. Я уверен что виновата DLL. Что же в ней может быть не так?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    YaMolekula
    Пустая секция edata для чего нужна?
     
  3. YaMolekula

    YaMolekula New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2009
    Сообщения:
    20
    Заработало! Спасибо, l_inc! Надоже, всё из-за пустой секции!
    Это после предыдущих версий осталось.
     
  4. YaMolekula

    YaMolekula New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2009
    Сообщения:
    20
    Разкомментил строку в DLL с поиском окна. Текст программа нормально вписала, создала первый шрифт. Но при отправке шрифта invoke SendMessageA,[hw],WM_SETFONT,eax,TRUE Блокнот просто перестаёт отвечать, даже не знаю в чём здесь могжет быть ошибка.
     
  5. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Вместо eax должно быть [retval]. В курсе что вызовы API портят регистры?
     
  6. YaMolekula

    YaMolekula New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2009
    Сообщения:
    20
    Заработал!! И первый шрифт и второй прописывает!!
    Я, по правде, думал что именно eax это не затрагивает, но сейчас на практике убедился в обратном.
     
  7. 737061

    737061 New Member

    Публикаций:
    0
    Регистрация:
    3 авг 2007
    Сообщения:
    74
    YaMolekula
    не пишите на ассемблере, а то больше головной боли у вас будет