1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

WriteFile

Тема в разделе "WASM.BEGINNERS", создана пользователем fragment, 11 май 2010.

Статус темы:
Закрыта.
  1. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    [​IMG]
    http://images.netbynet.ru/img.php?bfe8643caedbb27a07eb3065196d193e.png

    не палучается

    http://pastebin.com/Z0sPJr1v
     
  2. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    http://pastebin.com/iPyU6CPU

    все разобрался, всем спасибо! :)
     
  3. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Не получается создать фаил в системной дериктории Windows Vista
    делаю так...

    Код (Text):
    1. GetSystemDirectoryA PROTO :DWORD,:DWORD
    2. push 260h
    3. push offset Buff_1
    4. call GetSystemDirectoryA
    5.  
    6. .data?
    7. Buff_1 db 260h dup(?)
    8. hFile dd ?
    9. pBytesWritten dw ?
    10.  
    11. .data
    12. exename  db "file.exe",0
    13.  
    14. .code
    15.  
    16. lstrcatA PROTO :DWORD,:DWORD
    17. push offset exename
    18. push offset Buff_1
    19. call lstrcatA
    20.  
    21. CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    22. push 0h
    23. push 0h
    24. push 2h
    25. push 0h
    26. push 1h+2h
    27. push 80000000h+40000000h
    28. push offset Buff_1
    29. call CreateFileA
    30.  
    31. mov hFile,eax
    32.  
    33. WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    34. push 0h
    35. push offset pBytesWritten
    36. push filelen
    37. push offset file
    38. push eax
    39. call WriteFile
    40.  
    41. CloseHandle PROTO :DWORD
    42. push hFile
    43. call CloseHandle
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    1. Что возвращает GetLastError() ? Посмотри что возвращает и сам поймешь что нет так :) она экономит твое время.
    2. Зачем писать "80000000h+40000000h", когда вместо них можно использовать константы ?
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    В общем там в пути к файлу ты забыл добавить "\"
     
  6. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
  7. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    папробуем с ластерраром) спасибо!
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    Когда ьі получаешь путь к папке sytem32 то в конце нет слеша.
    То есть ты такой файл создаешь:
    C:\windows\system32file.exe
     
  9. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    я же написал exename db "\nvssvc.exe",0 этого что не достатачно?
     
  10. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Код (Text):
    1. ErrorCode dd ?
    2.  
    3. .code
    4.  
    5. WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    6. push 0h
    7. push offset pBytesWritten
    8. push filelen
    9. push offset file
    10. push eax
    11. call WriteFile
    12.  
    13. GetLastError PROTO
    14. call GetLastError
    15.  
    16. mov ErrorCode ,eax
    17.  
    18. MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    19. push 00000030h
    20. push 0h
    21. push offset ErrorCode
    22. push 0h
    23. call MessageBoxA
    почему не работет? как добавить конец строки?

    [​IMG]
     
  11. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    fragment, вы отладчик пробовали включать вообще и там дебажить свой код?

    GetLastError возвращает номер ошибки в hex, а вы его пытаетесь передать как аргумент MessageBox. Вначале нужно преобразовать в десятичное и затем в ASCII
     
  12. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Flint_ta паслушай я догадываюсь ... а как реализавать то?
     
  13. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    функа wsprintfA

    PUSH DWORD PTR DS:[Hex_Error]
    PUSH offset Format; "%d"
    PUSH offset Buffer
    CALL wsprintfA
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    fragment
    F2 в отладчике, если мозг отсутствует.
     
  15. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Маленькая поправка к Clerkу - F2 в отладчике помогает даже если мозг присутствует :))
    Можно обойтись и без GetLastError -> wsprintfA -> MessageBox, а прямо в Оле код последней ошибки и смотреть вместе с его текстовым именем.
     
  16. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    CreateFileA

    ERROR_ACCESS_DENIED
    5 (0x5) Access is denied.

    :\ ...
     
  17. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Похоже не хватает прав для создания файла.
     
  18. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    у меня еще вопрос для савсем маленьких, Вы уж извените если что

    Код (Text):
    1. ...
    2.  
    3. CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    4. push 0h
    5. push 0h
    6. push 2h
    7. push 0h
    8. push 1h+2h
    9. push 80000000h+40000000h
    10. push offset Buff_1
    11. call CreateFileA
    12.  
    13. mov hFile,eax
    14.  
    15. call ErrorP
    16.  
    17. WriteFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    18. push 0h
    19. push offset pBytesWritten
    20. push TrojanLen
    21. push offset Trojan
    22. push offset hFile
    23. call WriteFile
    24.  
    25. call ErrorP
    26.  
    27. CloseHandle PROTO :DWORD
    28. push hFile
    29. call CloseHandle
    30.  
    31. ....
    32.  
    33. ErrorP proc
    34.  
    35.     GetLastError PROTO
    36.     call GetLastError
    37.  
    38.     wsprintfA PROTO C :VARARG
    39.     push eax
    40.     push offset sfc
    41.     push offset ErrorCode
    42.     call wsprintfA
    43.  
    44.     MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD
    45.     push 00000030h
    46.     push 0h
    47.     push offset ErrorCode
    48.     push 0h
    49.     call MessageBoxA
    50.  
    51.     ret
    52.  
    53. ErrorP endp
    54.  
    55. end start
    программа падает после первого кода
     
  19. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    а я догадовался ведь.
     
  20. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
Статус темы:
Закрыта.