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

WriteFile

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

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    fragment
    Вы прочитать хотябы пару предложений можите по линку на русском ?
    Ведь я специально выделяю имена жирным, чтобы они выделялись в тексте. Там по первому линку чётко написано:
    Тоесть пользовательские коды ошибок не подлежат переводу. Может у вас директория открыта ?
     
  2. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    Clerk
    Код ошибки в ядре можно получить через RtlGetLastNtStatus() ? А ее вызывать можно из юзер мода, или ядра нужно??
    И как потом код ошибки ядра в текст перевести?
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    XshStasX
    Статус это код возвращаемый ядром в регистре Eax из сервиса, либо загружаемый непосредственно в TEB(шадов) и коды передаваемые ядром в калбэки(except.). Высокоуровневый интерфейс(не нэйтив) сохраняет статус в TEB, откуда его можно извлечь например посредством RtlGetLastNtStatus().
    Перевести в текст и вывести можно с помощью сервиса NtRaiseHardError, либо использовать собственную базу(гдето был семпл).
     
  4. fragment

    fragment New Member

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


    Код (Text):
    1. GetSystemDirectoryA PROTO :DWORD,:DWORD
    2. push 260h
    3. push offset Buff_1
    4. call GetSystemDirectoryA
    5.  
    6. lstrcatA PROTO :DWORD,:DWORD
    7. push offset exename
    8. push offset Buff_1
    9. call lstrcatA
    10.  
    11. CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    12. push 0h
    13. push 0h
    14. push 2h
    15. push 0h
    16. push 1h+2h
    17. push 80000000h+40000000h
    18. push offset Buff_1
    19. call CreateFileA
    а незнаете случайно как избавица от диагноза MULDROP.Trojan , он ругается на hex другога PE файла в моём

    где-то слышал что компилятор masm добавляет в файлы много лишнего , это так?
    отладчиком и дисассемблером пока не пользуюсь , да и сравнить особо не с чем

    [​IMG]
    может есть какой способ разделить участок нужных мне байт?
     
  5. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    А ты не пробивал шифровать нужные тебе байты?
    К примеру можно найти средние значение среди нужных байт и вычесть его из всех остальных байт.
    и потом сохранить средние значение + нужные байты.
    Ну и потом уже когда нужно расшифровывать .
     
  6. fragment

    fragment New Member

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

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    fragment
    Что вы прыгаете от одной проблемы к другой. Какой статус функа возвращает ?
     
  8. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    CreateFile()
    RtlGetLastNtStatus C0000022 STATUS_ACCESS_DENIED
    GetLastError 5 (0x5) Access is denied
     
  9. Clerk

    Clerk Забанен

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

    fragment New Member

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

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    пример шифрует строку, размер строки должен быть кратен 4 байтам.
    Код (Text):
    1. .const
    2.  size_code_crip  dw 12          ;размер кода для шифровки
    3. .data?
    4. passw  db ?                ! не забудь где то сохранить
    5. .data
    6.  
    7.  code_to_crip db  "code_to_crip",13,10,0
    8.  
    9. .code
    10. start:
    11. invoke  AllocConsole
    12. invoke  StdOut,addr code_to_crip
    13.  
    14. ;------------шифруем-----------------------
    15.  xor eax,eax
    16.  mov ecx,dword ptr [ size_code_crip] ; в есх нужно записать размер кода для шифрования
    17.  shr ecx,2
    18. @L1:
    19.  add eax,[offset code_to_crip + 4*ecx-4] ;code_to_crip массив с кодом
    20.  dec ecx
    21. jnz @L1
    22.  mov ecx,dword ptr [ size_code_crip] ; в есх нужно записать размер кода для шифрования
    23.  shr ecx,2
    24. @L2:
    25.  sub  [offset code_to_crip +4*ecx-4],eax
    26.  dec ecx
    27. jnz @L2
    28. lea ecx,[offset passw]
    29. mov [ecx],eax  ; наш пароль )
    30.  
    31. invoke  StdOut,addr code_to_crip
    32.  
    33. ;----------------------------------------------------
    34. ;в итоге нужно будет еще где то сохранить значение из регистра al которое будет паролем для расшифровки
    35. ; этот расшифровывает
    36. lea ecx,[offset passw]
    37. mov eax, [ecx]  ; наш пароль )
    38.  mov ecx,dword ptr [ size_code_crip] ; в есх нужно записать размер кода для шифрования
    39.  shr ecx,2
    40. @L3:
    41.  add  [offset code_to_crip + 4*ecx-4],eax ;code_to_crip массив с кодом
    42.  dec ecx
    43. jnz @L3
    44.  
    45.  
    46. invoke  StdOut,addr code_to_crip
    47. push 10000
    48. call Sleep
    49. end start
     
  12. fragment

    fragment New Member

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

    file db 04dh, 05ah, 090h, 000h, 003h, 000h, 000h, 000h, 004h, 000h
    db 000h, 000h, 0ffh, 0ffh, 000h, 000h, 0b8h, 000h, 000h, 000h
    db 000h, 000h, 000h, 000h, 040h, 000h, 000h, 000h, 000h, 000h
    db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
    db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h
    db 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h, 000h

    при компиляции вычесть из каждого байта (бита) по еденици , а при запуске программы добавить их, только вот незнаю можно ли менять данные в прцесе компиляции

    на самом деле ни какой криптор не нужен а антивирусы ругаются почему-то на ShellExecuteA() , с CreateProcess() или WinExec() все будет работать нормально... я так думал... но всерано программа определяется как MULDROP

    Полажился на удачу и воспользывался upx и PECompact , удача мне не помагла :\

    [​IMG]
     
  13. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    SetSecurityInfo()
    STATUS_OBJECT_NAME_NOT_FOUND ((NTSTATUS)0xC0000034L)

    Ошибка, мне нужно указать права чтобы все дочернии обекты и функции имели тоже больше превелегий.
     
  14. fragment

    fragment New Member

    Публикаций:
    0
    Регистрация:
    11 июн 2008
    Сообщения:
    266
    Код (Text):
    1. .data?
    2. STARTUPINFO STRUCT
    3.   cb                DWORD      ?
    4.   lpReserved        DWORD      ?
    5.   lpDesktop         DWORD      ?
    6.   lpTitle           DWORD      ?
    7.   dwX               DWORD      ?
    8.   dwY               DWORD      ?
    9.   dwXSize           DWORD      ?
    10.   dwYSize           DWORD      ?
    11.   dwXCountChars     DWORD      ?
    12.   dwYCountChars     DWORD      ?
    13.   dwFillAttribute   DWORD      ?
    14.   dwFlags           DWORD      ?
    15.   wShowWindow       WORD       ?
    16.   cbReserved2       WORD       ?
    17.   lpReserved2       DWORD      ?
    18.   hStdInput         DWORD      ?
    19.   hStdOutput        DWORD      ?
    20.   hStdError         DWORD      ?
    21. STARTUPINFO ENDS
    22.  
    23. PROCESS_INFORMATION STRUCT
    24.   hProcess      DWORD      ?
    25.   hThread       DWORD      ?
    26.   dwProcessId   DWORD      ?
    27.   dwThreadId    DWORD      ?
    28. PROCESS_INFORMATION ENDS
    29.  
    30. SECURITY_ATTRIBUTES STRUCT
    31.   nLength               DWORD      ?
    32.   lpSecurityDescriptor  DWORD      ?
    33.   bInheritHandle        DWORD      ?
    34. SECURITY_ATTRIBUTES ENDS
    35.  
    36. .code
    37. CreateProcessA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
    38. push offset PROCESS_INFORMATION
    39. push offset STARTUPINFO
    40. push 0
    41. push 0
    42. push 20h
    43. push 1
    44. push 0
    45. push offset SECURITY_ATTRIBUTES
    46. push offset SECURITY_ATTRIBUTES
    47. push offset Buff_1
    48. call CreateProcessA
    программа вылетает с ошибкой, что не так?
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    fragment
    Структуры нужно заполнять перед использованием. Но не в этом суть. Вы должны изучить это http://www.wasm.ru/forum/viewtopic.php?id=32181&p=1 и не задавать вопросов, пока не поймёте. Тут не чат чтоб все ваши ошибки разбирать.
     
Статус темы:
Закрыта.