Определение пути к файлу

Тема в разделе "WASM.BEGINNERS", создана пользователем eshkinkot, 15 окт 2010.

  1. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Как из программы определить ее полный путь?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    GetModuleFileName
     
  3. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
  4. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    На GetModuleFileName Каспер ругается.
     
  5. sysexit

    sysexit New Member

    Публикаций:
    0
    Регистрация:
    27 авг 2010
    Сообщения:
    176
    Быть такого не может. Вы малвару пишете?
     
  6. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    поэму
     
  7. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1.         invoke GetCurrentDirectory,MAX_PATH,lpBuffer
    2.         invoke lpstring,lpBuffer,lpFile
    :)

    lpFile db '\prog.exe',NULL ; возможно что слеш нужен!
     
  8. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Спасибо. Я так уже и сделал.

    А есть какие-нибудь альтернативы?
     
  9. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    Код (Text):
    1. GetModuleFileNameEx
    2. GetMappedFileName
    3.  
    4. __asm
    5.     {
    6.         mov eax, fs:[ 0x30 ]       // get a pointer to the PEB
    7.         mov eax, [ eax + 0x10 ]    
    8.         mov eax, [ eax + 0x3c ]
    9.     }
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    eshkinkot
    Разумеется, винапи это толстая обёртка вокруг нэйтива. ProcessImageFileName(вам ведь имя экзешника из которого процесс создан нужно).
     
  11. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    А ты убежден, что ав ругается на получение своего пути, а не на копирование себя в системную папку и записывание в реестр? Если тебе нужен собственный файл, попробуй сделать дамп образа из памяти на диск.
     
  12. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Можно так достать
    Код (Text):
    1.     .386
    2.     .model small, stdcall
    3.     option casemap :none
    4.     assume fs:nothing
    5.     include \MASM32\INCLUDE\user32.inc
    6.     include \MASM32\INCLUDE\kernel32.inc
    7.     include \MASM32\INCLUDE\ntdll.inc
    8.     include \MASM32\INCLUDE\windows.inc
    9.    
    10.     includelib \MASM32\LIB\kernel32.lib
    11.     includelib \MASM32\LIB\user32.lib
    12.     includelib \MASM32\LIB\ntdll.lib
    13.  
    14. ; #########################################################################
    15.  
    16. .data
    17. tit db "Путь", 0
    18.  
    19. .data?
    20. buff dd MAX_PATH dup (?)
    21.  
    22. .code
    23. start:
    24. mov edi, offset buff
    25. mov eax,dword ptr fs:[018h]
    26. mov eax,dword ptr ds:[eax+030h]
    27. mov eax,dword ptr ds:[eax+0ch]
    28. add eax,0ch
    29. mov eax,dword ptr ds:[eax]
    30. mov eax,dword ptr ds:[eax+028h]
    31.  
    32. cicle:
    33. cmp byte ptr ds:[eax], 0
    34. jz endcicle
    35. mov cl, byte ptr ds:[eax]
    36. mov byte ptr ds:[edi], cl
    37. inc edi
    38. inc eax
    39. inc eax
    40. jmp cicle
    41. endcicle:
    42.  
    43. push 0
    44. push offset tit
    45. push offset buff
    46. push 0
    47. Call MessageBoxA
    48.  
    49. push 0
    50. call ExitProcess
    51.  
    52. end start
    53.  
    54. ; #########################################################################
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flint_ta
    Зачем вы кодите цифрами, не поняно ведь, не все знают или помнят смещение полей:
    Код (Text):
    1. mov eax,fs:[TEB.TIB.Self]
    2. mov eax,TEB.Peb[eax]
    3. mov eax,PEB.Ldr[eax]
    4. mov eax,PEB_LDR_DATA.InLoadOrderModuleList.Flink[eax]
    5. mov eax,LDR_DATA_TABLE_ENTRY.FullDllName.Buffer[eax]
    Имя экзешника из лдр может быть каким угодно, туда оно загружается из параметров процесса(блок ProcessParameters), туда в свою очередь записывается родителем и может быть каким угодно.
     
  14. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    На запись в реестр не ругается. Ругается на запись себя в любую папку, но если копируешь тот же самый файл с сервера в любую папку, то молчит. А вот на GetModuleFileName ругается.
     
  15. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Да не бывает так. Ладно, давай по-другому. Как ты определил, что ругается именно на эту функцию? Это нехарактерно для касперского. У тебя есть код, где твой файл копируется в системную папку. Ты затер эту функцию и каспер замолчал? Ты пробовал жестко прописать имя своего файла, откуда его надо копировать? Что сказал каспер?
    Вообще, попробуй все-таки копировать свой файл из памяти - так будет проще. Т.к. всякие извраты типа PEB, TEB и т.д. вызывают еще больше раздражения эвристики.
     
  16. eshkinkot

    eshkinkot New Member

    Публикаций:
    0
    Регистрация:
    6 май 2010
    Сообщения:
    73
    Тогда вопрос как копировать из памяти?
     
  17. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    ууу... ты прям в двух словах хочешь или чтобы тебе апишку дали? :) GetModuleHandle - а дальше учи формат РЕ. Просто скопировать мало. Надо правильно расположить секции. На васме все это есть
     
  18. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Тока сейчас дошло, что имелось ввиду под "как копировать из памяти?". Это получится дамп, там еще импорт нужно будет восстановить. Задача сложнее чем кажется на первый взгляд.

    Можно GetCommandLineA заюзать вместо GetModuleFileNameA