Вопрос для Ms Rem!!!!

Тема в разделе "WASM.WIN32", создана пользователем LuckyDevil, 19 май 2005.

  1. wish3

    wish3 New Member

    Публикаций:
    0
    Регистрация:
    31 янв 2005
    Сообщения:
    29
    Адрес:
    Ukraine
    Спасибо. Еще один в догонку.

    Вы круто генерите внедряемый код, с помощью записи. Наверное что-то читали по соответствующих машынных кодах. Можете мне какието-то линки дать.

    А то по Ctrl+Alt+C - не очинь получаеться. Я интерисують генерацией динамического вызова функций с DLL, когда список параметров, типы, соглашение о вызове узнаются только во время исполнения.
     
  2. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem, kosyak tut PDOB_NAME_STRING(out_buffer)^.name := astring;, esli ne slojno to skaji kak ti ponimaesh eto virojenee?
     
  3. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    wish3

    Машинный код получить не сложно, для этого можно хотя-бы OllyDbg заюзать, или хиев.

    А динамический вызов длл описан в многих источниках достаточно хорошо и я думаю в комментариях не нуждается.



    LuckyDevil

    PDOB_NAME_STRING(out_buffer)^.name := astring

    Я это представляю так: поле name структуры DOB_NAME_STRING приравнивается к astring.

    Но как это будет представлять дельфи еще неизвестно, может лучше будет скопировать структуру ANSI_STRING с помощью RtlCopyMemory. Выглядеть это будет так:
    Код (Text):
    1. RtlCopyMemory(@DOB_NAME_STRING(out_buffer^).name, @astring, SizeOf(ANSI_STRING));
     
  4. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem, tvio variant nado budet proverit', ya toje dumal o copirovanii. potomu kak viyasnilos' chto

    PDOB_NAME_STRING(out_buffer)^.name := astring

    ravnosil'no vot etomu out_buffer := @astring;

    <font color="red]Но как это будет представлять дельфи еще неизвестно, может лучше будет скопировать структуру ANSI_STRING </font><!--color--> poprobuyu
     
  5. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    RtlCopyMemory какой аналог данной функции есть в ядре(NToskrnl)?

    Что-то я ее не нашел в lib-х.

    Наверное вот эта _memcpy?
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Код (Text):
    1. #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))




    Если не нашел в либах, то поищи в хедерах ддк.
     
  7. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    не получается вот это RtlCopyMemory(@DOB_NAME_STRING(out_buffer^).name, @astring, SizeOf(ANSI_STRING));

    почему-то результат тот же(out_buffer := @astring;), что-то тут вовсе ничего не понимаю
     
  8. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem, быть может это выглядить жутко не праильно но я делаю так:

    memcpy(Pchar(LongInt(out_buffer)+12),@astring,astring.Length);

    но результат остается не изменным, мне не удается скопировать данные в требуемый адрес(смещение)
     
  9. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    LuckyDevil

    Тут поможет только проверка под отладчиком. Ставь софтайс наконец и медитируй...
     
  10. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Ms Rem, припух и устал я что-то ))

    слушай а как это вырожение можно представить в дельфи:

    pDeviceObject->Flags &= (~DO_DEVICE_INITIALIZING);

    так:

    pDeviceObject^.Flags := pDeviceObject^.Flags and (DO_DEVICE_INITIALIZING xor DO_DEVICE_INITIALIZING);???????
     
  11. Max

    Max Member

    Публикаций:
    0
    Регистрация:
    22 май 2003
    Сообщения:
    192
    LuckyDevil

    ...and not DO_DEVICE_INITIALIZING;
     
  12. electron

    electron New Member

    Публикаций:
    0
    Регистрация:
    26 май 2005
    Сообщения:
    32
    У меня проблема с отктытием секции(ZwOpenSection) вот код



    ...

    .data

    hSection dd ?

    ObString UNICODE_STRING <>

    ustr dw '\','D','e','v','i','c','e','\','P','h','y','s',\

    'i','c','a','l','M','e','m','o','r','y',0

    ...



    .code

    start:

    invoke RtlInitUnicodeString,offset ObString,offset ustr

    lea ecx,oa

    InitializeObjectAttributes ecx,offset ObString,OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE,NULL,NULL

    invoke ZwOpenSection,offset hSection,READ_CONTROL or WRITE_DAC,offset oa

    ....



    После этого в eax возвращается ошибка STATUS_DATATYPE_MISALIGNMENT,

    не могу понять где я напортачил,может кто подскажет.

    Заранее thx.

    MsRem статьи что надо.
     
  13. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    electron

    На асме это есть в коде phide от 90210.
     
  14. electron

    electron New Member

    Публикаций:
    0
    Регистрация:
    26 май 2005
    Сообщения:
    32
    Ms Rem Не знаешь почему открытие секции(ZwOpenSection) в

    win2003sp1 возвращает

    STATUS_ACCESS_DENIED,хотя в xpsp2 всё OK.



    phide:

    PH_ERR_OPEN_SECTION
     
  15. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    electron

    Незнаю, к сожалению нет под рукой Win2003 чтобы проверить.

    Возможно мешают установленные антивирусы.
     
  16. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    Всем доброго!

    Ms Rem, как всегда я с вопросом к тебе, как помнишь я тут парюсь с дельфи, вообщем не все моменты мне известны и я их пропускал без внимания, но рано или поздно все равно с этим столкнешься...

    вот часть структуры _IO_STACK_LOCATION:
    Код (Text):
    1.  
    2. typedef struct _IO_STACK_LOCATION {
    3.   UCHAR  MajorFunction;
    4.   UCHAR  MinorFunction;
    5.   UCHAR  Flags;
    6.   UCHAR  Control;
    7.   union {
    8.         //
    9.         // Parameters for IRP_MJ_CREATE
    10.         //
    11.         struct {
    12.             PIO_SECURITY_CONTEXT SecurityContext;
    13.             ULONG Options;
    14.             USHORT POINTER_ALIGNMENT FileAttributes;
    15.             USHORT ShareAccess;
    16.             ULONG POINTER_ALIGNMENT EaLength;
    17.         } Create;
    18.         //
    19.         // Parameters for IRP_MJ_READ
    20.         //
    21.         struct {
    22.             ULONG Length;
    23.             ULONG POINTER_ALIGNMENT Key;
    24.             LARGE_INTEGER ByteOffset;
    25.         } Read;
    26.         //
    27.         // Parameters for IRP_MJ_WRITE
    28.         //
    29.         struct {
    30.             ULONG Length;
    31.             ULONG POINTER_ALIGNMENT Key;
    32.             LARGE_INTEGER ByteOffset;
    33.         } Write;
    34. ...
    35.  


    изначально я игнорировал вот это определение в типах POINTER_ALIGNMENT, но сейчас у меня кажется из-за этого возникла проблема. Насколько я понимаю это выравнивание по границам байтам?

    Я в этом нифига не смыслю, можно ли что-то сделать с этим в дельфи?
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    LuckyDevil

    Вот объявление:
    Код (Text):
    1. #if defined(_WIN64)
    2. #define POINTER_ALIGNMENT DECLSPEC_ALIGN(8)
    3. #else
    4. #define POINTER_ALIGNMENT
    5. #endif




    Т.е. это означает выравнивание по границе 8 под Win64, под Win32 ничего не происходит.
     
  18. LuckyDevil

    LuckyDevil New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2005
    Сообщения:
    278
    Адрес:
    Uzbekistan
    IceStudent, т.е. если я использую 32 разрядную платформу, то это определение не используется.

    IceStudent,thx.