Переработка си хидеров в fasm

Тема в разделе "WASM.BEGINNERS", создана пользователем common_up, 23 июл 2010.

  1. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    У нас есть хидер от цэ. Две структуры нужно переделать на фасм.
    Код (Text):
    1.           typedef struct _PEB                                  // 65 elements, 0x210 bytes (sizeof)      
    2.           {                                                                                              
    3. /*0x000*/     UINT8        InheritedAddressSpace;                                                        
    4. /*0x001*/     UINT8        ReadImageFileExecOptions;                                                      
    5. /*0x002*/     UINT8        BeingDebugged;                                                                
    6. /*0x003*/     UINT8        SpareBool;                                                                    
    7. /*0x004*/     ULONG32      Mutant;                             // VOID*                                  
    8. /*0x008*/     ULONG32      ImageBaseAddress;                   // VOID*                                  
    9. /*0x00C*/     ULONG32      Ldr;                                // struct _PEB_LDR_DATA*                  
    10. /*0x010*/     ULONG32      ProcessParameters;                  // struct _RTL_USER_PROCESS_PARAMETERS*    
    11. /*0x014*/     ULONG32      SubSystemData;                      // VOID*                                  
    12. /*0x018*/     ULONG32      ProcessHeap;                        // VOID*                                  
    13. /*0x01C*/     ULONG32      FastPebLock;                        // struct _RTL_CRITICAL_SECTION*          
    14. /*0x020*/     ULONG32      FastPebLockRoutine;                 // VOID*                                  
    15. /*0x024*/     ULONG32      FastPebUnlockRoutine;               // VOID*                                  
    16. /*0x028*/     ULONG32      EnvironmentUpdateCount;                                                        
    17. /*0x02C*/     ULONG32      KernelCallbackTable;                // VOID*                                  
    18. /*0x030*/     ULONG32      SystemReserved[1];                                                            
    19. /*0x034*/     ULONG32      AtlThunkSListPtr32;                                                            
    20. /*0x038*/     ULONG32      FreeList;                           // struct _PEB_FREE_BLOCK*                
    21. /*0x03C*/     ULONG32      TlsExpansionCounter;                                                          
    22. /*0x040*/     ULONG32      TlsBitmap;                          // VOID*                                  
    23. /*0x044*/     ULONG32      TlsBitmapBits[2];                                                              
    24. /*0x04C*/     ULONG32      ReadOnlySharedMemoryBase;           // VOID*                                  
    25. /*0x050*/     ULONG32      ReadOnlySharedMemoryHeap;           // VOID*                                  
    26. /*0x054*/     ULONG32      ReadOnlyStaticServerData;           // VOID**                                  
    27. /*0x058*/     ULONG32      AnsiCodePageData;                   // VOID*                                  
    28. /*0x05C*/     ULONG32      OemCodePageData;                    // VOID*                                  
    29. /*0x060*/     ULONG32      UnicodeCaseTableData;               // VOID*                                  
    30. /*0x064*/     ULONG32      NumberOfProcessors;                                                            
    31. /*0x068*/     ULONG32      NtGlobalFlag;                                                                  
    32. /*0x06C*/     UINT8        _PADDING0_[0x4];                                                              
    33. /*0x070*/     union _LARGE_INTEGER CriticalSectionTimeout;     // 4 elements, 0x8 bytes (sizeof)          
    34. /*0x078*/     ULONG32      HeapSegmentReserve;                                                            
    35. /*0x07C*/     ULONG32      HeapSegmentCommit;                                                            
    36. /*0x080*/     ULONG32      HeapDeCommitTotalFreeThreshold;                                                
    37. /*0x084*/     ULONG32      HeapDeCommitFreeBlockThreshold;                                                
    38. /*0x088*/     ULONG32      NumberOfHeaps;                                                                
    39. /*0x08C*/     ULONG32      MaximumNumberOfHeaps;                                                          
    40. /*0x090*/     ULONG32      ProcessHeaps;                       // VOID**                                  
    41. /*0x094*/     ULONG32      GdiSharedHandleTable;               // VOID*                                  
    42. /*0x098*/     ULONG32      ProcessStarterHelper;               // VOID*                                  
    43. /*0x09C*/     ULONG32      GdiDCAttributeList;                                                            
    44. /*0x0A0*/     ULONG32      LoaderLock;                         // VOID*                                  
    45. /*0x0A4*/     ULONG32      OSMajorVersion;                                                                
    46. /*0x0A8*/     ULONG32      OSMinorVersion;                                                                
    47. /*0x0AC*/     UINT16       OSBuildNumber;                                                                
    48. /*0x0AE*/     UINT16       OSCSDVersion;                                                                  
    49. /*0x0B0*/     ULONG32      OSPlatformId;                                                                  
    50. /*0x0B4*/     ULONG32      ImageSubsystem;                                                                
    51. /*0x0B8*/     ULONG32      ImageSubsystemMajorVersion;                                                    
    52. /*0x0BC*/     ULONG32      ImageSubsystemMinorVersion;                                                    
    53. /*0x0C0*/     ULONG32      ImageProcessAffinityMask;                                                      
    54. /*0x0C4*/     ULONG32      GdiHandleBuffer[34];                                                          
    55. /*0x14C*/     ULONG32      PostProcessInitRoutine;             // FUNCT_00BC_062E_PostProcessInitRoutine*
    56. /*0x150*/     ULONG32      TlsExpansionBitmap;                 // VOID*                                  
    57. /*0x154*/     ULONG32      TlsExpansionBitmapBits[32];                                                    
    58. /*0x1D4*/     ULONG32      SessionId;                                                                    
    59. /*0x1D8*/     union _ULARGE_INTEGER AppCompatFlags;            // 4 elements, 0x8 bytes (sizeof)          
    60. /*0x1E0*/     union _ULARGE_INTEGER AppCompatFlagsUser;        // 4 elements, 0x8 bytes (sizeof)          
    61. /*0x1E8*/     ULONG32      pShimData;                          // VOID*                                  
    62. /*0x1EC*/     ULONG32      AppCompatInfo;                      // VOID*                                  
    63. /*0x1F0*/     struct _UNICODE_STRING CSDVersion;               // 3 elements, 0x8 bytes (sizeof)          
    64. /*0x1F8*/     ULONG32      ActivationContextData;              // VOID*                                  
    65. /*0x1FC*/     ULONG32      ProcessAssemblyStorageMap;          // VOID*                                  
    66. /*0x200*/     ULONG32      SystemDefaultActivationContextData; // VOID*                                  
    67. /*0x204*/     ULONG32      SystemAssemblyStorageMap;           // VOID*                                  
    68. /*0x208*/     ULONG32      MinimumStackCommit;                                                            
    69. /*0x20C*/     UINT8        _PADDING1_[0x4];                                                              
    70.           }PEB, *PPEB;
    Код (Text):
    1. typedef struct _PEB_LDR_DATA                            // 7 elements, 0x28 bytes (sizeof)
    2.           {                                                                                          
    3. /*0x000*/     ULONG32      Length;                                                                  
    4. /*0x004*/     UINT8        Initialized;                                                              
    5. /*0x005*/     UINT8        _PADDING0_[0x3];                                                          
    6. /*0x008*/     ULONG32      SsHandle;                              // VOID*                          
    7. /*0x00C*/     struct _LIST_ENTRY InLoadOrderModuleList;           // 2 elements, 0x8 bytes (sizeof)  
    8. /*0x014*/     struct _LIST_ENTRY InMemoryOrderModuleList;         // 2 elements, 0x8 bytes (sizeof)  
    9. /*0x01C*/     struct _LIST_ENTRY InInitializationOrderModuleList; // 2 elements, 0x8 bytes (sizeof)  
    10. /*0x024*/     ULONG32      EntryInProgress;                       // VOID*                          
    11.           }PEB_LDR_DATA, *PPEB_LDR_DATA;
    Раз и на всегда хочу решить этот вопрос для себя(а возможно кому-то будет так же полезно)

    UINT8 InheritedAddressSpace; = InheritedAddressSpace db ?
    UINT16 OSBuildNumber; = OSBuildNumber dw ?
    ULONG32 UnicodeCaseTableData; = UnicodeCaseTableData dd ?

    А вот тут небольшие вопросы:
    1)struct _UNICODE_STRING CSDVersion; // 3 elements, 0x8 bytes (sizeof)
    1) на фасме получается: label .CSDVersion qword .Все верно или нет ?

    2)union _ULARGE_INTEGER AppCompatFlagsUser;
    2)на фасме получается AppCompatFlagsUser dq ?

    В общем давайте все возникающие вопросы относительно хидеров с цэ на фасм скидывать сюда.
    PS: Кстати у кого какие есть хидеры ? Не отказался бы от любых хидеров. Можно в ПМ:)

    Забыл:
    Код (Text):
    1. ;*********************************************PEB************************************************************************************************************
    2. struct PEB                                              ; 65 elements, 0x210 bytes (sizeof)      
    3.     InheritedAddressSpace           db ?                                                        
    4.     ReadImageFileExecOptions        db ?                                                              
    5.     BeingDebugged               db ?                                                                
    6.     SpareBool               db ?                                                                
    7.     Mutant                  dd ?        ; VOID*                                  
    8.     ImageBaseAddress            dd ?        ; VOID*                                  
    9.     Ldr                                 dd ?        ; struct _PEB_LDR_DATA*                  
    10.     ProcessParameters                   dd ?        ; struct _RTL_USER_PROCESS_PARAMETERS*    
    11.     SubSystemData                       dd ?        ; VOID*                                  
    12.     ProcessHeap                         dd ?        ; VOID*                                  
    13.     FastPebLock                         dd ?        ; struct _RTL_CRITICAL_SECTION*          
    14.     FastPebLockRoutine                  dd ?        ; VOID*                                  
    15.     FastPebUnlockRoutine                dd ?        ; VOID*                                  
    16.     EnvironmentUpdateCount              dd ?                                              
    17.     KernelCallbackTable                 dd ?        ; VOID*                                  
    18.     SystemReserved                  dd ?                                              
    19.     AtlThunkSListPtr32                  dd ?                                              
    20.     FreeList                            dd ?        ; struct _PEB_FREE_BLOCK*                
    21.     TlsExpansionCounter                 dd ?                                              
    22.     TlsBitmap                           dd ?        ; VOID*                                  
    23.     TlsBitmapBits                   dd ?                                              
    24.     ReadOnlySharedMemoryBase            dd ?        ; VOID*                                  
    25.     ReadOnlySharedMemoryHeap            dd ?        ; VOID*                                  
    26.     ReadOnlyStaticServerData            dd ?        ; VOID**                                  
    27.     AnsiCodePageData                    dd ?        ; VOID*                                  
    28.     OemCodePageData                     dd ?        ; VOID*                                  
    29.     UnicodeCaseTableData            dd ?        ; VOID*                                  
    30.     NumberOfProcessors          dd ?                                                            
    31.     NtGlobalFlag                dd ?                                                                
    32.     _PADDING0_              db ?                                                              
    33.     CriticalSectionTimeout          dq ?        ; 4 elements, 0x8 bytes (sizeof)          
    34.     HeapSegmentReserve          dd ?                                                                
    35.     HeapSegmentCommit           dd ?                                                                
    36.     HeapDeCommitTotalFreeThreshold      dd ?                                                      
    37.     HeapDeCommitFreeBlockThreshold      dd ?                                                      
    38.     NumberOfHeaps               dd ?                                                                
    39.     MaximumNumberOfHeaps            dd ?                                                                
    40.     ProcessHeaps                dd ?        ; VOID**                                  
    41.     GdiSharedHandleTable            dd ?        ; VOID*                                  
    42.     ProcessStarterHelper            dd ?        ; VOID*                                  
    43.     GdiDCAttributeList                      dd ?        
    44.     LoaderLock              dd ?        ; VOID*                                  
    45.     OSMajorVersion              dd ?                                                                
    46.     OSMinorVersion              dd ?                                                                
    47.     OSBuildNumber               dw ?                                                                
    48.     OSCSDVersion                dw ?                                                                
    49.     OSPlatformId                dd ?                                                                
    50.     ImageSubsystem              dd ?                                                                
    51.     ImageSubsystemMajorVersion      dd ?                                                        
    52.     ImageSubsystemMinorVersion          dd ?                                                        
    53.     ImageProcessAffinityMask            dd ?                                                        
    54.     GdiHandleBuffer                 dd ?                                                          
    55.     PostProcessInitRoutine          dd ?        ; FUNCT_00BC_062E_PostProcessInitRoutine*
    56.     TlsExpansionBitmap              dd ?        ; VOID*                                  
    57.     TlsExpansionBitmapBits          dd ?                                                      
    58.     SessionId                       dd ?                                                        
    59.     AppCompatFlags                  dq ?        ; 4 elements, 0x8 bytes (sizeof)          
    60.     AppCompatFlagsUser              dq ?        ; 4 elements, 0x8 bytes (sizeof)          
    61.     pShimData                   dd ?        ; VOID*                                  
    62.     AppCompatInfo                   dd ?        ; VOID*                                  
    63. label   .CSDVersion             qword       ; 3 elements, 0x8 bytes (sizeof)          
    64.     ActivationContextData           dd ?        ; VOID*                                  
    65.     ProcessAssemblyStorageMap           dd ?        ; VOID*                                  
    66.     SystemDefaultActivationContextData  dd ?        ; VOID*                                  
    67.     SystemAssemblyStorageMap        dd ?        ; VOID*                                  
    68.     MinimumStackCommit                  dd ?                                                        
    69.     _PADDING1_                      db ?                                                          
    70. ends                                                
    71. ;********************************************END PEB*********************************************************************************************************
    72.  
    73.  
    74. ;********************************************PEB_LDR_DATA****************************************************************************************************
    75. struct PEB_LDR_DATA                                                                                                              
    76.     Length                  dd ?                                                                  
    77.     Initialized                 db ?                                                              
    78.     _PADDING0_                  db ?                                                        
    79.     SsHandle                    dd ?            ; VOID*                          
    80.     label .InLoadOrderModuleList        qword       ; 2 elements, 0x8 bytes (sizeof)  
    81.     label .InMemoryOrderModuleList      qword           ; 2 elements, 0x8 bytes (sizeof)  
    82.     label .InInitializationOrderModuleList  qword       ; 2 elements, 0x8 bytes (sizeof)  
    83.     EntryInProgress             dd ?  
    84. ends
    85. ;******************************************* END PEB_LDR_DATA************************************************************************************************
    укажите на ошибки=)
     
  2. link

    link Member

    Публикаций:
    0
    Регистрация:
    3 янв 2008
    Сообщения:
    52
    а не проще из kmdkit все это взять? там же многие сисовые структуры есть включая PEB
     
  3. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    лучше один раз научиться перерабатывать сишные хидеры(коих заметь чуть по-более, чем в масме), чем перерабатывать масмовские
     
  4. Clerk

    Clerk Забанен

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

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    выглядит не особо презентабельно. Вообще принципиальной разницы нет как делать. Всеравно при обращении к структуре допустим IMAGE_OPTIONAL_HEADER.blablabla в листиге получаем смещение eax+0xXX. Вообще Ваш вариант тут вообще не по теме. Я немного о другом спрашивал:)
     
  6. Clerk

    Clerk Забанен

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

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    Ладно, давайте не терять чувство реальности. Я с чего начал ? Я начал с того, что нужно сделать некоторые манипуляции, чтобы из цэшных хидеров делать фасм хидеры для работы. Предлагать присваивать членам структур смещения - это совсем не с той оперы. Давайте кто-то подчистит все посты, кроме первого и начнем конструктивный диалог ?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    common_up
    Давайте смотреть на вещи реально. Вы не знаете стандартных типов си и пытаетесь транслировать хидер. Ну что тут можно сказать - изучать си. И незачем писать модерам, ведь сообщение я тоже вижу ваше. Если в ручную не хотите - использовать конверторы, на сколько помню здесь их описывали, поиск используйте. Не знаете типов - какие есчо вопросы вы можите тут задавать. Трудно вбить в поисковик "UINT8" ?
     
  9. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    а зачем писать на MASM?

    зачем пользоваться label есть чудесная дирректива virtual at. А чтобы не париться про размер структур, лучше объявлять эту структуру. если она состоит в "юнионе" то указать её через virtual at намного проще.
    при объявлении

    Посмотри как я объявил структуру IRP на FASM, сишное объявление найдёшь в инете
    Код (Text):
    1. struc __TAIL
    2. {
    3.      .__tail db 47 dup (?)
    4.  
    5.      virtual at .__tail
    6.  
    7.       .Overlay.DriverContext dd 4 dup (?)        ;16
    8.        virtual at .Overlay.DriverContext
    9.              .Overlay.DeviceQueueEntry KDEVICE_QUEUE_ENTRY
    10.        end virtual
    11.  
    12.        .Overlay.Thread dd ?              ; 4
    13.        .Overlay.AuxiliaryBuffer dd ?             ; 4
    14.  
    15.        .___ db 12 dup (?)
    16.     virtual at .___
    17.       .Overlay.ListEntry LIST_ENTRY       ; 8
    18.       .Overlay.CurrentStackLocation dd ?  ; 4
    19.       label .Overlay.PacketType dword at .Overlay.CurrentStackLocation
    20.     end virtual
    21.  
    22.        .OriginalFileObject dd ?
    23.      end virtual
    24.  
    25.      virtual at .__tail
    26.       .Apc KAPC                     ;47
    27.      end virtual
    28.  
    29.      virtual at .__tail
    30.       .CompletionKey dd ?               ; 4
    31.      end virtual
    32. }
    33.  
    34. struc IRP
    35.  {
    36.     .Type dw ?
    37.     .Size dw ?
    38.     .MdlAddress dd ?
    39.  
    40.     .Flags dd ?
    41.  
    42.     .AssociatedIrp.MasterIrp      dd ?
    43.     label .AssociatedIrp.IrpCount dword at .AssociatedIrp.MasterIrp
    44.     label .AssociatedIrp.SystemBuffer dword at .AssociatedIrp.MasterIrp
    45.  
    46.     .ThreadListEntry LIST_ENTRY
    47.  
    48.     .IoStatus IO_STATUS_BLOCK
    49.  
    50.     .RequestorMode db ?
    51.  
    52.     .PendingReturned db ?
    53.  
    54.     .StackCount       db ?
    55.     .CurrentLocation  db ?
    56.  
    57.     .Cancel db ?
    58.  
    59.     .CancelIrql db ?
    60.  
    61.     .ApcEnvironment db ?
    62.    
    63.     .AllocationFlags db ?
    64.  
    65.     .UserIosb dd ?
    66.     .UserEvent dd ?
    67.  
    68.     .Overlay dq ?
    69.     virtual at .Overlay
    70.      .Overlay.AllocationSize LARGE_INTEGER
    71.     end virtual
    72.  
    73.     virtual at .Overlay
    74.      .Overlay.AsynchronousParameters.UserApcRoutine dd ?
    75.      .Overlay.AsynchronousParameters.UserApcContext dd ?
    76.     end virtual
    77.  
    78.     .CancelRoutine dd ?
    79.  
    80.     .UserBuffer dd ?
    81.  
    82.     ;union
    83.     .Tail __TAIL  
    84.  
    85.  }  ; IRP
     
  10. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    2rpy3uH: Везде использовать точки - становится нечитабельно. по крайней мере там где они крайне не необходимы:)
    Все, вроде разобрался. Топик не закрывайте, мб еще вопросы появятся
     
  11. common_up

    common_up New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    85
    корректна ли такая интерпритация сишного хидера ?
    Код (Text):
    1. ;typedef struct _IMAGE_THUNK_DATA32 {
    2. ;    union {
    3. ;        PBYTE  ForwarderString;
    4. ;        PDWORD Function;
    5. ;        DWORD Ordinal;
    6. ;        PIMAGE_IMPORT_BY_NAME  AddressOfData;
    7. ;    } u1;
    8. ;}
    9. ;IMAGE_THUNK_DATA32 equ _IMAGE_THUNK_DATA32
    10.  
    11. struct IMAGE_IMPORT_BY_NAME
    12. Hint                        dw ?
    13. Name                        rb 01
    14. ends
    15. PIMAGE_IMPORT_BY_NAME equ IMAGE_IMPORT_BY_NAME
    16.  
    17. struct _IMAGE_THUNK_DATA32
    18.     label .u1   dword    
    19.     union
    20.     ForwarderString db ?
    21.     Function        dw ?
    22.     Ordinal         dw ?
    23.     AddressOfData  IMAGE_IMPORT_BY_NAME
    24.     ends    
    25. IMAGE_THUNK_DATA32 equ _IMAGE_THUNK_DATA32
    26. ends
     
  12. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327