имя запущенного .exe

Тема в разделе "WASM.WIN32", создана пользователем Sickle, 16 янв 2007.

  1. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    Запущенный .exe удалить стандартными методами невозможно, но можно переименовать. Собственно вопрос - как из программы получить имя своего экзешника в случае его переименования?
     
  2. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    обсуждалось
    GetModuleFileName.
     
  3. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    FreeManCPM
    возвращает имя которое было на момент запуска.
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    С большой долей вероятности, что никак, ибо после загрузки exe-шника лоадером в память считывать из файла в общем случае ничего не нужно.
     
  5. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.568
    Адрес:
    Russia
    Sickle
    Можно пометить для удаления. И тогда после перезагрузки он удалиться (файл)
     
  6. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    TermoSINteZ
    разве я говорил что мне нужно его удалить? :)
    n0name
    а как же своппинг? ведь не измененные страницы не бросаются в своп файл а просто освобождаются и при надобности подгружаются из exe? да и учитывая что даже после переименования файл удалить не возможно, гдето должен быть хэндл, привязаный к новому имени... :-\
     
  7. Guest

    Guest Guest

    Публикаций:
    0
    Изучал недавно принцип работы GetModuleFileName - вообщем она берет указатель Ldr->InLoadOrderModuleList из PEB нужного процесса, затем получает указатель на текущий модуль - PLDR_DATA_TABLE_ENTRY, в нем есть две UNICODE_STRING - BaseName и FullName. - Собственно через эти строки и получаем путь к текущему модулю.
     
  8. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    кмк хэндл тот же остается. изменены только свойства его. засада вся в том что в windows xp этот хэндл в ring-3 недоступен, тогда как в w2k он доступен в ring-3. из-за этого кстати методы самоудаления некоторые работавшие в 2к не работают в хрюше
     
  9. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    im1111
    там будет обновленное имя?
    slow
    этого и опасался - значит придется спускаться в ринг-0?
     
  10. Guest

    Guest Guest

    Публикаций:
    0
    Sickle
    Возможно.
    P.S. Иначе после смены имени файла GetModuleFileName перестанет корректно работать.
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Я игрался с этим. Переименование залоченного файла происходит на уровне ФС, но как получить новое имя из программы не нашёл.
     
  12. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    хэндл в ядре надо как-то найти...
    или через секцию поискать..
     
  13. Sickle

    Sickle New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    181
    да, похоже в ядро:dntknw: кстати RootkitUnhooker (http://www.wasm.ru/toollist.php?list=21#392) верно показывает новые имена при переименовании.
     
  14. k3internal

    k3internal New Member

    Публикаций:
    0
    Регистрация:
    11 янв 2007
    Сообщения:
    607
    Sickle
    Пишешь драйвер и мониторишь. Или, ищешь объект в памяти и смотриш туда.
     
  15. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    CreateToolhelp32Snapshot + PROCESSENTRY32.szExeFile ?
     
  16. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Ага =) Это выливается в вызов NtQuerySystemInformation с флагом 5. Самый надежный способ определения имени процесса - чтение секции из драйвера.
     
  17. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    EP_X0FF
    >Ага =) Это выливается в вызов NtQuerySystemInformation с флагом 5. Самый надежный способ определения имени процесса - чтение секции из драйвера.

    Ну, иногда и без драйвера:
    1) запускаем exe, когда не запущено ничего, мониторящего процессы,
    2) переименовываем,
    3) запускаем, скажем, ProcExp - и видим там переименованное.

    И кстати о надежности: а как насчет неоднократного переименования за один запуск ?
     
  18. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Это который? ProcessXP? Не показывает он.
     
  19. Songoku

    Songoku Эдгар

    Публикаций:
    0
    Регистрация:
    1 мар 2003
    Сообщения:
    68
    Адрес:
    Belarus
    Не знаю, может поможет :)
    Код (Text):
    1. ;  Функция узнаёт от куда была запущена программа
    2. ;  pid - индификатор процесса
    3. ;  lpBuffer - адресс куда будет записан
    4. proc   GetProcessFileName,pid,lpBuffer
    5. push    edi ebx
    6. mov     edi,[lpBuffer]
    7. xor     eax,eax
    8. mov     dword[edi],eax
    9. invoke  OpenProcess,PROCESS_QUERY_INFORMATION+PROCESS_VM_READ,eax,[pid]
    10. test    eax,eax
    11. jz      @F
    12. mov     ebx,eax
    13. invoke  NtQueryInformationProcess,ebx,ProcessBasicInformation,edi,sizeof.PROCESS_BASIC_INFORMATION,esp,eax
    14. pop     ecx
    15.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    16.         virtual at edi                 ;;
    17.         .bs PROCESS_BASIC_INFORMATION  ;;
    18.         end virtual                    ;;
    19.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    20. invoke  ReadProcessMemory,ebx,[.bs.PebBaseAddress],edi,10h,esp,eax
    21. pop     ecx
    22.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    23.         virtual at edi                 ;;
    24.         .peb PEB                       ;;
    25.         end virtual                    ;;
    26.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    27. invoke  ReadProcessMemory,ebx,[.peb.Ldr],edi,sizeof.PEB_LDR_DATA,esp,eax
    28. pop     ecx
    29.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    30.         virtual at edi                 ;;
    31.         .pebldr PEB_LDR_DATA           ;;
    32.         end virtual                    ;;
    33.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    34. invoke  ReadProcessMemory,ebx,[.pebldr.InLoadOrderModuleList],edi,sizeof.LDR_DATA_TABLE_ENTRY,esp,eax
    35. pop     ecx
    36.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    37.         virtual at edi                 ;;
    38.         .module LDR_DATA_TABLE_ENTRY   ;;
    39.         end virtual                    ;;
    40.         ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    41. movzx   eax,[.module.FullDllName.MaximumLength]
    42. invoke  ReadProcessMemory,ebx,[.module.FullDllName.Buffer],edi,eax,esp,eax
    43. pop     ecx
    44. invoke  CloseHandle,ebx
    45. @@:; Erorr
    46. pop     ebx edi
    47. ret
    48. endp
    а и вот структуры ...

    Код (Text):
    1. ;ProcessBasicInformation
    2. struct PROCESS_BASIC_INFORMATION
    3.     ExitStatus                      dd ?
    4.     PebBaseAddress                  dd ? ;PPEB
    5.     AffinityMask                    dd ?
    6.     BasePriority                    dd ?
    7.     UniqueProcessId                 dd ?
    8.     InheritedFromUniqueProcessId    dd ?
    9. ends; PROCESS_BASIC_INFORMATION          
    10.  
    11. ;==================================================================
    12.  
    13. struct UNICODE_STRING
    14.         Length         dw ?
    15.         MaximumLength  dw ?
    16.         Buffer         dd ?
    17. ends            
    18.  
    19. struct LIST_ENTRY
    20.    Flink dd ?
    21.    Blink dd ?
    22. ends
    23.  
    24. struct PEB_LDR_DATA
    25.     Length                           dd ?
    26.     Initialized                      dd ?
    27.     SsHandle                         dd ?
    28.     InLoadOrderModuleList            LIST_ENTRY
    29.     InMemoryOrderModuleList          LIST_ENTRY
    30.     InInitializationOrderModuleList  LIST_ENTRY
    31.     EntryInProgress                  dd ?
    32. ends
    33.  
    34. struct LDR_DATA_TABLE_ENTRY
    35.     InLoadOrderModuleList           LIST_ENTRY
    36.     InMemoryOrderModuleList         LIST_ENTRY
    37.     InInitializationOrderModuleList LIST_ENTRY
    38.     DllBase                         dd ?
    39.     EntryPoint                      dd ?
    40.     SizeOfImage                     dd ?
    41.     FullDllName                     UNICODE_STRING
    42.     BaseDllName                     UNICODE_STRING
    43.     Flags                           dd ?
    44.     LoadCount                       dw ?
    45.     TlsIndex                        dw ?
    46.     HashLinks                       LIST_ENTRY
    47.     TimeDateStamp                   dd ?
    48. ends
    49.  
    50. ;
    51. ; Process Environment Block (PEB)
    52. ;
    53. struct PEB
    54.     InheritedAddressSpace                  db ?    ;* 00h *;
    55.     ReadImageFileExecOptions               db ?    ;* 01h *;
    56.     BeingDebugged                          db ?    ;* 02h *;
    57.     SpareBool                              db ?    ;* 03h *;
    58.     Mutant                                 dd ?    ;* 04h *;
    59.     ImageBaseAddress                       dd ?    ;* 08h *;
    60.     Ldr                                    dd ?    ;* 0Ch *; PEB_LDR_DATA
    61.     ProcessParameters                      dd ?    ;* 10h *; RTL_USER_PROCESS_PARAMETERS
    62.     SubSystemData                          dd ?    ;* 14h *;
    63.     ProcessHeap                            dd ?    ;* 18h *;
    64.     FastPebLock                            dd ?    ;* 1Ch *;
    65.     FastPebLockRoutine                     dd ?    ;* 20h *; PEBLOCKROUTINE
    66.     FastPebUnlockRoutine                   dd ?    ;* 24h *; PEBLOCKROUTINE
    67.     EnvironmentUpdateCount                 dd ?    ;* 28h *;
    68.     KernelCallbackTable                    dd ?    ;* 2Ch *;
    69.     EventLogSection                        dd ?    ;* 30h *;
    70.     EventLog                               dd ?    ;* 34h *;
    71.     FreeList                               dd ?    ;* 38h *; PEB_FREE_BLOCK
    72.     TlsExpansionCounter                    dd ?    ;* 3Ch *;
    73.     TlsBitmap                              dd ?    ;* 40h *;
    74.     TlsBitmapBits                          rd 2    ;* 44h *;
    75.     ReadOnlySharedMemoryBase               dd ?    ;* 4Ch *;
    76.     ReadOnlySharedMemoryHeap               dd ?    ;* 50h *;
    77.     ReadOnlyStaticServerData               dd ?    ;* 54h *;
    78.     AnsiCodePageData                       dd ?    ;* 58h *;
    79.     OemCodePageData                        dd ?    ;* 5Ch *;
    80.     UnicodeCaseTableData                   dd ?    ;* 60h *;
    81.     NumberOfProcessors                     dd ?    ;* 64h *;
    82.     NtGlobalFlag                           dd ?    ;* 68h *;
    83.     CriticalSectionTimeout        LARGE_INTEGER    ;* 70h *;
    84.     HeapSegmentReserve                     dd ?    ;* 78h *;
    85.     HeapSegmentCommit                      dd ?    ;* 7Ch *;
    86.     HeapDeCommitTotalFreeThreshold         dd ?    ;* 80h *;
    87.     HeapDeCommitFreeBlockThreshold         dd ?    ;* 84h *;
    88.     NumberOfHeaps                          dd ?    ;* 88h *;
    89.     MaximumNumberOfHeaps                   dd ?    ;* 8Ch *;
    90.     ProcessHeaps                           dd ?    ;* 90h *;
    91.     GdiSharedHandleTable                   dd ?    ;* 94h *;
    92.     ProcessStarterHelper                   dd ?    ;* 98h *;
    93.     GdiDCAttributeList                     dd ?    ;* 9Ch *;
    94.     LoaderLock                             dd ?    ;* A0h *;
    95.     OSMajorVersion                         dd ?    ;* A4h *;
    96.     OSMinorVersion                         dd ?    ;* A8h *;
    97.     OSBuildNumber                          dw ?    ;* ACh *;
    98.     OSCSDVersion                           dw ?    ;* AEh *;
    99.     OSPlatformId                           dd ?    ;* B0h *;
    100.     ImageSubSystem                         dd ?    ;* B4h *;
    101.     ImageSubSystemMajorVersion             dd ?    ;* B8h *;
    102.     ImageSubSystemMinorVersion             dd ?    ;* BCh *;
    103.     ImageProcessAffinityMask               dd ?    ;* C0h *;
    104.     GdiHandleBuffer                        rd 22h  ;* C4h *;
    105.     PostProcessInitRoutine                 dd ?    ;* 14Ch *;
    106.     lsExpansionBitmap                      dd ?    ;* 150h *; RTL_BITMAP
    107.     TlsExpansionBitmapBits                 rd 20h  ;* 154h *;
    108.     SessionId                              dd ?    ;* 1D4h *;
    109.     AppCompatInfo                          dd ?    ;* 1D8h *;
    110.     CSDVersion                   UNICODE_STRING    ;* 1DCh *;
    111. ends                                                            
    112.  
    113. ;PROCESSINFOCLASS
    114.   ProcessBasicInformation           equ   0
    115.   ProcessQuotaLimits                equ   1
    116.   ProcessIoCounters                 equ   2
    117.   ProcessVmCounters                 equ   3
    118.   ProcessTimes                      equ   4
    119.   ProcessBasePriority               equ   5
    120.   ProcessRaisePriority              equ   6
    121.   ProcessDebugPort                  equ   7
    122.   ProcessExceptionPort              equ   8
    123.   ProcessAccessToken                equ   9
    124.   ProcessLdtInformation             equ  10
    125.   ProcessLdtSize                    equ  11
    126.   ProcessDefaultHardErrorMode       equ  12
    127.   ProcessIoPortHandlers             equ  13
    128.   ProcessPooledUsageAndLimits       equ  14
    129.   ProcessWorkingSetWatch            equ  15
    130.   ProcessUserModeIOPL               equ  16
    131.   ProcessEnableAlignmentFaultFixup  equ  17
    132.   ProcessPriorityClass              equ  18
    133.   ProcessWx86Information            equ  19
    134.   ProcessHandleCount                equ  20
    135.   ProcessAffinityMask               equ  21
    136.   ProcessPriorityBoost              equ  22
    137.   ProcessDeviceMap                  equ  23
    138.   ProcessSessionInformation         equ  24
    139.   ProcessForegroundInformation      equ  25
    140.   ProcessWow64Information           equ  26
    141.   ProcessImageFileName              equ  27
    142.   ProcessLUIDDeviceMapsEnabled      equ  28
    143.   ProcessBreakOnTermination         equ  29
    144.   ProcessDebugObjectHandle          equ  30
    145.   ProcessDebugFlags                 equ  31
    146.   ProcessHandleTracing              equ  32
    147.   ProcessIoPriority                 equ  33
    148.   ProcessExecuteFlags               equ  34
    149.   ProcessTlsInformation             equ  35
    150.   ProcessCookie                     equ  36
    151.   ProcessImageInformation           equ  37
    152.   ProcessCycleTime                  equ  38
    153.   ProcessPagePriority               equ  39
    154.   ProcessInstrumentationCallback    equ  40
    155.   MaxProcessInfoClass               equ  41
    156. ;end PROCESSINFOCLASS;
     
  20. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    IceStudent
    may be ProcessExplorer?