Как в ТЕБ-е найти EntryPoint приложения?

Тема в разделе "WASM.WIN32", создана пользователем intel_x128, 21 окт 2009.

  1. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    САБЖ
    Где хранится энтри-поинт, помимо РЕ-хидера?
     
  2. Rustem

    Rustem New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2004
    Сообщения:
    429
    Адрес:
    Russia
    Вроде тут
    PEB -> PEB_LDR_DATA -> LDR_MODULE.EntryPoint
     
  3. intel_x128

    intel_x128 New Member

    Публикаций:
    0
    Регистрация:
    17 май 2009
    Сообщения:
    345
    нет. Там двусвязнный список с информацией о загруженных модулях. Точки входа непосредственно ехе-шника там нет
     
  4. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    1. Peb->ImageBaseAddress
    2. Rustem тоже прав (см. LdrpInitializeProcess)
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Первый модуль в списке и есть инфа о экзешнике.

    Код (Text):
    1. assume fs:nothing
    2. mov eax,fs:[TEB.Peb]
    3. mov eax,PEB.Ldr[eax]
    4. mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
    5. mov eax,LDR_DATA_TABLE_ENTRY.EntryPoint[eax]
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Код (Text):
    1. typedef struct _PEB
    2. {
    3.    UCHAR InheritedAddressSpace;                     // 00h
    4.    UCHAR ReadImageFileExecOptions;                  // 01h
    5.    UCHAR BeingDebugged;                             // 02h
    6.    UCHAR Spare;                                     // 03h
    7.    PVOID Mutant;                                    // 04h
    8.    PVOID ImageBaseAddress;                          // 08h
    9.    PPEB_LDR_DATA Ldr;                               // 0Ch
    10.    PRTL_USER_PROCESS_PARAMETERS ProcessParameters;  // 10h
    11.    PVOID SubSystemData;                             // 14h
    12.    PVOID ProcessHeap;                               // 18h
    13.    PVOID FastPebLock;                               // 1Ch
    14.    PPEBLOCKROUTINE FastPebLockRoutine;              // 20h
    15.    PPEBLOCKROUTINE FastPebUnlockRoutine;            // 24h
    16.    ULONG EnvironmentUpdateCount;                    // 28h
    17.    PVOID* KernelCallbackTable;                      // 2Ch
    18.    PVOID EventLogSection;                           // 30h
    19.    PVOID EventLog;                                  // 34h
    20.    PPEB_FREE_BLOCK FreeList;                        // 38h
    21.    ULONG TlsExpansionCounter;                       // 3Ch
    22.    PVOID TlsBitmap;                                 // 40h
    23.    ULONG TlsBitmapBits[0x2];                        // 44h
    24.    PVOID ReadOnlySharedMemoryBase;                  // 4Ch
    25.    PVOID ReadOnlySharedMemoryHeap;                  // 50h
    26.    PVOID* ReadOnlyStaticServerData;                 // 54h
    27.    PVOID AnsiCodePageData;                          // 58h
    28.    PVOID OemCodePageData;                           // 5Ch
    29.    PVOID UnicodeCaseTableData;                      // 60h
    30.    ULONG NumberOfProcessors;                        // 64h
    31.    ULONG NtGlobalFlag;                              // 68h
    32.    UCHAR Spare2[0x4];                               // 6Ch
    33.    LARGE_INTEGER CriticalSectionTimeout;            // 70h
    34.    ULONG HeapSegmentReserve;                        // 78h
    35.    ULONG HeapSegmentCommit;                         // 7Ch
    36.    ULONG HeapDeCommitTotalFreeThreshold;            // 80h
    37.    ULONG HeapDeCommitFreeBlockThreshold;            // 84h
    38.    ULONG NumberOfHeaps;                             // 88h
    39.    ULONG MaximumNumberOfHeaps;                      // 8Ch
    40.    PVOID** ProcessHeaps;                            // 90h
    41.    PVOID GdiSharedHandleTable;                      // 94h
    42.    PVOID ProcessStarterHelper;                      // 98h
    43.    PVOID GdiDCAttributeList;                        // 9Ch
    44.    PVOID LoaderLock;                                // A0h
    45.    ULONG OSMajorVersion;                            // A4h
    46.    ULONG OSMinorVersion;                            // A8h
    47.    ULONG OSBuildNumber;                             // ACh
    48.    ULONG OSPlatformId;                              // B0h
    49.    ULONG ImageSubSystem;                            // B4h
    50.    ULONG ImageSubSystemMajorVersion;                // B8h
    51.    ULONG ImageSubSystemMinorVersion;                // C0h
    52.    ULONG GdiHandleBuffer[0x22];                     // C4h
    53. } PEB, *PPEB;
    54.  
    55.  
    56. ---
    57.  
    58. Собственно и TEB до кучи:
    59.  
    60. // +++
    61. // User-Mode Thread Environment Block (UTEB)
    62. // Selector 0x3B: DPL=3, Base=0x7FFDE00 (1st thread), Lim=0x00000FFF
    63. // Base is updated at every thread switch.
    64. // Loaded into FS in User Mode
    65. // ---
    66. typedef struct _TEB
    67. {
    68.    NT_TIB Tib;                         // 00h
    69.    PVOID EnvironmentPointer;           // 1Ch
    70.    CLIENT_ID Cid;                      // 20h
    71.    PVOID ActiveRpcInfo;                // 28h
    72.    PVOID ThreadLocalStoragePointer;    // 2Ch
    73.    PPEB Peb;                           // 30h
    74.    ULONG LastErrorValue;               // 34h
    75.    ULONG CountOfOwnedCriticalSections; // 38h
    76.    PVOID CsrClientThread;              // 3Ch
    77.    struct _W32THREAD* Win32ThreadInfo;         // 40h
    78.    ULONG Win32ClientInfo[0x1F];        // 44h
    79.    PVOID WOW32Reserved;                // C0h
    80.    ULONG CurrentLocale;                // C4h
    81.    ULONG FpSoftwareStatusRegister;     // C8h
    82.    PVOID SystemReserved1[0x36];        // CCh
    83.    PVOID Spare1;                       // 1A4h
    84.    LONG ExceptionCode;                 // 1A8h
    85.    ULONG SpareBytes1[0x28];            // 1ACh
    86.    PVOID SystemReserved2[0xA];         // 1D4h
    87. //   GDI_TEB_BATCH GdiTebBatch;          // 1FCh
    88.    ULONG gdiRgn;                       // 6DCh
    89.    ULONG gdiPen;                       // 6E0h
    90.    ULONG gdiBrush;                     // 6E4h
    91.    CLIENT_ID RealClientId;             // 6E8h
    92.    PVOID GdiCachedProcessHandle;       // 6F0h
    93.    ULONG GdiClientPID;                 // 6F4h
    94.    ULONG GdiClientTID;                 // 6F8h
    95.    PVOID GdiThreadLocaleInfo;          // 6FCh
    96.    PVOID UserReserved[5];              // 700h
    97.    PVOID glDispatchTable[0x118];       // 714h
    98.    ULONG glReserved1[0x1A];            // B74h
    99.    PVOID glReserved2;                  // BDCh
    100.    PVOID glSectionInfo;                // BE0h
    101.    PVOID glSection;                    // BE4h
    102.    PVOID glTable;                      // BE8h
    103.    PVOID glCurrentRC;                  // BECh
    104.    PVOID glContext;                    // BF0h
    105.    NTSTATUS LastStatusValue;           // BF4h
    106.    UNICODE_STRING StaticUnicodeString; // BF8h
    107.    WCHAR StaticUnicodeBuffer[0x105];   // C00h
    108.    PVOID DeallocationStack;            // E0Ch
    109.    PVOID TlsSlots[0x40];               // E10h
    110.    LIST_ENTRY TlsLinks;                // F10h
    111.    PVOID Vdm;                          // F18h
    112.    PVOID ReservedForNtRpc;             // F1Ch
    113.    PVOID DbgSsReserved[0x2];           // F20h
    114.    ULONG HardErrorDisabled;            // F28h
    115.    PVOID Instrumentation[0x10];        // F2Ch
    116.    PVOID WinSockData;                  // F6Ch
    117.    ULONG GdiBatchCount;                // F70h
    118.    ULONG Spare2;                       // F74h
    119.    ULONG Spare3;                       // F78h
    120.    ULONG Spare4;                       // F7Ch
    121.    PVOID ReservedForOle;               // F80h
    122.    ULONG WaitingOnLoaderLock;          // F84h
    123.    PVOID WineDebugInfo;                // Needed for WINE DLL's
    124. } TEB, *PTEB;
    125.  
    126.  
    127. ---
    128. Для полноты картины еще и это:
    129.  
    130. typedef struct _NT_TIB {
    131.     struct _EXCEPTION_REGISTRATION_RECORD* ExceptionList;  // 00h
    132.     PVOID StackBase;                                       // 04h
    133.     PVOID StackLimit;                                      // 08h
    134.     PVOID SubSystemTib;                                    // 0Ch
    135.     union {
    136.         PVOID FiberData;                                   // 10h
    137.         ULONG Version;                                     // 10h
    138.     } Fib;
    139.     PVOID ArbitraryUserPointer;                            // 14h
    140.     struct _NT_TIB *Self;                                  // 18h
    141. } NT_TIB, *PNT_TIB;
    142.  
    143. typedef struct _GDI_TEB_BATCH
    144. {
    145.    ULONG Offset;
    146.    ULONG HDC;
    147.    ULONG Buffer[0x136];
    148. } GDI_TEB_BATCH, *PGDI_TEB_BATCH;
    149.  
    150. typedef struct _PEB_LDR_DATA
    151. {
    152.    ULONG Length;
    153.    BOOLEAN Initialized;
    154.    PVOID SsHandle;
    155.    LIST_ENTRY InLoadOrderModuleList;
    156.    LIST_ENTRY InMemoryOrderModuleList;
    157.    LIST_ENTRY InInitializationOrderModuleList;
    158. } PEB_LDR_DATA, *PPEB_LDR_DATA;
    159.  
    160. typedef struct _LDR_MODULE
    161. {
    162.    LIST_ENTRY     InLoadOrderModuleList;
    163.    LIST_ENTRY     InMemoryOrderModuleList;      // not used
    164.    LIST_ENTRY     InInitializationOrderModuleList;  // not used
    165.    PVOID          BaseAddress;
    166.    ULONG          EntryPoint;
    167.    ULONG          SizeOfImage;
    168.    UNICODE_STRING FullDllName;
    169.    UNICODE_STRING BaseDllName;
    170.    ULONG          Flags;
    171.    SHORT          LoadCount;
    172.    SHORT          TlsIndex;
    173.    HANDLE         SectionHandle;
    174.    ULONG          CheckSum;
    175.    ULONG          TimeDateStamp;
    176. #ifdef KDBG
    177.   IMAGE_SYMBOL_INFO SymbolInfo;
    178. #endif /* KDBG */
    179. } LDR_MODULE, *PLDR_MODULE;
     
  7. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    LdrSelfDataTable

    Код (Text):
    1. PTEB
    2. NtGetCurrentTeb()
    3. {
    4.     PTEB pTeb   = NULL;
    5.  
    6.     __asm
    7.     {
    8.         mov eax, fs:[0x18]
    9.         mov [Teb], eax
    10.     }
    11.     return pTeb;
    12. }
    13.  
    14. PWCHAR
    15. CurrentModuleName()
    16. {
    17.     return LdrSelfDataTable()->FullDllName.Buffer;
    18. }
    19.  
    20. PPEB_LDR_DATA
    21. LdrProcess()
    22. {
    23.     PPEB_LDR_DATA pLdrdata  = NULL;
    24.  
    25.     __try
    26.     {
    27.         Ldrdata = (PPEB_LDR_DATA)(NtGetCurrentTeb()->Peb->Ldr);
    28.     }
    29.     __except(EXCEPTION_EXECUTE_HANDLER)
    30.     {
    31.        
    32.     }
    33.  
    34.     return pLdrdata;
    35. }
    36.  
    37. PLDR_DATA_TABLE_ENTRY
    38. LdrDataTables()
    39. {
    40.     PLDR_DATA_TABLE_ENTRY   pModule     = NULL;
    41.     PPEB_LDR_DATA           pLdrdata    = LdrProcess();
    42.  
    43.     __try
    44.     {
    45.         pModule =
    46.         CONTAINING_RECORD(
    47.             pLdrdata->InLoadOrderModuleList.Flink,
    48.             LDR_DATA_TABLE_ENTRY,
    49.             InLoadOrderLinks
    50.             );
    51.     }
    52.     __except(EXCEPTION_EXECUTE_HANDLER)
    53.     {
    54.  
    55.     }
    56.  
    57.     return pModule;
    58. }
    59.  
    60. PLDR_DATA_TABLE_ENTRY
    61. LdrSelfDataTable()
    62. {
    63.     PLDR_DATA_TABLE_ENTRY pSelf = NULL;
    64.  
    65.     __try
    66.     {
    67.         pSelf = LdrDataTables();
    68.     }
    69.     __except(EXCEPTION_EXECUTE_HANDLER)
    70.     {
    71.  
    72.     }
    73.  
    74.     return pSelf;
    75. }
    76.  
    77. PLDR_DATA_TABLE_ENTRY
    78. LdrNtdllDataTable()
    79. {
    80.     PLDR_DATA_TABLE_ENTRY pNtdll = NULL;
    81.  
    82.     __try
    83.     {
    84.         pNtdll =
    85.         CONTAINING_RECORD(
    86.             LdrDataTables()->InLoadOrderLinks.Flink,
    87.             LDR_DATA_TABLE_ENTRY,
    88.             InLoadOrderLinks
    89.             );
    90.     }
    91.     __except(EXCEPTION_EXECUTE_HANDLER)
    92.     {
    93.  
    94.     }
    95.  
    96.     return pNtdll;
    97. }
    98.  
    99. PWCHAR
    100. LdrCommandLine()
    101. {
    102.     PWCHAR  pCmdLine    = NULL;
    103.     PPEB    pPeb        = NULL;
    104.  
    105.     __try
    106.     {
    107.         pPeb = NtGetCurrentTeb()->Peb;
    108.         pCmdLine = pPeb->ProcessParameters->CommandLine.Buffer;
    109.     }
    110.     __except(EXCEPTION_EXECUTE_HANDLER)
    111.     {
    112.  
    113.     }
    114.  
    115.     return pCmdLine;
    116. }
     
  8. svarogthepagan

    svarogthepagan New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2009
    Сообщения:
    3